我已经读过(所有条件相同)PHP在算术和字符串操作操作中通常比MySQL快。在这种情况下,人们要求数据库做什么与Web服务器做什么之间划清界线?我们专门使用存储过程作为数据访问层。我的不成文规则一直是将输出格式(包括字符串操作和算术)留给Web服务器。所以我们的查询返回:
我感兴趣的是关于这是否通常是一种合适的方法的反馈,或者其他人是否知道将这些活动推送到数据库的合理性能/可维护性考虑因素。
注意:我故意将此问题标记为与dbms无关,因为我认为这是一个架构考虑因素,无论特定的dbms如何都会发挥作用。
答案 0 :(得分:3)
通常,数据格式化最好在客户端完成,尤其是特定于文化的格式化。
动态旋转(即变量列)也是在客户端做得更好的一个例子
当谈到字符串操作和动态数组时,PHP
比我所知的任何RDBMS
强大得多。
但是,数据格式化可以使用也保存在数据库中的其他数据。比如,每行的着色信息可以存储在附加表中。
然后,您应该将颜色与数据库端的每一行对应,但将其包装到PHP
侧的标记中。
经验法则是:在尽可能少的数据库往返中检索格式化所需的所有内容,然后在客户端进行格式化。
答案 1 :(得分:3)
我想就某些图层如何为其他实现旋转到位而划清界限。您很可能永远不会使用不同的RDBMS或拥有您网站的移动版本,但您永远不会知道。
数据点越正交,就越接近以该形式从数据库中释放。如果在您网站的每个理论版本上,您的值A和B都呈现为A * B,那么您的数据库应该将其作为A * B返回,并且从不计算客户端。
假设你的格式像日期一样重。有时你有短日期,长日期,英文日期...应该从数据库返回一个纯表单,然后应该用PHP格式化。
因此正交点也是相反的。数据点在其表示/显示中越动态,客户端应该处理得越多。如果字符串A始终被视为前六个字符的子字符串,则将其作为pre-substring'ed从数据库返回。如果子字符串的长度取决于某个因素,例如6个用于移动设备,10个用于您的Web应用程序,则从数据库返回较大的字符串并在运行时使用PHP对其进行格式化。
答案 2 :(得分:1)
我相信从数据库中按原样返回数据,并让它在前端进行格式化。我并不坚持宗教,但总的来说我觉得它更好,因为它提供了更大的灵活性 - 例如1个sproc可以满足不同的数据要求,每个数据都可以根据每个需求格式化数据。否则,您最终会返回多个查询,返回相同的数据,格式与数据库略有不同(从SQL Server的角度来看,从而减少执行计划缓存的好处 - 因此对性能产生负面影响)。
答案 3 :(得分:1)
将输出格式保留为Web服务器