[译]RethinkDB compared to MongoDB

[译]RethinkDB compared to MongoDB
最新回答
选择奔跑

2021-03-06 00:16:03

RethinkDB 与 MongoDB 的比较

许多人会询问 RethinkDB 与 MongoDB 以及其他 NoSQL 数据库之间的差异。为了回答这个问题,我们首先尝试通过高层面的技术概览来比较 RethinkDB 和 MongoDB。但请注意,概览意味着中立,因此可能会忽略一些使 RethinkDB 与众不同的有趣特性。在本文中,我将从更个人化的角度来描述这两个产品。

两全其美的设计

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

  • 面向开发者的产品,如 MongoDB 和 CouchDB,通常注重易用性,拥有富文档结构以及灵活的查询功能。然而,与面向运维的 NoSQL 产品相比,将它们部署到分片环境和承载大规模负载时,难度会更大。

  • 面向运维的产品,如 Cassandra 和 Riak,则是为了高可用部署和大规模应用而设计的。与面向开发者的产品不同,这些产品通常较少具备强大的查询功能,也不太关注易用性。

得益于前人的经验和三年的技术积累,RethinkDB 旨在融合这两者的理念,提供一个两全其美的产品。它被设计成非常易用,拥有丰富的数据模型,并支持极其灵活的查询功能。通过简单的几步操作,就能将 RethinkDB 的节点进行分片。

提高标准

RethinkDB 还致力于延伸 NoSQL 系统的可能性。它添加了现代查询语言、大规模并行分布式架构,支持分布式 join 和 subqueries,并提供了一个既简单又美观的管理工具。以下是我们的早期用户认为 RethinkDB 表现出色的几个理由。

现代查询语言

  • RethinkDB 拥有最好的查询语言 ReQL。ReQL 是一个数据驱动的、抽象的、多态查询语言,它很容易学习并且极其灵活。
  • ReQL 为主流编程语言(如 Python、Ruby、Java 和 JavaScript)提供了定制的、高度集成的 DSL(领域特定语言)。
  • 与大多数 NoSQL 系统不同,RethinkDB 支持服务端 subqueries 和分布式 join 操作,这消除了复杂的客户端代码和多个数据库服务器的往返通信。
  • ReQL 并不基于字符串解析,因此被注入攻击的风险大大降低。

当然,ReQL 仍在不断完善中,我们还在持续为其添加更多的功能和操作。

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

RethinkDB 的管理界面不仅功能强大,而且设计美观。

  • 通过简单的几步点击,就能完成分片和复制操作。
  • 所有的集群操作都可以用 ReQL 脚本来实现。
  • 内置的数据资源管理器提供了在线文档和查询建议。

很多产品都注重易用性,但我们认为 RethinkDB 是其中最美观的之一。

大规模并行分布式架构

RethinkDB 的大规模并行分布式架构使其在处理大数据时表现出色。

  • 所有的查询,包括 join、aggregation、subqueries,都会自动编译成分布式程序并在集群中执行,用户无需进行额外配置。
  • 数据密集型操作会自动编译成 map-reduce 作业,以充分利用分布式结构。
  • 集群协议是对等的,不需要协调节点,这使得集群非常容易设置和操作。

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

鲁棒实现

RethinkDB 的鲁棒实现使其在各种场景下都能保持稳定和高效。

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

局限性

虽然 RethinkDB 在很多项目上都能很好地工作,但它并不是万能的。在选择数据库时,请务必阅读相关文档,了解 RethinkDB 的适用场景和局限性。

总的来说,RethinkDB 与 MongoDB 各有千秋。RethinkDB 在易用性、查询灵活性、分布式架构以及管理后台等方面表现出色,而 MongoDB 也有其独特的优势和适用场景。在选择数据库时,请根据自己的具体需求和场景进行权衡和选择。