如何处理具有数十亿行且具有大量读写操作的表

时间:2014-11-25 11:42:40

标签: mysql sql hadoop hbase rdbms

请引导我解决我的问题

我在服务器上每隔1秒从不同的来源接收数据。我的数据是结构化的,我解析它,现在我必须将这个解析的数据存储在一个表中,每天大约5个记录。每天我也会在这张桌子上进行大量的阅读操作。过了一段时间,这张桌子将有数十亿的记录。

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

4 个答案:

答案 0 :(得分:1)

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

RAM以纳秒为单位响应。 以微秒为单位闪烁。 磁盘(以毫秒为单位)。

然而,当然,你可能想要创造这三者的混合体,特别是如果某些键是“更热”的话。比其他人 - 更有可能被一遍又一遍地阅读。

如果你想进行大量快速处理,并进行扩展,那就是"广泛的" (群集中的许多CPU可以提高读取性能),您可能是NoSQL数据库的候选者。我需要更多地了解您的数据模型,以了解它是否可以作为键值存储,以及它可能需要更多的内部结构,如JSON / BSON。

警告:我偏向于我的雇主Aerospike。然而,在投注农场之前,你应该与我们或任何其他的关键值商店一起考虑,以确定它是否适用于您的数据。显然,每个NoSQL供应商都声称自己是最好的,#34;但很大程度上取决于你的用例。供应商的解决方案"只适用于某些数据模型。我们倾向于最好的快速内存RAM / Flash或混合实现。

答案 1 :(得分:0)

如果你的表会达到数十亿条记录,RDBMS绝对不会扩展。

关于HBASE,它取决于您的要求是否是一个好的解决方案。 如果您正在寻找实时读取,Hbase只会在您只查找特定密钥时提供帮助。如果你想对不同的列进行随机读取,Hbase将不是一个理想的解决方案。如果有更新,Hbase的扩展性会非常好。

我建议您有效地设计Hbase架构,并以适合您查询的方式存储数据。

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

答案 2 :(得分:0)

在这种情况下,您可以将HBase用作NoSQL数据库。为了使搜索更加自定义和更快,请使用ElasticSearch和Hbase。

答案 3 :(得分:0)

如果您的写入速度为1 /秒,则大多数可用数据库应该能够支持此操作。由于您正在寻找长期/持久存储,因此您应该考虑一个为您提供水平扩展的数据库,以便您可以在希望增加容量时添加更多节点。具有自动分片功能的数据库非常适合您(cassandra,aerospike ......)。确保选择自动分片数据库,该数据库不需要客户端/应用程序来管理存储在哪里的数据。在这种情况下,内存数据库不适合该法案。

当您的存储空间为几个tera-bytes时,您可能不得不担心数据库规模,吞吐量,以便您的基础设施成本不会让您失望。

您的查询模式对于选择正确的解决方案非常重要。您可能不想索引所有内容,但要微调您的索引,以便您可以查询密钥和/或仅查询记录中的那些数据元素,以便索引存储开销不会变得过多,因此你可以控制成本。您还应该为数据库解决方案寻找时间范围查询功能,这似乎是典型查询模式的一部分。

最后但并非最不重要的是,您希望在尽可能最快的时间内完成查询。您应该尝试Cassandra(适用于水平缩放,减少吞吐量)和aerospike(适用于水平缩放,非常好的吞吐量)。