写沉重,复制,降幅高于存储key-value存储(Write heavy, replicated,

2019-08-02 22:00发布

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

  • 项目仅仅是一个非结构化的字符串,不需要索引
  • 项目规模达5MB〜但通常低于10KB
  • 很多写的
  • 阅读并不需要要快,内存缓存可以放在前面的缓存,经常需要读取
  • 数据太大,无法装入内存
  • 最终一致性是好的
  • 需要,可以从多台机器上访问后台进程

理想的情况是什么AWS托管将是完美的,但是:

  • S3不适合,因为太多的写入
  • SimpleDB的/ DynamoDb不适合,因为项目规模的限制,并且不需要索引

由于目前市场上有很多关键值存储很难选择最好的一个。 你会推荐哪一个?

Answer 1:

我发现我的使用情况下的完美解决方案: memcachedb

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

我没有做任何性能测试尚未虽然。

编辑:

我们下降memcachedb由于与复制问题。 相反,我们现在的MongoDB运行。 MongoDB中需要更多的磁盘空间,一般更多的资源。 但副本集工作非常可靠,易于设置。



Answer 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 +树或杂音哈希索引字典数据库。 它主要设计用于存储JSON数据(见我FASTJSON实现),但可以存储任何类型的,你给它的数据。

HamsterDB:一个愉快的引擎用C ++编写,而我使用阿伦斯沃特斯代码为索引让我印象深刻很多关于它的速度。 (RaptorDB吃它现在还活着......啊哈!)这是相当大的,在600KB的64位版本。

ESENT PersistentDictionary:CodePlex上的一个项目,是它实现了一个托管包装的另一个项目的一部分内置在Windows ESENT的数据存储引擎。 这本字典的性能下山后成倍40000项索引和索引文件只生长在GUID键。 显然,与项目业主会谈后,这是目前已知的问题。

东京/京都柜 :A C ++实现密钥存储的,这是非常快的。 东京柜是B +树索引,而京都柜是一个MurMur2哈希索引。

4aTech解释 :这是在CodeProject的另一篇文章,其做同样的事情,在网站上的商业版本是巨大的(450KB),但无法在GUID键惨淡经营性能明智之后五万件索引。

BerkeleyDB的 :这是由甲骨文拥有并有3种口味,C ++密钥存储,Java的密钥存储和XML数据库中的所有数据库的爸爸大。

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



Answer 3:

似乎是一个完美使用案例HBase的 。 它提供了很大的写入吞吐量,特别是如果你插入键有些随意。 HBase的通常不是标榜A K / V存储,但它应该只是罚款。 该AWS文档介绍你可能想仔细看看一些使用情况。 不足之处是HBase的能做的不仅仅是K /伏的多很多,所以它可能比你需要的更复杂(复杂)。



Answer 4:

Couchbase听起来像是你需要一个很好的匹配。 这是一个很多像磁盘存储器,其中memcached的。

优点:

  • 这是一个键/值数据库。 你可以存储任何你想要的二进制BLOB。 它作为2.0它具有用于存储你的数据作为JSON和运行一些查询和地图支持版本/减少。 但是,如果你并不需要的是,使用它作为键/值的伟大工程。

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

  • 在我的经验,一直可靠。 如果一个节点出现故障,群集继续工作,这是非常容易做到的故障切换。 添加新节点是很容易的事。

  • 数据并不一定适合在内存中。 它被存储在磁盘上,输出,必要时分页。

  • 该管理界面非常,非常好。 它有漂亮的现场图来监视群集。

  • 这与memcached协议向后兼容。 如果你已经有了一个使用memcached的代码,它会是相当简单的把它用Couchbase代替。

缺点:

  • 该产品还是有点年轻,所以文档和支持工具上有所欠缺。 这可能是一个有点讨厌的时候。


文章来源: Write heavy, replicated, bigger-than-memory key-value store