编写繁重,复制,大于内存的键值存储

时间:2012-11-18 20:38:17

标签: amazon-web-services nosql key-value-store

我正在寻找可以在EC2实例中使用的密钥值存储。

  • item只是一个非结构化字符串,不需要索引
  • 项目大小最多约5MB但通常低于10kB
  • 大量写作
  • 读取不需要快速,memcache可以放在前面,缓存经常需要的读取
  • 数据太大,无法容纳内存
  • 最终的一致性很好
  • 可以从多台计算机访问的守护程序

理想情况下,AWS托管的内容非常完美,但是:

  • 由于写入太多而无法适应S3
  • 由于项目大小限制而不适合SimpleDB / DynamoDb,并且不需要索引

由于市场上有很多重要的价值商店,因此很难选择最好的商店。你会推荐哪一个?

4 个答案:

答案 0 :(得分:6)

我为我的用例找到了完美的解决方案:memcachedb

它不做花哨的文档/索引,它只是一个简单的键值存储。

但我还没有进行任何性能测试。

修改

由于复制问题,我们删除了memcachedb。相反,我们现在运行mongodb。 Mongodb需要更多的磁盘空间,并且通常需要更多资源。但副本设置非常可靠,易于设置。

答案 1 :(得分:2)

也许你应该尝试mongodb:
http://www.mongodb.org/display/DOCS/Amazon+EC2

快速入门:
http://www.mongodb.org/display/DOCS/Amazon+EC2+Quickstart

10gen的免费课程和视频演示:
http://www.10gen.com/presentations/nyc-meetup-group/mongodb-and-ec2-a-love-story

其他键值存储:
http://google-opensource.blogspot.com/2011/07/leveldb-fast-persistent-key-value-store.html

关于Riak及其存储的评论,特别是bitcask和innostore:
http://basho.com/blog/technical/2011/07/01/Leveling-the-Field/

  

RaptorDB :使用b + tree或MurMur哈希索引的极小规模和快速嵌入的noSql持久词典数据库。它主要用于存储JSON数据(请参阅我的fastJSON实现),但可以存储您提供的任何类型的数据。

     

HamsterDB :一个用C ++编写的令人愉快的引擎,给我留下了深刻的印象   当我使用Aarons Watters代码进行索引时,它的速度很快。   (RaptorDB现在还活着吧......哼!)它相当大,600KB   64位版本。

     

Esent PersistentDictionary :CodePlex上的一个项目,是一个项目的一部分   另一个在内置实现托管包装的项目   Windows esent数据存储引擎。字典表现如下   在索引40,000个项目和索引文件之后,指数下降   在guid键上增长。显然在与项目业主谈判后,   这是目前已知的问题。

     

东京/京都内阁:一个C ++   密钥库的实现非常快。东京内阁是一个   b +树索引器,而Kyoto cabinet是MurMur2哈希索引器。

     

4aTech Dictionary :这是关于CodeProject的另一篇文章   同样的事情,网站的商业版本是巨大的(450KB)   并且在50,000件商品之后,在guid键上表现不佳   索引。

     

BerkeleyDB :Oracle拥有的所有数据库的祖父   并有三种版本,C ++密钥库,Java密钥库和XML   数据库中。

(报价来源:http://www.codeproject.com/Articles/190504/RaptorDB

答案 2 :(得分:2)

似乎是HBase的完美用例。它提供了很好的写入吞吐量,特别是如果您的插入键有点随机。 HBase通常不会被宣传为K / V商店,但它应该可以正常工作。 AWS documentation提供了一些您可能希望仔细查看的用例。缺点是HBase可以做的不仅仅是K / V,所以它可能比你需要的更复杂(也更复杂)。

答案 3 :(得分:1)

Couchbase听起来很符合您的需求。这与使用磁盘存储进行memcached非常相似。

优点:

  • 这是一个键/值数据库。您可以存储所需的任何二进制blob。从版本2.0开始,它支持将数据存储为json并运行一些查询和map / reduce。但是,如果你不需要它,那么使用它作为键/值就可以了。

  • 在我尝试的所有NoSQL数据库中,它是最快的。这可能是因为您的写入没有立即提交到磁盘。相反,一旦在群集中复制了写入,您就会收到确认。数据以异步方式写入磁盘。因此,一个潜在的缺点是,如果所有节点同时崩溃(例如,您的数据中心断电),您可能会丢失数据。根据应用程序的不同,这可能是一个问题,也可能不是问题(如果您的整个群集出现故障,可能会遇到更大问题)。

  • 根据我的经验,这是可靠的。如果节点发生故障,群集将继续工作,并且很容易进行故障转移。添加新节点也很容易。

  • 数据不必适合内存。它会存储在磁盘上并根据需要进行分页。

  • 管理界面非常非常好。它有漂亮的实时图表来监控集群。

  • 它向后兼容memcached协议。如果您已经拥有使用memcached的代码,那么让它使用Couchbase非常简单。

缺点:

  • 该产品仍然有点年轻,因此文档和支持工具有点缺乏。有时这可能有点烦人。