当前位置:  开发笔记 > 编程语言 > 正文

MongoDB与Cassandra

如何解决《MongoDB与Cassandra》经验,为你挑选了6个好方法。

我正在评估什么是最好的迁移选项.

目前,我正在使用分片MySQL(水平分区),我的大部分数据都存储在JSON blob中.我没有任何复杂的SQL查询(自从我对数据库进行分区后已经迁移过了).

现在,似乎MongoDB和Cassandra都可能成为选择.我的情况:

每次查询都有大量读取,而不是常规写入

不担心"大规模"的可扩展性

更关注简单的设置,维护和代码

最大限度地降低硬件/服务器成本

Michael.. 576

每次查询都有大量读取,常规写入次数较少

两个数据库在热数据集适合内存的读取中表现良好.两者都强调无连接数据模型(并鼓励非规范化),并且都提供文档或行的索引,尽管MongoDB的索引目前更灵活.

无论您的数据集有多大,Cassandra的存储引擎都能提供恒定时间写入.在MongoDB中写入更有问题,部分原因是基于b树的存储引擎,但更多是因为它具有多粒度锁定.

对于分析,MongoDB提供自定义map/reduce实现; Cassandra提供本机Hadoop支持,包括Hive(基于Hadoop map/reduce构建的SQL数据仓库)和Pig(许多人认为特定于Hadoop的分析语言比SQL更适合映射/减少工作负载).Cassandra还支持使用Spark.

不担心"大规模"的可扩展性

如果您正在查看单个服务器,MongoDB可能更适合.对于那些更关心扩展的人来说,Cassandra的无单点故障架构将更容易设置和更可靠.(MongoDB的全局写锁定也会变得更加痛苦.)Cassandra还可以更好地控制复制的工作方式,包括支持多个数据中心.

更关注简单的设置,维护和代码

两者都很容易设置,单个服务器具有合理的开箱即用默认值.由于不需要担心特殊角色节点,因此在多服务器配置中设置Cassandra更加简单.

如果您目前正在使用JSON blob,那么MongoDB对于您的用例非常适合,因为它使用BSON来存储数据.与现有数据库相比,您将能够获得更丰富,更易查询的数据.这将是Mongo最重要的胜利.



1> Michael..:

每次查询都有大量读取,常规写入次数较少

两个数据库在热数据集适合内存的读取中表现良好.两者都强调无连接数据模型(并鼓励非规范化),并且都提供文档或行的索引,尽管MongoDB的索引目前更灵活.

无论您的数据集有多大,Cassandra的存储引擎都能提供恒定时间写入.在MongoDB中写入更有问题,部分原因是基于b树的存储引擎,但更多是因为它具有多粒度锁定.

对于分析,MongoDB提供自定义map/reduce实现; Cassandra提供本机Hadoop支持,包括Hive(基于Hadoop map/reduce构建的SQL数据仓库)和Pig(许多人认为特定于Hadoop的分析语言比SQL更适合映射/减少工作负载).Cassandra还支持使用Spark.

不担心"大规模"的可扩展性

如果您正在查看单个服务器,MongoDB可能更适合.对于那些更关心扩展的人来说,Cassandra的无单点故障架构将更容易设置和更可靠.(MongoDB的全局写锁定也会变得更加痛苦.)Cassandra还可以更好地控制复制的工作方式,包括支持多个数据中心.

更关注简单的设置,维护和代码

两者都很容易设置,单个服务器具有合理的开箱即用默认值.由于不需要担心特殊角色节点,因此在多服务器配置中设置Cassandra更加简单.

如果您目前正在使用JSON blob,那么MongoDB对于您的用例非常适合,因为它使用BSON来存储数据.与现有数据库相比,您将能够获得更丰富,更易查询的数据.这将是Mongo最重要的胜利.


