【问题标题】:Storing data in multiple rows vs serialized data in MySQL将数据存储在多行与 MySQL 中的序列化数据
【发布时间】:2013-06-11 17:07:41
【问题描述】:

我有一个关于以序列化形式而不是在表中保存多行数据的问题。

在我的表中,我存储了有关我的应用用户的 Facebook 朋友的某些个人资料相关信息,即他们的 Facebook 用户 ID、姓名、生日。对于每个朋友,我在表中创建多行。因此,例如,如果我的一个 App 用户有 5000 个 Facebook 朋友,我将在我的表中插入 5000 行。将所有朋友的数据以序列化格式保存在单个列中会更好吗?我没有单独搜索/排序任何这些字段,也没有在这些列上进行多个连接。此外,仅当有人更改其实际 Facebook 个人资料信息时,这些列才会很少更新。

我想知道是否可以在这里使用 PHP 序列化/反序列化函数来序列化特定用户的整个 Friends 数组并将所有数据存储在单个列中。这是否有助于优化我的表格并在使用此表格时给我更好的响应时间?

【问题讨论】:

    标签: php mysql database serialization


    【解决方案1】:

    正如你所说,如果你不需要数据搜索,那么序列化数据就可以了,但这对你的应用程序来说也是一个缓慢的过程,这里不仅仅是一个建议,一个评估,例如,我有一些非同质的数据,该数据不会被搜索并放在一个额外的表上,意味着可能失去对数据的控制,然后我更喜欢序列化该数据并使用 json 来处理,那么对于用户来说是清楚的

    【讨论】:

      【解决方案2】:

      在 MySQL 中,一个单独的行和每个值的单独列是绝对的,绝对是要走的路。这样,即使您没有索引,您也可以在这些列上创建索引,并更轻松地按值查询它们。 (您绝对应该对要查询的值有索引。)

      然而,在 PostgreSQL 中,您可以存储序列化为 JSON 的值(通过 json_encode,)并在其中索引单独的值。

      但是,无论哪种方式,您仍然需要将每个朋友记录存储在表中的单独行中。这不像您可以将 5000 条记录数组的序列化值转储到数据库中并收工。

      【讨论】:

      • 嗯,到目前为止,我在这个特定的表中有超过 1000 万行。我打算使用“mediumtext”将序列化的朋友数组转储到。我已经索引了我正在获取的所有列,但我的响应时间仍然很慢。有没有办法对这两种方法进行基准测试并检查哪种方法更适合我的情况?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-17
      • 1970-01-01
      • 1970-01-01
      • 2011-06-09
      • 2011-07-29
      • 1970-01-01
      • 2011-04-09
      相关资源
      最近更新 更多