【发布时间】:2015-01-21 07:39:05
【问题描述】:
我需要在每篇文章中添加更多常见问题解答。将数组添加到数据库中,哪种方式在 PHP 5.4 中性能更好?!
- 用 PHP 序列化添加到表中
- 添加行列(为每个常见问题添加行)
【问题讨论】:
-
另外,
Add withGoogle -
另外,请谷歌进行数据库规范化
标签: php mysql serialization
我需要在每篇文章中添加更多常见问题解答。将数组添加到数据库中,哪种方式在 PHP 5.4 中性能更好?!
【问题讨论】:
Add withGoogle
标签: php mysql serialization
在某些情况下应该进行序列化。现在我建议您为每个条目使用一行。
遵循数据库原子性原则,每个数据节点都必须有一个条目。强烈建议避免将数据汇编放入一个 DB 条目中。该原则假设保存到 DB 的每个节点都太小,并且大部分可以/不应该能够拆分为更多的语义段。而序列化将太多的数据节点放入一个序列化的(类型=字符串)节点中,并强制它进入数据库(我说强制强调它违反了数据库的数据原子性)。
在此处了解更多信息:
http://en.wikipedia.org/wiki/Atomicity_%28database_systems%29
假设以下场景:
例如,您将“name&lastname&mobile”放入条目的一列。使用时,你使用explode("&", $data)来炸掉它们。这不是一个好的做法,你最好避免使用它。对于这种情况,您应该将$name、$lastname 和$mobile 分别放在各自的列中(针对每个条目)。
现在,在某些情况下,考虑到服务器、速度和项目规模,您可以使用序列化。附带说明一下,WordPress 大量使用序列化。但 Wordpress 也有许多其他糟糕的做法。
在企业,静态重要的应用程序中,他们不会为一张表使用这种结构:
Table users:
id name lastname mobile
他们宁愿将上述一表结构拆分为四个表:
users:
id created_at updated_at
emails:
id email user_id
names:
id name user_id
mobiles:
id mobile user_id
例如,使用上述结构,您可以方便地跟踪用户更改了他的姓名、手机或姓氏的次数。我举了这个例子来说明有多少 DB 节省与定期完成的序列化相去甚远。
【讨论】: