当前位置: 首页 > 教程 > CouchDB >

CouchDB快速入门

精华
小牛编辑
127浏览
2023-03-14

Apache CouchDB数据库,它类似于Redis,Cassandra和MongoDB,也是一个NoSQL数据库。 CouchDB将数据存储为非关系性的JSON文档。 这使得CouchDB的用户可以以与现实世界相似的方式来存储数据。

可以从命令行或一个叫作Futon的Web界面来管理CouchDB。 Futon可用于执行管理任务,如创建和操作CouchDB的数据库,文档和用户等。

本文章的目标

在阅读学习本文完后,您将学会以下知识:

  • 将CouchDB安装在运行Ubuntu 14.04上。
  • 将Futon安装在同一台服务器上
  • 使用安全通道从本地机器访问CouchDB
  • 向CouchDB添加管理员用户
  • 如何使用Futon执行CouchDB的CRUD操作
  • 从命令行执行CouchDB的CRUD操作

先决条件

请准备/完成以下两个先决条件:

  • Ubuntu 14.04系统
  • 拥有管理权限的用户身份登录到服务器

注意:本教程假设使用的是非root用户,并可以执行root用户权限。请注意,如果您使用非root用户,首次使用sudo执行命令时,系统将要求您输入root用户的密码。

步骤1 - 准备服务器

在安装CouchDB之前,需要确保已经设置好了服务器。

开始更新系统:

$ sudo apt-get update

安装允许管理源存储库的软件:

$ sudo apt-get install software-properties-common -y

注意:-y标志告诉apt-get命令对安装过程中可能出现的所有提示以Yes响应。 如果您喜欢手动响应提示,可以删除此标志。

添加PPA,以从相应的存储库获取最新的CouchDB版本:

$ sudo add-apt-repository ppa:couchdb/stable -y

警告:在您的服务器上添加一个新的个人包存档(PPA)时,应该非常小心。 因为任何人都可以创建PPA,所以不能保证它是可信赖的,或者它是安全的。 在这种情况下,上述PPA是由Apache CouchDB团队维护的官方PPA。

经过上一步,已经添加了一个新的PPA,接下来需要更新系统,使其具有最新的包信息:

$ sudo apt-get update

现在可以安装CouchDB和Futon了。

步骤2 - 安装CouchDB

如果之前有在此服务器上安装过CouchDB,请先删除现有版本,使用以下命令:

$ sudo apt-get remove couchdb couchdb-bin couchdb-common -yf

现在安装CouchDB:

$ sudo apt-get install couchdb -y

这将在您服务器上安装CouchDB和Futon。

默认情况下,CouchDB在localhost上并使用端口5984运行,可以通过从命令行运行curl来检索此基本信息:

$ curl localhost:5984

注意:如果没有安装curl程序工具,可以使用sudo apt-get install curl命令进行安装。

执行上面命令请求,应该得到类似于以下内容:

{"couchdb":"Welcome","uuid":"b9dsf278cfdas743b5fdfsaafd399fas7582e","version":"1.6.1","vendor":{"name":"Ubuntu","version":"14.04"}}

现在可以使用curl -X PUT命令创建一个新的数据库:

curl -X PUT localhost:5984/new_database

执行后返回的响应结果如下 -

{"ok":true}

步骤3 - CouchDB安全保护

默认情况下,安装CouchDB时创建的某些文件和目录属于root用户和组。 这在开发过程中虽然不错,但这可能是生产中的安全风险。

安装CouchDB时,它将创建一个用户和一个名为couchdb的组。 在本节中,我们将把CouchDB文件的所有权和权限更改为couchdb用户和组。

更改所有权控制CouchDB进程可以访问内容,并更改可以访问CouchDB文件和目录的权限控制。

更改所有权和权限之前,先停止CouchDB:

$ sudo stop couchdb

更改/usr/lib/couchdb,/usr/share/couchdb和/etc/couchdb目录, 以及/usr/bin/couchdb可执行文件的所有权,使其所有者为couchdb用户,并且属于couchdb组。

