6

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

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

理想情况下,AWS 托管的东西是完美的,但是:

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

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

4

4 回答 4

6

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

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

不过,我还没有进行任何性能测试。

编辑:

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

于 2012-11-21T10:26:36.210 回答
2

似乎是HBase的完美用例。它提供了出色的写入吞吐量,尤其是当您的插入键有些随机时。HBase 通常不被宣传为 K/V 存储,但它应该可以正常工作。AWS 文档提供了一些您可能希望仔细查看的用例。缺点是 HBase 可以做的不仅仅是 K/V,所以它可能比你需要的更复杂(和复杂)。

于 2012-11-27T19:41:29.567 回答
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:一个极小尺寸和快速嵌入式、noSql、使用 b+tree 或 MurMur 哈希索引的持久字典数据库。它主要设计用于存储 JSON 数据(请参阅我的 fastJSON 实现),但可以存储您提供的任何类型的数据。

HamsterDB:一个用 C++ 编写的令人愉快的引擎,当我使用 Aarons Watters 代码进行索引时,它的速度给我留下了深刻的印象。(RaptorDB 现在把它活活吃掉了……咳咳!)对于 64 位版本来说,它相当大,有 600KB。

Esent PersistentDictionary:CodePlex 上的一个项目,它是另一个项目的一部分,该项目在内置的 Windows esent 数据存储引擎上实现托管包装器。索引 40,000 个项目后,字典性能呈指数下降,而索引文件仅在 guid 键上增长。显然,在与项目所有者交谈后,目前这是一个已知问题。

Tokyo/Kyoto Cabinet:密钥存储的 C++ 实现,速度非常快。Tokyo cabinet 是一个 b+tree 索引器,而 Kyoto cabinet 是一个 MurMur2 哈希索引器。

4aTech Dictionary:这是 CodeProject 上的另一篇文章,它做同样的事情,网站上的商业版本很大(450KB),在索引 50,000 个项目后,在 guid 键上的性能表现不佳。

BerkeleyDB:Oracle 拥有的所有数据库的鼻祖,有 3 种风格,C++ 密钥库、Java 密钥库和 XML 数据库。

(引用来源: http: //www.codeproject.com/Articles/190504/RaptorDB

于 2012-11-20T22:08:15.440 回答
1

Couchbase听起来很适合您的需求。这很像在磁盘存储中使用 memcached。

优点:

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

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

  • 根据我的经验,它是可靠的。如果一个节点出现故障,集群会继续工作,并且很容易进行故障转移。添加新节点也很容易。

  • 数据不必适合内存。它被存储在磁盘上,并根据需要进行页面调入和调出。

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

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

缺点:

  • 该产品还有些年轻,因此有些缺乏文档和支持工具。有时这可能有点烦人。
于 2012-11-27T21:20:52.780 回答