RethinkDB 实用介绍
概括
在本教程中,我们将介绍如何使用基于文档的 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。Docker Hub 上有一个官方的 RethinkDB 存储库。如果您拥有 Docker 1.11.2 或更高版本,只需执行以下命令:
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管理界面
现在数据库正在运行,我们可以转到 https://localhost:8080 (或您的实例绑定的任何 IP)来访问 RethinkDB Web 界面:
如果我们点击页面顶部的“表”选项,我们将看到我们服务器上的数据库和表:
由于这是一个新实例,我们还没有任何数据库,因此让我们通过单击+ 添加数据库按钮并输入名称myDb来添加一个数据库,然后通过单击+ 添加表按钮并输入名称myTable来添加一个表:
如果我们点击页面顶部的数据资源管理器部分,Web 界面将显示一个交互式 shell,您可以在其中发出命令,例如,查询刚刚创建的表:
r.db("myDb").table("myTable")
我们甚至可以获得语法自动完成和上下文帮助。
如果您更喜欢使用命令行,有两个出色的项目可以为 RethinkDB 提供命令行界面 (CLI)。它们都是使用 JavaScript 和 Node.js 编写的,因此您需要安装node.js和npm(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:
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~