sudo chown -R couchdb:couchdb /usr/lib/couchdb /usr/share/couchdb /etc/couchdb /usr/bin/couchdb

现在,更改了/usr/lib/couchdb,/usr/share/couchdb和/etc/couchdb目录, 以及/usr/bin/couchdb可执行文件的权限,以便couchdb用户和couchdb组可自由访问(到CouchDB安装),而其他用户不可以访问这些文件和目录。

sudo chmod -R 0770 /usr/lib/couchdb /usr/share/couchdb /etc/couchdb /usr/bin/couchdb

现在重新启动CouchDB:

sudo start couchdb

CouchDB现在应该启动并运行,而没有任何属于root用户或root组的文件或目录。

步骤4 - 访问Futon

CouchDB提供了一个基于Web的方便控制面板,它叫作:Futon。从本地服务器访问它,将流量通过SSH连接隧道传输到您的服务器。只有SSH登录到您的服务器的用户才能访问Futon控制面板。

要安全地连接到CouchDB(不用公开),您可以创建从本地端口5984到远程服务器端口5984的SSH隧道。

可以使用以下命令在本地计算机运行,以设置隧道:

$ ssh -L5984:127.0.0.1:5984 yiibai_user@your_server_ip

注意:请记住用您的用户名替换yiibai_user,将your_server_ip替换为服务器的IP地址。

连接打开时,使用端口5984从Web浏览器访问Futon。访问此URL以显示Futon页面:

http://localhost:5984/_utils

默认情况下,访问Futon的所有CouchDB用户都具有管理权限。如在右下角所示:

可以通过点击修复此(Fix this)链接并创建新管理员来更改此内容。

步骤5 - 添加管理员用户

现在已经启动运行CouchDB,可以开始使用它了。

在创建管理员用户之前,所有用户都可以以管理权限访问CouchDB(尽管它们首先需要SSH访问服务器)。

为CouchDB创建管理员帐户是一个很好的做法,以防止意外或未经授权的数据丢失。

要执行此操作,请单击显示在“Futon”的右下角的“修复此(Fix this)”链接。 这将显示一个允许您创建CouchDB管理员用户的屏幕,如下所示:

输入用户名和密码:

输入新的CouchDB用户名和密码后,单击创建(Create)按钮然后就创建新的管理员用户。 Futon右下角的消息将通过显示类似于以下内容的消息来确认:

注意:创建管理用户可防止未经授权的用户删除和修改数据库,设计文档和CouchDB配置。 但是,它不会阻止其它创建或访问文档。

就这样,有关CouchDB服务器现已完全配置。要了解有关使用数据库的更多信息,请继续阅读。

下面是一条美丽的分割线…


上面是一条美丽的分割线…

从Futon执行CRUD操作

Futon有一个非常简单但有用的用户界面,用来执行基本的CRUD操作(创建,读取,更新和删除)。

在本节中,我们将创建一个名为todos的新数据库,向其中添加一个新文档,然后检索,更新和删除此文档。

注意:如果您已创建管理员用户,则必须以管理员身份登录才能创建新的数据库。

创建数据库和文档

要创建一个名为todos的新数据库,请单击屏幕的左上方的创建数据库(Create Database)链接。 这将出现类似如下对话框:

输入数据库的名称:todos,然后单击创建按钮。

这将创建一个名为todos的新数据库,并转到可以在新创建的数据库中创建和修改文档的页面。

创建文档

要创建新文档,请单击页面上的“新建文档(New Document)”链接。

这将打开一个带有新文档的屏幕。 这个文档默认只有_id字段。 如果需要,您可以更改此字段的值,也可以按原样保留。

单击添加字段(Add Field)链接以向此文档添加新字段。

如上所述,我们添加了两个名为todo和done的字段。 默认情况下,新字段具有空(null)值。可通过双击该值以更改它。

