MongoDB 入門專欄
http://blog.csdn.net/column/details/19681.html
MongoDB 簡介
MongoDB 是由C++語言編寫的,是一個基於分布式檔案儲存體的開源 NoSQL 資料庫系統, 在高負載的情況下,添加更多的節點,可以保證伺服器效能, 旨在為WEB應用提供可擴充的高效能資料儲存解決方案。
MongoDB 將資料存放區為一個文檔,資料結構由索引值(key=>value)對組成。MongoDB 文檔類似於 JSON 對象。欄位值可以包含其他文檔,數組及文檔數組。
MongoDB 首頁: https://www.mongodb.com
MongoDB 官方文檔: https://docs.mongodb.com NoSQL 和 RDBMS MongoDB 是一種典型的 NoSQL 資料庫,區別與 MySQL,Oracle,DB2 這些傳統的關聯式資料庫;
|
RDBMS |
NoSQL |
特點 |
- 高度組織化結構化資料 - 結構化查詢語言 (SQL)(SQL) (SQL) - 資料和關係都儲存在單獨的表中。 - 資料操縱語言,資料定義語言 (Data Definition Language) - 嚴格的一致性 - 基礎事務 |
- 代表著不僅僅是SQL - 沒有聲明性查詢語言 - 沒有預定義的模式 -鍵 - 值對儲存,列儲存,文檔儲存,圖形資料庫 - 最終一致性,而非ACID屬性 - 非結構化和不可預知的資料 - CAP定理 - 高效能,高可用性和延展性 |
遵循原則 |
ACID 原則 A (Atomicity) 原子性 C (Consistency) 一致性 I (Isolation) 獨立性 D (Durability) 持久性 |
CAP原則 一致性(Consistency) (所有節點在同一時間具有相同的資料) 可用性(Availability) (保證每個請求不管成功或者失敗都有響應) 分隔容忍(Partition tolerance) (系統中任意資訊的丟失或失敗不會影響系統的繼續運作) |
以下是 NoSQL 的分類和部分代表:
列儲存 |
Hbase、Cassandra、Hypertable |
文檔儲存 |
MongoDB、CouchDB |
key-value 儲存 |
Tokyo Cabinet / Tyrant、Berkeley DB、MemcacheDB、Redis |
圖儲存 |
Neo4J、FlockDB |
Object Storage Service |
db4o、Versant |
xml資料庫 |
Berkeley DB XML 、BaseX |
以下是部分 SQL 概念對應的 MongoDB 概念:
SQL術語/概念 |
MongoDB術語/概念 |
解釋/說明 |
database |
database |
資料庫 |
table |
collection |
資料庫表/集合 |
row |
document |
資料記錄行/文檔 |
column |
field |
資料欄位/域 |
index |
index |
索引 |
table joins |
|
表串連,MongoDB不支援 |
primary key |
primary key |
主鍵,MongoDB自動將_id欄位設定為主鍵 |
MongoDB 安裝配置 以下以 Linux 環境的 mongoDB 安裝配置作為樣本,在 OS X,Window 環境下的操作也是類似的;
下載 選擇合適的 MongoDB 版本下載,注意 window 版本的 mongodb-3.6 的 msi 安裝程式可能會出現安裝時進度條卡住的情況,此時可以直接殺線程,直接開始配置步驟,或者下載安裝 3.4 版本的 mongodb; 下載地址: https://www.mongodb.com/download-center?jmp=tutorials&_ga=2.97410399.1138236154.1518440736-1543170749.1518440736#community
解壓 linux 版本一般下載後是一個壓縮包,解壓該包即可擷取 mongodb 的運行程式,假設該壓縮包解壓後得到目錄 mongodb-3.6.2; 為了方便啟動,一般會把 mongodb-3.6.2/bin 目錄寫入到系統 PATH 變數; 在 mongodb-3.6.2/ 下建立 data,logs 兩個目錄,分別用於儲存資料和日誌:
assad@DESKTOP-assad:/usr/bin/mongodb-3.6.2$ mkdir data
assad@DESKTOP-assad:/usr/bin/mongodb-3.6.2$ mkdir logs
之後需要將 mongodb-3.6.2/ 下所有的檔案設定 group 和 own;
啟動 mongoDB 服務 運行 mongoDB 服務由 2 種方式,第一種是直接指定運行參數,第二種是指定設定檔,這裡先示範第一種;
assad@DESKTOP-assad:/usr/bin/mongodb-3.6.2/bin$ mongod --dbpath=/usr/bin/mongodb-3.6.2/data --logpath=/usr/bin/mongodb-3.6.2/logs/mongo.log # 指定 data,logpath 位置運行 mongodb 服務
串連 mongoDB
assad@DESKTOP-assad ~ $ mongo
MongoDB shell version v3.6.2
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.2
......
>
這裡我是已經將 mongodb-3.6.2/bin 的路徑變數寫入到系統 PATH 了,如果沒有需要定位到該目錄下執行該指令;
設定管理員密碼 mongodb 預設沒有設定密碼的,為了安全會設定至少設定一個管理員密碼,步驟如下:
assad@DESKTOP-assad ~ $ mongo # 登入 mongodb
>show dbs; # 顯示所有存在表
admin 0.000GB
local 0.000GB
> use admin # 使用 admin 資料庫
switched to db admin
> db.createUser({user:"assad",pwd:"mongo123",roles:["root"]}) # 在 admin 資料庫中建立使用者
Successfully added user: { "user" : "assad", "roles" : [ "root" ] }
> exit
之後重啟 mongoDB 服務,並且以 auth 認證模式啟動,如下:
assad@DESKTOP-assad:/usr/bin/mongodb-3.6.2/bin$ mongod --dbpath=/usr/bin/mongodb-3.6.2/data --logpath=/usr/bin/mongodb-3.6.2/logs/mongo.log --auth
此時如果直接登陸 mongoDB 服務,所有的資料庫操作都會被拒絕,需要以密碼登入:
assad@DESKTOP-assad ~ $ mongo -u assad -p mongo1994 127.0.0.1:27017/admin # 以管理員方式登入 mongodb
> show dbs
.....
使用設定檔啟動 mongoDB 服務 以上的 mongoDB 啟動過程參數比較繁瑣,可以編寫一個設定檔,從設定檔啟動 mongoDB,以下是一個樣本的設定檔:
/etc/mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# Where and how to store data.
dbpath=/usr/bin/mongodb-3.6.2/data
journal=true
# where to write logging data.
logpath=/usr/bin/mongodb-3.6.2/logs/mongod.log
logappend=true
# network interfaces
bind_ip=127.0.0.1
port=27017
# security
auth=true
通過該設定檔啟動 mongodb 服務:
$ mongod -f /etc/mongod.conf
設定檔中的參數其實通過 mongo --help 都由說明;
MongoDB GUI 介面 MongoDB 提供了簡單的 HTTP 使用者介面,如果要啟用該功能,只需要只當啟動參數 --rest,如下:
$ mongod -f