MongoDB是由C++語言編寫的,是一個基于分布式文件存儲的開源數(shù)據(jù)庫系統(tǒng)。
在高負載的情況下,添加更多的節(jié)點,可以保證服務(wù)器性能。本文是講述把MongoDB社區(qū)版安裝到新睿云CentOS7服務(wù)器上,按照AGPL的要求,社區(qū)版自用免費,如果要分發(fā)是必須使用企業(yè)版的。
mongodb-org默認情況下該軟件包不存在CentOS7的源倉庫中。所以我們需要把其先放到倉庫中。
使用vi編輯器為創(chuàng)建.repo文件yum,為CentOS的軟件包管理實用程序:
sudo vi/etc/yum.repos.d/mongodb-org.repo
然后,訪問MongoDB文檔的“在Red Hat上安裝”部分,并添加資料庫該文件的最新穩(wěn)定版本的信息:
/etc/yum.repos.d/mongodb-org.repo
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
保存并關(guān)閉文件。
在繼續(xù)之前,我們應該驗證MongoDB資料庫yum實用程序中存在。該repolist命令顯示已啟用的列表倉庫:
yum repolist
Output
...
repo id repo name
base/7/x86_64 CentOS-7-Base
extras/7/x86_64 CentOS-7-Extras
mongodb-org-3.2/7/x86_64 MongoDB Repository
updates/7/x86_64 CentOS-7-Updates
...
隨著MongoDB Repository到位,讓我們繼續(xù)安裝。
我們可以mongodb-org從第三方安裝軟件包資料庫使用該yum實用程序。
sudo yum install mongodb-org
有兩個Is this ok[y/N]:提示。第一個允許安裝MongoDB軟件包,第二個允許導入GPG密鑰。MongoDB的發(fā)布者對其軟件進行簽名,并yum使用密鑰來確認所下載軟件包的完整性。在每個提示下,鍵入Y,然后ENTER按鍵。
接下來,使用該systemctl實用程序啟動MongoDB服務(wù):
sudo systemctl start mongod
盡管我們不會在本教程中使用它們,但是您也可以使用reload和stop命令更改MongoDB服務(wù)的狀態(tài)。
該reload命令要求mongod進程讀取配置文件/etc/mongod.conf,并應用任何更改而無需重新啟動。
sudo systemctl reload mongod
該stop命令將暫停所有正在運行的mongod進程。
sudo systemctl stop mongod
該systemctl實用程序在執(zhí)行start命令后沒有提供結(jié)果,但是我們可以通過mongod.log使用以下tail命令查看文件末尾來檢查服務(wù)是否已啟動:
sudo tail/var/log/mongodb/mongod.log
Output
...
[initandlisten]waiting for connections on port 27017
等待連接的輸出確認MongoDB已成功啟動,我們可以使用MongoDB Shell訪問數(shù)據(jù)庫服務(wù)器:
mongo
注意:啟動MongoDB Shell時,您可能會看到如下警告:
**WARNING:soft rlimits too low.rlimits set to 4096 processes,64000 files.Number of processes should be at least 32000:0.5 times number of files.
MongoDB是一個線程化的應用程序。它可以啟動其他流程來處理其工作量。該警告指出,要使MongoDB最有效,它的進程數(shù)是授權(quán)的加速應該是它在任何給定時間可以打開的文件數(shù)量的一半。要解決警告,請通過編輯文件processes來更改soft rlimit值:mongod20-nproc.conf
sudo vi/etc/security/limits.d/20-nproc.conf
將以下行添加到文件末尾:
/etc/security/limits.d/20-nproc.conf
...
mongod soft nproc 32000
為了使新限制適用于MongoDB,請使用systemctl實用程序?qū)⑵渲匦聠樱?/span>
sudo systemctl restart mongod
之后,當您連接到MongoDB Shell時,該警告應該不再存在。
如果要與MongoDB進行交互,您截圖使用db.help()方法的輸出,該方法提供了db對象的方法列表。
db.help()
Output
DB methods:
db.adminCommand(nameOrDocument)-switches to'admin'db,and runs command[just calls db.runCommand(...)]
db.auth(username,password)
db.cloneDatabase(fromhost)
db.commandHelp(name)returns the help for the command
db.copyDatabase(fromdb,todb,fromhost)
db.createCollection(name,{size:...,capped:...,max:...})
db.createUser(userDocument)
db.currentOp()displays currently executing operations in the db
db.dropDatabase()
...
讓mongod進程在后臺運行,但是使用以下exit命令退出shell:
exit
Output
Bye
如果數(shù)據(jù)庫安裝失敗,應用程序無法運行,所以我們將確保MongoDB守護程序已經(jīng)啟動。
使用該systemctl實用工具檢查其啟動狀態(tài):
systemctl is-enabled mongod;echo$?
輸出為零表示已啟用守護程序,這樣符合我們的預期。但是,如果數(shù)據(jù)安裝不完全或者失敗則啟動程序可以不會出現(xiàn)或者殘缺不全。
Output
...
enabled
0
如果啟動程序啟動但運行的不完成,請使用該systemctl實用工具啟用它:
sudo systemctl enable mongod
現(xiàn)在,我們有了一個正在運行的MongoDB實例,它將在系統(tǒng)重啟后自動啟動。
與其他數(shù)據(jù)庫服務(wù)器不同,MongoDB的數(shù)據(jù)庫中沒有數(shù)據(jù)test測試數(shù)據(jù)集。因此我們將從“MongoDB入門”文檔的“導入示例數(shù)據(jù)集”部分下載示例數(shù)據(jù)集。JSON文檔集合,我們將使用它們來練習與MongoDB的交互并避免對敏感數(shù)據(jù)造成傷害。
進入可寫的目錄:
cd/tmp
使用curl命令和MongoDB中的鏈接下載JSON文件:
curl-LO https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/primer-dataset.json
該mongoimport命令會將數(shù)據(jù)插入測試數(shù)據(jù)庫。該--db標志定義了要使用的數(shù)據(jù)庫,而--collection標志則指定了將信息存儲在數(shù)據(jù)庫中的位置,并且--file標志告訴命令在哪個文件上執(zhí)行導入操作:
mongoimport--db test--collection restaurants--file/tmp/primer-dataset.json
輸出確認從primer-dataset.json文件中導入數(shù)據(jù):
Output
connected to:localhost
imported 25359 documents
放置好樣本數(shù)據(jù)集之后,我們將對其進行查詢。
重新啟動MongoDB Shell:
mongo
Shell test默認選擇數(shù)據(jù)庫,這是我們導入數(shù)據(jù)的地方。
使用方法查詢餐廳集合,find()以顯示數(shù)據(jù)集中所有餐廳的列表。由于該集合包含超過25,000個條目,因此請使用可選limit()方法將查詢的輸出減少到指定的數(shù)量。此外,該pretty()方法使信息更人性化-可讀的與換行符和縮進。
db.restaurants.find().limit(1).pretty()
Output
{
"_id":ObjectId("57e0443b46af7966d1c8fa68"),
"address":{
"building":"1007",
"coord":[
-73.856077,
40.848447
],
"street":"Morris Park Ave",
"zipcode":"10462"
},
"borough":"Bronx",
"cuisine":"Bakery",
"grades":[
{
"date":ISODate("2014-03-03T00:00:00Z"),
"grade":"A",
"score":2
},
{
"date":ISODate("2013-09-11T00:00:00Z"),
"grade":"A",
"score":6
},
{
"date":ISODate("2013-01-24T00:00:00Z"),
"grade":"A",
"score":10
},
{
"date":ISODate("2011-11-23T00:00:00Z"),
"grade":"A",
"score":9
},
{
"date":ISODate("2011-03-10T00:00:00Z"),
"grade":"B",
"score":14
}
],
"name":"Morris Park Bake Shop",
"restaurant_id":"30075445"
}
您可以繼續(xù)使用樣本數(shù)據(jù)集來熟悉自己使用MongoDB或使用以下db.restaurants.drop()方法將其刪除:
db.restaurants.drop()
最后,使用以下exit命令退出shell:
exit
Output
Bye
按照本文示例您可以配置并且應用MongoDB,如果您想進一步的深入了解更多數(shù)據(jù)庫的使用辦法可以閱讀《postgresql和mysql:性能、語法、功能有哪些差異?》