RethinkDB比传统数据库更快,并且可以实时工作。它是一个开源的、分布式的、面向文档的数据库,旨在以可操作的格式存储JSON文档,并且可以分割和复制。
传统的数据库管理系统具有类似的结构,共享传统的插入、删除、更改和查询信息的方法。但是,基于NoSQL的数据库为开发人员提供了各种选项来满足特定的数据存储要求。的新可扩展性彻底改变了这些数据库,尽管大多数NoSQL系统仍然依赖于创建特定的结构来以统一的方式组织和记录数据。基于NoSQL的系统访问模型在读取信息、添加数据记录和获取信息时不适合现代Web应用。相反,用户只能通过指定一些重要的值来查询数据库。
RethinkDB采用了一种全新的方式来创建数据库结构以及存储和检索信息的技术。RethinkDB是一个实时、开源、分布式、面向文档的数据库,旨在以可操作的格式存储JSON数据,并对其进行分片和复制。它将JSON数据实时推送到服务器,彻底重新定义了实时web应用开发。它实现了一种专有的基于函数的查询语言ReQL,以与其非模态JSON数据集合进行交互。就像MongoDB一样,RethinkDB中的文档是分层的、动态的和非模态的对象。
RethinkDB采用了基于Oracle二叉树文件系统(BTFRS)的定制存储引擎,承诺有很多明显的优势,比如CPU开销更少、SSD优化、掉电恢复、MVCC支持和高效多核操作、故障时数据一致性等。
RethinkDB架构
RethinkDB由不同的组件组成,如集群、查询执行引擎、文件系统存储、推改和RethinkDB客户端驱动。
客户端驱动:RethinkDB为各种流行的编程语言提供客户端驱动,如Ruby、Python、Java等。查询引擎:这个数据库有一个高级的查询处理器来执行各种查询并将结果返回给用户。它基于各种操作执行查询,例如索引、排序、集群搜索和数据整合。集群:因为RethinkDB是一个分布式数据库,整个分布是——碎片或者由集群管理的复制。将更改推送到RethinkDB客户端:这是RethinkDB中最重要的概念。RethinkDB不会通过轮询来检查数据库中的更改,而是将旧值和新值的更改推送到连接的客户端。实时连接到数据库服务器的客户端可以看到服务器上的实时变化。查询执行:RethinkDB可能是执行各种复杂计算和内部逻辑操作的最佳方式。为了处理查询,RethinkDB将查询分成堆栈。每个堆栈包含各种方法和内部逻辑来执行操作。为了优化查询响应,堆栈被转移到相关的服务器,每个服务器并行执行评估。然后,组合查询以获得结果集,并将其发送回客户端。为了提供高性能和并发性,RethinkDB使用多版本并发控制(MVCC)。这样,每个用户都可以看到数据的快照。如果主拷贝有任何更改,则在提交主拷贝之前,不会更新子拷贝或快照拷贝。
重新思考数据库中的分区过程
RethinkDB使用一种高级算法来执行切片操作。分区是在表的主键上完成的,用于数据分区,不使用任何其他键。在RethinkDB中,主键和片段键是相同的。
碎片化过程可以通过两种方式进行。
垂直分区:用户将数据存储在不同的表中,并在不同的数据库中使用不同的文档。水平分区:动态算法(即基于计算,利用范围分片算法确定表的断点,将数据存储在不同的分区中)。
RethinkDB的特点
变化总结:RethinkDB是一个专门为实时应用而设计的数据库。通过使用变更馈送,开发人员可以有效地对数据库进行编程,以便将最新的数据馈送实时推送到应用程序。这种“更改提要”功能克服了轮询的限制,因为数据库减少了响应用户查询时的时间和复杂性,并且可以实时支持Web应用程序。可扩展性:RethinkDB为用户提供了高灵活性和改进的存储空间。通过向集群中添加更多服务器,可以实时扩展服务器的处理能力。强大的ReQL—— A查询语言:ReQL是一种用于构建应用程序的数据驱动、抽象和高级语言。它被设计成一个成熟的应用编程接口来改变和组合各种查询。发送到服务器的所有查询都会在数据库服务器上自动并行化,并在多个数据中心之间进行划分。开发者友好:RethinkDB非常适合开发者,将简单的语言和简单的控件结合在一起。使用RethinkDB,开发人员可以构建实时应用程序,因为与用户响应的交互更快。面向文档的结构:它是从头开始构建的文档数据库。对于开发人员来说,处理数据库中的一些对象可能会非常麻烦,因为可能会出现数据映射等问题。通过RethinkDB,这些问题通过用更灵活的模型替换线的概念来解决,因为文档是对象。分布式连接:大多数NoSQL数据库不支持连接,因为后者不是数据模型的功能,而是数据访问的功能。完全重新思考数据库
支持连接,并自动将它们编译成分布式程序,在集群中执行它们,而不需要客户进行任何手动干预。
ReQL介绍
ReQL(RethinkDB查询语言)被认为是一种功能强大的查询语言,用于在JSON文档上执行各种操作。与其他NoSQL查询语言相比,ReQL提供了强大的功能,并建立在以下三个关键原则之上。
嵌入到编程语言中:所有的查询都是通过在编程语言中使用函数调用来开发的。对于数据库查询,绝对没有必要连接字符串或构造专门的JSON对象。所有的查询都是可链的:用户可以从一个表开始,并使用“.”来增加链转换器直到查询操作结束。查询在服务器上执行:查询是由客户端在各自的机器上进行的,但是一旦用户按下Run命令,查询就会通过主动网络连接通过客户端机器传递给服务器,并且在数据库上执行整个查询。
ReQL的特性
效率:与其他数据库系统一样,ReQL支持各种主要和次要索引,以便有效地访问数据。用户可以在任意的ReQL表达式的基础上创建复合索引,以加快查询过程。并行查询执行:每个用户查询都分布在CPU、服务器集群或多个数据中心的不同核心。RethinkDB和ReQL将查询分为几个阶段,并并行执行每个阶段;完成查询之后,所有数据集都被组合起来,从而为用户提供最终结果。查询优化:ReQL作为一个查询优化器足够强大,可以维护链和备选执行计划,以提高数据库的整体性能。其他特性:ReQL构建任意复杂度的查询,没有用于执行复杂查询的新类型的语法或命令,在创建子查询和处理用户响应时允许模块化编程。
数据类型
ReQL数据类型可以分类如下:
基本数据类型RethinkDB特定的数据类型抽象数据类型几何数据类型
基本数据类型
数字:任何实数,比如89、4。561、-76,等等字符串:任何有效的UTF-8字符串,如“alphabet”布尔值:True / false对象:JSON数据对象数组:类似数据类型的元素,比如[1 2 3],[red orange mango]
特定的数据类型
数据库:RethinkDB数据库表:RethinkDB数据库表流:这些列表数据类型,如数组Selections:表的子集伪类型:不同类型的ReQL-特有数据类型,它们通常是复合的,或者是其他类型的特殊情况,比如二进制对象、时间、几何数据类型、分组数据
抽象数据类型
基准:用于大多数非流数据类型,包括基本数据类型、伪类型、对象和非流选择序列:这些列表数据类型,如数组、流、Selections和表函数:这些都作为参数传递给各种ReQL命令
几何数据类型
RethinkDB vs. MongoDB
对于那些构建实时应用程序的开发人员来说,RethinkDB被认为是一个不错的选择。当用户发出请求时,应用程序需要以接近瞬时的速度作出响应。与MongoDB一样,RethinkDB是一种快速灵活的基于JSON的数据库管理系统。
RethinkDB,毫无疑问,是一个很好的数据库引擎,但它在管理和开发方面有一定的局限性。因此,当涉及到与MongoDB相比时RethinkDB的整体评级,后者在几个方面更优(见表2)。
本文由:雪落无痕xdj, lnovonl, Tocy协助翻译,本文中的所有译文仅用于学习和交流目的,如果有侵犯到您的权益,请及时联系我们。