【问题标题】:use JSON column or a separate table to store a list of things of the same type in mysql使用 JSON 列或单独的表在 mysql 中存储相同类型的事物列表
【发布时间】:2017-10-15 14:01:46
【问题描述】:

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

如果有 1000 万用户,每个用户有 100 条帖子,那么分表方法将有 10 亿条记录,这对于扩展或效率来说似乎不是很好。

在这种情况下,哪种方法是更好的选择?一个比另一个有更好的性能吗?

【问题讨论】:

  • 我不是 NoSQL 专家(也不是 MySQL 专家),但您的问题与 Twitter 和 Facebook 每天面临的问题非常相似。我知道他们使用像 Cassandra 这样的 NoSQL 数据库,所以也许你也应该研究一下。
  • 我认为在一个网站达到1000万用户的时候,寻求专业帮助是合理的。

标签: mysql json


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    相关资源
    最近更新 更多