繁体   English   中英

处理序列化数据与添加更多字段-PHP-MySQL

[英]crunching serialized data vs adding more fields - php - mysql

好的,让我们假设我有50条要存储在表的每个记录中的信息。 当我提取数据时,我将对其中一些进行基本数学运算。 在任何给定的页面请求中,我将提取一百条记录并进行计算。

有哪些性能影响:

A-将数据作为序列化数组存储在单个字段中,并在php中进行运算

B-将数据存储为五十个数字字段,并让mysql做一些总和和平均数

请假设在这五十个领域中标准化不是问题。 还请假设我不需要按任何这些字段进行排序。

提前致谢!

首先,我永远不会存储serialized数据,因为它的可移植性不够。 也许在JSON编码字段中,但未序列化。

其次,如果您要对数据做任何事情(搜索,汇总等),请将它们设置为表中的列。 我的意思是什么(排序等)。

在列中存储格式化数据(序列化,json等)的唯一一次是只读的。 这意味着您没有对它进行排序,没有在where子句中使用它,没有在汇总数据,等等。

数据库服务器在执行基于集合的操作时非常高效。 因此,如果您要进行任何类型的汇总(求和等),请在MySQL中进行。 它将比使PHP变得更加高效。

MySQL几乎肯定会比PHP更快地执行这些计算。

尽管我几乎总是建议使用选项B,但我本人也遇到了一种独特的情况,在这种情况下,将序列化存储到文本字段中可能更有意义。

我有一个客户,他们的网站上有一份申请表。 表单上大约有50个字段,并且所有数据将只能是只读的。

此外,此应用程序可能会随着时间而改变。 可以添加字段,可以删除字段。 通过使用序列化数据,我可以将所有问题和答案以序列化格式保存。 如果表格更改,则旧数据以及原始问题将保持不变。

我和乔纳森一起去! 如果您有一个表,其中字段的数量将根据用户做出的选择或内容而变化,并且这些字段既不聚合也不计算,那么我也会对这些值进行序列化(和base64_encode)或json_encode。

Joomla和Wordpress也这样做。 Typo3的一些表有很多列,这很丑陋:-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM