我在选择我的 MySQL 模式应用程序时面临两难境地。所以在我开始之前是一张我的数据库非常简化的图片:
这里的架构:http: //i43.tinypic.com/2wp5lxz.png
一句话:对于每个客户,应用程序收集文本数据并将标签附加到收集的每个数据中。
作为每个表的使用的近似值,这是我所期望的:
- 客户:~5000,不应该快速增长
- 数据:每位客户 500 万,大客户可能翻倍或三倍。
- 标签:〜1000,相当固定的大小
- data_tag :每个客户轻松上亿。每个数据都可以标记很多。
收集过程是永久性的,这意味着大约每 15 分钟就会有新数据出现并被标记,这需要非常持续的索引刷新。
我的很多查询都是特定日期之间的 DATA SELECT COUNT 并用特定 CUSTOMER 上的特定 TAG 标记(很少会涉及多个客户)。
情况就是这样,你可以想象在这种数据量的情况下,我在数据组织和索引方面面临挑战。同样,它是我的结构的一个非常简约和简化的版本。我的问题是,它更好吗:
- 坚持这个模型并管理疯狂的索引优化?(这涉及 data_tag 表中可能有数十亿行)
- 更改架构并为每个客户使用一张数据表和一张 data_tag 表?(这涉及在我的数据库中有 5000 个表)
我在复制的 MySQL 5.0 专用服务器(四核,8Go 内存)上运行所有这些。我只使用 InnoDB,我还有另一台运行 Sphinx 的服务器。所以知道这一切,我迫不及待地想听听你对此的看法。
谢谢。
编辑
感谢您的回答,我意识到这个数字有多疯狂。所以这里是更新的更现实的表格用法(基于只是一个基本机架空间盒的实际服务器)。
- 客户:2000(固定)
- 数据:每个客户 100 万(固定,归档旧数据。而且非常不公平:有些客户有几千,最大的 500 万)
- 标签:1000(固定)
- data_tag :每个客户约 3 或 5 百万(取决于数据,也很不公平)。
谢谢你。