使用JSON列或单独的表来存储mysql中相同类型的事物列表

时间:2017-10-15 05:50:27

标签: mysql json

用户可以有很多帖子,我想知道是否应该将帖子的ID存储在User表的JSON列中,或者我应该使用复合主键(user_id,post_id)创建一个单独的表?

如果有1000万用户,并且每个用户有100个帖子,则单独的表格方法将有10亿条记录,这对于缩放或效率来说似乎不太好。

在这种情况下,哪种方法更好?一个人的表现比另一个人好吗?

1 个答案:

答案 0 :(得分:0)

答案取决于您查询数据的方式。例如,您是否需要从列表中为用户提取单个帖子?或者除了将完整的帖子列表视为一个字符串之外还要做其他事情?如果是这样,那么不要使用JSON;使用单独的表。

MySQL实际上可以支持表中的数十亿行。我负责上一份工作中有一个超过50亿行的数据库。我们使用分区和索引的混合来帮助查询。

也就是说,我会说拥有1000万活跃用户的任何网站并不只使用一个MySQL服务器实例来存储所有数据。他们在许多实例中拆分数据。

但是,如何以这种方式分割数据必须非常小心。只有在确切知道如何查询数据后才能执行此操作。并且在完成所有其他操作后,为您运行的查询(索引,缓存等)优化数据库。

Scalable Internet Architectures是一个困难而复杂的话题。没有单一的,简单的答案,如“JSON与单独的表”,将解决您的所有问题。有许多方法可以解决可扩展性的不同瓶颈。