MongoDB是什麼
MongoDB是一個使用C++編寫的、開源的、面向文檔的NoSQL(Not Only SQL)資料庫,也是當前最熱門的NoSql資料庫之一。
關係型資料庫是面向記錄的,在關係型資料庫中一個item是一條記錄,在非關係型資料庫中一個item是一個文檔,舉個例子
uuid |
name |
age |
1 |
u1 |
zhangsan |
在NoSQL中是 {“uuid”:1,”userId”:”u1”,”name”:zhangsan} NoSQL簡介
NoSQL的意思是“不僅僅是SQL”,是目前流行的“非關係型資料庫”的統稱。
常見的NoSQL資料庫如:Redis、CouchDB、MongoDB、HBase、Cassandra等 為什麼需要NoSQL。
簡單的說,就是為瞭解決在web2.0時代,出現的三高要求:
1:對資料庫高並發讀寫的需求
2:對海量資料的高效率儲存和訪問的需求
3:對資料庫的高可擴充性和高可用性的需求
而RDB裡面的一些特性,在web2.0裡面往往變得不那麼重要,比如:
1:資料庫事務一致性
2:資料庫的即時讀寫
3:複雜的SQL查詢,特別是多表關聯查詢 CAP定理, 又被稱作布魯爾定理(Eric Brewer)
它指出對於一個分散式運算系統來說,不可能同時滿足以下三點:
1:強一致性(Consistency):系統在執行過某項操作後仍然處於一致的,在分布式系統中,更新操作執行成功後所有的使用者都應該讀取到最新的值,這樣的系統被認為具有強一致性
2:可用性(Availability):每一個操作總是能夠在一定的時間內返回結果
3:分區容錯性(Partition tolerance):系統在存在網路磁碟分割的情況下仍然可以接受請求並處理,這裡網路磁碟分割是指由於某種原因網路被分成若干個孤立地區,而地區之間互不相通 根據CAP原理將資料庫分成了滿足CA原則、滿足CP原則和滿足AP原則三大類:
1:CA:單點叢集,滿足一致性,可用性,通常在可擴充性上不太強大,比如RDB
2:CP:滿足一致性和分區容錯性,通常效能不是特別高,如分散式資料庫
3:AP:滿足可用性和分區容錯性,通常可能對一致性要求低一些,如大多數的NoSQL BASE(Basically Available,Soft-state,Eventual consistency )
1:基本可用(Basically Available):系統能夠基本運行、一直提供服務。
2:軟狀態(Soft-state):系統不要求一直保持強一致狀態。
3:最終一致性(Eventual consistency):系統需要在某一時刻後達到一致性要求 NoSQL的優點 擴充簡單方便,尤其是水平橫向擴充(縱向擴充是指用更強的機器;橫向擴充是指把資料分散到多個機器) 讀寫快速高效,多數都會映射到記憶體操作 成本低廉,用普通機器,分布式叢集即可 資料模型靈活,沒有固定的資料模型 NoSQL的缺點 不提供對SQL的支援 現有產品還不夠成熟穩定,功能也還有待加強 MongoDB特點 高效能、便於使用、易於擴充、功能豐富 面向集合儲存,模式自由 支援動態查詢,支援javascript運算式查詢 支援索引 支援複本集複製和自動故障恢複 自動處理分區 支援二進位和大型物件資料 檔案儲存體格式為BSON(JSON的一種擴充) 安裝MongoDB
Ubuntu
sudo apt-get install mongodb
CentOS
sudo yum install mongodb
啟動MongoDB-Server
mongod
啟動MongoDB-Client
mongo
關閉MongoDB
pkill mongod
或啟動MongoDB-Client,輸入
use admindb.shutdownServer()
啟動參數配置
啟動MongoDB-Server時mongod後可以加很多參數,如下 –quiet # 安靜輸出 –port arg # 指定服務連接埠號碼,預設連接埠27017 –bind_ip arg # 綁定服務IP,若綁定127.0.0.1,則只能本機訪問,不指定預設本地所有IP –logpath arg # 指定MongoDB記錄檔,注意是指定檔案不是目錄 –logappend # 使用追加的方式寫日誌 –pidfilepath arg # PID File 的完整路徑,如果沒有設定,則沒有PID檔案 –keyFile arg # 叢集的私密金鑰的完整路徑,只對於Replica Set 架構有效 –unixSocketPrefix arg # UNIX域通訊端替代目錄,(預設為 /tmp) –fork # 以守護進程的方式運行MongoDB,建立伺服器處理序 –auth # 啟用驗證 –cpu # 定期顯示CPU的CPU利用率和iowait –dbpath arg # 指定資料庫路徑 –diaglog arg # diaglog選項 0=off 1=W 2=R 3=both 7=W+some reads –directoryperdb # 設定每個資料庫將被儲存在一個單獨的目錄 –journal # 啟用日誌選項,MongoDB的資料操作將會寫入到journal檔案夾的檔案裡 –journalOptions arg # 啟用日誌診斷選項 –ipv6 # 啟用IPv6選項 –jsonp # 允許JSONP形式通過HTTP訪問(有安全影響) –maxConns arg # 最大同時串連數 預設2000 –noauth # 不啟用驗證 –nohttpinterface # 關閉http介面,預設關閉27018連接埠訪問 –noprealloc # 禁用資料檔案預分配(往往影響效能) –noscripting # 禁用指令碼引擎 –notablescan # 不允許表掃描 –nounixsocket # 禁用Unix通訊端監聽 –nssize arg (=16) # 設定信資料庫.ns檔案大小(MB) –objcheck # 在收到客戶資料,檢查的有效性, –profile arg # 檔案參數 0=off 1=slow, 2=all –quota # 限制每個資料庫的檔案數,設定預設為8 –quotaFiles arg # number of files allower per db, requires –quota –rest # 開啟簡單的rest API –repair # 修複所有資料庫run repair on all dbs –repairpath arg # 修複庫產生的檔案的目錄,預設為目錄名稱dbpath –slowms arg (=100) # 設定檔和控制台日誌的慢速值 –smallfiles # 使用較小的預設檔案 –syncdelay arg (=60) # 資料寫入磁碟的時間秒數(0=never,不推薦) –sysinfo # 列印一些診斷系統資訊 –upgrade # 如果需要升級資料庫
Replicaton 參數 –fastsync # 從一個dbpath裡啟用從庫複製服務,該dbpath的資料庫是主庫的快照,可用於快速啟用同步 –autoresync # 如果從庫與主庫同步資料差得多,自動重新同步, –oplogSize arg # 設定oplog的大小(MB)
主/從參數 –master # 主庫模式 –slave # 從庫模式 –source arg # 從庫 連接埠號碼 –only arg # 指定單一的資料庫複寫 –slavedelay arg # 設定從庫同步主庫的延遲時間
Replica set(複本集)選項: –replSet arg # 設定複本集名稱
Sharding(分區)選項 –configsvr # 聲明這是一個叢集的config服務,預設連接埠27019,預設目錄/data/configdb –shardsvr # 聲明這是一個叢集的分區,預設連接埠27018 –noMoveParanoia # 關閉偏執為moveChunk資料儲存