MySQL可伸缩数据模型

时间:2011-07-27 14:01:52

标签: mysql database-design

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

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

我承诺暂时使用MySQL,尽管有可能在未来迁移到不同的数据库。我主要担心的是可扩展性,并有以下假设:

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

请记住我正在使用MySQL。鉴于预期的数据量,数据模型应该如何标准化?将这些数据存储在平台中是否有意义?什么样的分片方法是合适的? MySQL的NDB集群解决方案是否适合这种用例?

1 个答案:

答案 0 :(得分:1)

  

考虑到预期的数据量,数据模型应该如何标准化?

完美。

你的音量很小。你每天要做10,000到355,000笔交易吗?我们假设您的峰值使用时间为12小时。那是.23 /秒到8 /秒。直到你达到30 /秒(12小时内超过100万行)的速度,你几乎不用担心。

  

将这些数据存储在平面表中是否有意义?

没有

  

什么样的分片方法是合适的?

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

你需要根据经验进行测试。构建一个真实的假数据量。写一些基准交易。在负载下运行以对分片备选方案进行基准测试。

  

MySQL的NDB集群解决方案是否适合这个用例?

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

这听起来不像你问题的任何要求。

  

MySQL Cluster的设计不会出现任何单点故障。在   一个无共享系统,每个组件都应该有自己的   内存和磁盘,以及使用共享存储机制等   建议不要使用网络共享,网络文件系统和SAN   支撑。