我正在评估什么是最好的迁移选项。
目前,我在分片的MySQL(水平分区)上,我的大部分数据存储在JSON Blob中。我没有任何复杂的SQL查询(自从对数据库进行分区以来,已经迁移了)。
现在,似乎MongoDB和Cassandra都是可能的选择。我的情况:
- 每个查询中的读取次数很多,常规写入的次数更少
- 不担心“大规模”的可扩展性
- 更关注简单的设置,维护和代码
- 最小化硬件/服务器成本
我正在评估什么是最好的迁移选项。
目前,我在分片的MySQL(水平分区)上,我的大部分数据存储在JSON Blob中。我没有任何复杂的SQL查询(自从对数据库进行分区以来,已经迁移了)。
现在,似乎MongoDB和Cassandra都是可能的选择。我的情况:
Answers:
每个查询中的读取次数很多,常规写入的次数更少
在热数据集适合内存的情况下,两个数据库在读取时均表现良好。两者都强调无连接数据模型(并鼓励使用非规范化),并且都提供文档或行的索引,尽管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最重要的胜利。
我已经在过去6个月中广泛使用了MongoDB,构建了分层数据管理系统,并且我可以保证设置的简便性(安装,运行,使用!)和速度。只要您仔细考虑索引,它绝对可以在速度方面尖叫。
我认为,由于MonsDB团队正在那里进行奇偶校验,尽管Cassandra用于Twitter等大型项目,但具有更好的扩展功能。我应该指出,在试运行阶段我没有使用过Cassandra,因此我无法透露细节。
在评估NoSQL数据库时,对我来说真正的摇摆人是查询-Cassandra基本上只是一个巨大的键/值存储,而查询有点古怪(至少与MongoDB相比),因此为了性能,您必须复制大量数据作为一种手动索引。另一方面,MongoDB使用“示例查询”模型。
例如,假设您有一个包含用户的集合(MongoDB相当于RDMS表)。MongoDB将记录存储为文档,基本上是二进制JSON对象。例如:
{
FirstName: "John",
LastName: "Smith",
Email: "john@smith.com",
Groups: ["Admin", "User", "SuperUser"]
}
如果要查找所有具有管理员权限的史密斯用户,只需创建一个新文档(在管理控制台中使用Javascript,或在生产中使用您选择的语言):
{
LastName: "Smith",
Groups: "Admin"
}
...然后运行查询。而已。添加了用于比较,RegEx过滤等的运算符,但是它们都非常简单,并且基于Wiki的文档非常好。
As long as you think about indexes carefully, it can absolutely scream along, speed-wise.
等到您的物理内存已满并且操作系统开始页面错误大声笑
为什么要在传统数据库和NoSQL数据存储之间进行选择?同时使用!NoSQL解决方案的问题(超出了最初的学习曲线)是缺少事务-您对MySQL进行所有更新,并让MySQL填充NoSQL数据存储以进行读取-然后,您将从每种技术的优势中受益。这确实增加了更多的复杂性,但是您已经拥有MySQL方面-只需添加MongoDB,Cassandra等即可。
在其他方面相同的情况下,NoSQL数据存储区的扩展方式通常比传统DB更好,这是有原因的,原因是Facebook,Twitter,Google和大多数初创企业都使用NoSQL解决方案。不仅仅是极客们对新技术的重视。
我可能会变得很奇怪,但是我认为您需要继续使用MySQL。您尚未描述需要解决的实际问题,即使对于blob / json数据,MySQL / InnoDB还是一个出色的存储后端。
一旦意识到没有使用RDBMS的所有功能,Web工程师通常会尝试使用更多的NoSQL。仅仅这不是一个好理由,因为大多数NoSQL数据库通常具有相当差的数据引擎(MySQL称为存储引擎)。
现在,如果您不是那种人,请指定MySQL 缺少的内容,然后在其他数据库中寻找(例如,自动分片,自动故障转移,多主复制,较弱的数据一致性保证)。集群以更高的写入吞吐量获得回报等)。
昨天我在mongodb上看到了一个演示文稿。我可以肯定地说安装是“简单的”,就像拆包然后启动一样简单。做完了
我相信mongodb和cassandra都可以在几乎所有常规linux硬件上运行,因此您在该领域应该不会遇到太多障碍。
我认为,在这种情况下,归根结底,这取决于您个人感觉更舒适,以及拥有更喜欢的工具集。就在mongodb上的演示而言,演示者指出mongodb的工具集非常轻巧,并且没有很多(他们说的真的)类似于MySQL的工具。当然,这就是他们的经验,所以YMMV。我对mongodb感兴趣的一件事是它似乎有很多语言支持(Python和.NET是我主要使用的两种语言)。
使用mongodb的网站列表令人印象深刻,而且我知道twitter刚切换到使用cassandra。