gpt4 book ai didi

MySQL 可扩展数据模型

转载 作者:行者123 更新时间:2023-11-29 14:46:36 25 4
gpt4 key购买 nike

我想获得有关如何建模以下内容的反馈:

  • 两个主要对象:集合和资源。
  • 每个用户都有多个集合。我本身并不保存用户信息:每个集合都有一个“用户 ID”字段。
  • 每个集合都包含多个资源。
  • 任何给定的集合仅属于一个用户。
  • 任何给定资源都可能与多个集合关联。

我暂时致力于使用 MySQL,尽管将来有可能迁移到不同的数据库。我主要关心的是基于以下假设的可扩展性:

  • 用户数量约为 200 人,并且还会增加。
  • 平均每个用户有五个收藏。
  • 每天“消耗”大约 30,000 个新的不同资源:消耗资源时,应用程序会将该资源关联到与该资源相关的每个集合。假设通常某个资源与大约一半的集合相关,因此每天插入 30,000 x (1,000/2) = 15,000,000 次。
  • 集合和资源对象均由大约六个字段组成,其中一些字段的长度可能达到 100 个字符。
  • 每个用户都设置了持续轮询,以定期检索他们的集合和相关资源 - 假设这种情况每分钟发生一次。

请记住我正在使用 MySQL。给定预期的数据量,数据模型应该如何规范化?将这些数据存储在平面表中是否有意义?什么样的分片方法合适? MySQL 的 NDB 集群解决方案适合这个用例吗?

最佳答案

Given the expected volume of data, how normalized should the data model be?

完美。

您的卷很小。您每天进行 10,000 至 355,000 笔交易?我们假设您的高峰使用时间为 12 小时。即 0.23/秒至 8/秒。在达到 30/秒(12 小时内超过 100 万行)的速率之前,您无需担心。

Would it make sense to store this data in a flat table?

没有。

What kind of sharding approach would be appropriate?

没关系。选择任何一个让你开心的。

您需要根据经验测试这些。建立真实数量的虚假数据。编写一些基准交易。在负载下运行以对分片替代方案进行基准测试。

Would MySQL's NDB clustering solution fit this use case?

值得怀疑。您通常可以创建一个足够大的单一服务器来处理此负载。

这听起来与您的问题的任何要求都不一样。

MySQL Cluster is designed not to have any single point of failure. In a shared-nothing system, each component is expected to have its own memory and disk, and the use of shared storage mechanisms such as network shares, network file systems, and SANs is not recommended or supported.

关于MySQL 可扩展数据模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6845702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com