CouchDB介紹:docker
CouchDB是Apache組織發佈的一款開源的、面向文檔類型的NoSQL數據庫。由Erlang編寫,使用json格式保存數據。CouchDB以RESTful的格式提供服務數據庫
能夠很方便的對接各類語言的客戶端apache
CouchDB最大的競爭對手就是熟悉的MangoDB。它們的不一樣點比較會在另一篇裏面寫入json
CouchDB 目標是作下一代的Web應用存儲系統ubuntu
CouchDB下載,安裝:windows
官網:http://couchdb.apache.org/ 目前只有2.0.0版本 2016年9月份瀏覽器
CouchDB 安裝完成後自動啓動,默認是5984安全
Docker下的安裝配置:bash
一、先建立一個couchdb容器,並賦值給couch1app
COUCH1=$(docker run -d -p 5984 -v /var/lib/couchdb couchdb) root@ubuntu:~# echo $COUCH1
6d708f72e25e9f0d693aa5a8ce5afd1a61e945355f728f409bc5a90676e0524c
二、給couchDB中插入數據
要確保你的HOST是可用的
$ HOST=localhost #這裏若是localhost不行,就更換成主機ip $ URL="http://$HOST:$(docker port $COUCH1 5984 | grep -o '[1-9][0-9]*$')/_utils/" $ echo "Navigate to $URL in your browser, and use the couch interface to add data"
操做結果:
root@ubuntu:~# HOST=123.xx.xx.x8 #這裏是公網ip就不顯示出來了 root@ubuntu:~# URL="http://$HOST:$(docker port $COUCH1 5984 | grep -o '[1-9][0-9]*$')/_utils/" root@ubuntu:~# docker port $COUCH1 5984 #這裏映射到了宿主機32768端口,並監聽全部ip 0.0.0.0:32768 root@ubuntu:~# echo "Navigate to $URL in your browser, and use the couch interface to add data" Navigate to http://123.xx.xx.x8:32768/_utils/ in your browser, and use the couch interface to add data # 打開瀏覽器輸入http://123.xx.xx.x8:32768/_utils/ 將會顯示couchDB的頁面
建立數據庫帳號
控制檯頁面的左邊的主要部分列出了當前數據庫,並提供了一個 Create Database … 的操做;右邊的側邊欄呢,從上到下分別提供了 工具、 文檔 、 診斷 和 當前數據庫 3個菜單。最右下角是版本號和一句話:「Welcome to Admin Party! Everyone is admin. Fix this」,什麼意思呢?就是說ConchDB默認用戶都是admin,對於用慣了關係型數據庫的咱們,本能的就會感受這並不安全,沒錯,其實就是不安全!!!!,因此,點擊 Fix this 來新建一個用戶吧。
注意:若是使用中發現某些按鈕是灰色的或者 Compact & Cleanup 一直在轉圈等待,請先看看本身是否是管理員。
點擊 Create Database …
並輸入一個數據庫名稱就能夠新建一個數據啦
建立成功後會跳轉到當前新建的數據庫,若是咱們返回Overview頁面就會發現剛纔新建的數據庫已經被添加到列表中了。
在新建的數據庫的管理頁面中點擊 New Document
,咱們就能夠新建一個文檔,其中會包含一個默認的Id字段做爲惟一標識,咱們能夠不用管他,同時也能夠點擊 Add Field
來新增字段,這裏假設咱們新增一我的,字段以下圖:
點擊右面的「source」按鈕,就能看到json格式的內容
點擊上面的「Save doucement」來保存數據,而後再主頁就能看到咱們新建立的數據庫了
雙擊Field或者Value列的單元格能夠更改字段名或字段值
點擊右側的綠色對勾按鈕後,該字段的值將會被保存,此時切換到Source標籤就能夠看到json格式的數據
編輯完成後點擊上方的 Save Document
按鈕就能夠將剛纔的json數據保存到數據庫中,保存成功後系統會自動爲咱們添加一個 rev
字段,這個字段表明當前文檔的版本號
更新操做呢也比較簡單,只須要單擊當前文檔的Key或者雙擊Value就能夠進入編輯頁面,在編輯頁面中不但能修改字段的Key/Value,還能夠新增和刪除字段,一樣,點擊 Save Document
便可保存當前修改,同時,咱們能夠注意到,該文檔的 rev
值已經發生了變化,這表明該文檔的版本號已經被更新
一樣,進入當前記錄的詳情頁咱們就能夠看到 Delete Document
按鈕,點擊以後當前文檔就會被刪除。
可是,值得注意的是,當咱們使用 Delete Document
操做將文檔刪除後,表面看是沒有數據了,可是該數據仍然佔用了那麼多空間,並無減小,以下圖:
這時咱們須要進入數據庫詳情頁,使用 Compact & Cleanup…
中的 Compact Database
操做來清理被佔用的空間,若是發現此功能點擊以後一直在轉圈等待,去看看本身是否是管理員用戶吧。
COUCH2=$(docker run -d -p 5984 --volumes-from $COUCH1 couchdb)
使用瀏覽器瀏覽第二個數據庫
HOST=localhost #這裏若是localhost不行,就更換成主機ip URL="http://$HOST:$(docker port $COUCH2 5984 | grep -o '[1-9][0-9]*$')/_utils/" echo "Navigate to $URL in your browser, and use the couch interface to add data"
Tips: 對cURL還不太瞭解的親們能夠搜索下,很好用的工具,能夠從這裏下載: http://curl.haxx.se/download/
注意:爲了測試方便,咱們刪除原來的數據庫。
前面已經介紹過,CouchDB支持使用RESTful API的方式來對數據進行操做,例如,咱們在瀏覽器中輸入 http://x.x.x.x:32768/demo 就能夠查看demo數據庫中詳細信息。如圖:
下面是借鑑別人的操做流程,本身沒有時間敲了,你們隨意感覺一下CouchDB流暢的RESTful操做方式:
# 獲取CouchDB相關信息 curl -X GET http://127.0.0.1:5984 {"couchdb":"Welcome","uuid":"a853c053a5a54a4d3ccbaad0d9ffd3b0","version":"1.6.1","vendor":{"version":"1.6.1","name":"The Apache Software Foundation"}} # 建立demo數據庫(須要admin權限,參照下一條命令) curl -X PUT http://127.0.0.1:5984/demo {"error":"unauthorized","reason":"You are not a server admin."} # 使用用戶名密碼登陸CouchDB,並建立demo數據庫 curl -X PUT http://username:password@127.0.0.1:5984/demo {"ok":true} # 查看全部數據庫 curl -X GET http://127.0.0.1:5984/_all_dbs ["_replicator","_users","demo"] # 查看demo數據庫相關信息 curl -X GET http://127.0.0.1:5984/demo {"db_name":"demo","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":"1452000207199340","disk_format_version":6,"committed_update_seq":0} # 向demo數據庫中添加一個文檔(自動生成Id),注意:windows下須要使用Content-Type:application/json的HttpHeader curl -H "Content-Type:application/json" -X POST http://127.0.0.1:5984/demo -d {\"name\":\"fooly\"} {"ok":true,"id":"3ebb59dd78ff448f283f48817800321c","rev":"1-0e4ea534f2c1e7f05e21804b5f2f7a71"} # 查看demo數據庫中的全部文檔 curl -X GET http://127.0.0.1:5984/demo/_all_docs {"total_rows":1,"offset":0,"rows":[ {"id":"3ebb59dd78ff448f283f48817800321c","key":"3ebb59dd78ff448f283f48817800321c","value":{"rev":"1-0e4ea534f2c1e7f05e21804b5f2f7a71"}} ]} # 獲取一個uuid curl -X GET http://127.0.0.1:5984/_uuids {"uuids":["3ebb59dd78ff448f283f4881780033c0"]} # 向demo數據庫中添加一個文檔(使用獲取到的uuid做爲Id) curl -H "Content-Type:application/json" -X PUT http://127.0.0.1:5984/demo/3ebb59dd78ff448f283f4881780033c0 -d {\"name\":\"momo314\"} {"ok":true,"id":"3ebb59dd78ff448f283f4881780033c0","rev":"1-eb393d36ac1ad38ada8361d94fc5d0b6"} # 更新指定Id的文檔(可是失敗了,由於CouchDB是按版本提交的,同一個源提交屢次會形成必定的混亂。因此,須要指定文檔版本進行控制。) curl -H "Content-Type:application/json" -X PUT http://127.0.0.1:5984/demo/3ebb59dd78ff448f283f4881780033c0 -d {\"name\":\"momo314\",\"age\":18} {"error":"conflict","reason":"Document update conflict."} # 更新指定Id和指定版本的文檔 curl -H "Content-Type:application/json" -X PUT http://127.0.0.1:5984/demo/3ebb59dd78ff448f283f4881780033c0 -d {\"_rev\":\"1-eb393d36ac1ad38ada8361d94fc5d0b6\",\"name\":\"momo314\",\"age\":18} {"ok":true,"id":"3ebb59dd78ff448f283f4881780033c0","rev":"2-5d081e17588c03c27340035e420edecd"} # 獲取指定Id的文檔內容 curl -X GET http://127.0.0.1:5984/demo/3ebb59dd78ff448f283f4881780033c0 {"_id":"3ebb59dd78ff448f283f4881780033c0","_rev":"2-5d081e17588c03c27340035e420edecd","name":"momo314","age":18} # 刪除指定Id和rev版本號的文檔 curl -X DELETE http://username:password@127.0.0.1:5984/demo/3ebb59dd78ff448f283f4881780033c0?rev=2-5d081e17588c03c27340035e420edecd {"ok":true,"id":"3ebb59dd78ff448f283f4881780033c0","rev":"2-5d081e17588c03c27340035e420edecd"} # 查看demo數據庫中的全部文檔(剛纔的文檔確實被刪除掉了) curl -X GET http://127.0.0.1:5984/demo/_all_docs {"total_rows":1,"offset":0,"rows":[ {"id":"3ebb59dd78ff448f283f48817800321c","key":"3ebb59dd78ff448f283f48817800321c","value":{"rev":"1-0e4ea534f2c1e7f05e21804b5f2f7a71"}} ]} # 刪除demo數據庫(須要admin權限,參照下一條命令) curl -X DELETE http://127.0.0.1:5984/demo {"error":"unauthorized","reason":"You are not a server admin."} # 使用用戶名密碼登陸CouchDB,並刪除demo數據庫 curl -X DELETE http://username:password@127.0.0.1:5984/demo {"ok":true} # 查看全部數據庫(demo數據庫確實被刪除掉了) curl -X GET http://127.0.0.1:5984/_all_dbs ["_replicator","_users"]
博文參考:http://magic-conch.cool/article/2016/01/05/windows-couchdb-1
官網參考:https://docs.docker.com/engine/examples/couchdb_data_volumes/#create-first-database