RethinkDB 实用介绍

发布日期:2026-07-13 10:16:03   来源 : 杭州电子商务研究院    浏览量 :18
杭州电子商务研究院 发布日期:2026-07-13 10:16:03  
18

概括

在本教程中,我们将介绍如何使用基于文档的 NoSQL 数据库RethinkDB 。本指南涵盖从 RethinKDB 安装到在Node.js中开发一个简单的应用程序以展示数据库的实时功能。

RethinkDB 介绍

RethinkDB 是一个开源数据库,与传统数据库系统不同,它以 JSON(JavaScript 对象表示法)格式存储信息。因此,它被视为 NoSQL(非 SQL)数据库,例如 MongoDB、Cassandra 和 CouchDB。

NoSQL 数据库具有以下共同特点:

  • 不需要用于存储信息的模式或表结构。
  • 分布式架构,易于水平扩展(以集群形式)
  • 通常偏离事务的 ACID 模型(原子性、一致性、隔离性、持久性)。而是遵循 CAP 定理,该定理指出分布式系统不能同时提供以下保证:
    • 一致性(系统所有客户端都可以读取相同的数据)
    • 可用性(即使发生故障,客户端也会收到响应)
    • 分区容忍度(即使在网络故障的情况下,系统仍继续运行)

许多 NoSQL 数据库牺牲一致性以换取可用性和分区容错性,从而提供最终一致性的概念,即集群中某一部分收到的更改最终会复制到其余部分。其他 NoSQL 数据库不介意牺牲可用性或分区容错性以优先考虑一致性。

对于 RethinkDB,它选择在网络分区的情况下保持数据一致性(超过可用性)。这意味着在写入操作之后,读取操作将始终返回最新版本的数据。

为了实现这一点,在 RethinkDB 中,数据被分配给主服务器(或称为分片的单个分区),并且所有查询都路由到它。这是默认行为,但如果数据被复制到集群内的其他节点,我们可以指示查询返回过时的信息是可以接受的。因此,RethinkDB 可以将查询定向到最近的可用副本,而不一定定向到主服务器。

除此之外,RethinkDB 还具有以下独特功能:

  • 它很容易在具有复制和分片(将表拆分到多台机器的过程)的集群中使用和配置。
  • 它具有强大的查询语言 ReQL,甚至支持连接表(在传统数据库系统中很常见)。
  • 它还可以执行 map-reduce 和地理空间查询。
  • 它允许我们通过发布表发生的变化来轻松构建实时应用程序。这也许是 RethinkDB 最重要和最受欢迎的功能。

现在您已经了解了 RethinkDB 的全部内容,让我们来安装它。

安装 RethinkDB

基本上,你有三个选项可以开始使用 RethinkDB:

      docker run -P --name rethink-server -d rethinkdb
    

Docker 将自动下载镜像并启动实例。

  • 使用官方安装程序包。RethinkDB 有适用于 Linux、OS X 和 Windows 的安装程序。对于 Linux,有适用于 Ubuntu、CentOS 和 Debian 的官方软件包,但您可以找到适用于其他发行版的社区软件包。例如,在 Ubuntu 中输入以下命令:
      source /etc/lsb-release && echo "deb http://download.rethinkdb.com/apt $DISTRIB_CODENAME main" | sudo tee /etc/apt/sources.list.d/rethinkdb.list
wget -qO- https://download.rethinkdb.com/apt/pubkey.gpg | sudo apt-key add -
sudo apt-get update
sudo apt-get install rethinkdb
    

第一行将从文件/etc/lsb-release中导出变量。其中之一是$DISTRIB_CODENAME,它包含您正在运行的 Ubuntu 版本,它用于构建存储库 URL 并使用tee命令保存它。第二行下载用于签署 RethinkDB 软件包的 PGP 密钥并将其添加到您的系统中。第三个命令更新软件包列表,最后一个命令下载并安装数据库。

如果你使用的是 OS X 10.9 (Mavericks) 或更高版本,也许最简单的方法是使用 Homebrew,它是 OS X 的流行包管理器:

      brew update && brew install rethinkdb
    
  • 从源代码构建。仅当先前的选项不可用,或者您想要以某种方式自定义数据库,或者您想要同时运行多个版本的 RethinkDB 时才使用此选项。要从源代码构建,您需要安装一堆依赖项,下载并提取源 tarball(或从Github克隆它)并根据您的平台构建它。在此处查找更多信息

