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是一个专门为实时应用而设计的数据库。通过使用变更提要,开发人员可以有效地对数据库进行编程,以便实时地将最新的数据提要推送到应用程序中。这种“更改提要”功能克服了轮询的局限性,因为数据库在响应用户查询时减少了时间和复杂性,并可以实时支持Web应用程序。
可伸缩性:RethinkDB为用户提供了高灵活性和改进的存储空间。服务器的处理能力可以通过向集群添加更多的服务器来实现实时扩展。
强大的ReQL——一种查询语言:ReQL是一种数据驱动、抽象和高级语言来构建应用程序。它被设计成一个成熟的API来改变和组合各种各样的查询。发送到服务器的所有查询都是在数据库服务器上自动并行的,并在多个数据中心之间进行分割。
开发人员友好:RethinkDB非常适合开发人员,并且将简单的语言和简单的控件结合在一起。通过RethinkDB,开发人员可以构建实时应用程序,因为与用户响应的交互速度更快。
面向文档的结构:它是一个从头构建的文档数据库。对于开发人员来说,在数据库中处理某些对象可能会非常麻烦,因为诸如数据映射之类的问题可能会出现。通过RethinkDB,这些问题通过用一种更灵活的模型来代替行概念来解决,因为文档是对象。
分布式连接:大多数NoSQL数据库不支持联结,因为后者不在数据模型功能下,而是作为数据访问的函数。RethinkDB完全支持连接,并自动将它们编译成分布式程序,在集群中执行它们,而不需要客户进行任何手动干预。
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命令
几何数据类型
点
行
多边形
评论删除后,数据将无法恢复
评论(4)