我正在做一个项目,我的工作是建立一个数据库系统来管理大约 60,000,000,000 条数据。
项目背景是我需要实时存储每秒从大约 30,000 个 RFID 阅读器读取的大量消息。假设每个 RFID 阅读器每天生成 6,000 条消息,我必须将 180,000,000 条条目插入数据库。
可能的数据条目如下:“time_stamp、Reader_ID、Tag_ID、other_msg_content”
将根据时间范围、Reader_ID 和 Tag_ID 进行查询(SELECT)。查询不会太复杂。
现在我正在设计数据库系统,打算用MySQL,我的dump问题是:
使用 MySQL 是否明智,或者我应该使用 Oracle(价格昂贵)或 HBase?
如果我必须使用 MySQL,那么知道如何构建集群吗?
如果我将消息插入到表中,很快表就会变得很长。我想使用分片技术将长表拆分为多个短表。
3.a. 我想知道 MySQL InnoDB 表的适当长度,即插入多少条数据后应该开始分片?
3.b. 有没有好的分片代理解决方案?我知道 spock 代理和其他一些,需要推荐。
我是否必须使用 MySQL Cluster?或者我只需使用 mysql 主服务器和分片从服务器,并使用复制来实现高可用性?
假设我需要在 MySQL 中处理 20 TB 的数据(为期 1 年),我计划使用 20 个节点(PC 服务器,便宜),每个节点存储 1 TB 的数据,这可能吗?欢迎提出任何意见。
非常感谢。
答案1
想法:
- 如果您在公共论坛上询问这些问题,请聘请专家为您解答
- 考虑 Postgres 和 SQL Server,它们也可以扩展到这个规模
- 您需要 ACID 吗?不需要 = 考虑 NoSQL
- 设计和硬件比平台更重要
- 不要虚拟化或削减其他硬件成本
- 您的 RPO/RTO 是多少?
- 维护窗口?也就是说,你真的是 24/7/365 吗?始终每秒 30k 行
- 正在存档?
- 您需要年龄更大(比如说 6 个月)的在线用户吗?
- 预算?
- 需要进行实际测试来验证架构和设计是否符合规定负载
- 20 TB 可能太小
- 每天每 RFID 写入 6k 行数据,但每秒写入 30k 行数据?每天有 86.4k 秒,因此每秒只有 1/14 的 RFID 写入数据:每秒 420k+ 行数据的潜在峰值负载如何?
最后
- 这不是一个数据库问题,而是一个架构问题
- 你问的问题不对,对于这个要求来说太早了