我有很多文本文件,它们的总尺寸约为300GB〜400GB。他们都采用这种格式

key1 value_a
key1 value_b
key1 value_c
key2 value_d
key3 value_e
....

每行都是由键和值组成的。我想创建一个数据库,该数据库可以让我查询键的所有值。例如,当我查询键1时,返回value_a,value_b和value_c。

首先,将所有这些文件插入数据库是一个大问题。我尝试将一些GBS大小的块插入带有负载数据填充语法的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 ....依此类推,但是我不熟悉所有这些,不确定哪个适合我的需求。那么,问题是 - 要使用什么数据库?如果他们都不适合我的需求,我什至计划自己建立自己的需求,但这需要努力:/

谢谢。

有帮助吗?

解决方案

我处在类似的情况下,强烈建议您根据您的需求寻找MongoDB或HBase。其他(Cassandra/redis)也很好,但是HBase和MongoDB在大型环境中进行了战斗,拥有大型社区,良好的文档(MongoDB更好),并且通常满足您正在寻找的三个要求。

其他提示

  • 钥匙有多大?
  • 价值有多大?
  • 数据会“不断地”到达,还是一次性负载?
  • 让我们看看所有代表性的查询。你只提到

SELECT val FROM tbl WHERE key = 'constant';

还有其他吗?

总的来说,钥匙值商店很糟糕。但是,也许我们可以使您的特殊情况变得不太好起来。

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top