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 官方網站的首頁,如下所示。

Download CouchDB

如果單擊下載按鈕,將跳轉到一個頁面,其中提供各種格式的 CouchDB 下載連結。以下快照說明了這一點。

CouchDB Formats

選擇 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 介面。

Web Interface

在 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 的快照。

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 首頁,如下所示:

Futon Homepage
  • 在此頁面的左側,你可以看到 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 的概述/索引頁面,如下所示。

Futon Homepage

在此頁面中,您可以看到 CouchDB 中的資料庫列表,左側有一個“建立資料庫”選項按鈕。

現在單擊建立資料庫連結。您會看到一個彈出視窗“建立新的資料庫”,要求您為新資料庫輸入資料庫名稱。選擇符合上述標準的任何名稱。在這裡,我們正在建立另一個名為 tutorials_point 的資料庫。單擊建立按鈕,如下面的螢幕截圖所示。

Create Database

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 的概述/索引頁面,如下所示。

Delete Database1

在這裡您可以看到三個使用者建立的資料庫。讓我們刪除名為 tutorials_point2 的資料庫。要刪除資料庫,請從資料庫列表中選擇一個,然後單擊它,這將導致進入所選資料庫的概述頁面,您可以在其中看到資料庫上的各種操作。以下螢幕截圖顯示了相同的內容:

Delete Database2

其中您可以找到“刪除資料庫”選項。單擊它後,您將獲得一個彈出視窗,詢問您是否確定!單擊刪除以刪除所選資料庫。

Delete Database3

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 的概述/索引頁面,如下所示。

Create Document

選擇要在其中建立文件的資料庫。開啟資料庫的概述頁面,然後選擇“新建文件”選項,如下所示。

New Document

選擇“新建文件”選項後,CouchDB 將建立一個新的資料庫文件,併為其分配一個新的 ID。您可以編輯 ID 的值,並可以將自己的值分配為字串形式。在下圖中,我們建立了一個 ID 為 001 的新文件。

New Document ID

在此頁面中,您可以看到三個選項:儲存文件、新增欄位和上傳附件。

向文件新增欄位

要向文件新增欄位,請單擊“新增欄位”選項。建立資料庫後,您可以使用此選項向其新增欄位。單擊它將獲得一對文字框,即“欄位”和“值”。您可以透過單擊它們來編輯這些值。編輯這些值並輸入您所需的欄位-值對。單擊綠色按鈕儲存這些值。

在下圖中,我們建立了三個欄位:員工的姓名、年齡和職位。

Create Field

儲存文件

您可以透過單擊此選項來儲存對文件所做的更改。儲存後,將生成一個新的 ID_rev,如下所示。

Save Document

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 的概述/索引頁面,如下所示。

Create Document

選擇存在要更新文件的資料庫並單擊它。在這裡,我們正在更新名為tutorials_point的資料庫中的文件。您將獲得資料庫中文件的列表,如下所示。

Update Document

選擇要更新的文件並單擊它。您將獲得文件的內容,如下所示。

Document Contents

在這裡,要將位置從 Delhi 更新為 Hyderabad,請單擊文字框,編輯欄位,然後單擊綠色按鈕儲存更改,如下所示。

Save Changes

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的資料庫的快照。

Deleting Document

在這裡您可以看到,資料庫包含三個文件。要刪除任何文件,例如003,請執行以下操作:

  • 點選文件,您將看到一個頁面,以欄位-值對的形式顯示所選文件的內容。

  • 此頁面還包含四個選項,即**儲存文件、新增欄位、上傳附件、刪除文件。**

  • 點選**刪除文件**選項。

  • 您將看到一個對話方塊,提示**“您確定要刪除此文件嗎?”** 點選刪除以刪除文件。

Delete Document2

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 上傳附件

上傳附件

使用此選項,您可以將新的附件(例如檔案、影像或文件)上傳到資料庫。為此,請單擊**上傳附件**按鈕。將出現一個對話方塊,您可以在其中選擇要上傳的檔案。選擇檔案並單擊**上傳**按鈕。

Upload Attachment

上傳的檔案將顯示在 _attachments 欄位下。稍後您可以單擊它檢視檔案。

廣告
© . All rights reserved.