- CouchDB 教程
- CouchDB - 首页
- CouchDB - 简介
- CouchDB - 安装
- CouchDB - Curl & Futon
- CouchDB - HTTP API
- CouchDB - 创建数据库
- CouchDB - 删除数据库
- CouchDB - 创建文档
- CouchDB - 更新文档
- CouchDB - 删除文档
- CouchDB - 附加文件
- CouchDB 有用资源
- CouchDB 快速指南
- CouchDB - 资源
- CouchDB - 讨论
CouchDB 快速指南
CouchDB - 简介
数据库管理系统提供数据存储和检索机制。主要有三种类型的数据库管理系统,即 RDBMS(关系型数据库管理系统)、OLAP(联机分析处理系统)和 NoSQL。
RDBMS
RDBMS 代表关系型数据库管理系统。RDBMS 是 SQL 的基础,也是所有现代数据库系统(如 MS SQL Server、IBM DB2、Oracle、MySQL 和 Microsoft Access)的基础。
关系型数据库管理系统 (RDBMS) 是一种基于 E. F. Codd 引入的关系模型的数据库管理系统 (DBMS)。
RDBMS 中的数据存储在称为表的数据库对象中。表是相关数据条目的集合,由列和行组成。它只存储结构化数据。
OLAP
联机分析处理服务器 (OLAP) 基于多维数据模型。它允许管理人员和分析师通过快速、一致和交互的方式访问信息来深入了解信息。
NoSQL 数据库
NoSQL 数据库(有时称为 Not Only SQL)是一种数据库,它提供了一种存储和检索数据的机制,不同于关系数据库中使用的表格关系。这些数据库是无模式的,支持轻松复制,具有简单的 API,最终一致,并且可以处理海量数据(大数据)。
NoSQL 数据库的主要目标如下:
- 设计简单;
- 水平扩展;以及
- 对可用性的更精细控制。
NoSQL 数据库与关系数据库相比使用了不同的数据结构。这使得 NoSQL 中某些操作更快。给定 NoSQL 数据库的适用性取决于它必须解决的问题。这些数据库存储结构化数据和非结构化数据,例如音频文件、视频文件、文档等。这些 NoSQL 数据库分为三种类型,如下所述。
键值存储 - 这些数据库设计用于存储键值对中的数据,并且这些数据库没有任何模式。在这些数据库中,每个数据值都包含一个索引键和该键的值。
示例 - BerkeleyDB、Cassandra、DynamoDB、Riak。
列存储 - 在这些数据库中,数据存储在按数据列分组的单元格中,这些列进一步分组到列族中。这些列族可以包含任意数量的列。
示例 - BigTable、HBase 和 HyperTable。
文档存储 - 这些数据库是在键值存储的基本思想上开发的,其中“文档”包含更复杂的数据。在这里,每个文档都分配一个唯一键,用于检索文档。这些数据库设计用于存储、检索和管理面向文档的信息,也称为半结构化数据。
示例 - CouchDB 和 MongoDB。
什么是 CouchDB?
CouchDB 是 Apache 软件基金会开发的一个开源数据库。其重点是易用性和对 Web 的支持。它是一个 NoSQL 文档存储数据库。
它使用 JSON 存储数据(文档),使用 JavaScript 作为其查询语言来转换文档,使用 HTTP 协议作为 API 来访问文档,并使用 Web 浏览器查询索引。它是一个于 2005 年发布的多主应用程序,并于 2008 年成为 Apache 项目。
为什么选择 CouchDB?
CouchDB 具有基于 HTTP 的 REST API,这有助于轻松地与数据库进行通信。HTTP 资源和方法(GET、PUT、DELETE)的简单结构易于理解和使用。
由于我们将数据存储在灵活的面向文档的结构中,因此无需担心数据的结构。
为用户提供了强大的数据映射功能,允许查询、组合和过滤信息。
CouchDB 提供易于使用的复制功能,可以使用该功能在数据库和机器之间复制、共享和同步数据。
数据模型
数据库是 CouchDB 中最外层的数据结构/容器。
每个数据库都是独立文档的集合。
每个文档都维护自己的数据和自包含的模式。
文档元数据包含修订信息,这使得合并数据库断开连接时发生的差异成为可能。
CouchDB 实现多版本并发控制,以避免在写入期间需要锁定数据库字段。
CouchDB 的特性:减少内容
文档存储
CouchDB 是一个文档存储 NoSQL 数据库。它提供存储具有唯一名称的文档的功能,并且它还提供了一个名为 RESTful HTTP API 的 API 用于读取和更新(添加、编辑、删除)数据库文档。
在 CouchDB 中,文档是数据的主要单元,并且它们还包括元数据。文档字段具有唯一名称,并包含各种类型的值(文本、数字、布尔值、列表等),并且文本大小或元素数量没有设置限制。
文档更新(添加、编辑、删除)遵循原子性,即它们将完全保存或根本不保存。数据库将没有任何部分保存或编辑的文档。
Json 文档结构
{
"field" : "value",
"field" : "value",
"field" : "value",
}
ACID 属性
CouchDB 将 ACID 属性作为其特性之一。
一致性 - 一旦 CouchDB 中的数据提交,则不会修改或覆盖此数据。因此,CouchDB 确保数据库文件始终处于一致状态。
CouchDB 读取使用多版本并发控制 (MVCC) 模型,因此客户端将看到从读取操作开始到结束的数据库一致快照。
每当更新文档时,CouchDB 都会将数据刷新到磁盘,并且更新的数据库头以两个连续且相同的块写入,构成文件的头 4k,然后同步刷新到磁盘。刷新期间的部分更新将被丢弃。
如果在提交头文件时发生故障,则先前相同头文件的生存副本将保留,确保所有先前已提交数据的连贯性。除了头区域之外,崩溃或断电后不需要一致性检查或修复。
压缩
每当数据库文件中浪费的空间超过一定程度时,所有活动数据都将被复制(克隆)到一个新文件中。当复制过程完全完成时,旧文件将被丢弃。所有这些都是由压缩过程完成的。数据库在压缩期间保持在线状态,并且允许所有更新和读取成功完成。
视图
CouchDB 中的数据存储在半结构化文档中,这些文档具有灵活的单个隐式结构,但它是一个用于数据存储和共享的简单文档模型。如果我们想以许多不同的方式查看我们的数据,我们需要一种方法来过滤、组织和报告尚未分解成表格的数据。
为了解决这个问题,CouchDB 提供了一个视图模型。视图是聚合和报告数据库中文档的方法,并且是按需构建的,用于聚合、连接和报告数据库文档。因为视图是动态构建的并且不会影响底层文档,所以您可以根据需要拥有尽可能多的相同数据的不同视图表示。
历史
- CouchDB是用Erlang编程语言编写的。
- 它由 Damien Katz 于 2005 年启动。
- CouchDB 于 2008 年成为 Apache 项目。
CouchDB 的当前版本是 1.61。
CouchDB - 安装
本章将教您如何在 Windows 和 Linux 系统中安装 CouchDB。
在 Windows 中安装 CouchDB
下载 CouchDB
CouchDB 的官方网站是 https://couchdb.apache.org。单击给定的链接,您可以获得 CouchDB 官方网站的首页,如下所示。
如果单击下载按钮,将跳转到一个页面,其中提供各种格式的 CouchDB 下载链接。以下快照说明了这一点。
选择 Windows 系统的下载链接,然后选择提供的镜像之一开始下载。
安装 CouchDB
CouchDB 将以名为setup-couchdb-1.6.1_R16B02.exe的安装文件形式下载到您的系统中。运行安装文件并继续安装。
安装后,通过访问以下链接: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"
}
}
您可以使用以下网址与 CouchDB Web 界面进行交互:
http://127.0.0.1:5984/_utils/
这将显示 Futon 的索引页面,Futon 是 CouchDB 的 Web 界面。
在 Linux 系统中安装 CouchDB
对于许多 Linux 系统,它们内部都提供 CouchDB。要安装此 CouchDB,请按照说明操作。
在 Ubuntu 和 Debian 上,您可以使用:
sudo aptitude install couchdb
在 Gentoo Linux 上,可以使用 CouchDB ebuild:
sudo emerge couchdb
如果您的 Linux 系统没有 CouchDB,请按照下一节说明安装 CouchDB 及其依赖项。
安装 CouchDB 依赖项
以下是要在系统中获取 CouchDB 需要安装的依赖项列表:
- Erlang OTP
- ICU
- OpenSSL
- Mozilla SpiderMonkey
- GNU Make
- GNU 编译器集合
- libcurl
- help2man
- Python 用于文档
- 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
注意 - 对于所有这些命令,您都需要使用 sudo。以下过程将普通用户转换为 sudoer。
以管理员用户 root 身份登录
使用以下命令打开sudo文件:
visudo
- 然后按如下所示进行编辑,以授予您现有用户 sudoer 权限:
Hadoop All=(All) All , and press esc : x to write the changes to the file.
在系统中下载所有依赖项后,请按照给定的说明下载 CouchDB。
下载 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
配置 CouchDB
要配置 CouchDB,请执行以下操作:
- 浏览到 CouchDB 的主文件夹。
- 以超级用户身份登录。
- 使用如下所示的 ./configure 提示进行配置:
$ cd apache-couchdb-1.6.1 $ su Password: # ./configure --with-erlang=/usr/lib64/erlang/usr/include/
它将为您提供如下所示的类似输出,最后一行显示:- 您已配置 Apache CouchDB,是时候放松一下了。
# ./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.
安装 CouchDB
现在键入以下命令以在您的系统中安装 CouchDB。
# make && sudo make install
它在您的系统中安装 CouchDB,最后一行显示:- 您已安装 Apache CouchDB,是时候放松一下了。
启动 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 是一个 Web 界面,请尝试在浏览器中键入以下主页网址。
http://127.0.0.1:5984/
它会产生以下输出:
{
"couchdb":"Welcome",
"uuid":"8f0d59acd0e179f5e9f0075fa1f5e804",
"version":"1.6.1",
"vendor":{
"name":"The Apache Software Foundation",
"version":"1.6.1"
}
}
CouchDB - Curl & Futon
cURL 实用程序
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 实用工具。
使用 cURL 实用工具
只需键入 cURL 后跟网站地址,即可使用 cURL 实用工具访问任何网站,如下所示:
curl www.tutorialspoint.com/
默认情况下,cURL 实用工具会返回请求页面的源代码。它会在终端窗口中显示此代码。
cURL 实用工具选项
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 标记
(HTTP) 指定与 HTTP 服务器通信时使用的自定义请求方法。指定的请求将代替其他使用的(默认为 GET)方法。阅读 HTTP 1.1 规范以了解详细信息和解释。
(FTP) 指定在使用 ftp 进行文件列表时使用的自定义 FTP 命令,以代替 LIST。
-H
(HTTP) 获取网页时使用额外的标头。请注意,如果你添加的自定义标头与 cURL 将使用的内部标头名称相同,则将使用你外部设置的标头代替内部标头。这允许你执行比 cURL 通常执行的更复杂的 작업。你不应在完全不知道自己在做什么的情况下替换内部设置的标头。用冒号右侧没有内容的标头替换内部标头,将阻止该标头出现。
cURL 确保你添加/替换的每个标头都以正确的行尾标记发送。你不应该将其作为标头内容的一部分添加,也不应添加换行符或回车符来打乱顺序。
另请参见 -A/--user-agent 和 -e/--referer 选项。
此选项可以多次使用以添加/替换/删除多个标头。
-d 标记
使用 cURL 的此标记,你可以将数据与 HTTP POST 请求一起发送到服务器,就像用户在表单中填写并提交数据一样。
示例
假设有一个网站,你想登录到它或使用 cURL 实用工具的 –d 标记向网站发送一些数据,如下所示。
curl -X PUT http://mywebsite.com/login.html -d userid=001 -d password=tutorialspoint
它发送一个看起来像“userid=001&password=tutorialspoint”的 POST 数据块。同样,你也可以使用 -d 标记发送文档(JSON)。
-o 标记
使用此标记,cURL 会将请求的输出写入文件。
示例
以下示例显示了 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 的源代码复制到其中。
示例
以下示例显示了 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 首页的源代码保存在其中。
你好 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"
}
}
所有数据库列表
你可以通过发送带有字符串“_all_dbs 字符串”的 GET 请求来获取所有已创建数据库的列表。以下是获取 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" ]
创建数据库
你可以使用带有 PUT 标头的 cURL 在 CouchDB 中创建数据库,使用以下语法:
$ curl -X PUT http://127.0.0.1:5984/database_name
示例
例如,使用上面给出的语法创建一个名为 my_database 的数据库,如下所示。
$ curl -X PUT http://127.0.0.1:5984/my_database
{"ok":true}
验证
通过列出所有数据库来验证数据库是否已创建,如下所示。在这里,你可以看到列表中新创建的数据库名称 “my_database”
$ curl -X GET http://127.0.0.1:5984/_all_dbs [ "_replicator " , "_users" , "my_database" ]
获取数据库信息
你可以使用带有数据库名称的 GET 请求获取有关数据库的信息。以下是获取数据库信息的语法。
示例
例如,让我们获取名为 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 功能的完全访问权限。以下是这些功能的列表:
数据库:- 创建数据库。
- 销毁数据库。
- 创建文档。
- 更新文档。
- 编辑文档。
- 删除文档。
启动 Futon
确保 CouchDB 正在运行,然后在浏览器中打开以下 url:
http://127.0.0.1:5984/_utils/
如果你打开此 url,它将显示 Futon 首页,如下所示:
在此页面的左侧,你可以看到 CouchDB 中所有当前数据库的列表。在此示例中,我们有一个名为 my_database 的数据库,以及系统定义的数据库 _replicator 和 _user。
在右侧,你可以看到以下内容:
工具 - 在此部分,你可以找到配置来配置 CouchDB,复制器来执行复制,以及状态来验证 CouchDB 的状态和最近对 CouchDB 进行的修改。
文档 - 此部分包含 CouchDB 最新版本的完整文档。
诊断 - 在此之下,你可以验证 CouchDB 的安装。
最近的数据库 - 在此之下,你可以找到最近添加的数据库的名称。
CouchDB - HTTP API
使用 HTTP 请求标头,你可以与 CouchDB 通信。通过这些请求,我们可以从数据库中检索数据,以文档的形式将数据存储到数据库中,并且我们可以查看和格式化存储在数据库中的文档。
HTTP 请求格式
在与数据库通信时,我们将使用不同的请求格式,如 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 请求标头
应提供 HTTP 标头以获取正确的格式和编码。向 CouchDB 服务器发送请求时,你可以随请求一起发送 Http 请求标头。以下是不同的 Http 请求标头。
Content-type - 此标头用于指定我们随请求一起提供给服务器的数据的内容类型。我们随请求一起发送的内容类型大多数是 MIME 类型或 JSON (application/json)。强烈建议在请求中使用 Content-type。
Accept - 此标头用于指定服务器,客户端可以理解的数据类型列表,以便服务器将使用这些数据类型发送其响应。通常,你可以在此处发送客户端接受的 MIME 数据类型列表,用冒号分隔。
尽管在 CouchDB 的查询中不需要使用 Accept,但强烈建议使用它以确保客户端可以处理返回的数据。
响应标头
这些是服务器发送的响应的标头。这些标头提供有关服务器作为响应发送的内容的信息。
Content-type - 此标头指定服务器返回的数据的 MIME 类型。对于大多数请求,返回的 MIME 类型为 text/plain。
Cache-control - 此标头建议客户端如何处理服务器发送的信息。CouchDB 主要返回 must-revalidate,这表示如果可能,应重新验证信息。
Content-length - 此标头以字节为单位返回服务器发送的内容长度。
Etag - 此标头用于显示文档或视图的修订版。
状态代码
以下是 http 标头发送的状态代码及其说明的表格形式。
| 序号 | 状态代码和说明 |
|---|---|
| 1 | 200 - OK 当请求成功完成时,将发出此状态。 |
| 2 | 201 - Created 创建文档时将发出此状态。 |
| 3 | 202 - Accepted 接受请求时将发出此状态。 |
| 4 | 404 - Not Found 当服务器无法找到请求的内容时,将发出此状态。 |
| 5 | 405 - Resource Not Allowed 当使用的 HTTP 请求类型无效时,将发出此状态。 |
| 6 | 409 - Conflict 每当发生任何更新冲突时,将发出此状态。 |
| 7 | 415 − 内容类型错误 此状态表示服务器不支持请求的内容类型。 |
| 8 | 500 − 内部服务器错误 当请求中发送的数据无效时,将发出此状态。 |
HTTP URL 路径
可以使用某些 URL 路径直接与数据库交互。以下是此类 URL 路径的表格格式。
| 序号 | URL 和操作 |
|---|---|
| 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 用于访问指定数据库中设计文档中的视图 view-name。 |
CouchDB - 创建数据库
数据库是 CouchDB 中最外层的数据结构,用于存储您的文档。您可以使用 CouchDB 提供的 cURL 实用程序以及 CouchDB 的 Web 界面 Futon 创建这些数据库。
使用 cURL 实用程序创建数据库
您可以通过使用 cURL 实用程序通过 PUT 方法向服务器发送 HTTP 请求来在 CouchDB 中创建数据库。以下是创建数据库的语法:
$ curl -X PUT http://127.0.0.1:5984/database name
使用-X,我们可以指定要使用的 HTTP 自定义请求方法。在本例中,我们使用 PUT 方法。当我们使用 PUT 操作/方法时,URL 的内容指定了我们使用 HTTP 请求创建的对象名称。在这里,我们必须通过 URL 中的 put 请求发送数据库的名称来创建数据库。
示例
如果使用上述语法要创建一个名为my_database的数据库,可以按如下方式创建:
curl -X PUT http://127.0.0.1:5984/my_database
{
"ok":true
}
作为响应,服务器将返回一个内容为“ok” - true 的 JSON 文档,表示操作成功。
验证
通过列出所有数据库来验证是否已创建数据库,如下所示。在这里您可以看到列表中新创建的数据库名称" my_database "。
$ curl -X GET http://127.0.0.1:5984/_all_dbs [ "_replicator " , " _users " , " my_database " ]
使用 Futon 创建数据库
要创建数据库,请打开http://127.0.0.1:5984/_utils/。您将获得 CouchDB 的概述/索引页面,如下所示。
在此页面中,您可以看到 CouchDB 中的数据库列表,左侧有一个“创建数据库”选项按钮。
现在单击创建数据库链接。您会看到一个弹出窗口“创建新的数据库”,要求您为新数据库输入数据库名称。选择符合上述标准的任何名称。在这里,我们正在创建另一个名为 tutorials_point 的数据库。单击创建按钮,如下面的屏幕截图所示。
CouchDB - 删除数据库
使用 cURL 实用程序删除数据库
您可以通过使用 cURL 实用程序通过 DELETE 方法向服务器发送请求来删除 CouchDB 中的数据库。以下是创建数据库的语法:
$ curl -X DELETE http://127.0.0.1:5984/database name
使用-X,我们可以指定我们与 HTTP 服务器通信时使用的 HTTP 自定义请求方法。在本例中,我们使用 DELETE 方法。通过在其中指定要删除的数据库,将 URL 发送到服务器。
示例
假设 CouchDB 中存在名为 my_database2 的数据库。如果使用上述语法要删除它,可以按如下方式进行:
$ curl -X DELETE http://127.0.0.1:5984/my_database2
{
"ok" : true
}
作为响应,服务器将返回一个内容为“ok” - true 的 JSON 文档,表示操作成功。
验证
通过列出所有数据库来验证是否已删除数据库,如下所示。在这里您可以看到已删除的数据库名称"my_database"不在列表中。
$ curl -X GET http://127.0.0.1:5984/_all_dbs [ "_replicator " , " _users " ]
使用 Futon 删除数据库
要删除数据库,请打开http://127.0.0.1:5984/_utils/ URL,您将获得 CouchDB 的概述/索引页面,如下所示。
在这里您可以看到三个用户创建的数据库。让我们删除名为 tutorials_point2 的数据库。要删除数据库,请从数据库列表中选择一个,然后单击它,这将导致进入所选数据库的概述页面,您可以在其中看到数据库上的各种操作。以下屏幕截图显示了相同的内容:
其中您可以找到“删除数据库”选项。单击它后,您将获得一个弹出窗口,询问您是否确定!单击删除以删除所选数据库。
CouchDB - 创建文档
文档是 CouchDB 的核心数据结构。数据库的内容将以文档的形式存储,而不是以表格的形式存储。您可以使用 CouchDB 提供的 cURL 实用程序以及 Futon 创建这些文档。本章介绍在数据库中创建文档的方法。
CouchDB 中的每个文档都有一个唯一的 ID。您可以选择自己的 ID,该 ID 应为字符串形式。通常使用 UUID(通用唯一标识符),它们是随机数,创建重复项的可能性最小。这些是避免冲突的首选方法。
使用 cURL 实用程序创建文档
您可以通过使用 cURL 实用程序通过 PUT 方法向服务器发送 HTTP 请求来在 CouchDB 中创建文档。以下是创建文档的语法:
$ curl -X PUT http://127.0.0.1:5984/database name/"id" -d ' { document} '
使用-X,我们可以指定我们与 HTTP 服务器通信时使用的 HTTP 自定义请求方法。在本例中,我们使用 PUT 方法。当我们使用 PUT 方法时,URL 的内容指定了我们使用 HTTP 请求创建的对象名称。在这里,我们必须发送以下内容:
我们要在其中创建文档的数据库名称。
文档 ID。
文档的数据。-d 选项用于通过 HTTP 请求发送数据/文档。在编写文档时,只需在花括号内输入用冒号分隔的字段-值对,如下所示:
{
Name : Raju
age : 23
Designation : Designer
}
示例
如果使用上述语法要在名为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 接受更改时,它将生成一个新的修订号。此机制确保并发控制。
验证
如果要查看已创建的文档,可以使用文档获取它,如下所示。
$ curl -X GET http://127.0.0.1:5984/my_database/001
{
"_id": "001",
"_rev": "1-3fcc78daac7a90803f0a5e383f4f1e1e",
"Name": "Raju",
"age": 23,
"Designation": "Designer"
}
使用 Futon 创建文档
要创建文档,请打开http://127.0.0.1:5984/_utils/ URL 以获取 CouchDB 的概述/索引页面,如下所示。
选择要在其中创建文档的数据库。打开数据库的概述页面,然后选择“新建文档”选项,如下所示。
选择“新建文档”选项后,CouchDB 将创建一个新的数据库文档,并为其分配一个新的 ID。您可以编辑 ID 的值,并可以将自己的值分配为字符串形式。在下图中,我们创建了一个 ID 为 001 的新文档。
在此页面中,您可以看到三个选项:保存文档、添加字段和上传附件。
向文档添加字段
要向文档添加字段,请单击“添加字段”选项。创建数据库后,您可以使用此选项向其添加字段。单击它将获得一对文本框,即“字段”和“值”。您可以通过单击它们来编辑这些值。编辑这些值并输入您所需的字段-值对。单击绿色按钮保存这些值。
在下图中,我们创建了三个字段:员工的姓名、年龄和职位。
保存文档
您可以通过单击此选项来保存对文档所做的更改。保存后,将生成一个新的 ID_rev,如下所示。
CouchDB - 更新文档
使用 cURL 更新文档
您可以通过使用 cURL 实用程序通过 PUT 方法向服务器发送 HTTP 请求来更新 CouchDB 中的文档。以下是更新文档的语法:
curl -X PUT http://127.0.0.1:5984/database_name/document_id/ -d '{ "field" : "value", "_rev" : "revision id" }'
示例
假设名为 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 " }
验证
要验证文档,请使用 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 和新的修订信息。如果要更新文档的新版本,则必须引用此最新的修订号。
使用 Futon 更新文档
要删除文档,请打开http://127.0.0.1:5984/_utils/ URL 以获取 CouchDB 的概述/索引页面,如下所示。
选择存在要更新文档的数据库并单击它。在这里,我们正在更新名为tutorials_point的数据库中的文档。您将获得数据库中文档的列表,如下所示。
选择要更新的文档并单击它。您将获得文档的内容,如下所示。
在这里,要将位置从 Delhi 更新为 Hyderabad,请单击文本框,编辑字段,然后单击绿色按钮保存更改,如下所示。
CouchDB - 删除文档
使用 cURL 实用程序删除文档
您可以通过使用 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。要提及任何数据结构的属性,可以使用“?”。
示例
假设名为my_database的数据库中有一个文档,其文档 ID 为 001。要删除此文档,您必须获取文档的 rev 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"}
验证
要验证文档是否已删除,请尝试使用GET方法获取文档。由于您正在获取已删除的文档,这将给您一个错误消息,如下所示:
$ curl -X GET http://127.0.0.1:5984/my_database/001
{"error":"not_found","reason":"deleted"}
使用 Futon 删除文档
首先,验证数据库中的文档。以下是名为tutorials_point的数据库的快照。
在这里您可以看到,数据库包含三个文档。要删除任何文档,例如003,请执行以下操作:
点击文档,您将看到一个页面,以字段-值对的形式显示所选文档的内容。
此页面还包含四个选项,即**保存文档、添加字段、上传附件、删除文档。**
点击**删除文档**选项。
您将看到一个对话框,提示**“您确定要删除此文档吗?”** 点击删除以删除文档。
CouchDB - 附加文件
使用 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** − 此选项用于提及我们将要上传文件的內容类型。
示例
让我们将名为**boy.jpg**的文件附加到名为**my_database**的数据库中 ID 为**001**的文档中,方法是向 CouchDB 发送 PUT 请求。在此之前,您必须获取 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"
验证
要验证附件是否已上传,请获取文档内容,如下所示:
$ 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
}
}
}
使用 Futon 上传附件
上传附件
使用此选项,您可以将新的附件(例如文件、图像或文档)上传到数据库。为此,请单击**上传附件**按钮。将出现一个对话框,您可以在其中选择要上传的文件。选择文件并单击**上传**按钮。
上传的文件将显示在 _attachments 字段下。稍后您可以单击它查看文件。