完全不同,评论不够大,但是...... Cassandra是一种线性可扩展(摊销的恒定时间读写)dynamo/google bigtable hybrid,无论数据大小如何都具有快速写入功能.它的功能集是简约的,远远超出了有序键值存储的功能.MongoDB是一个功能强大(快速)的文档存储,代价是持久性,并保证写入持久(因为它们不会立即写入磁盘).他们是不同的动物,不同的哲学,MongoDB更接近RDMS的替代......
虽然Cassandra是较低级别但允许超级扩展(请参阅Twitter/Digg/Facebook),但您将不得不考虑如何放置数据,构建二级索引等,因为不允许灵活查询.
甚至在我的项目上线之前,我感受到了Mongodb的痛点.热备份是一项基本要求.要在Linux服务器中执行热备份,您必须首先设置LVM分区(不常见)并在每个备份会话之前拍摄快照.另一种简单的方法是使用Mongodb付费备份服务.但是,这项服务很昂贵(2.3美元/ GB /月).很快你就需要一个复制集以实现容错.使用开源版本,节点只能以明文形式交换数据.对于SSL,您必须使用Entprise版本.这是10,000美元.再见Mongodb.将我的代码重构为Cassandra.
因为每个人都在这里提到了与Cassandra相关的Twitter:他们没有使用Cassandra来保存推文,他们在这里仍使用MySQL(http://engineering.twitter.com/2010/07/cassandra-at-twitter-today.html).好的,但我可以想象他们仍然在Cassandra中为其他目的存储大量数据.
看起来Mongo 2.2中可能已经删除了全局写锁...
由于MongoDB 3.2,Wired Tiger存储引擎是默认的,它使用文档级并发进行写入(MMAPv2使用了集合级并发)

2> Richard K...:

我已经广泛使用了MongoDB(过去6个月),构建了一个分层数据管理系统,我可以保证设置的简易性(安装,运行,使用它!)和速度.只要你仔细考虑索引,它就可以绝对地尖叫,速度方面.

我认为Cassandra由于其在Twitter等大型项目中的使用,具有更好的扩展功能,尽管MongoDB团队正在努力实现平价.我应该指出,我没有在试运行阶段之外使用Cassandra,所以我不能说明细节.

当我们评估NoSQL数据库时,真正的摇摆人是查询 - Cassandra基本上只是一个巨大的键/值存储,查询有点繁琐(至少与MongoDB相比),所以对于性能你必须将很多数据复制为一种手动索引.另一方面,MongoDB使用"按示例查询"模型.

例如,假设您有一个包含Users的Collection(MongoDB用于等效于RDMS表的用语).MongoDB将记录存储为Documents,它们基本上是二进制JSON对象.例如:

{
   FirstName: "John",
   LastName: "Smith",
   Email: "john@smith.com",
   Groups: ["Admin", "User", "SuperUser"]
}

如果您想要找到所有名为Smith的用户拥有管理员权限,您只需创建一个新文档(使用Javascript在管理控制台上,或使用您选择的语言在生产中):

{
   LastName: "Smith",
   Groups: "Admin"
}

...然后运行查询.而已.有用于比较增加运营商,正则表达式过滤等,但是这一切都非常简单,基于wiki的文档是相当不错的.


更新(2011年8月8日):亚马逊的爱尔兰EC2数据中心昨晚发生了与闪电相关的事件,在整理我们的服务器恢复时,我发现了一个非常关键的一点:如果你有一套两台服务器的复制(和它们一样) "很容易设置",确保你有一个Arbiter节点,所以如果一个人关闭,另一个节点不会出现恐慌并在辅助模式下停止!相信我,用一个大型数据库来解决背后的痛苦.
要添加@Richard K所说的内容,当副本集中有偶数个节点(主要或辅助节点)时,应该有仲裁节点.

3> 小智..:

为什么要在传统数据库和NoSQL数据存储之间进行选择?同时使用!NoSQL解决方案的问题(超出最初的学习曲线)是缺少事务 - 您对MySQL进行了所有更新,并让MySQL填充NoSQL数据存储区进行读取 - 然后您将从每项技术的优势中受益.这确实增加了更多的复杂性,但你已经拥有MySQL方面 - 只需添加MongoDB,Cassandra等.

对于相同的规范,NoSQL数据存储通常比传统数据库更好地扩展 - 有一个原因,Facebook,Twitter,谷歌和大多数初创公司都在使用NoSQL解决方案.这不只是极客们对新技术的高度重视.


我完全同意.我在即将推出的即将推出的产品中使用mongodb + mysql.这是即将推出的金融产品云.在我们绝对需要事务功能的地方使用mysql.mongodb用于存储非计算复杂数据结构,只需在需要时将其拉出.到目前为止工作良好.:)

