协慌网

登录 贡献 社区

MongoDB 与 Cassandra

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

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

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

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

答案

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

在热数据集适合内存的情况下,两个数据库在读取时均表现良好。两者都强调无连接数据模型(并鼓励非规范化),并且都提供文档行上的索引,尽管 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 最重要的胜利。

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

我认为,由于 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 的文档非常好。

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

在其他方面相同的情况下,NoSQL 数据存储区的扩展方式通常比传统 DB 更好,这是有原因的,原因是 Facebook,Twitter,Google 和大多数初创企业都使用 NoSQL 解决方案。不仅仅是极客们在新技术上越来越高。