目前我们使用mongodb作为大型在线销售网站的主要商店,目前我们专注于多台机器之间的大规模可扩展性。
网站后端是用node.js编写的,我们使用mongoose作为ODM。
我可以看到很多关于真棒cassandra DB的博客文章,我开始考虑切换到cassandra。但我仍然不确定这是否是一个非常好的决定,因为我没有为cassandra和node.js找到任何好的ODM / ORM库(编写原始查询可能很痛苦。还要编写经过良好测试的ORM / ODM可能是耗时的任务)。所以我不确定这次切换后我会得到多少好处。我们使用弹性搜索作为搜索引擎,它与mongodb结合使用效果非常好,我要求我的自己也会对cassandra做得很好。
如果您对此有任何体验,那将非常有帮助。
谢谢!
答案 0 :(得分:7)
Cassandra是一个设计精良的数据库,可以满足很多场景。 MongoDB也是一个非常好的数据库引擎。那么,让我为您比较几个主要要点。
始终在系统
当您需要在多个数据中心提供全天候运营时,Cassandra非常棒。如果您有多个数据中心,每个数据中心都有多个服务器,那么Cassandra非常适合您。 Cassandra可以将写入同步到多个数据中心,并在复杂的设置中保持所需的数据一致性。恢复和重新同步也很容易。
另一方面,MongoDB易于操作。如果你有一个数据中心,只有几个服务器,那么它可能是完美的选择(尽管全局写锁可能会随着时间的推移而变得很痛苦)。在简单的部署中,它易于维护和监控。
<强>可扩展性强>
继续上述陈述 - Cassandra具有线性可扩展性。从字面上看,群集的大小没有限制。您的写入将始终保持快速,而读取可能会随着时间的推移变得更加复杂 - 取决于数据的结构。
数据的非规范化
如果您要创建一个能够反映您需要从数据中获取的内容的结构,那么使用Cassandra可以非常快速地进行写入和读取。您可以使用聚合,分组等来使用重新组织您的结果集的查询语言(嗯,有,但它不完全是SQL)。是的,有些事情是可行的而有些则不是 - 这对Cassandra数据模型非常具体。你必须自己实现很多东西并将结果写入数据库 - 即聚合计数器,不同的分组等。
相比之下,MongoDB易于使用,更易于学习和更灵活 - 既可用于开发(如知识曲线/努力工作),也可用于实现业务逻辑(考虑时间/精力)。那就是 - 有一种原因 - 为什么有MongoDB的ORM引擎,只有几个(非常有限)的Cassandra。
总结一下 - 两个DB都非常好......如果你能接受它们的局限性。如果您只有 100GB的数据,并且您需要灵活,易于实现的数据库引擎,我会坚持使用MongoDB,或者看看RethinkDB,它们具有非常相似的模型和方式(在我的个人意见)集群/数据中心复制实施。
如果您需要尽快存储TB数据,将应用程序部署到多个数据中心,同时接受实施相同功能和维护类似功能的额外工作成本,Cassandra对您来说是一个很好的选择。
请不要个人理解我在描述您的数据集时使用了 这个词。是的,它并不大 - 这些天我的公司存储超过20 TB ......所以是的,100GB真的不是那么多......
要阻止所有人指出我应该比较其他一些功能或指出这两者之间的其他差异 - 它只是对我认为与问题相关的事情的粗略,高级概述,而非完整比较或分析问题。但请随意指出我错过的内容,我很乐意在这个答案中加入新内容......