我正在评估什么可能是最好的迁移选项。
目前,我在一个分片 MySQL(水平分区)上,我的大部分数据都存储在 JSON blob 中。我没有任何复杂的 SQL 查询(自从我对我的数据库进行分区后就已经迁移走了)。
现在,似乎 MongoDB 和 Cassandra 都是可能的选择。我的情况:
每个查询中的大量读取,更少的常规写入
两个数据库在热数据集适合内存的读取方面表现良好。两者都强调无连接数据模型(并鼓励非规范化),并且都提供文档或行的索引,尽管 MongoDB 的索引目前更加灵活。
无论您的数据集增长多大,Cassandra 的存储引擎都提供恒定时间的写入。在 MongoDB 中写入更成问题,部分原因是基于 b-tree 的存储引擎,但更多是因为它的多粒度锁定。
对于分析,MongoDB 提供了自定义的 map/reduce 实现;Cassandra 提供原生 Hadoop 支持,包括对Hive(基于 Hadoop map/reduce 构建的 SQL 数据仓库)和Pig(一种特定于 Hadoop 的分析语言,许多人认为比 SQL 更适合 map/reduce 工作负载)。Cassandra 还支持使用Spark。
不担心“大规模”可扩展性
如果您正在查看单个服务器,MongoDB 可能更适合。对于那些更关心扩展的人来说,Cassandra 的无单点故障架构将更容易设置和更可靠。(MongoDB 的全局写锁也往往变得更加痛苦。)Cassandra 还可以更好地控制复制的工作方式,包括对多个数据中心的支持。
更关心简单的设置、维护和代码
两者的设置都很简单,单个服务器具有合理的开箱即用默认值。Cassandra 在多服务器配置中设置起来更简单,因为没有需要担心的特殊角色节点。
如果您目前正在使用 JSON blob,那么 MongoDB 非常适合您的用例,因为它使用 BSON 来存储数据。您将能够拥有比现有数据库中更丰富、更可查询的数据。这将是 Mongo 最重要的胜利。