在这个例子中,我们双击了todo和done的值字段,并分别输入了Task 1和false。

输入值后,按ENTER键或点击字段旁边的小绿色复选标记来保存内容(不这样做会使该字段的值为空)。这应该如下所示:

要保存文档,请单击“保存文档(Save Document)”链接。 保存文档后,您将看到已经添加了_rev字段,如下所示:

读取文件

单击todos链接(在“概览(Overview)”链接旁边的顶部栏中)查看新创建的文档,现在它是todos数据库中的唯一文档。

单击表格中的文档(ID)的键(红色部分),以访问文档详细信息页面。

编辑文档

在此页面上,可以编辑和更新文档字段,如下:

要编辑字段值,可双击对应字段并开始编辑。

您可以删除任何字段(除了_id和_rev字段外),添加新字段,或更改现有字段的值。 在这个例子中,已经将done字段的值从false更改为true,如下所示:

删除文档

要删除文档,可以单击删除文档链接,该链接将提示您进行确认:

删除(Delete)按钮进行确认。

Futon将删除文档并跳转到todos数据库页面,该页面中文档现在应为空,确认文档确实已被删除。

从命令行执行CRUD操作

本节将说明如何使用curl从命令行在CouchDB数据库上执行基本的CRUD(创建,读取,更新和删除)操作。

创建数据库

如果您尚未创建数据库new_database,请按照以下步骤现在来创建。 该命令应从安装CouchDB数据库的服务器上执行:

curl -X PUT http://localhost:5984/new_database -u "admin:password"
{"ok":true}

由于之前我们向CouchDB添加了管理员用户,因此现在必须在创建新的数据库时发送管理员用户名和密码。
结果应如下所示:

{"ok":true}

创建文档

我们先来创建一个新的文档,使用以下请求命令:

curl -X POST -d '{"todo":"task 1", "done":false}' http://localhost:5984/new_database -H "Content-Type:application/json"

此命令将在new_database数据库中创建一个新文档。

-X标志表示执行HTTP POST方法请求操作。 由于POST方法请求发送一个JSON文档,所以后面的-H标志将此请求的内容类型设置为application/json。 最后,包含了JSON文档本身,使用-d标志。

此操作的响应结果如下:

{"ok":true,"id":"803da996e1524591ce773d24400004ff","rev":"1-2fc1d70532433c39c9f61480607e3681"}

此响应的部分"ok":true表示操作成功。 响应包括分别代表文档ID和文档修订的字段id和rev。 需要修改或删除此文档时,才需要这两个字段。

在此示例中,文档ID由CouchDB生成,因为没有提供该命令。 如果需要,可以创建一个具有生成唯一ID的文档。

用指定的ID创建

创建一个ID为random_task的文档:

curl -X POST -d '{"_id":"random_task", "todo":"task 2", "done":false}' http://localhost:5984/new_database -H "Content-Type:application/json"

此命令创建一个ID为random_task的新文档,对此命令的响应如下:

{"ok":true,"id":"random_task","rev":"1-bceeae3c4a9154c87db1649473316e44"}

创建多个文档

除了创建单个文档,还可以批量创建文档。

curl -X POST -d '{"docs": [{"todo":"task 3", "done":false}, {"todo":"task 4", "done":false}]}' http://localhost:5984/new_database/_bulk_docs -H "Content-Type:application/json"

