CouchDB – 快速指南
CouchDB – 快速指南
CouchDB – 介绍
数据库管理系统提供了存储和检索数据的机制。数据库管理系统主要分为三种类型,即 RDBMS(关系数据库管理系统)、OLAP(在线分析处理系统)和 NoSQL。
关系型数据库管理系统
RDBMS 代表关系数据库管理系统。RDBMS 是 SQL 以及所有现代数据库系统(如 MS SQL Server、IBM DB2、Oracle、MySQL 和 Microsoft Access)的基础。
关系数据库管理系统 (RDBMS) 是基于 EF 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 软件基金会开发的开源数据库。重点是易用性,拥抱网络。它是一个 NoSQL 文档存储数据库。
它使用 JSON 来存储数据(文档),使用 java 脚本作为其查询语言来转换文档,使用 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", }
酸特性
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的安装文件的形式下载到您的系统中。运行安装文件并继续安装。
安装完成后,访问以下链接打开 CouchDB 的内置 Web 界面
:http://127.0.0.1:5984/。如果一切顺利,这将为您提供一个网页,其中包含以下输出。
{ "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 的索引页面,它是 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 而要安装的依赖项列表 –
- 二郎OTP
- 重症监护室
- 开放式SSL
- Mozilla 蜘蛛猴
- GNU 制造
- GNU 编译器集合
- 卷曲
- 帮助2人
- 用于文档的 Python
- 蟒蛇狮身人面像
要安装这些依赖项,请在终端中键入以下命令。这里我们使用的是 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 界面,请尝试在浏览器中键入以下主页 url。
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 实用程序是一种与 CouchDB 通信的方式。
它是一种使用支持的协议之一(HTTP、HTTPS、FTP、FTPS、TFTP、DICT、TELNET、LDAP 或 FILE)从服务器或向服务器传输数据的工具。该命令旨在无需用户交互即可工作。cURL 提供了大量有用的技巧,例如代理支持、用户身份验证、ftp 上传、HTTP 发布、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”的帖子块。同样,您也可以使用 -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 实例发送 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" } }
所有数据库的列表
您可以通过发送 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" ]
创建数据库
您可以使用带有 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 是 CouchDB 的内置、基于 Web 的管理界面。它提供了一个简单的图形界面,您可以使用它与 CouchDB 进行交互。它是一个简单的界面,它提供对所有 CouchDB 功能的完全访问。以下是这些功能的列表 –
数据库 –
- 创建数据库。
- 破坏数据库。
文件 –
- 创建文档。
- 更新文档。
- 编辑文档。
- 删除文档。
开始被褥
确保 CouchDB 正在运行,然后在浏览器中打开以下网址 –
http://127.0.0.1:5984/_utils/
如果您打开此网址,它将显示蒲团主页,如下所示 –
-
在此页面的左侧,您可以观察到 CouchDB 的所有当前数据库的列表。在这个插图中,我们有一个名为my_database的数据库,以及系统定义的数据库_replicator和_user。
-
在右侧,您可以看到以下内容 –
-
工具– 在本节中,您可以找到Configuration来配置 CouchDB,Replicator来执行复制,以及Status来验证 CouchDB 的状态和最近在 CouchDB 上所做的修改。
-
文档– 本节包含 CouchDB 最新版本的完整文档。
-
诊断– 在此您可以验证 CouchDB 的安装。
-
最近的数据库– 在此之下,您可以找到最近添加的数据库的名称。
-
CouchDB – HTTP API
使用 HTTP 请求标头,您可以与 CouchDB 通信。通过这些请求,我们可以从数据库中检索数据,将数据以文档的形式存储到数据库中,我们可以查看和格式化存储在数据库中的文档。
HTTP 请求格式
在与数据库通信时,我们将使用不同的请求格式,如 get、head、post、put、delete 和 copy。对于 CouchDB 中的所有操作,输入数据和输出数据结构将采用 JavaScript Object Notation (JSON) 对象的形式。
以下是用于与 CouchDB 通信的 HTTP 协议的不同请求格式。
-
GET – 此格式用于获取特定项目。要获得不同的项目,您必须发送特定的 url 模式。在 CouchDB 中使用这个 GET 请求,我们可以以 JSON 文档的形式(大多数情况下)获取静态项目、数据库文档和配置以及统计信息。
-
HEAD – HEAD 方法用于获取不带响应正文的 GET 请求的 HTTP 标头。
-
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 标头发送的状态代码的表格形式及其说明。
Sr.No. | 状态代码和描述 |
---|---|
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 路径
使用某些 url 路径,您可以直接与数据库交互。以下是此类 url 路径的表格格式。
Sr.No. | 网址和操作 |
---|---|
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”的 JSON 文档– true表示操作成功。
确认
通过列出所有数据库来验证是否创建了数据库,如下所示。在这里,您可以观察列表中新创建的数据库的名称“ 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 中的数据库列表,左侧有一个选项按钮 Create Database。
现在单击创建数据库链接。您可以看到一个弹出窗口创建新数据库,询问新数据库的数据库名称。按照上述标准选择任何名称。在这里,我们正在创建另一个名为 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”的 JSON 文档– true表示操作成功。
确认
通过列出所有数据库来验证数据库是否被删除,如下所示。在这里您可以观察已删除数据库的名称,列表中没有“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(Universally Unique IDentifier),它是最不可能产生重复的随机数。这些是首选以避免冲突。
使用 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 请求发送数据/文档。在编写文档时,只需在花括号内输入以冒号分隔的 Field-Value 对,如下所示 –
{ 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 的概览/索引页面,如下所示。
选择要在其中创建文档的数据库。打开数据库的概览页面并选择新建文档选项,如下所示。
当您选择New Document选项时,CouchDB 会创建一个新的数据库文档,并为其分配一个新的 id。您可以编辑 id 的值,也可以以字符串的形式分配您自己的值。在下图中,我们创建了一个 ID 为 001 的新文档。
在此页面中,您可以看到三个选项 – 保存文档、添加字段和上传附件。
将字段添加到文档
要向文档添加字段,请单击“添加字段”选项。创建数据库后,您可以使用此选项向其添加字段。点击它会给你一对文本框,即字段,值。您可以通过单击这些值来编辑它们。编辑这些值并键入所需的 Field-Value 对。单击绿色按钮保存这些值。
在下图中,我们创建了三个字段 Name、age 和 Designation of the employee。
保存文件
您可以通过单击此选项来保存对文档所做的更改。保存后会生成一个新的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的数据库中的文档。您将获得数据库中的文档列表,如下所示。
选择要更新的文档并单击它。您将获得如下所示的文件内容。
在这里,要将位置从德里更新到海得拉巴,请单击文本框,编辑该字段,然后单击绿色按钮以保存更改,如下所示。
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,到文档ID为001,在指定的数据库MY_DATABASE通过发送PUT请求到CouchDB的。在此之前,您必须获取 id 为001的文档的数据以获取其当前的rev id,如下所示。
$ curl -X GET http://127.0.0.1:5984/my_database/001 { "_id": "001", "_rev": "1-967a00dff5e02add41819138abb3284d" }
现在使用_rev值,将 PUT 请求发送到 CouchDB 服务器,如下所示。
$ 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 } } }
使用蒲团附加文件
上传附件
使用此选项,您可以将新附件(例如文件、图像或文档)上传到数据库。为此,请单击“上传附件”按钮。将出现一个对话框,您可以在其中选择要上传的文件。选择文件并单击上传按钮。
上传的文件将显示在 _attachments 字段下。稍后您可以通过单击该文件来查看该文件。