rethinkdb
这篇文章是由同行评审Agbonghama柯林斯和马丁·马丁内斯 。 感谢所有SitePoint的同行评审员使SitePoint内容达到最佳状态!
Web应用程序最常见的任务之一就是保存数据。 没有存储数据的能力,用户将无法为应用程序自定义其首选项,组织其数据或完成类似的任务。
长期以来,Web一直依赖于关系数据库来保存信息。 例如,在网络上PHP和MySQL之间的LIASON是众所周知的。 但是,并非所有数据库都必须是关联的!
在本文中,我们将重点介绍将RethinkDB(开源JSON数据库)与Node.js应用程序一起使用。 我们将使用RethinkDB Node.js驱动程序rethinkdbdash连接到数据库。
但是在开始之前,让我们看一下RethinkDB是什么以及我们可能要在哪里使用它。
介绍RethinkDB
RethinkDB是为实时Web构建的开源JSON数据库。
官方文档指出:
RethinkDB是第一个为实时Web从头开始构建的开源可扩展JSON数据库。 通过公开一个令人兴奋的新访问模型,它颠覆了传统的数据库体系结构–开发人员可以告诉RethinkDB将更新的查询结果实时地连续推送到应用程序,而不必轮询更改。
它提供了每当发生更改时从数据库获取实时更新的功能。
RethinkDB面向需要向连接的客户端发送实时更新的应用程序。 例如,让我们考虑一个使用户能够协同设计计划的应用程序。 当特定用户进行设计更改时,需要将其实时推送到其他连接的客户端,以使设计保持同步。 在这种情况下,可以使用RethinkDB使实时更新成为可能。
弄清楚了RethinkDB有什么用处之后,现在让我们看看如何安装它。
安装Rethinkdb
要在Ubuntu上安装RethinkDB,您需要添加存储库。
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- http://download.rethinkdb.com/apt/pubkey.gpg | sudo apt-key add -
然后,您必须从新添加的存储库中更新软件包信息并安装RethinkDB。
sudo apt-get update
sudo apt-get install rethinkdb
完成后,在终端上键入以下命令:
rethinkdb
如果一切都正确安装,则RethinkDB应该启动,并且应该在默认端口28015上运行。管理控制台应该可以从http:// localhost:8080访问 。
安装Node.js客户端Rethinkdbdash
在本教程的简介中,我提到了rethinkdbdash ,我们将使用它与RethinkDB服务器进行交互的Node.js客户端。 它是RethinkDB的高级Node.js驱动程序,具有连接池,对流的支持等。
要安装rethinkdbdash
客户端,可以使用npm:
npm install rethinkdbdash
RethinkDB入门
我们将从为演示应用程序创建一个名为SitePoint
的数据库开始。 第一步,创建一个名为NodeRethinkDB
的项目文件夹。 然后,在项目目录中创建一个名为app.js
的文件。
完成后,将客户端模块导入app.js
文件,如下所示:
var r = require('rethinkdbdash')();
上面的语句连接到默认端口地址28015
并托管localhost
。 如果您需要其他配置,则可以如下设置:
var r = require('rethinkdbdash')({
port: 28015,
host: 'localhost'
});
创建数据库
免费学习PHP!
全面介绍PHP和MySQL,从而实现服务器端编程的飞跃。
原价$ 11.95 您的完全免费
使用前面的语句,我们可以创建一个数据库。 这是通过使用dbCreate
方法完成的。
r.dbCreate('SitePoint')
.run()
.then(function(response){
console.log(response);
})
.error(function(err){
console.log('error occured ', err);
});
如果一切顺利,您将获得如下成功的答复。
{
config_changes: [ { new_val: [Object], old_val: null } ],
dbs_created: 1
}
如果您查看运行在端口8080上的RethinkDB管理控制台,则应该能够看到新创建的SitePoint
数据库。
建立表格
现在,我们将看到如何使用rethinkdbdash
客户端在RethinkDB数据库中创建表。
首先,使用客户端建立与数据库的连接。
var r = require('rethinkdbdash')({
port: 28015,
host: 'localhost',
db: 'SitePoint'
});
现在,我们将使用tableCreate
方法在数据库中创建表Employee
。
r.tableCreate('Employee')
.run()
.then(function(response){
console.log(response);
})
.error(function(err){
console.log('error while creating table ', err);
})
默认情况下,主键是id
。 如果需要,可以在创建表时指定它。
r.tableCreate('Employee',{ primaryKey: 'name' })
.run()
.then(function(response){
console.log(response)
})
.error(function(err){
console.log('error while creating table ',err)
})
上面的查询返回以下响应:
Creating a pool connected to localhost:28015
{
config_changes: [ { new_val: [Object], old_val: null } ],
tables_created: 1
}
插入资料
要将数据插入Employee
表中,我们将使用insert
方法。
r.table("Employee")
.insert({
name: "Jay",
company: "SitePoint"
})
.run()
.then(function(response){
console.log('Success ',response);
})
.error(function(err){
console.log('error occurred ',err);
})
上面的代码将数据插入Employee
表并返回成功消息。 这是上面查询的响应:
Creating a pool connected to localhost:28015
Success
{
deleted: 0,
errors: 0,
generated_keys: [ 'f64a2bdb-1659-47a9-9bc1-89e8f1ebb2ac' ],
inserted: 1,
replaced: 0,
skipped: 0,
unchanged: 0
}
插入查询中值得注意的一件事是,我们没有指定id
字段。 如果我们愿意,我们可以做到。 否则,它将具有一个自动生成的唯一标识符值。
从表中选择数据
从表中选择数据非常简单。 我们需要指定表的名称,然后选择数据。
r.table('Employee')
.run()
.then(function(response){
console.log(response);
})
.error(function(err){
console.log(err);
})
上面的代码段给出了以下输出:
[{
EmpId: 'bc95940f-084c-48c5-b9fe-dc0a82f380b6',
name: 'Jay',
company: 'SitePoint'
}]
从表中选择特定记录
我们使用get
方法来获取具有特定主键的记录。 举例来说,如果我们要选择一个Employee
与EmpId
的bc95940f-084c-48c5-b9fe-dc0a82f380b6
,这是我们必须运行查询:
r.table('Employee')
.get('bc95940f-084c-48c5-b9fe-dc0a82f380b6')
.run()
.then(function(response){
console.log(response);
})
.error(function(err){
console.log(err);
})
上面的查询将返回ID为bc95940f-084c-48c5-b9fe-dc0a82f380b6
的Employee
的详细信息,如下所示:
[{
EmpId: 'bc95940f-084c-48c5-b9fe-dc0a82f380b6',
name: 'Jay',
company: 'SitePoint'
}]
实时推送更新
RethinkDB的最重要功能之一是它能够实时推送更改,从而减少了轮询开销。 从官方文档中,您可以阅读:
开发人员可以告诉RethinkDB实时地不断推送更新的查询结果,而不必轮询更改。
订阅实时提要可以实现推送更新。 例如,我们可以预订Employee
表中的任何更改,如下所示:
r.table('Employee')
.changes()
.run()
.then(function(cursor){
cursor.each(console.log);
})
.error(function(err){
console.log(err);
});
现在,将记录插入Employee
,在终端中,我们将看到以下日志:
{
new_val: {
EmpId: '57937293-850b-45af-aeb3-e30d2dfd83a2',
company: 'SitePoint',
name: 'Raj'
},
old_val: null
}
上面的日志用于插入语句,因此old_val
为null,而new_val
具有值。 如果现有记录被更新,我们将同时拥有old_val
和new_val
。
结论
在本教程中,我们借助RethinkDB Node.js驱动程序rethinkdbdash,了解了如何在Node.js应用程序中使用RethinkDB 。
如果您想加深话题, 建议您看一下官方文档和Rethink Db JavaScript命令参考 。
您是否曾经使用其他客户端从Node.js连接到RethinkDB?
在下面的评论中分享您的想法和建议!
翻译自: https://www.sitepoint.com/how-to-use-rethinkdb-with-node-js-applications/
rethinkdb