金钱(警告)
** 状态:** 被贬值
如果您目前正在运行运行 Ubuntu 12.04 的服务器,我们强烈建议升级或迁移到支持的 Ubuntu 版本:
** 原因:** Ubuntu 12.04 已于 2017 年 4 月 28 日到期(EOL)并且不再收到安全补丁或更新。
** 相反,请参阅:** 此指南可能仍然有用作为参考,但可能不会在其他Ubuntu版本上工作. 如果可用,我们强烈建议使用为您正在使用的Ubuntu版本撰写的指南。
介绍
许多应用程序需要一个数据库后端来有效地存储和查询数据,而传统上,关系数据库管理系统是最受欢迎的,非关系模型正在以快速的速度获得吸引力。
一个有趣的非SQL数据库,专注于在编程环境中的易用性是 RethinkDB . RethinkDB是一个易于配置的JSON文档存储数据库,可以轻松扩展。
使 RethinkDB 易于与编程语言使用的一项功能是,它支持强大的客户端驱动程序,这些驱动程序允许您使用您的编程语言熟悉的语法与数据库进行交互。
在本指南中,我们将安装并配置RethinkDB在Ubuntu 12.04 VPS上,我们将使用Python客户端驱动程序与它进行交互,以展示其查询语言如何使用原生或近原生编程构造来访问。
安装
有两个组件需要安装才能充分利用RethinkDB的设计,第一个是数据库本身,第二个是客户端驱动程序,支持从您选择的编程语言中访问数据库。
我们将在这里涵盖这两个组成部分。
安装 RethinkDB 数据库软件
RethinkDB软件不在Ubuntu 12.04的默认存储库中,幸运的是,该项目通过保持自己的PPA(个人包档案)来使其易于安装。
要将PPA添加到Ubuntu 12.04,我们必须先安装python-software properties
包,其中包括我们需要的命令。
1sudo apt-get update
2sudo apt-get install python-software-properties
现在我们已经安装了软件属性包,我们可以添加 RethinkDB 项目的 PPA。
1sudo add-apt-repository ppa:rethinkdb/ppa
现在,我们需要更新我们的包索引来收集有关我们现有的新包的信息,然后我们可以安装RethinkDB软件:
1sudo apt-get update
2sudo apt-get install rethinkdb
我们现在有数据库软件可用,并可以访问其功能。
安装 Python 客户端驱动程序
虽然我们已经安装了数据库本身,但我们现在应该为数据库系统安装客户端驱动程序. 根据您选择的编程语言,客户端驱动程序的选项有很多。
官方支持的语言是 JavaScript、Ruby 和 Python. 社区还增加了许多其他语言的支持,包括 C、Clojure、Lisp、Erlang、Go、Haskell、Java、Perl、PHP、Scala等。
在本指南中,我们将使用Python客户端驱动程序,因为Python已经安装在我们的系统上。
为了遵循一些建议的最佳实践,当处理Python软件时,我们将使用virtualenv
来隔离我们的Python环境。
1sudo apt-get install python-virtualenv
现在我们已经安装了 virtualenv 和 pip,我们可以在我们的主文件夹中创建一个目录来安装我们的虚拟环境:
1cd ~
2mkdir rethink
切换到目录,然后使用 virtualenv 命令创建新的虚拟环境结构:
1cd rethink
2virtualenv venv
我们可以通过键入来激活环境:
1source venv/bin/activate
如果我们需要离开环境(现在不要这样做,因为我们需要环境),输入:
1deactivate
现在我们已经启用了虚拟环境,我们可以通过键入来安装RethinkDB包:
1pip install rethinkdb
我们的 Python 客户端驱动程序已安装并准备使用。
启动 RethinkDB 并探索 Web 界面
为了开始探索RethinkDB系统,我们将启动一个服务器,并使用内置的Web接口探索它。
从命令行,我们可以使用以下格式启动服务器实例:
1rethinkdb --bind all
要使您的实例能够从服务器本身之外访问,需要使用 --bind all
参数. 由于我们正在从远程 VPS 运行,这是一个必要的添加。
如果我们访问我们的 IP 地址,然后是 :8080
,我们会看到 RethinkDB 网页接口:
your_server_ip_address:8080
正如您所看到的,我们对我们的数据库服务器有丰富的界面。
我们可以在主视图中看到一些标准的健康检查和一些群集性能指标。
除了蓝色图标,接口告诉我们数据库的名称,以及是否发现了任何问题。
此外,您可以看到RethinkDB对服务器和数据中心具有原始的理解,这是因为RethinkDB是从头开始构建的,可以轻松扩展和分发。
如果我们点击页面顶部的表
链接,我们可以看到我们已添加到我们的数据库的任何表:
从这里,我们可以看到我们在服务器上拥有的所有数据库. 在每个数据库中,我们可以看到已经创建的表。
我们也可以从此视图中添加数据库和表。
如果我们点击单个表,我们可以看到负载,分布和文档数的概述:
我们可以在这里查看有关每个表的加载和配置的详细信息,我们可以编辑分割和复制设置,并添加索引以更有效地查询。
转到顶部的下一个链接,我们可以看到可用于我们的数据库和表的服务器。
从这里,我们可以管理和添加数据库,这是将单独的服务器组合在一起的方式. 如果您在不同的物理位置部署服务器,这是一个很容易的方式来跟踪一切的位置。
再次,您可以点击单个服务器以获得其属性的概述:
继续到下一个链接,标题为数据浏览器
,我们得到一个接口,用查询语言与服务器进行交互:
我们可以从这个界面中创建、删除和修改表和数据。
如果我们输入一个查询或命令,我们可以看到下面的结果,我们可以查看各种格式的信息,并创建一个查询配置文件,以查看数据库如何决定返回结果:
正如您所看到的,我们有一个很好的工具来高级别管理我们的数据库和集群。
从Python内部与RethinkDB互动
虽然 Web 界面清洁,易于使用,但在大多数情况下,这可能不是您与数据库互动的方式。
在后台启动您的服务器
如果您不熟悉管理背景流程,我们将简要解释如何在背景中启动服务器,以便您继续在终端工作。
您可以通过在终端中按Ctrl-C
来关闭服务器,然后可以在后台重新启动它,以便您可以访问终端,通过重新启动它:
1rethinkdb --bind all &
&
在背景中启动过程,并允许您继续工作。
另一种选择是不要杀死最初的服务器流程,而只是暂停服务器,然后在背景中恢复它,您可以通过键入Ctrl-Z
来做到这一点。
之后,在背景中重启进程,键入:
1bg
您可以随时通过键入查看过程:
1jobs
1[1]+ Running rethinkdb --bind all &
如果您需要将任务重新带到前沿(可能在完成后将其杀死),您可以键入:
1fg
然后任务将再次在前台可用. 如果您有多个背景流程,您可能需要使用此格式引用任务号码:
fg %num
一旦您的服务器处于后台,我们可以通过Python开始探索数据库。
使用 Python 探索 RethinkDB 系统
启动 Python 解释器,以便我们可以开始与数据库进行交互:
1python
从这里开始,我们只需要将客户端驱动程序导入环境:
1import rethinkdb as r
现在我们可以使用 connect 命令连接到本地数据库:
1r.connect("localhost", 28015).repl()
最后的 .repl()
允许我们在形成的连接上调用命令,而无需在 .run()
调用中明确指定连接。
现在,我们已经连接到我们的服务器,我们可以立即开始使用数据库。
我们可以通过键入创建一个数据库来玩游戏:
1r.db_create("food").run()
RethinkDB 命令看起来像本地代码,但实际上是由 RethinkDB 客户端驱动程序翻译成本地数据库代码并在服务器上远程执行的。
如果我们没有将 .repl()
命令添加到初始服务器连接中,我们将不得不在运行命令中列出连接对象如下:
1conn = r.connect("localhost", 28015)
2r.db_create("food").run(conn)
这些最初的几个命令为您提供了指令链如何与 RethinkDB 一起工作的一般想法. 可以创建复杂的命令,以便同时执行多个操作. 这允许您创建可读、序列的命令链,这些命令链都同时被翻译并发送到数据库,而不是进行多个呼叫。
现在我们有一个数据库,让我们做一个表:
1r.db("food").table_create("favorites").run()
然后我们可以将一些数据添加到表中。RethinkDB使用灵活的方案设计,这样你就可以添加你想要的任何类型的关键值对。
1r.db("food").table("favorites").insert([
2 { "person": "Randy", "Age": 26,
3 "fav_food": [
4 "banana",
5 "cereal",
6 "spaghetti"
7 ]
8 },
9 { "person": "Thomas", "Age": 8,
10 "fav_food": [
11 "cookies",
12 "apples",
13 "cake",
14 "sandwiches"
15 ]
16 },
17 { "person": "Martha", "Age": 52,
18 "fav_food": [
19 "grapes",
20 "pie",
21 "avocado"
22 ]
23 }
24]).run()
这将在我们最喜欢
表中创建三个 JSON 文档,每个对象都定义了一个人、一个年龄和一个对象组合。
要做到这一点,我们只需要要求数据库和表,服务器将返回一个可迭代的对象,然后我们可以用循环处理。
服务器将持续发送数据,因为被称为导向器的对象被处理,例如,我们可以通过键入:
1c = r.db("food").table("favorites")
2for x in c:
3 print x
1{u'person': u'Martha', u'Age': 52, u'fav_food': [u'grapes', u'pie', u'avocado'], u'id': u'b888ec64-f2c9-4f85-9db6-f8b8a66626c6'}
2{u'person': u'Thomas', u'Age': 8, u'fav_food': [u'cookies', u'apples', u'cake', u'sandwiches'], u'id': u'3aa7ae68-85b0-48b6-9726-76e810ea4c55'}
3{u'person': u'Randy', u'Age': 26, u'fav_food': [u'banana', u'cereal', u'spaghetti'], u'id': u'f027a270-d5ac-4c33-ad91-53a7541ace82'}
此方法将每个行按序打印出来. 在我们的示例中由变量c
表示的方程式对象在处理时由服务器提供新的数据。
您可能已经注意到,我们添加到最喜欢
表的每个记录都被赋予了ID,这是自动完成的,用于索引每个表的内容。
我们可以通过在命令链中添加另一个链接来过滤结果:
1c = r.db("food").table("favorites").filter(r.row["fav_food"].count() > 3).run()
2for x in c:
3 print x
1{u'person': u'Thomas', u'Age': 8, u'fav_food': [u'cookies', u'apples', u'cake', u'sandwiches'], u'id': u'3aa7ae68-85b0-48b6-9726-76e810ea4c55'}
正如你所看到的,我们只是添加了 .filter()
命令. 我们使用 `r.row' 来引用 "fav_food" 键,然后计算每个行的条目数量。
结论
正如您所看到的,我们可以轻松和自然地操纵 RethinkDB 系统中的数据。
本指南仅涵盖了基本知识,以便向您介绍一些方法来使用 RethinkDB. 如果您正在考虑在生产环境中使用此项技术,则可能有助于探索系统的扩展和复制能力以及其数据库意识的网络能力。