RethinkDB compared to MongoDB

原文:RethinkDB compared to MongoDB

许多人会问 RethinkDB 与 MongoDB 以及其他 NoSQL 数据库有什么不同。我们首先尝试通过在高层面的技术概览比较 RethinkDB 和 MongoDB 来回答这个问题。但是,概览意味着中立,就必然会忽略一些使 RethinkDB 与众不同的有趣的事情(就比如我们对 Dota 的痴迷)。在本文中,我想站在更加私人的角度来描述这个产品。

两全其美

第一代 NoSQL 产品大致可以分成两类——面向开发者的和面向运维的。

面向开发者的产品包括 MongoDB 和 CouchDB。他们通常关注易用性,拥有富文档结构,以及灵活的查询功能。然而,当与他们的同行(面向运维的NoSQL)相比时,将他们部署到分片环境和规模大的负载要更加困难。

面向运维的产品包括 Cassandra 和 Riak 。这些产品是为了高可用部署和大规模而设计的。不像面向开发者的产品,以目前的形式面向运维的产品通常较少有强大的查询功能,也不会太关注易用性。

得益于前车之鉴以及三年的技术工作,RethinkDB 旨在融合两者的理念,提供一个两全其美的产品。它被设计成非常易用,拥有丰富的数据模型,并且支持及其灵活的查询功能。通过几下点击就能将 RethinkDB 的节点进行分片。

提高标准

我们还致力于怎样延伸 NoSQL 系统的可能性。RethinkDB 添加了现代查询语言,大规模并行分布式架构,支持分布式 join 和 subqueries,还提供了一个既简单又漂亮的管理工具,下边是我们的早期用户觉得 RethinkDB 亦可赛艇的一些理由。

现代查询语言

在所有我见过的新型数据库中, RethinkDB 拥有最好的查询语言 @rauchg

ReQL 是一个数据驱动的,抽象的,多态查询语言。它很容易学习并且极其灵活。
为主流编程语言(目前有 Python,Ruby,Java 和 JavaScript)提供了定制的、高度集成的 DSL。 不同于大多数的 NoSQL 系统,RethinkDB 支持服务端 subqueries 和分布式 join 操作,这消除了复杂的客户端代码和多个数据库服务器的往返。 ReQL 并不基于字符串解析,所以被注入攻击的风险大大降低。
这并不是说 ReQL 已经完美了,我们还在不断给它添加更多的功能和操作。

管理后台:简单与美貌并存

WOW,RethinkDB 的管理界面简直不可思议。很容易就能安装到 OSX 上。大家快来看看。@mjackson

几下点击就能完成分片和复制。 所有的集群操作都可以用 ReQL 脚本化。 内置数据资源管理器提供了在线文档和查询建议。 很多产品都很易用,但我们认为 RethinkDB 是其中最漂亮的。

大规模并行分布式架构

WOW 跨分片 join,分布是数据不是梦 。@kapso
所有的查询,包括 join、aggregation、subqueries,都会自动编译成分布式程序并且跨级群执行,用户不费吹灰之力。 数据密集型操作自动编译成 map-reduce 作业来充分利用分布式结构。 集群协议是对等的,不需要细条节点。这使得集群非常容易设置和操作。

当然,我们一直都在提高性能,一直致力于消除更多的性能和可扩展性瓶颈。

鲁棒实现

RethinkDB 看起来像是做对了的 MongoDB:MVCC,非阻塞写入,默认的稳定性,v8,增量 vacuum,容易分片。@herodiade

一个无锁的架构和多版本并发控制系统允许不同的工作负载在一个集群中共存。 一个自定义的,B-Tree aware buffer cache 中有效地操作数据集要远远大于可用 RAM 的数量。 一个异步的、事件驱动架构,基于高度优化的协同程序代码尺度跨越多个核和处理器、网卡、和存储系统。 一个并发的自定义日志结构化存储引擎,增量磁盘上垃圾压实机利用不同类型的存储硬件。

局限性

RethinkDB 在很多项目上都可以工作的很好,但并不是银弹。选型时请阅读 什么时候 RethinkDB 不是一个好的选择

yofineliu

Read more posts by this author.