MongoDB与Cassandra的比较

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

目前,我在分片的MySQL(水平分区)上,我的大部分数据存储在JSON Blob中。 我没有任何复杂的SQL查询(自从对数据库进行分区以来,已经迁移了)。

现在,似乎MongoDB和Cassandra都是可能的选择。 我的情况:

  • 每个查询中的读取次数很多,常规写入的次数更少
  • 不担心“大规模”的可扩展性
  • 更关注简单的设置,维护和代码
  • 最小化硬件/服务器成本

#1楼

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

在其他方面相同的情况下,NoSQL数据存储区的可伸缩性通常比传统数据库好-这是Facebook,Twitter,Google和大多数初创企业使用NoSQL解决方案的原因。 不仅仅是极客们对新技术的重视。


#2楼

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

如果您经过简单的设置,就可以了:您只需解压缩MongoDB并运行mongod守护程序,就可以了……它正在运行。

显然,这只是一个入门者,但是让您入门很容易。


#3楼

昨天我在mongodb上看到了一个演示文稿。 我可以肯定地说安装是“简单的”,就像拆包然后启动一样简单。 完成。

我相信mongodb和cassandra都可以在几乎所有常规linux硬件上运行,因此您在该领域应该不会遇到太多障碍。

我认为,在这种情况下,归根结底,这取决于您个人感觉更舒适以及拥有更喜欢的工具集。 就在mongodb上的演示而言,演示者指出mongodb的工具集非常轻巧,并且没有很多(他们说的真的)类似于MySQL的工具。 当然,这就是他们的经验,所以YMMV。 我对mongodb感兴趣的一件事是它似乎有很多语言支持(Python和.NET是我主要使用的两种语言)。

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


#4楼

每个查询中的读取次数很多,常规写入的次数更少

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

无论数据集有多大,Cassandra的存储引擎都可以提供恒定时间的写入。 在MongoDB中,写入问题更多,部分原因是基于b树的存储引擎,而更多原因是由于其执行了多粒度锁定 。

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

不担心“大规模”的可扩展性

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

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

两者都很容易设置,并且单个服务器具有合理的现成默认值。 Cassandra在多服务器配置中更容易设置,因为不需要担心特殊角色节点。

如果您当前使用的是JSON Blob,则MongoDB非常适合您的用例,因为它使用BSON来存储数据。 与现有数据库相比,您将拥有更多,更可查询的数据。 这将是Mongo最重要的胜利。


#5楼

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

我认为,由于MonsDB团队正在那里进行奇偶校验,尽管Cassandra用于Twitter等大型项目,但具有更好的扩展功能。 我应该指出,在试运行阶段我没有使用过Cassandra,因此我无法透露细节。

在评估NoSQL数据库时,对我而言真正的摇摆人是查询-Cassandra基本上只是一个巨大的键/值存储,而查询有点儿麻烦(至少与MongoDB相比),因此为了性能,您必须复制大量数据作为一种手动索引。 另一方面,MongoDB使用“示例查询”模型。

例如,假设您有一个包含用户的集合(MongoDB相当于RDMS表)。 MongoDB将记录存储为文档,基本上是二进制JSON对象。 例如:

{
   FirstName: "John",
   LastName: "Smith",
   Email: "[email protected]",
   Groups: ["Admin", "User", "SuperUser"]
}

如果要查找所有具有管理员权限的史密斯用户,只需创建一个新文档(在管理控制台中使用Javascript,或在生产中使用您选择的语言):

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

...然后运行查询。 而已。 添加了用于比较,RegEx过滤等的运算符,但是这些操作都非常简单,并且基于Wiki的文档非常好。


#6楼

我可能会很奇怪,但是我认为您需要继续使用MySQL。 您尚未描述需要解决的实际问题,即使对于blob / json数据,MySQL / InnoDB还是一个出色的存储后端。

一旦意识到没有使用RDBMS的所有功能,Web工程师通常会尝试使用更多的NoSQL。 仅仅这并不是一个好理由,因为大多数NoSQL数据库通常具有相当差的数据引擎(MySQL称为存储引擎)。

现在,如果您不是那种人,请指定MySQL 缺少的内容,然后在其他数据库中寻找(例如,自动分片,自动故障转移,多主复制,较弱的数据一致性保证)。集群以更高的写入吞吐量获得回报等)。

你可能感兴趣的:(mongodb,database-design,cassandra,database)