为什么要在传统数据库和NoSQL数据存储之间进行选择?同时使用! NoSQL解决方案的问题(超出最初的学习曲线)是缺少事务 - 您对MySQL进行了所有更新,并让MySQL填充NoSQL数据存储区进行读取 - 然后您将从每项技术的优势中受益。这确实增加了更多的复杂性,但你已经拥有MySQL方面 - 只需添加MongoDB,Cassandra等。
对于相同的规范,NoSQL数据存储通常比传统数据库更好地扩展 - 有一个原因,Facebook,Twitter,谷歌和大多数初创公司都在使用NoSQL解决方案。这不只是极客们对新技术的高度重视。
我没有使用过Cassandra,但是我使用过MongoDB并认为它很棒。
如果您正在进行简单的设置,那么就是这样:您只需解压MongoDB并运行mongod守护程序就可以了......它正在运行。
显然这只是一个首发,但为了让你开始它很容易。
我昨天在mongodb上看过一个演讲。我可以肯定地说,设置是“简单的”,就像打开包装并将其启动一样简单。完成。
我相信mongodb和cassandra几乎可以在任何常规的Linux硬件上运行,所以你不应该在那个领域找到很多障碍。
我想在这种情况下,在一天结束的时候,你会发现自己感觉更舒服,哪个有你喜欢的工具集。至于关于mongodb的演示,主持人表示mongodb的工具集很轻,并且没有很多(他们说的任何真正的)工具类似于可用于MySQL的工具。这当然是他们的体验,所以YMMV。我对mongodb所做的一件事就是它似乎有很多语言支持(Python和.NET是我主要使用的两种语言)。
使用mongodb的网站列表很漂亮 有声有色 ,我知道twitter刚刚切换到使用cassandra。
的 每次查询都有大量读取,常规写入次数较少 强>
两个数据库在热数据集适合内存的读取中表现良好。两者都强调无连接数据模型(并鼓励非规范化),并且都提供索引 文件 要么 行 虽然MongoDB的索引目前更灵活。
无论您的数据集有多大,Cassandra的存储引擎都能提供恒定时间写入。在MongoDB中写入更有问题,部分原因是基于b树的存储引擎,但更多是因为 多粒度锁定 它确实。
对于分析,MongoDB提供自定义map / reduce实现; Cassandra提供本机Hadoop支持,包括for 蜂巢 (基于Hadoop map / reduce构建的SQL数据仓库)和 猪 (一种特定于Hadoop的分析语言,许多人认为它比SQL更适合映射/减少工作负载)。卡桑德拉也支持使用 火花 。
的 不担心“大规模”的可扩展性 强>
如果您正在查看单个服务器,MongoDB可能更适合。对于那些更关心扩展的人来说,Cassandra的无单点故障架构将更容易设置和更可靠。 (MongoDB的全局写锁定也会变得更加痛苦。)Cassandra还可以更好地控制复制的工作方式,包括支持多个数据中心。
的 更关注简单的设置,维护和代码 强>
两者都很容易设置,单个服务器具有合理的开箱即用默认值。由于不需要担心特殊角色节点,因此在多服务器配置中设置Cassandra更加简单。
如果您目前正在使用JSON blob,那么MongoDB对于您的用例非常适合,因为它使用BSON来存储数据。与现有数据库相比,您将能够获得更丰富,更易查询的数据。这将是Mongo最重要的胜利。
我可能会成为一个奇怪的人,但我认为你需要留在MySQL。您还没有描述需要解决的实际问题,即使对于blob / json数据,MySQL / InnoDB也是一个出色的存储后端。
Web实现中有一个常见的伎俩,即一旦实现并未使用RDBMS的所有功能,就会尝试使用更多的NoSQL。仅此一点并不是一个好理由,因为大多数情况下NoSQL数据库的数据引擎相当差(MySQL称之为存储引擎)。
现在,如果你不是那种,请说明是什么 失踪 在MySQL中,您正在寻找不同的数据库(例如,自动分片,自动故障转移,多主复制,群集中较弱的数据一致性保证以及更高的写入吞吐量等)。
我已经广泛使用了MongoDB(过去6个月),构建了一个分层数据管理系统,我可以保证设置的简易性(安装,运行,使用它!)和速度。只要你仔细考虑索引,它就可以绝对地尖叫,速度方面。
我认为Cassandra由于其在Twitter等大型项目中的使用,具有更好的扩展功能,尽管MongoDB团队正在努力实现平价。我应该指出,我没有在试运行阶段之外使用Cassandra,所以我不能说明细节。
当我们评估NoSQL数据库时,真正的摇摆人是查询 - Cassandra基本上只是一个巨大的键/值存储,查询有点繁琐(至少与MongoDB相比),所以对于性能你必须将很多数据复制为一种手动索引。另一方面,MongoDB使用“按示例查询”模型。
例如,假设您有一个包含Users的Collection(MongoDB用于等效于RDMS表的用语)。 MongoDB将记录存储为Documents,它们基本上是二进制JSON对象。例如:
{ FirstName: "John", LastName: "Smith", Email: "john@smith.com", Groups: ["Admin", "User", "SuperUser"] }
如果您想要找到所有名为Smith的用户拥有管理员权限,您只需创建一个新文档(使用Javascript在管理控制台上,或使用您选择的语言在生产中):
{ LastName: "Smith", Groups: "Admin" }
...然后运行查询。而已。增加了比较运算符,RegEx过滤等,但它们都非常简单,基于Wiki的文档非常好。