4> Kostja..:

我可能会成为一个奇怪的人,但我认为你需要留在MySQL.您还没有描述需要解决的实际问题,即使对于blob/json数据,MySQL/InnoDB也是一个出色的存储后端.

Web实现中有一个常见的伎俩,即一旦实现并未使用RDBMS的所有功能,就会尝试使用更多的NoSQL.仅此一点并不是一个好理由,因为大多数情况下NoSQL数据库的数据引擎相当差(MySQL称之为存储引擎).

现在,如果您不是那种类型,那么请指明MySQL中缺少的内容并且您正在寻找不同的数据库(例如,自动分片,自动故障转移,多主复制,以及较弱的数据一致性保证)群集在更高的写入吞吐量等方面得到了回报.


他还将大部分JSON blob存储在RDBMS中 - 渲染关系设计(功能)无用.
他正在使用分片,这意味着他的数据是在服务器之间手动分区的.Mongodb可以自动分片,这可能是一个好处.
关系模型是最经过深思熟虑,有效实施和节约数据模型的模型之一."渲染关系设计功能无用"可能与约束,触发器或参照完整性有关 - 但这些都是按使用付费.
数据模型和自动分片确实不同,但是在选择数据库时,您需要首先查看存储引擎*,然后再查看剩余的铃声和口哨声.存储引擎如何在负载峰值下运行?如何在数据流入峰值下执行自动分片功能?在您将控制权交给数据库以实现这些重要方面之前,您最好确保它能够完成任务.

5> dalton..:

我没有使用过Cassandra,但是我使用过MongoDB并认为它很棒.

如果您正在进行简单的设置,那么就是这样:您只需解压MongoDB并运行mongod守护程序就可以了......它正在运行.

显然这只是一个首发,但为了让你开始它很容易.


AFAIK,同样适用于Cassandra.Untar,运行守护进程.测试集群已设置好并可以投入生产!

6> GrayWizardx..:

我昨天在mongodb上看过一个演讲.我可以肯定地说,设置是"简单的",就像打开包装并将其启动一样简单.完成.

我相信mongodb和cassandra几乎可以在任何常规的Linux硬件上运行,所以你不应该在那个领域找到很多障碍.

我想在这种情况下,在一天结束的时候,你会发现自己感觉更舒服,哪个有你喜欢的工具集.至于关于mongodb的演示,主持人表示mongodb的工具集很轻,并且没有很多(他们说的任何真正的)工具类似于可用于MySQL的工具.这当然是他们的体验,所以YMMV.我对mongodb所做的一件事就是它似乎有很多语言支持(Python和.NET是我主要使用的两种语言).

使用mongodb的网站列表非常令人印象深刻,我知道twitter刚刚切换到使用cassandra.


在一天结束时,它是苹果与橘子的比较.两个数据库都有自己的优势.以下是一些需要考虑的事项 - 对象模型,二级索引,写入可扩展性,高可用性等等.有一篇博客文章解释了mongodb和cassandra之间的高层战略差异 - https://scalegrid.io/blog/cassandra-vs -mongodb /
推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有