从数据库中检索后处理数据的位置

时间:2011-07-10 23:22:40

标签: php sql database performance orm

由于性能原因,我们重构了一些快速'n'脏实现我们的数据访问(sql)。 和以前一样,我们一步一步地访问了对象。首先是基本数据,而不是填充它,以及一些相关数据,这些数据可能会填充其他一些相关数据。

到目前为止,所有数据都是在单个sql语句中访问的,这些语句更复杂,但不是太多 - 有四个连接顶部。

因此,我们检索的数据不是像格式的对象(实际上是嵌套数组),比如

prop1
prop2 -> prop2a,
         prop2b -> prop2b1
                   prop2b2
prop3 -> prop3a
         prop3b

相反,数据全部为“平面”,例如

prop1
prop2a
prop2b1
prop2b2
prop3a
prop3b

我的直觉告诉我在检索后对这些数据进行预处理,然后将它发送到类似于对象的结构中的前端(html,js - 这是我们唯一的客户端),因为它在重构之前已经发送过。另一方面,性能原因只会影响到真正需要的处理,如果可能的话,让客户做一些工作。

底线:这里最好/最好的做法是什么?

a)在后端处理数据准备

b)将检索到的数据发送到前端并在那里处理

c)尽快切换到 ORM 架构

非常感谢,

罗布森

1 个答案:

答案 0 :(得分:2)

鉴于我与之合作超过20年的所有应用程序,性能始终是王道。你应该总是让RDBMS通过使用连接和后端需要做的任何事情来完成它的工作,只检索你需要的数据(注意:你可能需要查看“解释计划”或等效的或者在表上添加索引才能获得最好的表现)。

无论如何,只检索您需要的数据。通过检索更多数据,您可以“通过网络”添加更多数据,然后必须处理和删除前端的数据。

至于ORM - 它是一个经常被遵循的模型,我也非常相信使用ORM工具,但不仅仅是为了创建对象而创建对象。如果我可以返回100行完全符合我需要的数据而不是返回100个相关对象,我宁愿(出于性能原因)返回前者。

我的投票是a)。我总是喜欢在后端做同样多的工作,因为你将来可能有不同类型的客户。