Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop是用作键值存储的好候选吗? 问题:_Hadoop_Key Value Store - Fatal编程技术网

Hadoop是用作键值存储的好候选吗? 问题:

Hadoop是用作键值存储的好候选吗? 问题:,hadoop,key-value-store,Hadoop,Key Value Store,Hadoop是以下用例的一个很好的候选者: 简单键值存储(主要需要按键获取和设置) 非常小的“行”(32字节键值对) 大量删除 繁重的文字 大约1亿到10亿个键值对 大多数数据可以包含在SSD(固态驱动器)上,而不是RAM中 更多信息 我之所以问这个问题,是因为我一直在看Hadoop文件系统的引用,以及如何使用Hadoop作为许多其他数据库实现的基础,而这些数据库实现不一定是为MapReduce设计的。 目前,我们正在Redis中存储这些数据。Redis的性能非常好,但由于它的所有数据都包含

Hadoop是以下用例的一个很好的候选者:

  • 简单键值存储(主要需要按键
    获取
    设置
  • 非常小的“行”(32字节键值对)
  • 大量删除
  • 繁重的文字
  • 大约1亿到10亿个键值对
  • 大多数数据可以包含在SSD(固态驱动器)上,而不是RAM中
更多信息 我之所以问这个问题,是因为我一直在看Hadoop文件系统的引用,以及如何使用Hadoop作为许多其他数据库实现的基础,而这些数据库实现不一定是为MapReduce设计的。 目前,我们正在Redis中存储这些数据。Redis的性能非常好,但由于它的所有数据都包含在RAM中,因此我们必须使用高达128gb RAM的昂贵机器。最好改用依赖SSD的系统。这样我们就可以自由地构建更大的哈希表

我们还使用Cassandra存储了这些数据,但如果删除量过大,Cassandra会“中断”数据。

Hadoop(与流行媒体观点不同)不是数据库。你所描述的是一个数据库。因此,Hadoop对您来说不是一个好的候选者。下面的帖子也是自以为是的,所以请随意证明我的基准是错误的

如果您关心Hadoop之上的“NoSql DB”:

  • HBase将适合于大量写入,但不适合大量删除
  • Cassandra也写了同样的故事,但写得不如HBase快
  • Accumulo可能对非常频繁的更新有用,但也会吸收删除
它们都没有“真正”使用固态硬盘,我认为它们并没有获得巨大的加速

如果你开始分割你的平板电脑(在BigTable演讲中),它们都会遭受昂贵的压缩,因此删除是一个相当明显的限制因素

要缓解删除问题,您可以做的是使用一个恒定的“deleted”值覆盖,这将解决压缩问题。但是,您的表会增长,这在SSD上也会很昂贵。您还需要进行筛选,这可能会影响读取延迟

从您描述的情况来看,Amazon的DynamoDB体系结构似乎是这里的最佳候选者。虽然这里的删除也很昂贵——可能没有上面提到的方法那么昂贵


顺便说一句:从上述任何数据库的表中删除大量行的推荐方法是完全删除该表。如果你能将你的设计融入到这个范例中,任何一个都可以。

虽然这不是对你问题的回答,但与你所说的有关

最好改用依赖SSD的系统。这边 我们可以自由地构建更大的哈希表

你可以考虑看一下。 特别是作为一名Cassandra用户,我知道当你说
是压缩和墓碑问题时
。我自己在遇到异常的时候也曾遇到过几次墓碑,并陷入了死胡同

你可能想看看这个 它说:

Memcached都在内存中,所以您需要将所有数据压缩到内存中 记忆能够服务于它(这可能是一个昂贵的提议) 如果生成的数据集很大)

最后

我们所做的只是将整个数据集映射到进程地址中 空间和访问它那里。这提供了最低的缓存开销 可能,并利用中非常高效的查找结构 操作系统


我不知道这是否适合你的情况。但你可以考虑评估Voldemort一次!祝你好运。

我想这很好地回答了我的问题。它的压实和墓碑是一个问题。我知道卡桑德拉和阿库穆洛应该有同样的限制。我要去迪纳摩,非常感谢你的指点。我不相信“删除整个表”范例适用于这个用例(巨大的散列索引表)。