MongoDB是由C++語(yǔ)言編寫的,是一個(gè)基于分布式文件存儲(chǔ)的開(kāi)源數(shù)據(jù)庫(kù)系統(tǒng)。 在高負(fù)載的情況下,添加更多的節(jié)點(diǎn),可以保證服務(wù)器性能。本文是講述把MongoDB社區(qū)版安裝到新睿云CentOS7服務(wù)器上,按照AGPL的要求,社區(qū)版自用免費(fèi),如果要分發(fā)是必須使用企業(yè)版的。 一、添加MongoDB資料庫(kù)mongodb-org默認(rèn)情況下該軟件包不存在CentOS7的源倉(cāng)庫(kù)中。所以我們需要把其先放到倉(cāng)庫(kù)中。 使用vi編輯器為創(chuàng)建.repo文件yum,為CentOS的軟件包管理實(shí)用程序: sudo vi/etc/yum.repos.d/mongodb-org.repo 然后,訪問(wèn)MongoDB文檔的“在Red Hat上安裝”部分,并添加資料庫(kù)該文件的最新穩(wěn)定版本的信息: /etc/yum.repos.d/mongodb-org.repo [mongodb-org-3.4] name=MongoDB Repository baseurl=https://repo./yum/redhat/$releasever/mongodb-org/3.4/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www./static/pgp/server-3.4.asc 保存并關(guān)閉文件。 在繼續(xù)之前,我們應(yīng)該驗(yàn)證MongoDB資料庫(kù)yum實(shí)用程序中存在。該repolist命令顯示已啟用的列表倉(cāng)庫(kù): 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數(shù)據(jù)庫(kù)我們可以mongodb-org從第三方安裝軟件包資料庫(kù)使用該yum實(shí)用程序。 sudo yum install mongodb-org 有兩個(gè)Is this ok[y/N]:提示。第一個(gè)允許安裝MongoDB軟件包,第二個(gè)允許導(dǎo)入GPG密鑰。MongoDB的發(fā)布者對(duì)其軟件進(jìn)行簽名,并yum使用密鑰來(lái)確認(rèn)所下載軟件包的完整性。在每個(gè)提示下,鍵入Y,然后ENTER按鍵。 接下來(lái),使用該systemctl實(shí)用程序啟動(dòng)MongoDB服務(wù): sudo systemctl start mongod 盡管我們不會(huì)在本教程中使用它們,但是您也可以使用reload和stop命令更改MongoDB服務(wù)的狀態(tài)。 該reload命令要求mongod進(jìn)程讀取配置文件/etc/mongod.conf,并應(yīng)用任何更改而無(wú)需重新啟動(dòng)。 sudo systemctl reload mongod 該stop命令將暫停所有正在運(yùn)行的mongod進(jìn)程。 sudo systemctl stop mongod 該systemctl實(shí)用程序在執(zhí)行start命令后沒(méi)有提供結(jié)果,但是我們可以通過(guò)mongod.log使用以下tail命令查看文件末尾來(lái)檢查服務(wù)是否已啟動(dòng): sudo tail/var/log/mongodb/mongod.log Output ... [initandlisten]waiting for connections on port 27017 等待連接的輸出確認(rèn)MongoDB已成功啟動(dòng),我們可以使用MongoDB Shell訪問(wèn)數(shù)據(jù)庫(kù)服務(wù)器: mongo 注意:?jiǎn)?dòng)MongoDB Shell時(shí),您可能會(huì)看到如下警告: **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是一個(gè)線程化的應(yīng)用程序。它可以啟動(dòng)其他流程來(lái)處理其工作量。該警告指出,要使MongoDB最有效,它的進(jìn)程數(shù)是授權(quán)的加速應(yīng)該是它在任何給定時(shí)間可以打開(kāi)的文件數(shù)量的一半。要解決警告,請(qǐng)通過(guò)編輯文件processes來(lái)更改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,請(qǐng)使用systemctl實(shí)用程序?qū)⑵渲匦聠?dòng): sudo systemctl restart mongod 之后,當(dāng)您連接到MongoDB Shell時(shí),該警告應(yīng)該不再存在。 如果要與MongoDB進(jìn)行交互,您截圖使用db.help()方法的輸出,該方法提供了db對(duì)象的方法列表。 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進(jìn)程在后臺(tái)運(yùn)行,但是使用以下exit命令退出shell: exit Output Bye 三、驗(yàn)證MongoDB啟動(dòng)如果數(shù)據(jù)庫(kù)安裝失敗,應(yīng)用程序無(wú)法運(yùn)行,所以我們將確保MongoDB守護(hù)程序已經(jīng)啟動(dòng)。 使用該systemctl實(shí)用工具檢查其啟動(dòng)狀態(tài): systemctl is-enabled mongod;echo$? 輸出為零表示已啟用守護(hù)程序,這樣符合我們的預(yù)期。但是,如果數(shù)據(jù)安裝不完全或者失敗則啟動(dòng)程序可以不會(huì)出現(xiàn)或者殘缺不全。 Output ... enabled 0 如果啟動(dòng)程序啟動(dòng)但運(yùn)行的不完成,請(qǐng)使用該systemctl實(shí)用工具啟用它: sudo systemctl enable mongod 現(xiàn)在,我們有了一個(gè)正在運(yùn)行的MongoDB實(shí)例,它將在系統(tǒng)重啟后自動(dòng)啟動(dòng)。 四、導(dǎo)入示例數(shù)據(jù)集(可選)與其他數(shù)據(jù)庫(kù)服務(wù)器不同,MongoDB的數(shù)據(jù)庫(kù)中沒(méi)有數(shù)據(jù)test測(cè)試數(shù)據(jù)集。因此我們將從“MongoDB入門”文檔的“導(dǎo)入示例數(shù)據(jù)集”部分下載示例數(shù)據(jù)集。JSON文檔集合,我們將使用它們來(lái)練習(xí)與MongoDB的交互并避免對(duì)敏感數(shù)據(jù)造成傷害。 進(jìn)入可寫的目錄: cd/tmp 使用curl命令和MongoDB中的鏈接下載JSON文件: curl-LO https://raw./mongodb/docs-assets/primer-dataset/primer-dataset.json 該mongoimport命令會(huì)將數(shù)據(jù)插入測(cè)試數(shù)據(jù)庫(kù)。該--db標(biāo)志定義了要使用的數(shù)據(jù)庫(kù),而--collection標(biāo)志則指定了將信息存儲(chǔ)在數(shù)據(jù)庫(kù)中的位置,并且--file標(biāo)志告訴命令在哪個(gè)文件上執(zhí)行導(dǎo)入操作: mongoimport--db test--collection restaurants--file/tmp/primer-dataset.json 輸出確認(rèn)從primer-dataset.json文件中導(dǎo)入數(shù)據(jù): Output connected to:localhost imported 25359 documents 放置好樣本數(shù)據(jù)集之后,我們將對(duì)其進(jìn)行查詢。 重新啟動(dòng)MongoDB Shell: mongo Shell test默認(rèn)選擇數(shù)據(jù)庫(kù),這是我們導(dǎo)入數(shù)據(jù)的地方。 使用方法查詢餐廳集合,find()以顯示數(shù)據(jù)集中所有餐廳的列表。由于該集合包含超過(guò)25,000個(gè)條目,因此請(qǐng)使用可選limit()方法將查詢的輸出減少到指定的數(shù)量。此外,該pretty()方法使信息更人性化-可讀的與換行符和縮進(jìn)。 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ù)集來(lái)熟悉自己使用MongoDB或使用以下db.restaurants.drop()方法將其刪除: db.restaurants.drop() 最后,使用以下exit命令退出shell: exit Output Bye 按照本文示例您可以配置并且應(yīng)用MongoDB,如果您想進(jìn)一步的深入了解更多數(shù)據(jù)庫(kù)的使用辦法可以閱讀《postgresql和mysql:性能、語(yǔ)法、功能有哪些差異?》 |
|