我有很多文本文件,它们的总大小约为 300GB ~ 400GB。它们都是这种格式
key1 value_a
key1 value_b
key1 value_c
key2 value_d
key3 value_e
....
每行由一个键和一个值组成。我想创建一个数据库,它可以让我查询一个键的所有值。例如,当我查询 key1 时,返回 value_a、value_b 和 value_c。
首先,将所有这些文件插入数据库是一个大问题。我尝试使用 LOAD DATA INFILE 语法将几 GB 大小的块插入 MySQL MyISAM 表。但似乎 MySQL 不能利用多核来插入数据。它像地狱一样慢。所以,对于这么多记录,我认为 MySQL 不是一个好的选择。
此外,如果可能,我需要定期、每周甚至每天更新或重新创建数据库,因此,插入速度对我来说很重要。
单个节点不可能有效地进行计算和插入,要高效,我认为最好在不同节点中并行执行插入。
例如,
node1 -> compute and store 0-99999.txt
node2 -> compute and store 10000-199999.txt
node3 -> compute and store 20000-299999.txt
....
所以,这是第一个标准。
标准 1. 分布式批处理方式插入速度快。
然后,正如您在文本文件示例中看到的那样,最好为不同的值提供多个相同的键。就像示例中的 key1 映射到 value_a/value_b/value_c 一样。
标准 2. 允许多个键
然后,我需要查询数据库中的键。不需要关系或复杂的连接查询,我只需要简单的键/值查询。重要的部分是相同值的多个键
标准 3. 简单快速的键值查询。
我知道有 HBase/Cassandra/MongoDB/Redis....等等,但我对它们都不熟悉,不确定哪一个适合我的需求。所以,问题是 - 使用什么数据库?如果它们都不符合我的需求,我什至打算建立自己的,但这需要努力:/
谢谢。