MongoDB相对于Cassandra的优势
MongoDB相对于Cassandra的优势
关闭。此问题正在寻求书籍、工具、软件库等方面的推荐。它不符合Stack Overflow指南。它目前不接受答案。
我们不允许寻求书籍、工具、软件库等方面的推荐。您可以编辑问题,使其可以用事实和引用回答。
改善这个问题
我正在评估哪种是最佳迁移选项。
目前,我正在使用分片的MySQL(水平分区),大部分数据存储在JSON Blob中。我没有任何复杂的SQL查询(自从我分区数据库后已经迁移)。
现在,似乎MongoDB和Cassandra都是可能的选项。我的情况:
- 每个查询都有大量读取,不规则写入
- 不担心“大规模”可伸缩性
- 更关注简单的设置、维护和代码
- 尽量减少硬件/服务器成本
我在过去六个月中广泛使用了MongoDB,构建了一个分层数据管理系统,我可以证明它的安装设置非常容易(安装、运行、使用!)并且速度非常快。只要你仔细考虑索引,它的速度就可以绝对快。
我了解到,Cassandra由于在大型项目(如Twitter)中的使用,具有更好的可扩展功能,尽管MongoDB团队正在努力实现与之相同的功能。我应该指出,我除了试用阶段还没有使用过Cassandra,因此无法对其细节发表评论。
对我而言,当我们评估NoSQL数据库时,真正重要的是查询-Cassandra基本上只是一个巨大的键/值存储,查询有些棘手(至少与MongoDB相比),因此为了提高性能,您必须手动复制相当数量的数据作为一种手动索引。另一方面,MongoDB使用了一个“按示例查询”的模型。
例如,假设您有一个包含用户的集合(MongoDB用语等同于RDMS表),MongoDB将记录存储为文档,这些文档基本上是二进制JSON对象。例如:
{ FirstName: "John", LastName: "Smith", Email: "john@smith.com", Groups: ["Admin", "User", "SuperUser"] }
如果您想查找所有称为Smith且具有管理权的用户,您只需要创建一个新文档(在管理控制台使用Javascript或在生产中使用您选择的语言):
{ LastName: "Smith", Groups: "Admin" }
然后运行查询。就是这样。还有添加的运算符可供比较,RegEx过滤等,但都很简单,基于维基的文档非常好。
每个查询中都有大量读取,但写入较少
如果热数据集适合于内存,则两个数据库在读取方面表现良好。它们都强调不需联接的数据模型(鼓励去规范化),并且都提供文档或行的索引,尽管 MongoDB 的索引目前更加灵活。
无论数据集有多大,Cassandra 的存储引擎都提供恒定时间的写入。在 MongoDB 中,写入更具问题性,部分原因在于基于 B 树的存储引擎,但更多原因在于它所执行的多级封锁。
对于分析,MongoDB 提供了自定义的映射/归约实现;Cassandra 提供原生 Hadoop 支持,包括Hive(构建在 Hadoop 映射/归约上的 SQL 数据仓库)和Pig(Hadoop 特定的分析语言,许多人认为它更适合于映射/归约负载比 SQL)。Cassandra 还支持Spark的使用。
不担心“大规模”扩展性
如果您考虑的是单个服务器,则 MongoDB 可能更适合。对于那些更关注扩展性的人而言,Cassandra 的无单点故障架构将更易于设置并更可靠。(MongoDB 的全局写锁也越来越痛苦。)Cassandra 还提供了更多控制副本工作方式的功能,包括支持多个数据中心。
更关注简单设置、维护和代码
对于单个服务器,它们都很容易设置,并且具有合理的开箱即用默认值。在多服务器配置中,Cassandra 更容易设置,因为无需担心特殊角色节点。
如果您目前正在使用 JSON BLOB,则 MongoDB 是与您的用例惊人地匹配,因为它使用 BSON 存储数据。您将能够比您现有数据库中拥有更丰富、更可查询的数据。这将是 Mongo 的最显著胜利。