遵循任何一种方法都可以成功安装 RethinkDB。要启动数据库实例,只需执行以下命令:

      rethinkdb
    

此命令将:

  • 创建一个目录来在用户目录中存储数据(例如/home/user/rethinkdb_data )
  • 开始监听 28015 端口上的客户端连接
  • 开始在端口 29015 上监听集群连接
  • 在端口 8080 上启动 Web 管理界面

默认情况下,此服务器将仅侦听本地连接,这意味着其他计算机上的客户端将无法访问数据库(出于安全目的)。如果您想要全局访问,可以使用以下选项绑定到所有 IP:

      rethinkdb --bind all
    

如果要启动第二个实例在单机上创建集群,请执行以下命令:

      rethinkdb --port-offset 1 --directory rethinkdb_data2 --join localhost:29015
    

这将在端口 28016 上创建另一个实例(--port-offset 1),使用/home/user/rethinkdb_data2作为其数据目录,并连接到第一个实例以创建集群(--join localhost:29015)。

如果您使用两台机器,请在其中一台机器上使用以下命令启动 RethinkDB:

      rethinkdb --bind all
    

然后,假设第一台机器的 IP 是192.168.0.1,使用以下命令在另一台机器上启动第二个实例:

      rethinkdb --join 192.168.0.1:29015 --bind all //Change the IP accordingly
    

要查看命令行上可以使用的选项的完整列表,请输入rethinkdb --help或阅读此页面

如果你想将 RethinkDB 作为服务运行,你必须创建一个配置文件来设置初始化选项,并在 Linux 中使用init.dsystemd ,或在 OS X 中使用 launchd(如果使用 Homebrew 进行安装,这已经为你完成了)。你可以参考此页面了解更多信息。

RethinkDB管理界面

现在数据库正在运行,我们可以转到 https://localhost:8080 (或您的实例绑定的任何 IP)来访问 RethinkDB Web 界面:

如果我们点击页面顶部的“表”选项,我们将看到我们服务器上的数据库和表:

由于这是一个新实例,我们还没有任何数据库,因此让我们通过单击+ 添加数据库按钮并输入名称myDb来添加一个数据库,然后通过单击+ 添加表按钮并输入名称myTable来添加一个表:

如果我们点击页面顶部的数据资源管理器部分,Web 界面将显示一个交互式 shell,您可以在其中发出命令,例如,查询刚刚创建的表:

      r.db("myDb").table("myTable")
    

我们甚至可以获得语法自动完成和上下文帮助。

如果您更喜欢使用命令行,有两个出色的项目可以为 RethinkDB 提供命令行界面 (CLI)。它们都是使用 JavaScript 和 Node.js 编写的,因此您需要安装node.jsnpm(Node 包管理器)。

第一个是recli,它既可以将 ReQL 表达式作为参数,也可以用作 REPL(读取 – 求值 – 打印循环,或者换句话说,交互式 shell):

      $ recli 'r.db("myDb").table("myTable")'
... (JSON output) ...

$ recli
recli> r.db("myDb").table("myTable")
... (JSON output) ...
    

它使用配置文件并记住您在 REPL 会话之间运行的命令。

第二个是ReQL CLI,它仅作为 REPL 工作,但有一些有用的内置命令:

      $ .reql-cli
- RethinkDB Command Line Interface v1.0.0
- Courtesy of Workshape.io
reql-cli> help
[-] Available commands:
  - dbs - print available databases
  - db {db} - change current db to {db}
  - tables - print available tables in current db
  - r... - any rethink valid query, omitting run()

  - press ctrl + c to quit
reql-cli>
    

现在您知道如何执行查询,让我们进一步了解此 ReQL 语言。

ReQL 查询语言

与传统数据库一样,RethinkDB 也适用于表。但它不适用于记录,而是适用于文档,文档是用 JSON 编写的对象,例如以下示例:

      {
    "name": "Andrew",
	"age": 27
}
    

如您所见,文档以花括号开始和结束,其键和值以冒号分隔,而键/值对以逗号分隔。

键是字符串。除空字符 ( \0 ) 和保留字符.$之外的任何 Unicode 字符。值可以是以下类型:

  • 数字(任何实数)
  • <font style="vertical-align:
以上内容来自杭州电子商务研究院推送
关注
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据