Couchdb 简明教程
CouchDB - Introduction
数据库管理系统提供存储和检索数据的机制。数据库管理系统主要有三种类型,即 RDBMS(关系数据库管理系统)、OLAP(联机分析处理系统)和 NoSQL。
RDBMS
RDBMS 表示关系数据库管理系统。RDBMS 是 SQL 和所有现代数据库系统(例如 MS SQL Server、IBM DB2、Oracle、MySQL 和 Microsoft Access)的基础。
关系数据库管理系统 (RDBMS) 是一个数据库管理系统 (DBMS),其基于 E. F. Codd 引入的关系模型。
RDBMS 中的数据存储在名为 tables 的数据库对象中。表是相关数据项的集合,并且由列和行组成。它只存储结构化数据。
NoSQL Databases
NoSQL 数据库(有时称为非 SQL)是除关系数据库中使用的表格关系以外提供存储和检索数据的机制的数据库。这些数据库没有架构,支持简单的复制,拥有简单的 API,最终一致,并且能处理大量数据(大数据)。
NoSQL 数据库的主要目标是拥有以下内容 −
-
Simplicity of design,
-
Horizontal scaling, and
-
Finer control over availability.
与关系数据库相比,NoSQL 数据库使用不同的数据结构。它让一些操作在 NoSQL 中更快。给定 NoSQL 数据库的适用性取决于它必须解决的问题。这些数据库存储结构化数据和非结构化数据,如音频文件、视频文件、文档等。这些 NoSQL 数据库分为三类,如下所述。
Key-value Store − 这些数据库旨在将数据存储在键值对中,并且这些数据库没有任何架构。在这些数据库中,每个数据值都包含一个已编制索引的键和该键的一个值。
示例 − BerkeleyDB、Cassandra、DynamoDB、Riak。
Column Store − 在这些数据库中,数据存储在分组为数据列的单元格中,并且这些列进一步分组到列族中。这些列族可以包含任意数量的列。
示例 − BigTable、HBase 和 HyperTable。
Document Store - 这是基于键值存储的基本理念开发的数据库,其中“文档”包含更多复杂的数据。此处,每个文档都会被分配一个唯一键,这个键用于检索文档。这些文档被设计用于存储、检索和管理面向文档的信息,也称为半结构化数据。
示例 − CouchDB 和 MongoDB。
What is CouchDB?
CouchDB 是由 Apache 软件基金会开发的一个开源数据库。其重点在于易用性,涵盖网络。它是一个 NoSQL 文档存储数据库。
它使用 JSON 来存储数据(文档),使用 JavaScript 作为查询语言来转换文档,使用 http 协议,通过 api 访问文档,使用 web 浏览器查询索引。它是一个多主应用,发布的时间是 2005 年,并且在 2008 年成为了一个 Apache 项目。
Why CouchDB?
-
CouchDB 有一个基于 HTTP 的 REST API,这有助于轻松地与数据库通信。并且 HTTP 资源和方法(GET、PUT、DELETE)的简单结构易于理解和使用。
-
当我们在灵活的基于文档的结构中存储数据时,无需担心数据的结构。
-
向用户提供功能强大的数据映射,该映射允许查询、组合和筛选信息。
-
CouchDB 提供易于使用的复制功能,你可以使用该功能复制、共享和同步数据库和机器之间的的数据。
Data Model
-
数据库是 CouchDB 中最外层的容器/数据结构。
-
每个数据库都是一个独立文档的集合。
-
每个文档维护自己的数据和自包含模式。
-
文档元数据包含修订信息,这使得在数据库断开连接时合并出现的差异成为可能。
-
CouchDB 实施多版本并发控制,以避免在写入期间锁定数据库字段。
Features of CouchDB:Reduce the Content
Document Storage
CouchDB 是一个 NoSQL 文档存储数据库。它提供了存储具有唯一名称的文档的功能,并且还提供了一个称为 RESTful HTTP API 的 API,用于读取和更新(添加、编辑、删除)数据库文档。
在 CouchDB 中,文档是数据的基本单位,它们也包括元数据。文档字段具有唯一名称,并且包含各种类型的属性值(文本、数字、布尔值、列表等);文本大小或元素数量没有固定的限制。
文档更新(添加、编辑、删除)遵循原子性,即它们将被完全保存或根本不会被保存。数据库将不会有任何部分保存或编辑的文档。
ACID Properties
CouchDB 包含 ACID 属性作为其一项功能。
一致性 − 当 CouchDB 中的数据被提交一次时,就不允许修改或覆盖该数据。因此,CouchDB 确保数据库文件将始终处于一致的状态。
CouchDB reads 使用多版本并发控制 (MVCC) 模型,因此客户端将从读取操作的开始到结束看到数据库的一致快照。
每当更新文档时,CouchDB 便会将数据写入到磁盘中,并将更新后的数据库标头写入两个连续且相同的块中,以构成文件的前 4k,然后同步写入磁盘。写入期间的部分更新会丢弃。
如果写入标头时出现故障,先前相同的标头副本将继续保留,从而保证所有先前提交数据的一致性。除了标头区域之外,在崩溃或断电后永远不需要执行一致性检查或修复。
CouchDB - Installation
本章教您如何在 Windows 和 Linux 系统中安装 CouchDB。
Installing CouchDB in Windows
Download CouchDB
CouchDB 的官方网站是 https://couchdb.apache.org 。如果您单击给定的链接,您可以获得如下所示的 CouchDB 官方网站主页。
如果您单击下载按钮,则会转到一个页面,其中提供了各种格式的 CouchDB 下载链接。以下快照对此进行了说明。
为 Windows 系统选择下载链接,并选择提供的其中一个镜像以开始下载。
Installing CouchDB
CouchDB 将以名为 setup-couchdb-1.6.1_R16B02.exe. 的安装文件形式下载到您的系统。运行安装文件并继续安装。
安装后,通过访问以下 * link: [role="bare"]http://127.0.0.1:5984/.* 打开 CouchDB 的内置 Web 界面。如果一切顺利,这将给您一个包含以下输出的网页。
{
"couchdb":"Welcome","uuid":"c8d48ac61bb497f4692b346e0f400d60",
"version":"1.6.1",
"vendor":{
"version":"1.6.1","name":"The Apache Software Foundation"
}
}
您可以使用以下 URL 与 CouchDB Web 界面进行交互 −
http://127.0.0.1:5984/_utils/
这会向您展示 Futon 的索引页面,它是 CouchDB 的 Web 界面。
Installing CouchDB in Linux Systems
对于许多以 Linux 为基础的系统,它们内部提供了 CouchDB。若要安装此 CouchDB,请遵循说明。
在 Ubuntu 和 Debian 上,您可以使用 −
sudo aptitude install couchdb
在 Gentoo Linux 上有一个可用的 CouchDB ebuild −
sudo emerge couchdb
如果你的 Linux 系统没有 CouchDB,请遵循下一部分来安装 CouchDB 及其依赖项。
Installing CouchDB Dependencies
以下是需要安装以获取系统中的 CouchDB 的依赖项列表−
-
Erlang OTP
-
ICU
-
OpenSSL
-
Mozilla SpiderMonkey
-
GNU Make
-
GNU Compiler Collection
-
libcurl
-
help2man
-
Python for docs
-
Python Sphinx
要安装这些依赖项,请在终端中键入以下命令。这里我们使用 Centos 6.5,并且以下命令将安装与 Centos 6.5 兼容的所需软件。
$sudo yum install autoconf
$sudo yum install autoconf-archive
$sudo yum install automake
$sudo yum install curl-devel
$sudo yum install erlang-asn1
$sudo yum install erlang-erts
$sudo yum install erlang-eunit
$sudo yum install erlang-os_mon
$sudo yum install erlang-xmerl
$sudo yum install help2man
$sudo yum install js-devel
$sudo yum install libicu-devel
$sudo yum install libtool
$sudo yum install perl-Test-Harness
Note − 对于所有这些命令,你需要使用 sudo。以下过程将普通用户转换为 sudoer。
-
以管理员用户身份登录为 root
-
使用以下命令打开 sudo 文件 −
visudo
-
然后进行如下编辑,以向你现有的用户赋予 sudoer 权限 −
Hadoop All=(All) All , and press esc : x to write the changes to the file.
在你的系统中下载完所有依赖项后,按照给定的说明下载 CouchDB。
Downloading CouchDB
Apache 软件基金会将不会提供 CouchDB 的完整 .tar 文件,所以你必须从源码安装它。
创建一个新目录来安装 CouchDB,浏览到这样的已创建目录并通过执行以下命令下载 CouchDB 源码 −
$ cd
$ mkdir CouchDB
$ cd CouchDB/
$ wget
http://www.google.com/url?q=http%3A%2F%2Fwww.apache.org%2Fdist%2Fcouchdb%2Fsource%2F1.6.1%2Fapache-couchdb-1.6.1.tar.gz
这将会在你系统中下载 CouchDB 源码文件。现在解压 apache-couchdb-1.6.1.tar.gz ,如下所示。
$ tar zxvf apache-couchdb-1.6.1.tar.gz
Configuring CouchDB
要配置 CouchDB,请执行以下操作 −
-
浏览到 CouchDB 的主文件夹。
-
Login as superuser.
-
使用 ./configure 提示配置,如下所示 −
$ cd apache-couchdb-1.6.1
$ su
Password:
# ./configure --with-erlang=/usr/lib64/erlang/usr/include/
它给你如下所示的输出,其中一行总结说 − You have configured Apache CouchDB, time to relax 。
# ./configure --with-erlang=/usr/lib64/erlang/usr/include/
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking how to create a ustar tar archive... gnutar
………………………………………………………..
……………………….
config.status: creating var/Makefile
config.status: creating config.h
config.status: config.h is unchanged
config.status: creating src/snappy/google-snappy/config.h
config.status: src/snappy/google-snappy/config.h is unchanged
config.status: executing depfiles commands
config.status: executing libtool commands
You have configured Apache CouchDB, time to relax.
Run `make && sudo make install' to install.
Installing CouchDB
现在键入以下命令以在你的系统中安装 CouchDB。
# make && sudo make install
它在你的系统中安装 CouchDB,其中一行总结说 − You have installed Apache CouchDB, time to relax 。
Starting CouchDB
要启动 CouchDB,请浏览到 CouchDB 主文件夹并使用以下命令 −
$ cd apache-couchdb-1.6.1
$ cd etc
$ couchdb start
CouchDB 的输出:−
Apache CouchDB 1.6.1 (LogLevel=info) is starting.
Apache CouchDB has started. Time to relax.
[info] [lt;0.31.0gt;] Apache CouchDB has started on http://127.0.0.1:5984/
[info] [lt;0.112.0gt;] 127.0.0.1 - - GET / 200
[info] [lt;0.112.0gt;] 127.0.0.1 - - GET /favicon.ico 200
CouchDB - Curl & Futon
cURL Utility
cURL 实用程序是一种与 CouchDB 通信的方法。
它是一种使用支持协议(HTTP、HTTPS、FTP、FTPS、TFTP、DICT、TELNET、LDAP 或 FILE)之一,从服务器或向服务器传输数据的工具。这个命令设计为无需用户互动即可工作。cURL 提供了一系列的实用技巧,如代理支持、用户认证、ftp 上传、HTTP Post、SSL (https:) 连接、cookie、文件传输恢复等。
cURL 实用程序在 UNIX、Linux、Mac OS X 和 Windows 等操作系统中可用。它是一个命令行实用程序,用户可以用它直接从命令行访问 HTTP 协议。本章将指导你如何使用 cURL 实用程序。
Using cURL Utility
你可以通过简单地输入 cURL 及其后跟网站地址来使用 cURL 实用程序访问任何网站,如下所示:−
curl www.tutorialspoint.com/
默认情况下,cURL 实用程序返回请求页面源代码。它在终端窗口中显示此代码。
cURL Utility Options
cURL 实用程序提供多种选项供使用,你可以在 cURL 使用帮助中查看它们。
以下代码展示了 cURL 帮助的其中一部分。
$ curl --help
Usage: curl [options...] <url>
Options: (H) means HTTP/HTTPS only, (F) means FTP only
--anyauth Pick "any" authentication method (H)
-a/--append Append to target file when uploading (F/SFTP)
--basic Use HTTP Basic Authentication (H)
--cacert <file> CA certificate to verify peer against (SSL)
-d/--data <data> HTTP POST data (H)
--data-ascii <data> HTTP POST ASCII data (H)
--data-binary <data> HTTP POST binary data (H)
--data-urlencode <name=data/name@filename> HTTP POST data
urlencoded (H)
--delegation STRING GSS-API delegation permission
--digest Use HTTP Digest Authentication (H)
--disable-eprt Inhibit using EPRT or LPRT (F)
--disable-epsv Inhibit using EPSV (F)
-F/--form <name=content> Specify HTTP multipart POST data (H)
--form-string <name=string> Specify HTTP multipart POST data (H)
--ftp-account <data> Account data to send when requested by server
(F)
--ftp-alternative-to-user <cmd> String to replace "USER [name]" (F)
--ftp-create-dirs Create the remote dirs if not present (F)
--ftp-method [multi cwd/no cwd/single cwd] Control CWD usage (F)
--ftp-pasv Use PASV/EPSV instead of PORT (F)
-G/--get Send the -d data with a HTTP GET (H)
-H/--header <line> Custom header to pass to server (H)
-I/--head Show document info only
-h/--help This help text
--hostpubmd5 <md5> Hex encoded MD5 string of the host public key.
(SSH)
-0/--http1.0 Use HTTP 1.0 (H)
--ignore-content-length Ignore the HTTP Content-Length header
-i/--include Include protocol headers in the output (H/F)
-M/--manual Display the full manual
-o/--output <file> Write output to <file> instead of stdout
--pass <pass> Pass phrase for the private key (SSL/SSH)
--post301 Do not switch to GET after following a 301
redirect (H)
--post302 Do not switch to GET after following a 302
redirect (H)
-O/--remote-name Write output to a file named as the remote file
--remote-name-all Use the remote file name for all URLs
-R/--remote-time Set the remote file's time on the local output
-X/--request <command> Specify request command to use
--retry <num> Retry request <num> times if transient problems
occur
--retry-delay <seconds> When retrying, wait this many seconds
between each
--retry-max-time <seconds> Retry only within this period
-T/--upload-file <file> Transfer <file> to remote site
--url <URL> Set URL to work with
-B/--use-ascii Use ASCII/text transfer
在与 CouchDB 通信时,我们大量地使用了 cURL 实用程序的某些选项。以下是 cURL 实用程序部分重要选项的简要说明,包括 CouchDB 使用的选项。
-X flag
(HTTP) 指定在与 HTTP 服务器通信时使用的自定义请求方法。已指定请求代替已使用的方法(默认为 GET)。完整信息和解释,请阅读 HTTP 1.1 规范。
(FTP) 与使用 ftp 进行文件列表时指定一个自定义 FTP 命令,以代替 LIST。
-H
(HTTP) 获取网页时使用额外的报头。注意,如果你添加了一个自定义报头,该报头与 cURL 将要使用的内部报头具有相同的名称,那么你的外部设置报头将代替内部报头。这使你可以完成 cURL 通常无法完成的即使更加棘手的操作。你不应该在不明白自己所做的事情的情况下替换内部设置报头。用冒号右侧没有内容的报头替换内部报头将防止该报头出现。
cURL 确保你添加/替换的每个报头使用适当的行尾标记发送。你也不应该将此作为报头内容的一部分添加,也不应该添加换行符或回车符来弄乱。
另请参阅 -A/--user-agent 和 -e/--referer 选项。
此选项可以多次使用,以添加/替换/删除多个报头。
-d flag
使用 cURL 的此标记,你可以将数据与 HTTP POST 请求一起发送到服务器,就好像用户通过表单填写并提交数据一样。
Example
假设有一个网站,你想使用以下 cURL 实用程序的 –d 标记登录其中或向该网站发送一些数据。
curl -X PUT http://mywebsite.com/login.html -d userid=001 -d password=tutorialspoint
它发送一个看起来像 "userid=001&password=tutorialspoint" 的 post 块。同样地,你也可以使用 -d 标记发送文档 (JSON)。
-o flag
使用此标志,cURL 将请求输出写入文件。
Example
以下示例显示了 cURL 实用工具的 -o 标志的用法。
$ curl -o example.html www.tutorialspoint.com/index.htm
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 81193 0 81193 0 0 48168 0 --:--:-- 0:00:01 --:--:--
58077
它获取 tutorialspoint.com 主页的源代码,创建一个名为 example.com 的文件并将输出保存在名为 example.html 的文件中。
以下是 example.html 的快照。
-O
此标志类似于 –o ,唯一的区别是使用此标志,会创建一个与请求的 URL 同名的文件,并将请求的 URL 的源代码复制到其中。
Example
以下示例显示了 cURL 实用工具的 -O 标志的用法。
$ curl -O www.tutorialspoint.com/index.htm
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left
Speed
100 81285 0 81285 0 0 49794 0 --:--:-- 0:00:01 --:--:--
60077
它创建一个名为 index.htm 的文件,并将 tutorialspoint.com 索引页的源代码保存在其中。
Hello CouchDB
您可以通过向已安装的 CouchDB 实例发送 GET 请求来访问 CouchDB 主页。首先,确保您已在 Linux 环境中安装 CouchDB 并且它运行成功,然后使用以下语法向 CouchDB 实例发送 get 请求。
curl http://127.0.0.1:5984/
这会向您提供如以下所示的 JSON 文档,其中 CouchDB 指定了详细信息,例如版本号、供应商名称和软件版本。
$ curl http://127.0.0.1:5984/
{
"couchdb" : "Welcome",
"uuid" : "8f0d59acd0e179f5e9f0075fa1f5e804",
"version" : "1.6.1",
"vendor" : {
"name":"The Apache Software Foundation",
"version":"1.6.1"
}
}
List of All Databases
您可以发送 get 请求以及字符串 "_all_dbs string " ,以获取所创建的所有数据库的列表。以下是要获取 CouchDB 中所有数据库列表的语法。
curl -X GET http://127.0.0.1:5984/_all_dbs
它向您提供以下所示的 CouchDB 中所有数据库的列表。
$ curl -X GET http://127.0.0.1:5984/_all_dbs
[ "_replicator" , "_users" ]
Creating a Database
您可以使用具有以下语法的 PUT 标头的 cURL 在 CouchDB 中创建数据库 −
$ curl -X PUT http://127.0.0.1:5984/database_name
Getting Database Info
您可以使用 get 请求以及数据库名称来获取数据库的信息。以下是要获取数据库信息的语法。
Example
例如让我们获取名为 my_database 的数据库的信息,如下所示。在这里,您可以得到您的数据库信息的响应。
$ curl -X GET http://127.0.0.1:5984/my_database
{
"db_name" : "my_database",
"doc_count" : 0,
"doc_del_count" : 0,
"update_seq" : 0,
"purge_seq" : 0,
"compact_running" : false,
"disk_size" : 79,
"data_size" : 0,
"instance_start_time" : "1423628520835029",
"disk_format_version" : 6,
"committed_update_seq" : 0
}
Futon
Futon 是 CouchDB 内置的基于 Web 的管理界面。它提供了一个简单的图形界面,可用于与 CouchDB 交互。它是一个朴素的界面,并提供了对所有 CouchDB 功能的完全访问。以下是这些功能的列表 −
-
Creates databases.
-
Destroys databases.
-
Creates documents.
-
Updates documents.
-
Edits documents.
-
Deletes documents.
Starting Futon
确保 CouchDB 正在运行,然后在浏览器中打开以下 URL −
http://127.0.0.1:5984/_utils/
如果您打开此 URL,它将显示以下所示的 Futon 主页 −
-
在本页面的左侧,你可以看到 CouchDB 中所有当前数据库的列表。在此说明中,我们有一个名为 my_database 的数据库,以及系统定义的 _replicator 和 _user 数据库。
-
在右侧,你可以看到以下内容 - Tools - 在此部分,你可以找到 Configuration 以配置 CouchDB、 Replicator 执行复制以及 Status 验证 CouchDB 状态和在 CouchDB 上执行的最近修改。 Documentation - 此部分包含 CouchDB 最新版本的完整文档。 Diagnostics - 在此之下,你可以验证 CouchDB 的安装。 Recent Databases - 在此之下,你可以找到最近添加的数据库的名称。
CouchDB - HTTP API
使用 HTTP 请求头,你可以与 CouchDB 通信。通过这些请求,我们可以从数据库中检索数据,以文档的形式将数据存储到数据库中,并且我们可以查看以及格式化存储在数据库中的文档。
HTTP Request Formats
在与数据库通信时,我们将使用不同的请求格式,如 get、head、post、put、delete 和 copy。对于 CouchDB 中的所有操作,输入数据和输出数据结构将采用 JavaScript 对象表示法 (JSON) 对象的形式。
以下是用于与 CouchDB 通信的 HTTP 协议的不同请求格式。
-
GET − 此格式用于获取特定项目。若要获取不同的项目,你必须发送特定的 url 模式。在 CouchDB 中使用此 GET 请求,我们可以获取静态项目、数据库文档和配置,以及以 JSON 文档的形式获取统计信息(在大多数情况下)。
-
HEAD − HEAD 方法用于获取 GET 请求的 HTTP 标头,而不包含响应的主体。
-
POST − Post 请求用于上传数据。在 CouchDB 中使用 POST 请求时,你可以设置值、上传文档、设置文档值,还可以启动某些管理命令。
-
PUT − 使用 PUT 请求,你可以创建新的对象、数据库、文档、视图和设计文档。
-
DELETE − 使用 DELETE 请求,你可以删除文档、视图和设计文档。
-
COPY − 使用 COPY 方法,你可以复制文档和对象。
HTTP Request Headers
应提供 HTTP 头部来获取正确的格式和编码。在向 CouchDB 服务器发送请求时,你可以随同请求发送 Http 请求头。以下是不同的 Http 请求标头。
-
Content-type − 此标头用于指定我们随同请求提供给服务器的数据的内容类型。我们随同请求发送的内容类型通常是 MIME 类型或 JSON(application/json)。强烈建议在请求上使用 Content-type。
-
Accept − 此标头用于向服务器指定客户端能够理解的数据类型列表,以便服务器使用这些数据类型发送其响应。在此处,通常你可以发送客户端接受的 MIME 数据类型列表,用冒号分隔。虽然没有要求在 CouchDB 的查询中使用 Accept,但强烈建议使用它以确保返回的数据可以由客户端处理。
Response Headers
这些是由服务器发送的响应头。这些标头提供有关服务器作为响应发送的内容的信息。
-
Content-type - 此标题指定服务器返回的数据的 MIME 类型。对于大多数请求,返回的 MIME 类型为 text/plain。
-
Cache-control - 此标题提示客户端处理服务器发送的信息。CouchDB 主要返回 must-revalidate,这表示如果可能,应该重新验证信息。
-
Content-length - 此标题以字节为单位返回服务器发送的内容的长度。
-
Etag - 此标题用于显示文档或视图的修订版本。
Status Codes
以下是在 http 标头中发送的状态代码的表格形式及其说明。
Sr.No. |
Status Code & Description |
1 |
200 − OK 完成请求后将显示此状态。 |
2 |
201 − Created 创建文档时将显示此状态。 |
3 |
202 − Accepted 接受请求时将显示此状态。 |
4 |
404 − Not Found 服务器无法找到所请求的内容时将显示此状态。 |
5 |
405 − Resource Not Allowed 使用的 HTTP 请求类型无效时将显示此状态。 |
6 |
409 − Conflict 任何更新冲突时将显示此状态。 |
7 |
415 − Bad Content Type 此状态表示服务器不支持请求的内容类型。 |
8 |
500 − Internal Server Error 请求中发送的数据无效时将显示此状态。 |
HTTP URL Paths
可以通过某些 URL 路径直接与数据库交互。以下是此类 URL 路径的表格形式。
Sr.No. |
URL & Operation |
1 |
PUT /db 此 URL 用于创建新数据库。 |
2 |
GET /db 此 URL 用于获取有关现有数据库的信息。 |
3 |
PUT /db/document 此 URL 用于创建文档/更新现有文档。 |
4 |
GET /db/document 此 URL 用于获取文档。 |
5 |
DELETE /db/document 此 URL 用于从指定数据库中删除指定文档。 |
6 |
GET /db/_design/design-doc 此 URL 用于获取设计文档的定义。 |
7 |
GET /db/_design/designdoc/_view/view-name 此 URL 用于从指定数据库中的设计文档中访问视图视图名称。 |
CouchDB - Creating a Database
数据库是 CouchDB 中最外层的 data 结构,用于存储您的文档。您可以使用 CouchDB 提供的 cURL 实用程序以及 CouchDB 的 Web 界面 Futon 来创建这些数据库。
Creating a Database using cURL Utility
您可以通过 cURL 实用程序使用 PUT 方法向服务器发送一个 HTTP 请求在 CouchDB 中创建一个数据库。以下是创建数据库的语法:
$ curl -X PUT http://127.0.0.1:5984/database name
使用 −X ,我们可以指定要使用的 HTTP 自定义请求方法。在此情况下,我们使用 PUT 方法。当使用 PUT 操作/方法时,url 的内容指定我们使用 HTTP 请求创建的对象名称。此处我们必须在 url 中使用 put 请求发送数据库的名称来创建数据库。
Creating a Database using Futon
要创建数据库,请打开 http://127.0.0.1:5984/_utils/ 。您将获得如下所示的 CouchDB 概览/索引页面。
在此页面中,您可以看到 CouchDB 中的数据库列表,左侧有一个创建数据库选项按钮。
现在,点击创建数据库链接。您可以看到一个弹出窗口 Create New Databases ,询问新数据库的数据库名称。根据所述条件选择任意名称。此处我们创建一个名为 tutorials_point 的新数据库。点击屏幕截图中所示的创建按钮。
CouchDB - Deleting a Database
Deleting a Database using cURL Utility
您可以通过使用 DELETE 方法,通过 cURL 实用程序向服务器发送请求来删除 CouchDB 中的数据库。以下是在 CouchDB 中创建数据库的语法:
$ curl -X DELETE http://127.0.0.1:5984/database name
使用 −X ,我们可以指定在与 HTTP 服务器通信时使用的 HTTP 自定义请求方法。在此情况下,我们使用 DELETE 方法。向服务器发送 url,并在其中指定要删除的数据库。
Deleting a Database using Futon
要删除数据库,请打开 http://127.0.0.1:5984/_utils/ url,您将获得如下所示的 CouchDB 概览/索引页面。
此处您可以看到三个用户创建的数据库。让我们删除名为 tutorials_point2 的数据库。要删除数据库,请从数据库列表中选择一个,然后单击它,这将转到所选数据库的概览页面,您可以在其中查看数据库的各种操作。以下屏幕截图显示了相同的页面:
在这些选项中,您可以找到 Delete Database 选项。通过单击它,您将获得一个弹出窗口,询问您是否确定!单击删除以删除所选数据库。
CouchDB - Creating a Document
文档是 CouchDB 的中心数据结构。数据库的内容将以文档形式而不是表的形式存储。您可以使用 CouchDB 和 Futon 提供的 cURL 实用程序来创建这些文档。本章涵盖在数据库中创建文档的方法。
CouchDB 中的每个文档都有一个唯一的 ID。您可以选择您自己的 ID,它应该是字符串形式。通常使用 UUID(通用唯一标识符),它们是随机数,产生重复的可能性最小。首选这些以避免冲突。
Creating a Document using cURL Utility
您可以使用 PUT 方法向服务器发送 HTTP 请求,通过 cURL 实用程序在 CouchDB 中创建一个文档。以下是在 CouchDB 中创建文档的语法:
$ curl -X PUT http://127.0.0.1:5984/database name/"id" -d ' { document} '
使用 −X ,我们可以指定在与 HTTP 服务器通信时使用的 HTTP 自定义请求方法。在此情况下,我们使用 PUT 方法。当我们使用 PUT 方法时,url 的内容指定我们使用 HTTP 请求创建的对象名称。此处我们必须发送以下内容:
-
为我们创建文档所需数据库的名称。
-
The document id.
-
文档的数据。 −d 选项用于通过 HTTP 请求发送数据/文档。当编写文档时,只需在花括号中输入用冒号分隔的字段-值对,如下所示 −
{
Name : Raju
age : 23
Designation : Designer
}
Example
使用上述给出的语法,如果你想在名称为 my_database 的数据库中使用 id 001 创建文档,那么你可以按照如下所示进行创建。
$ curl -X PUT http://127.0.0.1:5984/my_database/"001" -d
'{ " Name " : " Raju " , " age " :" 23 " , " Designation " : " Designer " }'
{"ok":true,"id":"001","rev":"1-1c2fae390fa5475d9b809301bbf3f25e"}
CouchDB 对此请求的响应包含三个字段 −
-
"ok", 表明操作成功。
-
"id", 存储文档的 id 及
-
"rev", 这表明修订 id。每次修订(更新或修改)一个文档时,CouchDB 将生成一个 _rev 值。如果你想更新或删除一个文档,CouchDB 希望你包含你希望修改的修订的 _rev 字段。当 CouchDB 接受该更改时,它将生成一个新的修订号。此机制确保并发控制。
Creating a Document using Futon
要创建文档,请打开 http://127.0.0.1:5984/_utils/ url 以获取 CouchDB 的概述/索引页面,如下所示。
选择你要在其中创建文档的数据库。打开数据库的概述页面,然后选择 New Document 选项,如下所示。
当你选择 New Document 选项时,CouchDB 创建一个新的数据库文档,分配给它一个新的 id。你可以编辑 id 的值,并且可以以字符串的形式分配你自己的值。在下面的插图中,我们使用 id 001 创建了一个新文档。
在此页面,你可以观察到三个选项 − 保存文档、添加字段和上传附件。
CouchDB - Updating a Document
Updating Documents using cURL
你可以使用 cURL 实用程序通过使用 PUT 方法向服务器发送 HTTP 请求来更新 CouchDB 中的文档。以下是对文档进行更新的语法。
curl -X PUT http://127.0.0.1:5984/database_name/document_id/ -d '{ "field" : "value", "_rev" : "revision id" }'
Example
假设在名为 my_database 的数据库中有一个 id 为 001 的文档。你可以按照如下所示删除此内容。
首先,获取要更新的文档的修订 id。你可以在文档本身中找到文档的 _rev ,因此按如下所示获取文档。
$ curl -X GET http://127.0.0.1:5984/my_database/001
{
"_id" : "001",
"_rev" : "2-04d8eac1680d237ca25b68b36b8899d3 " ,
"age" : "23"
}
从文档中使用修订 id _rev 更新文档。在这里,我们将年龄从 23 更新为 24。
$ curl -X PUT http://127.0.0.1:5984/my_database/001/ -d
' { " age " : " 24 " , " _rev " : " 1-1c2fae390fa5475d9b809301bbf3f25e " } '
{ " ok " : true , " id " : " 001 " , " rev " : " 2-04d8eac1680d237ca25b68b36b8899d3 " }
Verification
若要验证文档,请按如下所示使用 GET 请求再次获取文档。
$ curl -X GET http://127.0.0.1:5984/my_database/001
{
" _id " : " 001 ",
" _rev " : " 2-04d8eac1680d237ca25b68b36b8899d3 " ,
" age " : " 23 "
}
以下是更新文档时需要指出的几个要点。
-
我们发送请求中包含数据库名称和文档 ID 的 URL。
-
更新现有文档与更新整个文档相同。你无法向现有文档添加一个字段。你只能使用同一个文档 ID 将整个新版本的文档写入数据库。
-
我们必须在 JSON 请求中提供版本号。
-
作为回报,JSON 包含成功消息、正在更新的文档 ID 以及新版本信息。如果你希望更新新版本的文档,则必须引用此最新版本号。
Updating Documents using Futon
若要删除文档,请打开 http://127.0.0.1:5984/_utils/ URL 以获取如下图所示的 CouchDB 的概述/索引页面。
选择存在待更新文档的数据库并单击它。我们在此更新名为 tutorials_point 的数据库中的一个文档。你将获得数据库中的文档列表,如下图所示。
选择要更新的文档并单击它。你将获得文档的内容,如下图所示。
在此,若要将位置从德里更新为海得拉巴,请单击文本框,编辑字段,然后单击绿色按钮以保存更改,如下图所示。
CouchDB - Deleting a Document
Deleting a Document using cURL Utility
你可以通过使用 cURL 实用工具通过 DELETE 方法向服务器发送 HTTP 请求,在 CouchDB 中删除文档。以下是删除文档的语法。
curl -X DELETE http : // 127.0.0.1:5984 / database name/database id?_rev id
使用 −X, ,我们可以指定与 HTTP 服务器通信时正在使用的自定义 HTTP 请求方法。在本例中,我们正在使用 Delete 方法。删除数据库 /database_name/database_id/ 不够。你必须通过 URL 传递最近的版本 ID。若要提及任何数据结构的属性,请使用 "?" 。
Example
假设名为 my_database 的数据库中有一个文档,其文档 ID 为 001。要删除此文档,你必须获取该文档的修订版 ID。按照如下所示获取文档数据。
$ curl -X GET http://127.0.0.1:5984/my_database/001
{
" _id " : " 001 ",
" _rev " : " 2-04d8eac1680d237ca25b68b36b8899d3 " ,
" age " : " 23 "
}
现在指定待删除的文档的版本 ID、文档 ID 以及文档所属的数据库名称,如下所示:
$ curl -X DELETE http://127.0.0.1:5984/my_database/001?rev=1-
3fcc78daac7a90803f0a5e383f4f1e1e
{"ok":true,"id":"001","rev":"2-3a561d56de1ce3305d693bd15630bf96"}
Deleting a Document using Futon
首先,验证数据库中的文档。以下是名为 tutorials_point 的数据库的快照。
你可以在此观察到,数据库包含三个文档。若要删除其中任何文档,如 003, ,请执行以下操作:
-
单击文档,你将获得一个页面,以字段-值对的形式显示所选文档的内容。
-
此页面还包含四个选项,即 Save Document, Add Field, Upload Attachment, Delete Document.
-
点击 Delete Document 选项。
-
出现一个对话框,显示 "Are you sure you want to delete this document?" ,点击删除以删除该文档。
CouchDB - Attaching Files
Attaching Files using cURL
你可以像电子邮件一样附加文件到 CouchDB。文件包含元数据,例如名称,以及包含的 MIME 类型和附件包含的字节数。若要将文件附加到文档中,你必须向服务器发送 PUT 请求。以下是要将文件附加到文档中的语法代码:
$ curl -vX PUT http://127.0.0.1:5984/database_name/database_id
/filename?rev=document rev_id --data-binary @filename -H "Content-Type:
type of the content"
请求具有多种选项,如下所示:
-
--data-binary@ − 此选项告诉 cURL 将文件的内容读入 HTTP 请求正文中。
-
-H − 此选项用于指定要上传的文件的内容类型。
Example
让我们通过向 CouchDB 发送 PUT 请求,将名为 boy.jpg, 的文件附加到数据库中 ID 为 001, 的文档上。在此之前,你必须获取 ID 为 001 的文档的数据,才能获取其当前 rev ID,如下所示:
$ curl -X GET http://127.0.0.1:5984/my_database/001
{
"_id": "001",
"_rev": "1-967a00dff5e02add41819138abb3284d"
}
现在,使用 _rev 值,向 CouchDB 服务器发送 PUT 请求,如下所示:
$ curl -vX PUT http://127.0.0.1:5984/my_database/001/boy.jpg?rev=1-
967a00dff5e02add41819138abb3284d --data-binary @boy.jpg -H "ContentType:
image/jpg"
Verification
若要验证附件是否已上传,请获取文档内容,如下所示:
$ curl -X GET http://127.0.0.1:5984/my_database/001
{
"_id": "001",
"_rev": "2-4705a219cdcca7c72aac4f623f5c46a8",
"_attachments": {
"boy.jpg": {
"content_type": "image/jpg",
"revpos": 2,
"digest": "md5-9Swz8jvmga5mfBIsmCxCtQ==",
"length": 91408,
"stub": true
}
}
}