对于广泛的读写操作MongoDB与Cassandra

时间:2016-07-18 00:24:30

标签: mongodb cassandra redis database nosql

我使用过MongoDB但是对Cassandra来说是新手。我曾经使用过使用MongoDB的应用程序并且不是很大的应用程序。读写操作不是很密集。在这种情况下,MongoDB对我很有用。现在我正在构建一个新的应用程序(具有Stack Overflow [投票,总计视图,建议,注释等]的一些功能),并在同一项目上对数据库进行大量并发写入操作(将来!)。所以根据这些信息,我通过网络收集,MongoDB不是最好的选择(但Cassandra是)。但我在Cassandra中finding的问题是选择正确的数据模式。

  

围绕您的查询构建模型。不是关系和   对象。

我还看了使用Mongo + Redis的解决方案。是否有效率首先更新Mongo数据库,然后updating Redis数据库更新同一数据项的所有多个写请求。

我想验证哪一个最能解决这个问题Mongo +骑或Cassandra?

任何帮助都将受到高度赞赏。

2 个答案:

答案 0 :(得分:3)

挑选数据库非常主观。我会说使用新的WiredTiger存储引擎的现代MongoDB 3.2+可以很好地处理并发。

选择分布式NoSQL(或SQL)数据存储区时,通常只能选择以下三种中的两种:

  • Consistency(所有节点同时看到相同的数据)
  • Availability(每个请求都会收到有关成功或失败的回复)
  • Partition tolerance(尽管由于网络故障导致任意分区,系统仍继续运行)

这称为CAP Theorem

MongoDB有C和P,Cassandra有A和P. Cassandra也是一个面向列的数据库,并且将采用一种不同的方法来存储和检索数据,比如MongoDB(它是一个Document-)面向数据库)。实际情况是,任何一个数据库都应该能够轻松扩展到您的需求。我担心数据存储和检索语义与您的应用程序数据模型的匹配程度,以及所提供功能的有用性。

确定哪个数据库最适合您的应用是非常主观的,并且与Stack Overflow上的“基于意见的问题”接壤。

将Redis用作LRU缓存绝对是有效扩展策略的一个组成部分。在读取可缓存数据时,典型的模型是首先检查缓存中是否存在数据(Redis),如果不存在,则从数据库中查询数据,将结果存储在缓存中并返回。虽然在某些情况下可能是合适的,但将所有写入Redis和数据库并不常见。您需要弄清楚什么是可缓存的以及每个缓存项目应该存在多长时间,并且如上所述,或者在写入时,在读取时缓存它。

答案 1 :(得分:0)

它仅取决于您的应用程序的用途。对于广泛的写入应用程序,使用Cassandra

更好