Mysql 如何通过大量的读写操作处理一个有十亿行的表

Mysql 如何通过大量的读写操作处理一个有十亿行的表,mysql,sql,hadoop,hbase,rdbms,Mysql,Sql,Hadoop,Hbase,Rdbms,请引导我解决我的问题 我在服务器上每隔1秒接收来自不同来源的数据。我的数据是结构化的,我对其进行解析,现在我必须将解析后的数据存储到一个表中,一天大约有5个lac的记录。每天我都会对这个表进行大量的读取操作。过一段时间,这个表将有数十亿条记录 我应该如何解决这个问题?我想知道我应该使用RDBMS还是HBase或任何其他选项 如果您的表将达到数十亿条记录,RDBMS肯定无法扩展 关于HBASE,它是否是一个好的解决方案取决于您的需求。 如果您正在查找实时读取,则Hbase仅在您只查找特定密钥时才有

请引导我解决我的问题

我在服务器上每隔1秒接收来自不同来源的数据。我的数据是结构化的,我对其进行解析,现在我必须将解析后的数据存储到一个表中,一天大约有5个lac的记录。每天我都会对这个表进行大量的读取操作。过一段时间,这个表将有数十亿条记录


我应该如何解决这个问题?我想知道我应该使用RDBMS还是HBase或任何其他选项

如果您的表将达到数十亿条记录,RDBMS肯定无法扩展

关于HBASE,它是否是一个好的解决方案取决于您的需求。 如果您正在查找实时读取,则Hbase仅在您只查找特定密钥时才有帮助。如果您想在不同的列上进行随机读取,Hbase在这里不是一个理想的解决方案。Hbase在更新时可以很好地扩展

我建议您高效地设计Hbase模式,并以适合您查询的方式存储数据


但是,如果您对运行聚合查询感兴趣,还可以将hbase表映射到配置单元中的外部表,并对数据运行sql类型的查询。

在这种情况下,您可以将hbase用作NoSQL数据库。要使搜索更加定制和快速,请将ElasticSearch与Hbase一起使用。

我的问题是关于您希望使用哪种数据库存储库:RAM?闪光磁盘

RAM的响应时间为纳秒。 以微秒为单位闪烁。 磁盘以毫秒为单位

当然,你可能想把这三个键混合在一起,特别是当一些键比其他键更“热”的时候——更容易被反复阅读

如果您想进行大量的快速处理,并将其扩展到“宽范围”(集群中的许多CPU用于更快的读取性能),那么您很可能是NoSQL数据库的候选对象。我需要更多地了解您的数据模型,以了解它是否可以作为键值存储,以及它如何需要更多的内部结构,如JSON/BSON


警告:我对我的雇主Aerospike有偏见。然而,在下注之前,你应该和我们或任何其他你正在考虑的关键价值商店做一些测试,看看它是否能与你的数据一起工作。显然,每个NoSQL供应商都会声称自己是“最好的”,但这在很大程度上取决于您的用例。供应商的“解决方案”只适用于某些数据模型。我们倾向于最适合快速内存RAM/Flash或混合实现。

如果写入速度为1/s,大多数可用数据库都应该能够支持这一点。由于您正在寻找长期/持久存储,您应该考虑一个提供水平比例的数据库,以便您可以在希望增加容量时添加更多的节点。具有自动切分功能的数据库非常适合您(cassandra、aerospike…)。确保您选择的自动分片数据库不需要客户端/应用程序来管理存储在何处的数据。在这种情况下,内存中的数据库无法满足要求

当您的存储容量只有几TB时,您可能不得不担心数据库的规模、吞吐量,这样您的infra成本就不会让您陷入困境

您的查询模式对于选择正确的解决方案至关重要。您可能不想为所有内容编制索引,但需要对索引内容进行微调,以便可以从记录中查询键和/或仅查询那些数据元素,这样索引存储开销就不会太大,从而可以控制成本。您还应该为数据库解决方案寻找时间范围查询能力,这似乎是典型查询模式的一部分


最后但并非最不重要的一点是,您希望在尽可能快的时间内完成查询过程。您应该尝试Cassandra(适用于水平缩放,吞吐量较小)和aerospike(适用于水平缩放,吞吐量相当不错)

感谢您的回复。我必须主要运行诸如select*之类的查询,其中pk=''和timestamp>t1和timestamp@MoneyParashar使用HBase和适当的行键设计和区域分割策略很容易实现这一点。有了几个节点,您可以每秒处理数千次写/读操作,而不仅仅是一台服务器(正如您在文章中提到的那样)能够解析和接收。请注意,使用HBase并不像使用RDBMS那样简单。@MoneyParashar更好的是,HBase在使用原子计数器时确实非常出色,您可以使用实时计数器,而无需在查询时执行任何聚合。