MongoDB与Cassandra

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

目前,我在一个分裂的MySQL(水平分区),我的大部分数据存储在JSON斑点。 我没有任何复杂的SQL查询(在我分区后,已经迁移了)。

现在,似乎MongoDB和Cassandra都可能成为select。 我的情况:

  • 每个查询都有大量的读取,而不是普通的写入
  • 不担心“大规模”的可扩展性
  • 更关心简单的设置,维护和代码
  • 最大限度地降低硬件/服务器成本

每个查询都有大量的读取,而不是普通的写入

这两个数据库在热数据集适合内存的读取方面performance良好。 两者都强调无连接的数据模型(并鼓励反规范化),并且都提供文档或行的索引,虽然MongoDB的索引当前更加灵活。

Cassandra的存储引擎不论数据集增长多大,都能提供恒定的写入时间。 在MongoDB中写入的问题更多,部分原因是基于b-tree的存储引擎,但更多的是因为每个数据库写入locking 。

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

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

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

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

这两者都是微不足道的设置,与一个单一的服务器合理的现成的默认值。 Cassandra在多服务器configuration中更简单,因为没有特殊angular色节点需要担心。 这里是一个截屏video,演示了在两分钟内build立一个4节点的Cassandra集群 。

如果您目前正在使用JSON blob,那么MongoDB对于您的用例来说是非常好的匹配,因为它使用BSON来存储数据。 您将能够拥有比您现在的数据库更丰富,更可查询的数据。 这将是Mongo最重要的胜利。

我已经广泛地使用了MongoDB(过去6个月),构build了一个分层的数据pipe理系统,我可以保证安装的简易性(安装,运行,使用它)和速度。 只要你仔细考虑指数,就可以绝对的尖叫。

我认为,由于Cassandra与Twitter这样的大型项目的使用,Cassandra具有更好的扩展function,尽pipeMongoDB团队正在努力实现平价。 我应该指出,在试运行阶段之外我还没有使用Cassandra,所以我不能说详细的内容。

当我们评估NoSQL数据库的时候,真正让我感到震惊的是,Cassandra基本上只是一个巨大的关键/价值存储区,查询有点烦(至less与MongoDB相比),所以对于性能,你必须重复相当多的数据作为一种手动索引。 另一方面,MongoDB使用“按实例查询”模型。

例如,假设你有一个包含用户的Collection(MongoDB与RDMS表的等价物)。 MongoDB将logging存储为文档,基本上是二进制JSON对象。 例如:

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

如果您想查找所有具有pipe理员权限的Smith用户,则只需创build一个新文档(在使用Javascript的pipe理控制台上,或者在使用您所选语言的生产环境中):

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

…然后运行查询。 而已。 有添加运算符进行比较,正则expression式过滤等,但它非常简单,基于Wiki的文档相当不错。

为什么select传统数据库和NoSQL数据存储? 同时使用! NoSQL解决scheme(超出最初的学习曲线)的问题是缺less事务处理 – 您对MySQL进行所有更新,并让MySQL为NoSQL填充NoSQL数据存储区,然后您将受益于每种技术的优势。 这确实增加了更多的复杂性,但是你已经有了MySQL的一面 – 只需要添加MongoDB,Cassandra等等。

NoSQL的数据存储通常比传统的数据库更好地规模,否则规格相同 – Facebook,Twitter,Google和大多数初创公司都使用NoSQL解决scheme是有原因的。 新技术不仅仅是个怪人。

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

Web工程师在尝试使用更多的NoSQL时有一个共同的窍门,那就是一旦实现,并不是使用RDBMS的所有特性。 这本身并不是一个好的理由,因为大多数时候NoSQL数据库都有相当差的数据引擎(MySQL称之为存储引擎)。

现在,如果你不是那种types,那么请指定在MySQL中缺less的东西 ,并且你正在寻找另一个数据库(比如自动分片,自动故障转移,多主复制,数据一致性较弱的保证以更高的写入吞吐量支付群集等)。

我没有使用Cassandra,但我已经使用了MongoDB,并认为它很棒。

如果你经过简单的设置,就是这样。 你只需解开MongoDB并运行mongod守护进程就可以了。

显然,这只是一个开始,但让你开始很容易。

我昨天在mongodb上看了一个演示。 我可以肯定地说,设置是“简单的”,就像解压缩和启动它一样简单。 完成。

我相信mongodb和cassandra几乎可以在任何常规的linux硬件上运行,所以你不应该在这个领域find太多的障碍。

我认为在这种情况下,在一天结束的时候,你会觉得自己更喜欢哪个,哪个更喜欢哪个工具。 至于mongodb上的演示文稿,主持人指出mongodb的工具集非常轻巧,并且有许多类似于MySQL可用的工具。 这当然是他们的经验,所以YMMV。 我喜欢MongoDB的一件事是似乎有很多语言支持(Python和.NET是我主要使用的两种语言)。

使用MongoDB的网站列表非常令人印象深刻 ,我知道Twitter只是转向使用cassandra。