选择MongoDb/CouchDb/RavenDb - 性能和可扩展性建议

ama*_*int 44 couchdb mongodb nosql document-database ravendb

对于某些读/写密集型应用程序,我们正在研究具有故障转移群集的文档数据库存储解决方案.

我们将每秒平均写入40K并发写入数据库(峰值可能达到70,000) - 并且可能有大约几乎相同数量的读取发生.

我们还需要一种机制让db通知新写入的记录(db级别的某种触发器).

在正确选择文档数据库和相关容量规划方面,什么是一个好的选择?

更新

关于期望的更多细节.

  • 平均而言,我们期望在3-4个数据库/文档集合中每秒插入40,000(40K)个插入数(新文档).
  • 峰值可能高达120,000(120K)插入
  • 插件应该可以立即读取 - 几乎是实时的
  • 除此之外,我们预计每秒大约有5000次更新或删除
  • 除此之外,我们还期望500-600个并发查询访问数据.这些查询和执行计划在某种程度上是已知的,尽管这可能需要更新,例如,在一周左右的时间内更新一次.
  • 系统应支持存储端的故障转移群集

fra*_*ail 8

如果"20,000并发写入"意味着插入,那么我将使用CouchDB并使用"_changes"api作为触发器.但是有了20.000次写入,你还需要一个稳定的分片.然后你最好看看bigcouch

如果"20.000"并发写入包含"大部分"更新,我肯定会选择MongoDB,因为它的"就地更新"非常棒.但是你应该手动处理触发器,但使用另一个集合来更新一般文档可以是一个方便的解决方案.再次注意分片.

最后我认为你无法选择只有并发性的数据库,你需要规划api(如何检索数据)然后查看手头的选项.

  • RavenDB怎么样? (4认同)

Rah*_*ran 6

我推荐MongoDB.我的要求并不像你的要求那么高,但它相当接近.假设您将使用C#,我建议使用官方MongoDB C#驱动程序和启用SafeModeInsertBatch方法.它可以像文件系统一样快速地写入数据.一些警告:

  1. MongoDB的确实支持触发器(至少是我最后一次检查).
  2. MongoDB最初在同步到磁盘之前将数据缓存到RAM.如果您需要具有持久性的实时需求,则可能需要将fsync设置得更低.这将对性能产生重大影响.
  3. C#驱动程序有点不稳定.我不知道它是否只是我,但每当我尝试使用它运行任何长时间运行操作时,我都会遇到奇怪的错误.C++驱动程序比C#驱动程序(或任何其他驱动程序)更好,实际上更快.

话虽这么说,我也建议调查RavenDB.它支持你正在寻找的一切,但对于我的生活,我无法在Mongo附近的任何地方进行表演.

接近MongoDB的唯一其他数据库是Riak.只要你有足够的内存来存储密钥空间,它的默认Bitcask后端就会非常快,但我记得它不支持触发器.