用于广泛的读写操作MongoDB vs Cassandra

用于广泛的读写操作MongoDB vs Cassandra,mongodb,cassandra,redis,database,nosql,Mongodb,Cassandra,Redis,Database,Nosql,我用过MongoDB,但对Cassandra来说是新的。我曾经在使用MongoDB的应用程序上工作过,这些应用程序不是很大的应用程序。读写操作不是很密集。在这种情况下,MongoDB对我很有效。现在,我正在构建一个新的应用程序(具有堆栈溢出[投票、总计视图、建议、注释等]等功能),在同一项上有许多并发写入操作(将来!)。因此,根据我通过在线收集的信息,MongoDB不是最佳选择(但Cassandra是)。但我在卡桑德拉遇到的问题是选择正确的数据模型 围绕查询构建模型。不围绕关系和 对象 我还研究

我用过MongoDB,但对Cassandra来说是新的。我曾经在使用MongoDB的应用程序上工作过,这些应用程序不是很大的应用程序。读写操作不是很密集。在这种情况下,MongoDB对我很有效。现在,我正在构建一个新的应用程序(具有堆栈溢出[投票、总计视图、建议、注释等]等功能),在同一项上有许多并发写入操作(将来!)。因此,根据我通过在线收集的信息,MongoDB不是最佳选择(但Cassandra是)。但我在卡桑德拉遇到的问题是选择正确的数据模型

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

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

我想验证一下,Mongo+redis还是Cassandra最适合解决这个问题


任何帮助都将不胜感激。

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

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

  • (所有节点同时看到相同的数据)
  • (每个请求都会收到一个关于它是成功还是失败的响应)
  • (尽管由于网络故障进行了任意分区,但系统仍能继续运行)
这就是所谓的

MongoDB有C和p,Cassandra有A和p。Cassandra也是一个面向列的数据库,它在存储和检索数据方面与MongoDB(面向文档的数据库)有点不同。事实上,任何一个数据库都应该能够轻松地扩展到您的需要。我会担心数据存储和检索语义是否适合应用程序的数据模型,以及所提供的功能有多有用

决定哪个数据库最适合您的应用程序是非常主观的,并且在堆栈溢出问题上近乎“基于意见的问题”


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

这只取决于您的应用程序的用途。对于广泛的编写应用程序,最好使用Cassandra

你说得对,决定哪个数据库最适合你的应用程序是非常主观的。这取决于应用程序的功能。我想使用Redis作为mongo的辅助数据库。我想知道如果我们先写入redis数据库,是否有redis触发器会触发异步更新mongo数据库的事件。