该命令将在POST正文中指定创建两个文档。 与单个文档插入相比,有两个微小的差异:

  1. 在插入单个文档时,POST正文只是一个标准的JSON对象。 在批量插入的情况下,POST正文包含具有文档字段的对象。 该字段保存要插入的文档数组。

  2. 在插入单个文档时,POST请求已发送到指向数据库的URL(http://localhost:5984/new_database)。 但是,对批量插入请求,URL为:URL:http://localhost:5984/new_database/_bulk_docs。

批量插入操作的响应如下:

[{"ok":true,"id":"803da996e1524591ce773d24400007df","rev":"1-778fd61f8f460d0c1df1bb174279489d"},{"ok":true,"id":"803da996e1524591ce773d2440001723","rev":"1-dc9e84861bba58e5cfefeed8f5133636"}]

读取文件

可通过发出HTTP GET命令来从CouchDB数据库检索文档。现在尝试检索上面创建的一个文档:一个叫random_task的文件。

curl -X GET http://localhost:5984/new_database/random_task

请注意,URL包括正在检索的文档的ID(random_task)。如下所示,对此GET请求的响应包含整个文档以及_id和_rev字段,可用于更新或删除此文档。

{"_id":"random_task","_rev":"1-bceeae3c4a9154c87db1649473316e44","todo":"task 2","done":false}

更新文档

在要更新文档时,包含_rev字段很重要。 CouchDB将拒绝任何不包含_rev字段的更新请求。 由于CouchDB更新整个文档,而不仅仅是其中的一部分,所以在更新操作期间,必须在请求正文中发送整个文档。

要更新使用ID为random_task的文档,我们需要发出HTTP PUT请求,如下所示:

curl -X PUT -d '{"_rev":"1-bceeae3c4a9154c87db1649473316e44", "todo":"task 2", "done":true}' http://localhost:5984/new_database/random_task

因为每个_rev值可能不太一样,所以请确保将_rev值替换为上一个输出中接收到的字符串。

这将修改文档并将done字段更新为true。 对此请求的响应如下:

{"ok":true,"id":"random_task","rev":"2-4cc3dfb6e76befd665faf124b36b7f1c"}

从响应中可以看出,该指定文档的rev字段在更新后会发生更改。 任何将来更新或删除此文档的请求现在都必须使用最新的rev值。

删除文档

使用HTTP DELETE请求要指定包含这个新的rev值来删除这个文档,如下所示:

curl -X DELETE http://localhost:5984/new_database/random_task?rev=2-4cc3dfb6e76befd665faf124b36b7f1c

就像上面的GET&PUT请求一样,DELETE请求使用指向文档的URL。但是,它还包括URL中的附加查询参数。 该参数rev应具有删除操作成功的最新_rev值。

在这种特殊情况下,使用上一步中更新操作后返回的值。 对上述请求的响应如下所示。

{"ok":true,"id":"random_task","rev":"3-07d6cde68be2a559497ec263045edc9d"}

重新启动,停止和启动CouchDB服务

启动,停止和重新启动CouchDB服务是非常简单的。下面我们来看看如何从服务器完成这些步骤。

重新启动CouchDB

要重新启动正在运行的CouchDB实例,请执行以下命令:

$ sudo restart couchdb

此命令将重新启动正在运行的CouchDB实例并显示新实例的进程ID。如果没有CouchDB的实例运行,执行该命令会给出一个消息:

$ restart: Unknown instance:

停止CouchDB

要停止运行的CouchDB实例,请执行以下命令:

$ sudo stop couchdb

执行此命令将停止任何正在运行的CouchDB实例,并提供如下所示的确认消息:

$ couchdb stop/waiting

启动CouchDB

要启动CouchDB,请执行以下命令:

$ sudo start couchdb

如果CouchDB尚未运行,则执行此命令将启动CouchDB并提供如下所示的确认消息:

$ couchdb start/running, process 12345

如果有CouchDB实例已经运行,那么执行上面的命令就会产生一个这样的消息:

$ start: Job is already running: couchdb

CouchDB状态

如果想查看CouchDB的状态,可以使用以下命令:

$ sudo status couchdb

如果CouchDB正在运行,则会提供类似于以下内容的消息:

$ couchdb start/running, process 12345

如果CouchDB没有运行,查看状态将提示消息如下:

couchdb stop/waiting

结束

您现在可以在服务器上使用CouchDB的所有功能了,可以使用Futon或命令行从本地机器安全地管理CouchDB。

最后声明:对伸手党,需要注意的是:本教程包教不包会。