




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
北京傳智播客教育MongoDB趙慶軒北京傳智播客教育NoSql簡(jiǎn)介NoSQL(NotOnlySQL),意即“不僅僅是SQL”,指的是非關(guān)系型的數(shù)據(jù)庫(kù)。是一項(xiàng)全新的數(shù)據(jù)庫(kù)革命性運(yùn)動(dòng),早期就有人提出,發(fā)展至2009年趨勢(shì)越發(fā)高漲。NoSQL的擁護(hù)者們提倡運(yùn)用非關(guān)系型的數(shù)據(jù)存儲(chǔ),相對(duì)于鋪天蓋地的關(guān)系型數(shù)據(jù)庫(kù)運(yùn)用,這一概念無(wú)疑是一種全新的思維的注入。關(guān)系型數(shù)據(jù)庫(kù)中的表都是存儲(chǔ)一些格式化的數(shù)據(jù)結(jié)構(gòu),每條記錄的字段的組成都一樣,即使不是每條記錄都需要所有的字段,但數(shù)據(jù)庫(kù)會(huì)為每條數(shù)據(jù)分配所有的字段。而非關(guān)系型數(shù)據(jù)庫(kù)以鍵值對(duì)(key-value)存儲(chǔ),它的結(jié)構(gòu)不固定,每一條記錄可以有不一樣的鍵,每條記錄可以根據(jù)需要增加一些自己的鍵值對(duì),這樣就不會(huì)局限于固定的結(jié)構(gòu),可以減少一些時(shí)間和空間的開銷。北京傳智播客教育常見的NoSql數(shù)據(jù)庫(kù)CouchDBRedisMongoDBNeo4jHBaseBigTable北京傳智播客教育NoSql數(shù)據(jù)庫(kù)優(yōu)缺點(diǎn)在優(yōu)勢(shì)方面主要體現(xiàn)在下面幾點(diǎn): 簡(jiǎn)單的擴(kuò)展 快速的讀寫 低廉的成本 靈活的數(shù)據(jù)模型在不足方面主要有下面幾點(diǎn): 不提供對(duì)SQL的支持 支持的特性不夠豐富 現(xiàn)有的產(chǎn)品部夠成熟北京傳智播客教育
MongoDB簡(jiǎn)介MongoDB是用C++語(yǔ)言編寫的非關(guān)系型數(shù)據(jù)庫(kù)。特點(diǎn)是高性能、易部署、易使用,存儲(chǔ)數(shù)據(jù)十分方便,主要特性有:面向集合存儲(chǔ),易于存儲(chǔ)對(duì)象類型的數(shù)據(jù)模式自由支持動(dòng)態(tài)查詢支持完全索引,包含內(nèi)部對(duì)象支持復(fù)制和故障恢復(fù)使用高效的二進(jìn)制數(shù)據(jù)存儲(chǔ),包括大型對(duì)象文件存儲(chǔ)格式為BSON(一種JSON的擴(kuò)展)北京傳智播客教育
MongoDB與關(guān)系型數(shù)據(jù)庫(kù)對(duì)比北京傳智播客教育
MongoDB基本概念介紹文檔(document)是MongoDB中數(shù)據(jù)的基本單元,非常類似于關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)中的行(但是比行要復(fù)雜的多)集合(collection)就是一組文檔,如果說(shuō)MongoDB中的文檔類似于關(guān)系型數(shù)據(jù)庫(kù)中的行,那么集合就如同表MongoDB的單個(gè)實(shí)例可以容納多個(gè)獨(dú)立的數(shù)據(jù)庫(kù),每一個(gè)數(shù)據(jù)庫(kù)都有自己的集合和權(quán)限MongoDB自帶簡(jiǎn)潔但功能強(qiáng)大的JavaScriptshell,這個(gè)工具對(duì)于管理MongoDB實(shí)例和操作數(shù)據(jù)作用非常大每一個(gè)文檔都有一個(gè)特殊的鍵"_id",它在文檔所處的集合中是唯一的,相當(dāng)于關(guān)系數(shù)據(jù)庫(kù)中的表的主鍵北京傳智播客教育
MongoDB數(shù)據(jù)類型數(shù)據(jù)類型 描述 舉例null 表示空值或者未定義的對(duì)象 {"x":null}布爾值 真或者假:true或者false {"x":true}32位整數(shù)32位整數(shù)。shell是不支持該類型的,shell中默認(rèn)會(huì)轉(zhuǎn)換成64位浮點(diǎn)數(shù) 64位整數(shù)64位整數(shù)。shell是不支持該類型的,shell中默認(rèn)會(huì)轉(zhuǎn)換成64位浮點(diǎn)數(shù) 64位浮點(diǎn)數(shù)64位浮點(diǎn)數(shù)。shell中的數(shù)字就是這一種類型 {"x":3.14,"y":3}字符串 UTF-8字符串 {"foo":"bar"}符號(hào) shell不支持,shell會(huì)將數(shù)據(jù)庫(kù)中的符號(hào)類型的數(shù)據(jù)自動(dòng)轉(zhuǎn)換成字符串 對(duì)象id 文檔的12字節(jié)的唯一id {"id":ObjectId()}日期 從標(biāo)準(zhǔn)紀(jì)元開始的毫秒數(shù) {"date":newDate()}正則表達(dá)式文檔中可以包含正則表達(dá)式,遵循JavaScript的語(yǔ)法{"foo":/foobar/i}代碼 文檔中可以包含JavaScript代碼 {"x":function(){}}
未定義 undefined {"x":undefined}數(shù)組 值的集合或者列表 {"arr":["a","b"]}內(nèi)嵌文檔文檔可以作為文檔中某個(gè)key的value {"x":{"foo":"bar"}}北京傳智播客教育下載MongoDB
北京傳智播客教育安裝MongoDBMongoDB的安裝非常簡(jiǎn)單,只需要將下載的MongoDB的壓縮文件解壓到任意目錄,并將其中的bin目錄加入到系統(tǒng)的path環(huán)境變量中即可。北京傳智播客教育啟動(dòng)MongoDB在啟動(dòng)MongoDB之前,要手動(dòng)創(chuàng)建一個(gè)存放MongoDB數(shù)據(jù)文件的目錄,如D:\mongo_data在命令行執(zhí)行mongod--dbpath=D:\mongo_data北京傳智播客教育連接到MongoDB服務(wù)器在命令行中可以使用mongo命令連接到MongoDB服務(wù)器,如下,輸入mongo命令默認(rèn)連接到本地的名稱為test的數(shù)據(jù)庫(kù),如果希望連接到遠(yuǎn)程數(shù)據(jù)庫(kù),可以使用mongoip:port北京傳智播客教育MongoDB常用操作創(chuàng)建數(shù)據(jù)庫(kù),使用命令use數(shù)據(jù)庫(kù)名稱
,如:usemydb1刪除當(dāng)前數(shù)據(jù)庫(kù),使用命令db.dropDatabase()北京傳智播客教育MongoDB常用操作查看所有數(shù)據(jù)庫(kù),使用命令showdbs查看當(dāng)前所在數(shù)據(jù)庫(kù),使用命令
db北京傳智播客教育MongoDB常用操作查看當(dāng)前數(shù)據(jù)庫(kù)中所有的集合,使用命令showcollections
或使用showtables
北京傳智播客教育MongoDB常用操作創(chuàng)建集合有兩種方式,顯示創(chuàng)建和隱式創(chuàng)建顯示創(chuàng)建可以使用命令db.createCollection(“集合名稱")隱式創(chuàng)建可以使用命令db.集合名稱.insert({}),指創(chuàng)建集合并同時(shí)向集合中插入數(shù)據(jù),例如:db.customer.insert({name:”jack”})北京傳智播客教育MongoDB常用操作向集合添加文檔,使用命令db.集合名稱.insert({}),例如:db.user1.insert({name:”jack”,age:20})北京傳智播客教育MongoDB常用操作刪除集合中的文檔,使用命令db.集合名稱.remove({刪除條件}),不加刪除條件為刪除集合中的所有文檔,例如,db.c1.remove()為刪除c1集合中的所有文檔,db.c1.remove({name:”user1”})為刪除c1集合中name為user1的文檔北京傳智播客教育MongoDB常用操作查詢集合中的文檔,可以使用命令db.集合名稱.find({條件}),或者使用db.集合名稱.findOne()
查詢第一個(gè)文檔北京傳智播客教育MongoDB常用操作查詢集合中的文檔,返回某些特定的鍵值北京傳智播客教育MongoDB常用操作查詢集合中的文檔,使用條件表達(dá)式(<,<=,>,>=,!=)//大于:field>valuedb.collection.find({field:{$gt:value}});//小于:field<valuedb.collection.find({field:{$lt:value}});//大于等于:field>=valuedb.collection.find({field:{$gte:value}});//小于等于:field<=valuedb.collection.find({field:{$lte:value}});//不等于:field!=valuedb.collection.find({field:{$ne:value}});北京傳智播客教育MongoDB常用操作查詢集合中的文檔,統(tǒng)計(jì)(count)、排序(sort)、分頁(yè)(skip、limit)db.customer.count();db.customer.find().count();db.customer.find({age:{$lt:5}}).count();db.customer.find().sort({age:1});db.customer.find().skip(2).limit(3);db.customer.find().sort({age:-1}).skip(2).limit(3);db.customer.find().sort({age:-1}).skip(2).limit(3).count();db.customer.find().sort({age:-1}).skip(2).limit(3).count(0);db.customer.find().sort({age:-1}).skip(2).limit(3).count(1);北京傳智播客教育MongoDB常用操作查詢集合中的文檔,$all主要用來(lái)查詢數(shù)組中的包含關(guān)系,查詢條件中只要有一個(gè)不包含就不返回北京傳智播客教育MongoDB常用操作查詢集合中的文檔,$in,類似于關(guān)系型數(shù)據(jù)庫(kù)中的IN北京傳智播客教育MongoDB常用操作查詢集合中的文檔,$nin,與$in相反北京傳智播客教育MongoDB常用操作查詢集合中的文檔,$or,相當(dāng)于關(guān)系型數(shù)據(jù)庫(kù)中的OR,表示或者的關(guān)系,例如查詢name為user2或者age為3的文檔,命令為:db.customer.find({$or:[{name:”user2”},{age:3}]})北京傳智播客教育MongoDB常用操作查詢集合中的文檔,$nor,表示根據(jù)條件過(guò)濾掉某些數(shù)據(jù),例如查詢name不是user2,age不是3的文檔,命令為:db.customer.find({$nor:[{name:”user2”},{age:3}]})北京傳智播客教育MongoDB常用操作查詢集合中的文檔,$exists,用于查詢集合中存在某個(gè)鍵的文檔或不存在某個(gè)鍵的文檔,例如查詢customer集合中存在name鍵的所有文檔,可以使用db.customer.find({name:{$exists:1}}),$exists:1表示真,指存在$exists:0表示假,指不存在北京傳智播客教育MongoDB常用操作查詢集合中的文檔,類似于關(guān)系型數(shù)據(jù)庫(kù),mongodb中也有游標(biāo)的概念北京傳智播客教育MongoDB常用操作更新集合中的文檔,語(yǔ)法如下:db.collection.update(criteria,objNew,upsert,multi)參數(shù)說(shuō)明:criteria:用于設(shè)置查詢條件的對(duì)象objNew:用于設(shè)置更新內(nèi)容的對(duì)象upsert:如果記錄已經(jīng)存在,更新它,否則新增一個(gè)記錄,取值為0或1multi:如果有多個(gè)符合條件的記錄,是否全部更新,取值為0或1注意:默認(rèn)情況下,只會(huì)更新第一個(gè)符合條件的記錄一般情況下后兩個(gè)參數(shù)分別為0,1,即:db.collection.update(criteria,objNew,0,1)北京傳智播客教育MongoDB常用操作更新集合中的文檔,將集合中name為user1的文檔改成name為jack北京傳智播客教育MongoDB常用操作更新集合中的文檔,使用$inc將集合中name為user1的age加1,其它鍵不變,$inc表示使某個(gè)鍵值加減指定的數(shù)值北京傳智播客教育MongoDB常用操作更新集合中的文檔,$set
用來(lái)指定一個(gè)鍵的值,如果這個(gè)鍵不存在,則創(chuàng)建它。例如:給name為user1的文檔添加address,可以使用命令:db.c1.update({name:”user1”},{$set:{address:”bj”}},0,1)將name為user1的文檔修改address為tj,其它鍵值對(duì)不變,命令為:db.c1.update({name:”user1”},{$set:{address:”tj”}},0,1)北京傳智播客教育MongoDB常用操作更新集合中的文檔,$unset
用來(lái)刪除某個(gè)鍵,例如刪除name為user1的文檔中的address鍵,可以使用命令:db.c1.update({name:”user1”},{$unset:{address:1}},0,1)北京傳智播客教育索引索引就是用來(lái)加速查詢的。數(shù)據(jù)庫(kù)索引與書籍的索引類似:有了索引就不需要翻遍整本書,數(shù)據(jù)庫(kù)則可以直接在索引中查找,使得查找速度能提高幾個(gè)數(shù)量級(jí)。在索引中找到條目以后,就可以直接跳轉(zhuǎn)到目標(biāo)文檔的位置。北京傳智播客教育索引創(chuàng)建普通索引,使用命令db.collection.ensureIndex({key:1})
查看關(guān)于索引的相關(guān)信息,使用命令db.collection.stats()
查看查詢使用索引的情況,使用命令db.collection.find({key:value}).explain()
刪除索引,使用命令db.collection.dropIndex({key:1})刪除集合,也會(huì)將集合中的索引全部刪除北京傳智播客教育索引創(chuàng)建唯一索引,使用命令db.collection.ensureIndex({key:1},{unique:true})
查看關(guān)于索引的相關(guān)信息,使用命令db.collection.stats()
查看查詢使用索引的情況,使用命令db.collection.find({key:value}).explain()
刪除索引,使用命令db.collection.dropIndex({key:1})刪除集合,也會(huì)將集合中的索引全部刪除北京傳智播客教育固定集合(cappedcollection)固定集合指的是事先創(chuàng)建而且大小固定的集合。固定集合特性:固定集合很像環(huán)形隊(duì)列,如果空間不足,最早的文檔就會(huì)被刪除,為新的文檔騰出空間。一般來(lái)說(shuō),固定集合適用于任何想要自動(dòng)淘汰過(guò)期屬性的場(chǎng)景,沒(méi)有太多的操作限制。創(chuàng)建固定集合使用命令:db.createCollection(“collectionName”,{capped:true,size:100000,max:100});
size指定集合大小,單位為KB,max指定文檔的數(shù)量當(dāng)指定文檔數(shù)量上限時(shí),必須同時(shí)指定大小。淘汰機(jī)制只有在容量還沒(méi)有滿時(shí)才會(huì)依據(jù)文檔數(shù)量來(lái)工作。要是容量滿了,淘汰機(jī)制會(huì)依據(jù)容量來(lái)工作。北京傳智播客教育備份(mongodump)和恢復(fù)(mongorestore)MongoDB提供了備份和恢復(fù)的功能,分別是MongoDB下載目錄下的mongodump.exe和mongorestore.exe文件備份數(shù)據(jù)使用下面的命令:>mongodump
-hdbhost-ddbname-odbdirectory-h:MongDB所在服務(wù)器地址,例如:,當(dāng)然也可以指定端口號(hào)::27017-d:需要備份的數(shù)據(jù)庫(kù)實(shí)例,例如:test-o:備份的數(shù)據(jù)存放位置,例如:c:\data\dump,當(dāng)然該目錄需要提前建立,在備份完成后,系統(tǒng)自動(dòng)在dump目錄下建立一個(gè)test目錄,這個(gè)目錄里面存放該數(shù)據(jù)庫(kù)實(shí)例的備份數(shù)據(jù)。北京傳智播客教育備份(mongodump)和恢復(fù)(mongorestore)恢復(fù)數(shù)據(jù)使用下面的命令:>mongorestore
-hdbhost-ddbname-directoryperdbdbdirectory-h:MongoDB所在服務(wù)器地址-d:需要恢復(fù)的數(shù)據(jù)庫(kù)實(shí)例,例如:test,當(dāng)然這個(gè)名稱也可以和備份時(shí)候的不一樣,比如test2-directoryperdb:備份數(shù)據(jù)所在位置,例如:c:\data\dump\test北京傳智播客教育導(dǎo)入(mongoimport)和導(dǎo)出(mongoexport)導(dǎo)出數(shù)據(jù)可以使用命令:mongoexport-hdbhost-ddbname-ccollectionName
-ooutput參數(shù)說(shuō)明:-h數(shù)據(jù)庫(kù)地址-d指明使用的庫(kù)-c指明要導(dǎo)出的集合-o指明要導(dǎo)出的文件名北京傳智播客教育導(dǎo)入(mongoimport)和導(dǎo)出(mongoexport)導(dǎo)入數(shù)據(jù)可以使用命令:mongoimport-hdbhost-ddbname-ccollectionnameoutput
參數(shù)說(shuō)明:-h數(shù)據(jù)庫(kù)地址-d指明使用的庫(kù)-c指明要導(dǎo)入的集合北京傳智播客教育安全和認(rèn)證每個(gè)MongoDB實(shí)例中的數(shù)據(jù)庫(kù)都可以有許多用戶。如果開啟了安全性檢查,則只有數(shù)據(jù)庫(kù)認(rèn)證用戶才能執(zhí)行讀或者寫操作。在認(rèn)證的上下文中,MongoDB會(huì)將普通的數(shù)據(jù)作為admin數(shù)據(jù)庫(kù)處理。admin數(shù)據(jù)庫(kù)中的用戶被視為超級(jí)用戶(即管理員)。在認(rèn)證之后,管理員可以讀寫所有數(shù)據(jù)庫(kù),執(zhí)行特定的管理命令,如listDatabases和shutdown。在開啟安全檢查之前,一定要至少有一個(gè)管理員賬號(hào)。北京傳智播客教育安全和認(rèn)證在admin數(shù)據(jù)庫(kù)中創(chuàng)建管理員賬號(hào):useadmin;db.addUser(“root”,”root”);在test數(shù)據(jù)庫(kù)中創(chuàng)建普通賬號(hào):usetest;db.addUser(“zhangsan”,”123”);db.addUser(“l(fā)isi”,”123”,true);注意:用戶zhangsan,密碼為123,對(duì)test數(shù)據(jù)庫(kù)擁有讀寫權(quán)限用戶lisi,密碼為123,對(duì)test數(shù)據(jù)庫(kù)擁有只讀權(quán)限重新啟動(dòng)數(shù)據(jù)庫(kù)服務(wù),并開啟安全檢查:mongod--dbpathd:\mongo_data--auth北京傳智播客教育主從復(fù)制(主從集群)主從復(fù)制是MongoDB最常用的復(fù)制方式。這種方式非常靈活,可用于備份、故障恢復(fù)、讀擴(kuò)展等。最基本的設(shè)置方式就是建立一個(gè)主節(jié)點(diǎn)和一個(gè)或者多個(gè)從節(jié)點(diǎn),每個(gè)從節(jié)點(diǎn)要知道主節(jié)點(diǎn)的地址。運(yùn)行mongod--master就啟動(dòng)了主服務(wù)器。運(yùn)行mongod--slave--sourcemaster_address則啟動(dòng)了從服務(wù)器,其中master_address就是上面主節(jié)點(diǎn)的地址。北京傳智播客教育主從復(fù)制(主從集群)為了方便演示,可以在一臺(tái)計(jì)算機(jī)上來(lái)模擬主節(jié)點(diǎn)和從節(jié)點(diǎn)。在D盤創(chuàng)建兩個(gè)目錄master和slave,master目錄作為主節(jié)點(diǎn)的數(shù)據(jù)文件的目錄,slave目錄作為從節(jié)點(diǎn)的數(shù)據(jù)文件的目錄。注意:主節(jié)點(diǎn)和從節(jié)點(diǎn)要指定不同的端口。啟動(dòng)主節(jié)點(diǎn):mongod--dbpathd:\master--port10000--master啟動(dòng)從節(jié)點(diǎn):mongod--dbpathd:\slave--port10001--slave--sourcelocalhost:10000啟動(dòng)成功后就可以連接主節(jié)點(diǎn)進(jìn)行操作了,而這些操作會(huì)同步到從節(jié)點(diǎn)。北京傳智播客教育副本集副本集就是有自動(dòng)故障恢復(fù)功能的主從集群。主從集群和副本集最大的區(qū)別就是副本集沒(méi)有固定的“主節(jié)點(diǎn)”;整個(gè)集群會(huì)選出一個(gè)“主節(jié)點(diǎn)”,當(dāng)其掛掉后,又在剩下的從節(jié)點(diǎn)中選中其他節(jié)點(diǎn)為“主節(jié)點(diǎn)”,副本集總有一個(gè)活躍點(diǎn)(primary)和一個(gè)或多個(gè)備份節(jié)點(diǎn)(secondary)。北京傳智播客教育副本集以三個(gè)節(jié)點(diǎn)為例:節(jié)點(diǎn)1:HOST:localhost:10001LogFile:D:\mongodb\logs\node1\logs.txtDataFile:D:\mongodb\dbs\node1節(jié)點(diǎn)2:HOST:localhost:10002LogFile:D:\mongodb\logs\node2\logs.txtDataFile:D:\mongodb\dbs\node2節(jié)點(diǎn)3:HOST:localhost:10003LogFile:D:\mongodb\logs\node3\logs.txtDataFile:D:\mongodb\dbs\node3北京傳智播客教育副本集啟動(dòng)節(jié)點(diǎn)1:mongod--dbpathD:\mongodb\dbs\node1--logpathD:\mongodb\logs\node1\logs.txt--logappend--port10001--replSetitcast/localhost:10002
--master啟動(dòng)節(jié)點(diǎn)2:mongod--dbpathD:\mongodb\dbs\node2--logpathD:\mongodb\logs\node2\logs.txt--logappend--port10002--replSetitcast/localhost:10001啟動(dòng)節(jié)點(diǎn)3:
mongod--dbpathD:\mongodb\dbs\node3--logpathD:\mongodb\logs\node3\logs.txt--logappend--port10003--replSetitcast/localhost:10001,localhost:10002北京傳智播客教育副本集初始化節(jié)點(diǎn)(只能初始化一次):隨便登錄一個(gè)節(jié)點(diǎn),以10001為例
mongolocalhost:10001/admin
mand({
"replSetInitiate":{
"_id":“itcast",
"members":[
{
"_id":1,
"host":"localhost:10001",
"priority":3
},
{
"_id":2,
"host":"localhost:10002",
"priority":2
},
{
"_id":3,
"host":"localhost:10003",
"priority":1
}
]}});北京傳智播客教育副本集查詢當(dāng)前主庫(kù),登錄10002mongolocalhost:10002db.$cmd.findOne({ismaster:1});北京傳智播客教育副本集關(guān)閉10001服務(wù)Dos命令窗口,
登錄10002查詢當(dāng)前主庫(kù)mongolocalhost:10002db.$cmd.findOne({ismaster:1});北京傳智播客教育分片(sharding)分片(sharding)是指將數(shù)據(jù)拆分,將其分散存在不同的機(jī)器上的過(guò)程。有時(shí)也用分區(qū)(partitioning)來(lái)表示這個(gè)概念。將數(shù)據(jù)分散到不同的機(jī)器上,不需要功能強(qiáng)大的大型計(jì)算機(jī)就可以儲(chǔ)存更多的數(shù)據(jù),處理更多的負(fù)載。MongoDB分片的基本思想就是將集合切分成小塊。這些塊分散到若干片里面,每個(gè)片只負(fù)責(zé)總數(shù)據(jù)的一部分。應(yīng)用程序不必知道哪片對(duì)應(yīng)哪些數(shù)據(jù),甚至不需要知道數(shù)據(jù)已經(jīng)被拆分了,所以在分片之前要運(yùn)行一個(gè)路由進(jìn)程,該進(jìn)程名為mongos。這個(gè)路由器知道所有數(shù)據(jù)的存放位置,所以應(yīng)用可以連接它來(lái)正常發(fā)送請(qǐng)求。對(duì)應(yīng)用來(lái)說(shuō),它僅知道連接了一個(gè)普通的mongod。路由器知道數(shù)據(jù)和片的對(duì)應(yīng)關(guān)系,能夠轉(zhuǎn)發(fā)請(qǐng)求道正確的片上。如果請(qǐng)求有了回應(yīng),路由器將其收集起來(lái)回送給應(yīng)用。北京傳智播客教育分片(sharding)設(shè)置分片時(shí),需要從集合里面選一個(gè)鍵,用該鍵的值作為數(shù)據(jù)拆分的依據(jù)。這個(gè)鍵稱為片鍵(shardkey)。用個(gè)例子來(lái)說(shuō)明這個(gè)過(guò)程:假設(shè)有個(gè)文檔集合表示的是人員。如果選擇名字("name")作為片鍵,第一片可能會(huì)存放名字以A~F開頭的文檔,第二片存的G~P的名字,第三片存的Q~Z的名字。隨著添加或者刪除片,MongoDB會(huì)重新平衡數(shù)據(jù),使每片的流量都比較均衡,數(shù)據(jù)量也在合理范圍內(nèi)。北京傳智播客教育分片(sharding)北京傳智播客教育分片(sharding)1、創(chuàng)建三個(gè)目錄,分別存放兩個(gè)mongod服務(wù)的數(shù)據(jù)文件和config服務(wù)的數(shù)據(jù)文件北京傳智播客教育分片(sharding)2、開啟config服務(wù)器。mongos要把mongod之間的配置放到config服務(wù)器里面,所以首先開啟它,這里就使用2222端口。命令為:mongod--dbpathE:\sharding\config_node--port22223、開啟mongos服務(wù)器。這里要注意的是我們開啟的是mongos,端口3333,同時(shí)指定下config服務(wù)器。命令為:mongos--port3333--configdb=:2222北京傳智播客教育分片(sharding)4、啟動(dòng)mongod服務(wù)器。對(duì)分片來(lái)說(shuō),也就是要添加片了,這里開啟兩個(gè)mongod服務(wù),端口分別為:4444,5555。命令為:mongod--dbpathE:\sharding\mongod_node1--port4444mongod--dbpathE:\sharding\mongod_node2--port5555
5、服務(wù)配置。client直接跟mongos打交道,也就說(shuō)明我們要連接mongos服務(wù)器,然后將4444,5555的mongod交給mongos,添加分片也就是addshard()。北京傳智播客教育分片(sharding)6、開啟數(shù)據(jù)庫(kù)分片功能,命令很簡(jiǎn)單enablesharding(),這里就開啟test數(shù)據(jù)庫(kù)。7、指定集合中分片的片鍵,這里就指定為鍵。北京傳智播客教育分片(sharding)8、通過(guò)mongos插入10w記錄,然后通過(guò)printShardingStatus命令查看mongodb的數(shù)據(jù)分片情況。北京傳智播客教育使用java操作MongoDB下載mongoDB對(duì)Java支持的驅(qū)動(dòng)包驅(qū)動(dòng)包下載地址:北京傳智播客教
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《第二單元 指揮機(jī)器人行動(dòng) 12 聲波測(cè)距避障礙》教學(xué)設(shè)計(jì)-2024-2025學(xué)年泰山版信息技術(shù)(2018)第三冊(cè)
- 如何提升小班班級(jí)凝聚力計(jì)劃
- 如何推動(dòng)財(cái)務(wù)制度優(yōu)化計(jì)劃
- 會(huì)計(jì)記賬的技巧與實(shí)務(wù)指南計(jì)劃
- 推動(dòng)品德教育與心理輔導(dǎo)融合計(jì)劃
- 社區(qū)交通安全的個(gè)人倡導(dǎo)計(jì)劃
- 慈善基金會(huì)年度項(xiàng)目計(jì)劃
- 神經(jīng)內(nèi)科護(hù)理個(gè)案護(hù)理模板
- 肥胖患者的護(hù)理常規(guī)
- 醫(yī)院道路知識(shí)培訓(xùn)課件
- 公開招聘社區(qū)居委專職工作人員考試筆試、面試題集及相關(guān)知識(shí)(11套試題含答案)
- 蓄電池在線監(jiān)控方案
- 《豎提》課件
- 中國(guó)藥膳理論與實(shí)踐-藥膳基本理論和技能
- 南非醉茄產(chǎn)業(yè)發(fā)展規(guī)劃(十四五)
- 復(fù)古簡(jiǎn)約中國(guó)古典名著導(dǎo)讀三國(guó)演義培訓(xùn)PPT模板
- 不銹鋼排煙風(fēng)管施工實(shí)施方案
- PMC部門工作流程圖
- IPC-4101剛性多層印制線路板的基材規(guī)范
- Oracle-EBS模塊講解
- 漿砌條石磚項(xiàng)施工方案
評(píng)論
0/150
提交評(píng)論