天天看點

學習MongoDB資料庫

關于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 程序号

五、分片複制集部署

這個部分還在研究。