- 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 欄位下。稍後您可以單擊它檢視檔案。