首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在数据库插入PHP后创建对象

如何在数据库插入PHP后创建对象
EN

Software Engineering用户
提问于 2014-05-08 03:57:01
回答 2查看 160关注 0票数 0

几年来,我一直在做一个新的项目,以同样的方式做事。然而,我第一次不断地想到scalability and performanceapplication codedatabase

因此,在过去的时间里,我非常乐意insert一个新行,然后获取last_insert_id,然后通过在使用的持久性框架中调用getObjectById(id)方法将其转换为object。我发现这是一个很好的实践,因为它将确保您正在准确地返回存储在数据库中的内容,并且在那里并随后会发现任何错误,而不是下次您请求对象时。

另一种方法是,由于前面有构建对象所需的所有数据,因此只需根据所提供的数据创建新对象,并在语句验证为完整后只设置objectId。我一直觉得仍然有一些未知数是可以发生的,如果数据库中有任何triggers以任何方式转换数据,那么您的状态就会不匹配,这是不好的。

但是,纯粹考虑性能,我显然是通过运行多个queries来创建添加了overhead的对象(insert + select)而受到影响的,我希望使应用程序尽可能地成为fastsecure

我的问题是,对于performancescalabilitysecurity以及3之间的权衡,最合适的方法是什么?

EN

回答 2

Software Engineering用户

回答已采纳

发布于 2014-05-08 05:09:28

当您的系统不能满足其功能要求时,您的性能就会出现问题。

因此,除非您的用户正在抱怨,或者您未能满足服务级别协议,否则您没有性能问题。

在您的情况下,额外的"insert"/"select“不太可能涉及到对最终用户来说明显的开销,或者根据系统的总体性能来衡量。

毕竟,无论如何,您可能会在某个时候插入数据,并且对不到一毫秒前插入的对象调用select不会涉及任何数据库I/O。事实上,在“提交”工作之前,不会因为IO活动而导致任何延迟。更早地插入将使数据库有机会在提交之前记录您的更改,因此您的进程实际上可能比其他方法更快。

“如果它没有坏,就不要修理它”

票数 2
EN

Software Engineering用户

发布于 2014-05-08 07:58:45

首先,@JamesAnderson的回答指出了一些非常好的观点。我也认为你在这一点上对表演有不必要的偏执。

说到你的问题,我的做法通常不一样。我通常先创建类的实例,然后使用像$obj->save()这样的方法将数据插入到数据库中;但是这样做实际上取决于您设计数据库和类的健壮程度,而不是将数据插入到数据库中,然后再次加载数据并创建基于这些数据的类实例。

例如:

  • 您是否实现了适当的封装?特别是用于应该存储在数据库中的字段的实心setter?或者您是否通过public访问器公开了任何重要的类属性,在这些属性中它们可能被修改得失控?
  • 数据库表是否在没有必要时接受NULL值,而不是失败操作?或者,您是否为某些字段设置了一些默认值,这些字段在将来可能并不明智,也可能会出现问题?

上面的列表可能要长得多,但关键是,如果您可以信任对象中的数据,并且可以信任您的数据库,它将插入正确的数据,或者在任何其他情况下都会失败--那么就不会返回任何InsertID,这是失败的迹象;如果您在设计和实现中遇到了这些问题,那么您就不需要插入数据,然后再加载数据以确保数据的完整性。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/238333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档