CouchDB介紹:
CouchDB是Apache組織釋出的一款開源的、面向文檔類型的NoSQL資料庫。由Erlang編寫,使用json格式儲存資料。CouchDB以RESTful的格式提供服務
可以很友善的對接各種語言的用戶端
CouchDB最大的競争對手就是熟悉的MangoDB。它們的不同點比較會在另外一篇裡面寫入
CouchDB 目标是做下一代的Web應用存儲系統
CouchDB下載下傳,安裝:
官網:http://couchdb.apache.org/ 目前隻有2.0.0版本 2016年9月份
CouchDB 安裝完成後自動啟動,預設是5984
Docker下的安裝配置:
1、先建立一個couchdb容器,并指派給couch1
1
2
<code>COUCH1=$(docker run -d -p 5984 -</code><code>v</code> <code>/var/lib/couchdb</code> <code>couchdb)</code>
<code>root@ubuntu:~</code><code># echo $COUCH1</code>
<code>6d708f72e25e9f0d693aa5a8ce5afd1a61e945355f728f409bc5a90676e0524c</code>
2、給couchDB中插入資料
要確定你的HOST是可用的
3
<code>$ HOST=localhost </code><code>#這裡如果localhost不行,就更換成主機ip</code>
<code>$ URL=</code><code>"http://$HOST:$(docker port $COUCH1 5984 | grep -o '[1-9][0-9]*$')/_utils/"</code>
<code>$ </code><code>echo</code> <code>"Navigate to $URL in your browser, and use the couch interface to add data"</code>
操作結果:
4
5
6
7
<code>root@ubuntu:~</code><code># HOST=123.xx.xx.x8 #這裡是公網ip就不顯示出來了</code>
<code>root@ubuntu:~</code><code># URL="http://$HOST:$(docker port $COUCH1 5984 | grep -o '[1-9][0-9]*$')/_utils/"</code>
<code>root@ubuntu:~</code><code># docker port $COUCH1 5984 #這裡映射到了主控端32768端口,并監聽所有ip</code>
<code>0.0.0.0:32768</code>
<code>root@ubuntu:~</code><code># echo "Navigate to $URL in your browser, and use the couch interface to add data"</code>
<code>Navigate to http:</code><code>//123</code><code>.xx.xx.x8:32768</code><code>/_utils/</code> <code>in</code> <code>your browser, and use the couch interface to add data</code>
<code># 打開浏覽器輸入http://123.xx.xx.x8:32768/_utils/ 将會顯示couchDB的頁面</code>
<a href="https://s2.51cto.com/wyfs02/M01/8F/62/wKioL1jcuxaSkpTIAAHdIwqEiR0558.png-wh_500x0-wm_3-wmp_4-s_1582637237.png" target="_blank"></a>
建立資料庫賬号
控制台頁面的左邊的主要部分列出了目前資料庫,并提供了一個 Create Database … 的操作;右邊的側邊欄呢,從上到下分别提供了 工具、 文檔 、 診斷 和 目前資料庫 3個菜單。最右下角是版本号和一句話:“Welcome to Admin Party! Everyone is admin. Fix this”,什麼意思呢?就是說ConchDB預設使用者都是admin,對于用慣了關系型資料庫的我們,本能的就會感覺這并不安全,沒錯,其實就是不安全!!!!,是以,點選 Fix this 來建立一個使用者吧。
<a href="https://s3.51cto.com/wyfs02/M01/8F/64/wKiom1jcvDzxmK8eAAATS9smDBk647.png" target="_blank"></a>
注意:如果使用中發現某些按鈕是灰色的或者 Compact & Cleanup 一直在轉圈等待,請先看看自己是不是管理者。
點選 <code>Create Database …</code> 并輸入一個資料庫名稱就可以建立一個資料啦
<a href="https://s3.51cto.com/wyfs02/M00/8F/62/wKioL1jcvMfyycIhAAAvXapfoaE581.png-wh_500x0-wm_3-wmp_4-s_3832354088.png" target="_blank"></a>
建立成功後會跳轉到目前建立的資料庫,如果我們傳回Overview頁面就會發現剛才建立的資料庫已經被添加到清單中了。
<a href="https://s5.51cto.com/wyfs02/M02/8F/62/wKioL1jcvRbzWFPRAAG6VP_wC_8280.png-wh_500x0-wm_3-wmp_4-s_1793026320.png" target="_blank"></a>
在建立的資料庫的管理頁面中點選 <code>New Document</code>,我們就可以建立一個文檔,其中會包含一個預設的Id字段作為唯一辨別,我們可以不用管他,同時也可以點選 <code>Add Field</code> 來新增字段,這裡假設我們新增一個人,字段如下圖:
<a href="https://s1.51cto.com/wyfs02/M02/8F/62/wKioL1jcvlChjb60AAB6z5KPhaE687.png-wh_500x0-wm_3-wmp_4-s_3540809071.png" target="_blank"></a>
點選右面的“source”按鈕,就能看到json格式的内容
<a href="https://s5.51cto.com/wyfs02/M01/8F/62/wKioL1jcvn2TjNqfAABVyPXJwGw419.png-wh_500x0-wm_3-wmp_4-s_7179154.png" target="_blank"></a>
點選上面的“Save doucement”來儲存資料,然後再首頁就能看到我們新建立的資料庫了
<a href="https://s2.51cto.com/wyfs02/M01/8F/62/wKioL1jcvuaglvlfAAAzbat0Qvs283.png-wh_500x0-wm_3-wmp_4-s_290647713.png" target="_blank"></a>
輕按兩下Field或者Value列的單元格可以更改字段名或字段值
點選右側的綠色對勾按鈕後,該字段的值将會被儲存,此時切換到Source标簽就可以看到json格式的資料
編輯完成後點選上方的 <code>Save Document</code> 按鈕就可以将剛才的json資料儲存到資料庫中,儲存成功後系統會自動為我們添加一個 <code>rev</code> 字段,這個字段代表目前文檔的版本号
更新操作呢也比較簡單,隻需要單擊目前文檔的Key或者輕按兩下Value就可以進入編輯頁面,在編輯頁面中不但能修改字段的Key/Value,還可以新增和删除字段,同樣,點選 <code>Save Document</code> 即可儲存目前修改,同時,我們可以注意到,該文檔的 <code>rev</code> 值已經發生了變化,這代表該文檔的版本号已經被更新
<a href="https://s1.51cto.com/wyfs02/M01/8F/65/wKiom1jcwH2SHrR0AABdtp5CZeo279.png-wh_500x0-wm_3-wmp_4-s_1998698876.png" target="_blank"></a>
同樣,進入目前記錄的詳情頁我們就可以看到 <code>Delete Document</code> 按鈕,點選之後目前文檔就會被删除。
但是,值得注意的是,當我們使用 <code>Delete Document</code> 操作将文檔删除後,表面看是沒有資料了,但是該資料仍然占用了那麼多空間,并沒有減少,如下圖:
<a href="https://s3.51cto.com/wyfs02/M02/8F/63/wKioL1jcwSPhTlrBAABEzzqD06w107.png-wh_500x0-wm_3-wmp_4-s_2474958535.png" target="_blank"></a>
這時我們需要進入資料庫詳情頁,使用 <code>Compact & Cleanup…</code> 中的 <code>Compact Database</code> 操作來清理被占用的空間,如果發現此功能點選之後一直在轉圈等待,去看看自己是不是管理者使用者吧。
<code> </code><code>COUCH2=$(docker run -d -p 5984 --volumes-from $COUCH1 couchdb)</code>
使用浏覽器浏覽第二個資料庫
<code>HOST=localhost </code><code>#這裡如果localhost不行,就更換成主機ip</code>
<code>URL=</code><code>"http://$HOST:$(docker port $COUCH2 5984 | grep -o '[1-9][0-9]*$')/_utils/"</code>
<code>echo</code> <code>"Navigate to $URL in your browser, and use the couch interface to add data"</code>
<a href="https://s4.51cto.com/wyfs02/M00/8F/65/wKiom1jcws3z0ZCQAAGg89xBT3o882.png-wh_500x0-wm_3-wmp_4-s_2109751591.png" target="_blank"></a>
注意:為了測試友善,我們删除原來的資料庫。
<a href="https://s3.51cto.com/wyfs02/M02/8F/63/wKioL1jcwaLiXePHAAI8Re43wuw507.png-wh_500x0-wm_3-wmp_4-s_678568049.png" target="_blank"></a>
下面是借鑒别人的操作流程,自己沒有時間敲了,大家随意感受一下CouchDB流暢的RESTful操作方式:
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<code> </code><code># 擷取CouchDB相關資訊</code>
<code>curl -X GET http:</code><code>//127</code><code>.0.0.1:5984</code>
<code>{</code><code>"couchdb"</code><code>:</code><code>"Welcome"</code><code>,</code><code>"uuid"</code><code>:</code><code>"a853c053a5a54a4d3ccbaad0d9ffd3b0"</code><code>,</code><code>"version"</code><code>:</code><code>"1.6.1"</code><code>,</code><code>"vendor"</code><code>:{</code><code>"version"</code><code>:</code><code>"1.6.1"</code><code>,</code><code>"name"</code><code>:</code><code>"The Apache Software Foundation"</code><code>}}</code>
<code># 建立demo資料庫(需要admin權限,參照下一條指令)</code>
<code>curl -X PUT http:</code><code>//127</code><code>.0.0.1:5984</code><code>/demo</code>
<code>{</code><code>"error"</code><code>:</code><code>"unauthorized"</code><code>,</code><code>"reason"</code><code>:</code><code>"You are not a server admin."</code><code>}</code>
<code># 使用使用者名密碼登入CouchDB,并建立demo資料庫</code>
<code>curl -X PUT http:</code><code>//username</code><code>:[email protected]:5984</code><code>/demo</code>
<code>{</code><code>"ok"</code><code>:</code><code>true</code><code>}</code>
<code># 檢視所有資料庫</code>
<code>curl -X GET http:</code><code>//127</code><code>.0.0.1:5984</code><code>/_all_dbs</code>
<code>[</code><code>"_replicator"</code><code>,</code><code>"_users"</code><code>,</code><code>"demo"</code><code>]</code>
<code># 檢視demo資料庫相關資訊</code>
<code>curl -X GET http:</code><code>//127</code><code>.0.0.1:5984</code><code>/demo</code>
<code>{</code><code>"db_name"</code><code>:</code><code>"demo"</code><code>,</code><code>"doc_count"</code><code>:0,</code><code>"doc_del_count"</code><code>:0,</code><code>"update_seq"</code><code>:0,</code><code>"purge_seq"</code><code>:0,</code><code>"compact_running"</code><code>:</code><code>false</code><code>,</code><code>"disk_size"</code><code>:79,</code><code>"data_size"</code><code>:0,</code><code>"instance_start_time"</code><code>:</code><code>"1452000207199340"</code><code>,</code><code>"disk_format_version"</code><code>:6,</code><code>"committed_update_seq"</code><code>:0}</code>
<code># 向demo資料庫中添加一個文檔(自動生成Id),注意:windows下需要使用Content-Type:application/json的HttpHeader</code>
<code>curl -H </code><code>"Content-Type:application/json"</code> <code>-X POST http:</code><code>//127</code><code>.0.0.1:5984</code><code>/demo</code> <code>-d {\"name\":\"fooly\"}</code>
<code>{</code><code>"ok"</code><code>:</code><code>true</code><code>,</code><code>"id"</code><code>:</code><code>"3ebb59dd78ff448f283f48817800321c"</code><code>,</code><code>"rev"</code><code>:</code><code>"1-0e4ea534f2c1e7f05e21804b5f2f7a71"</code><code>}</code>
<code># 檢視demo資料庫中的所有文檔</code>
<code>curl -X GET http:</code><code>//127</code><code>.0.0.1:5984</code><code>/demo/_all_docs</code>
<code>{</code><code>"total_rows"</code><code>:1,</code><code>"offset"</code><code>:0,</code><code>"rows"</code><code>:[</code>
<code>{</code><code>"id"</code><code>:</code><code>"3ebb59dd78ff448f283f48817800321c"</code><code>,</code><code>"key"</code><code>:</code><code>"3ebb59dd78ff448f283f48817800321c"</code><code>,</code><code>"value"</code><code>:{</code><code>"rev"</code><code>:</code><code>"1-0e4ea534f2c1e7f05e21804b5f2f7a71"</code><code>}}</code>
<code>]}</code>
<code># 擷取一個uuid</code>
<code>curl -X GET http:</code><code>//127</code><code>.0.0.1:5984</code><code>/_uuids</code>
<code>{</code><code>"uuids"</code><code>:[</code><code>"3ebb59dd78ff448f283f4881780033c0"</code><code>]}</code>
<code># 向demo資料庫中添加一個文檔(使用擷取到的uuid作為Id)</code>
<code>curl -H </code><code>"Content-Type:application/json"</code> <code>-X PUT http:</code><code>//127</code><code>.0.0.1:5984</code><code>/demo/3ebb59dd78ff448f283f4881780033c0</code> <code>-d {\"name\":\"momo314\"}</code>
<code>{</code><code>"ok"</code><code>:</code><code>true</code><code>,</code><code>"id"</code><code>:</code><code>"3ebb59dd78ff448f283f4881780033c0"</code><code>,</code><code>"rev"</code><code>:</code><code>"1-eb393d36ac1ad38ada8361d94fc5d0b6"</code><code>}</code>
<code># 更新指定Id的文檔(但是失敗了,因為CouchDB是按版本送出的,同一個源送出多次會造成一定的混亂。是以,需要指定文檔版本進行控制。)</code>
<code>curl -H </code><code>"Content-Type:application/json"</code> <code>-X PUT http:</code><code>//127</code><code>.0.0.1:5984</code><code>/demo/3ebb59dd78ff448f283f4881780033c0</code> <code>-d {\"name\":\"momo314\",\"age\":18}</code>
<code>{</code><code>"error"</code><code>:</code><code>"conflict"</code><code>,</code><code>"reason"</code><code>:</code><code>"Document update conflict."</code><code>}</code>
<code># 更新指定Id和指定版本的文檔</code>
<code>curl -H </code><code>"Content-Type:application/json"</code> <code>-X PUT http:</code><code>//127</code><code>.0.0.1:5984</code><code>/demo/3ebb59dd78ff448f283f4881780033c0</code> <code>-d {\"_rev\":\"1-eb393d36ac1ad38ada8361d94fc5d0b6\",\"name\":\"momo314\",\"age\":18}</code>
<code>{</code><code>"ok"</code><code>:</code><code>true</code><code>,</code><code>"id"</code><code>:</code><code>"3ebb59dd78ff448f283f4881780033c0"</code><code>,</code><code>"rev"</code><code>:</code><code>"2-5d081e17588c03c27340035e420edecd"</code><code>}</code>
<code># 擷取指定Id的文檔内容</code>
<code>curl -X GET http:</code><code>//127</code><code>.0.0.1:5984</code><code>/demo/3ebb59dd78ff448f283f4881780033c0</code>
<code>{</code><code>"_id"</code><code>:</code><code>"3ebb59dd78ff448f283f4881780033c0"</code><code>,</code><code>"_rev"</code><code>:</code><code>"2-5d081e17588c03c27340035e420edecd"</code><code>,</code><code>"name"</code><code>:</code><code>"momo314"</code><code>,</code><code>"age"</code><code>:18}</code>
<code># 删除指定Id和rev版本号的文檔</code>
<code>curl -X DELETE http:</code><code>//username</code><code>:[email protected]:5984</code><code>/demo/3ebb59dd78ff448f283f4881780033c0</code><code>?rev=2-5d081e17588c03c27340035e420edecd</code>
<code># 檢視demo資料庫中的所有文檔(剛才的文檔确實被删除掉了)</code>
<code># 删除demo資料庫(需要admin權限,參照下一條指令)</code>
<code>curl -X DELETE http:</code><code>//127</code><code>.0.0.1:5984</code><code>/demo</code>
<code># 使用使用者名密碼登入CouchDB,并删除demo資料庫</code>
<code>curl -X DELETE http:</code><code>//username</code><code>:[email protected]:5984</code><code>/demo</code>
<code># 檢視所有資料庫(demo資料庫确實被删除掉了)</code>
<code>[</code><code>"_replicator"</code><code>,</code><code>"_users"</code><code>]</code>
本文轉自 kesungang 51CTO部落格,原文連結:http://blog.51cto.com/sgk2011/2069023,如需轉載請自行聯系原作者