database-design - MongoDB 和 Cassandra 对比

  显示原文与译文双语对照的内容

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

目前,我在一个支离破碎的MySQL ( 水平分区) 上,大部分数据都存储在 JSON blob中。 我没有任何复杂的SQL查询( 已经在我分区之后已经迁移过了) 。

现在看起来,MongoDB和Cassandra都可能是选项。 我的情况:

  • 在每个查询中都有大量的读取,较少的正则表达式
  • 不担心"海量"的可扩展性
  • 更关注简单的安装,维护和代码
  • 最小化硬件/服务器成本
时间:

以每个查询,减少常规写操作, 大量的读操作

这两个数据库在热数据集适合内存的情况下表现良好。 这两个模型也强调join-less数据( 并鼓励非规范化化),并且都提供索引 文档或者行,虽然索引mongodb当前正在处理的更加灵活。

无论你的数据集增长多大,cassandra引擎的存储都提供了constant-time写入。 MongoDB中的写操作都被产生争议的,部分原因是基础存储引擎,更因为 b-tree 每数据库写操作的锁。

对于分析,MongoDB提供自定义的Map/Reduce 实现;Cassandra提供原生Hadoop支持,包括配置单元 ( 基于Hadoop映射/reduce构建的SQL数据仓库) 和 Pig ( 许多人认为Hadoop-specific分析语言比SQL更适合 Map/Reduce 工作负载) 。

不担心"海量"可扩展性

如果你正在查看一个服务器,MongoDB可能是更好的选择。 对于那些更关心缩放,no-single-point-of-failure架构的将更容易设置和更可靠。 ( mongodb写锁也会变得更加痛苦。) 于多个数据centers,全局相关的卡珊德拉也给了很多控制你的复制的工作机制,包括如何支持"

比较关心的简单的安装。维护及代码

两个都很简单,只有一个服务器的out-of-the-box默认值。 卡珊德拉较为容易做到设立在multi-server配置中因为担心没有special-role节点;这里是一个录屏展示设置一个 4 -node卡珊德拉在两分钟集群。

如果你但是现在使用 JSON blob 。MongoDB是一个疯狂的最佳匹配你的用例中,考虑到它使用BSON来储存这些数据。 你将能够拥有比当前数据库中更丰富更可以查询的数据。 这将是Mongo最重要的胜利。

我已经使用MongoDB广泛( 过去 6个月),构建一个层次化的数据管理系统,我认为无论是便于设置( 安装,运行,使用它) 无误和推杆速度。 只要你仔细地考虑索引,它就可以绝对地尖叫,speed-wise 。

我收集了 Cassandra,因为它与像 Twitter 这样的大型项目一起使用,具有更好的扩展功能,尽管MongoDB团队正在处理奇偶校验。 我应该指出,我没有在trial-run阶段使用过 Cassandra,所以我不能说细节。

真实的为我,当我们在评估 NoSQL Swinger数据库,得查询- 卡珊德拉实际上只是一个巨大的键/值存储,和查询,是一个对于性能有些过生硬( 至少与MongoDB相比),因此你会有相当多的数据作为什么手动索引进行拷贝。 另一方面,MongoDB使用了一个"按示例查询"模型。

例如假设你有一个包含用户的集合( 等价于一个rdm表的MongoDB术语) 。 MongoDB将记录作为文档存储,这些文档基本上是二进制JSON对象。 例如


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

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


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

。然后运行查询。 就是这样了。有一些添加的操作符,正规表达式 过滤等等,但是它很简单,而且Wiki-based文档很不错。

...