關于MongoDB的學習過程由下列的标題号順序。
一、什麼是NoSQL?
NoSQL(NoSQL = Not Only SQL ),意即"不僅僅是SQL"。
在現代的計算系統上每天網絡上都會産生龐大的資料量。
這些資料有很大一部分是由關系資料庫管理系統(RDMBSs)來處理。 1970年 E.F.Codd's提出的關系模型的論文 "A relational model of data for large shared data banks",這使得資料模組化和應用程式程式設計更加簡單。
通過應用實踐證明,關系模型是非常适合于客戶伺服器程式設計,遠遠超出預期的利益,今天它是結構化資料存儲在網絡和商務應用的主導技術。
NoSQL 是一項全新的資料庫革命性運動,早期就有人提出,發展至2009年趨勢越發高漲。NoSQL的擁護者們提倡運用非關系型的資料存儲,相對于鋪天蓋地的關系型資料庫運用,這一概念無疑是一種全新的思維的注入。
NoSQL用于超大規模資料的存儲。(例如谷歌或Facebook每天為他們的使用者收集萬億比特的資料)。這些類型的資料存儲不需要固定的模式,無需多餘操作就可以橫向擴充
二、什麼是MongoDB
MongoDB 是由C++語言編寫的,是一個基于分布式檔案存儲的開源資料庫系統。
在高負載的情況下,添加更多的節點,可以保證伺服器性能。
MongoDB 旨在為WEB應用提供可擴充的高性能資料存儲解決方案。
MongoDB 将資料存儲為一個文檔,資料結構由鍵值(key=>value)對組成。MongoDB 文檔類似于 JSON 對象。字段值可以包含其他文檔,數組及文檔數組。
三、MongoDB的基本功能以及文法。
建立資料庫 use DATABASE_NAME
删除資料庫 db.dropDatabase()
插入文檔 db.COLLECTION_NAME.insert(document)
更新文檔 db.collection.update( ,,{upsert: ,multi: ,writeConcern: })
db.collection.save(,{writeConcern: })
删除文檔 db.collection.remove(,{justOne: ,writeConcern: })
查詢文檔 db.collection.find(query, projection)
AND >db.col.find({key1:value1, key2:value2}).pretty()
OR >db.col.find({$or: [{key1: value1}, {key2:value2}]}).pretty()
條件操作符$gt -------- greater than >
$gte --------- gt equal >=
$lt -------- less than <
$lte --------- lt equal <=
$ne ----------- not equal !=
$eq -------- equal =
$type操作符db.col.find({"title" : {$type : value}}) value表示對應的類型
limit和skip db.COLLECTION_NAME.find().limit(NUMBER)
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
排序 db.COLLECTION_NAME.find().sort({KEY:1}) 1升序-1降序
索引 db.COLLECTION_NAME.ensureIndex({KEY:1})可建立多個,1升序-1降序
聚合 db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
四、MongoDB單機部署和分片複制集部署
單機部署的話解壓事先準備好的mongodb的壓縮包,可以在界面解壓也可以在Xshell中用指令解壓。
建立conf檔案夾來存放mongod.conf檔案,通過指定配置檔案來啟動MongoDB。
dbpath=/data/volume_b/mongodb/data/db
logpath=/data/volume_b/mongodb/logs/mongodb.log
pidfilepath=/data/volume_b/mongodb/logs/mongod.pid
port=27017
fork=true
logappend=true
journal=true
dbpath是指向資料庫路徑。
logpath是指定日志檔案路徑,該檔案将儲存所有的日志記錄、診斷資訊。運用熟悉時可以通過mongdb.log這個日志檔案來檢查出錯的地方。
pidfilepath是程序ID,沒有指定則啟動時候就沒有PID檔案。預設預設,mongod.pid裡面存放的是程序号,友善kill時檢視,不用再ps aux來看程序号。
logappend是使用追加方式寫日志。
port是端口。預設27017,MongoDB的預設服務TCP端口,監聽用戶端連接配接。
富貴吧要是端口設定小于1024,比如1021,則需要root權限啟動。
fork是否背景運作,設定為true 啟動 程序在背景運作的守護程序模式
journal啟用日志選項,MongoDB的資料操作将會寫入到journal檔案夾的檔案裡。
然後用numactl --interleave=all ./bin/mongod -config ./conf/mongod.conf來啟動mongodb資料庫。(為什麼用numactl這個指令,是為了調整NUMA政策,讓所有的node用來運作mongodb資料庫)
這裡列出三個最經常出現在mongodb資料庫啟動的錯誤。
(一)ERROR: child process failed, exited with error number 48
所在的端口27017mongo已經運作了你可以運作下面的指令來檢視PID是使用的端口ntulp | grep 27017
(二)ERROR: child process failed, exited with error number 1
權限不夠無法通路路徑檔案,或者你的路徑設定有問題。
(三)ERROR: child process failed, exited with error number 100
你的mongod程序正在運作,要kill掉,具體看(四)
(四)還有就是使用完mongo資料庫要正常退出。有兩種方法:use admin然後db.shutdownServer()或者kill -9 程序号
五、分片複制集部署
這個部分還在研究。