MongoDB入門講解課件_第1頁
MongoDB入門講解課件_第2頁
MongoDB入門講解課件_第3頁
MongoDB入門講解課件_第4頁
MongoDB入門講解課件_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

nosql數(shù)據(jù)庫_MongoDB2015-10-021精選課件CONTENTS目錄1234MongoDB簡介MongoDB下載安裝MongoDB應(yīng)用GridFS存取數(shù)據(jù)機(jī)制6789服務(wù)器管理MongoDB總結(jié)MongoDB與mysql對(duì)比復(fù)制與分片52精選課件初步了解MongoDB,認(rèn)識(shí)什么是mongoDB,為什么要用MongoDB,MongoDB特性第一節(jié)返回3精選課件MongoDB簡介什么是MongoDB?MongoDB是一個(gè)介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫的。他支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類似json的bson格式,因此可以存儲(chǔ)比較復(fù)雜的數(shù)據(jù)類型。Mongo最大的特點(diǎn)是他支持的查詢語言非常強(qiáng)大,其語法有點(diǎn)類似于面向?qū)ο蟮牟樵冋Z言,幾乎可以實(shí)現(xiàn)類似關(guān)系數(shù)據(jù)庫單表查詢的絕大部分功能,而且還支持對(duì)數(shù)據(jù)建立索引。MongoDB的特點(diǎn)?高性能、易部署、易使用,存儲(chǔ)數(shù)據(jù)非常方便4精選課件MongoDB簡介MongoDB主要功能特性?面向集合存儲(chǔ),易存儲(chǔ)對(duì)象類型的數(shù)據(jù)。模式自由。支持動(dòng)態(tài)查詢。支持完全索引,包含內(nèi)部對(duì)象。支持查詢。支持復(fù)制和故障恢復(fù)。使用高效的二進(jìn)制數(shù)據(jù)存儲(chǔ),大型對(duì)象(如視頻等)。自動(dòng)處理碎片,以支持云計(jì)算層次的擴(kuò)展性支持RUBY,PYTHON,JAVA,C++,PHP等多種語言。文件存儲(chǔ)格式為BSON(一種JSON的擴(kuò)展)可通過網(wǎng)絡(luò)訪問5精選課件MongoDB簡介使用原理所謂“面向集合”(Collenction-Oriented),意思是數(shù)據(jù)被分組存儲(chǔ)在數(shù)據(jù)集中,被稱為一個(gè)集合(Collenction)。每個(gè)集合在數(shù)據(jù)庫中都有一個(gè)唯一的標(biāo)識(shí)名,并且可以包含無限數(shù)目的文檔。集合的概念類似關(guān)系型數(shù)據(jù)庫(RDBMS)里的表(table),不同的是它不需要定義任何模式(schema)。模式自由(schema-free),意味著對(duì)于存儲(chǔ)在mongodb數(shù)據(jù)庫中的文件,我們不需要知道它的任何結(jié)構(gòu)定義。如果需要的話,你完全可以把不同結(jié)構(gòu)的文件存儲(chǔ)在同一個(gè)數(shù)據(jù)庫里。存儲(chǔ)在集合中的文檔,被存儲(chǔ)為鍵-值對(duì)的形式。鍵用于唯一標(biāo)識(shí)一個(gè)文檔,為字符串類型,而值則可以是各種復(fù)雜的文件類型。我們稱這種存儲(chǔ)形式為BSON(BinaryJSON)。6精選課件MongoDB簡介為什么要用MongoDB?MongoDB的設(shè)計(jì)是要結(jié)合鍵值存儲(chǔ)和關(guān)系型數(shù)據(jù)庫的最好特性。鍵值存儲(chǔ),因?yàn)榉浅:唵?,所以速度極快而且相對(duì)容易伸縮。關(guān)系型數(shù)據(jù)庫較難伸縮,至少很難水平伸縮,但擁有富數(shù)據(jù)模型和強(qiáng)大的查詢語言。如果MongoDB能介于兩者之間,就能成為一款易伸縮、能存儲(chǔ)豐富數(shù)據(jù)結(jié)構(gòu)、提供復(fù)雜查詢機(jī)制的數(shù)據(jù)庫。在使用場景方面,MongoDB非常適合用做以下應(yīng)用程序的主要數(shù)據(jù)存儲(chǔ):Web應(yīng)用程序、分析與記錄應(yīng)用程序,以及任何要求有中等級(jí)別緩存的應(yīng)用程序。此外,由于它能方便地存儲(chǔ)無Schema數(shù)據(jù),MongoDB還很適合保存事先無法知曉其數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)。7精選課件了解如何獲得MongoDB軟件,包括如何為自己的環(huán)境選擇正確的版本,如何在Windows和linux中安裝和檢測運(yùn)行。第二節(jié)返回8精選課件MongoDB下載安裝選擇正確版本?MongoDB所使用的版本管理相當(dāng)簡單:偶數(shù)號(hào)為穩(wěn)定版,奇數(shù)號(hào)為開發(fā)版。注意:32位產(chǎn)品與64位產(chǎn)品之間的區(qū)別。32位和64位版本的數(shù)據(jù)庫目前有著相同的功能,唯一的區(qū)別是:32位版本將每個(gè)服務(wù)器的數(shù)據(jù)集<?????>總大小限制在2GB左右;64位版本沒有任何限制,所以在生產(chǎn)環(huán)境中應(yīng)該優(yōu)先使用64位版本。另外,不同的版本之間也有可能發(fā)生變化下載MongoDB?下載地址:/downloads安裝MongoDB?在Linux中安裝MongoDB,有兩種方式:一、通過倉庫安裝MongoDB;二、手動(dòng)安裝MongoDB在Windows中安裝MongoDB,只需要根據(jù)自己的需要下載安裝包、解壓后運(yùn)行即可。9精選課件MongoDB下載安裝安裝解壓安裝包后在mongodb下建立Data文件夾mongodb\data,然后分別建立db,log兩個(gè)文件夾,至此mongodb下有以下文件夾mongodb\binmongodb\data\dbmongodb\data\log在log文件夾下創(chuàng)建一個(gè)日志文件MongoDB.log,mongodb\data\log\MongoDB.log10精選課件MongoDB下載安裝啟動(dòng)MongoDB?命令行方式啟動(dòng):只需按照啟動(dòng)命令來執(zhí)行就行了。配置文件方式啟動(dòng):MongoDB也支持同mysql一樣的讀取啟動(dòng)配置文件的方式來啟動(dòng)數(shù)據(jù)庫Daemon方式啟動(dòng):啟動(dòng)MongoDB進(jìn)程的session窗口不小心關(guān)閉時(shí),MongoDB進(jìn)程也將隨之停止,MongoDB提供了一種后臺(tái)Daemon方式啟動(dòng)的選擇,只需加上一個(gè)”--fork”參數(shù)即可停止MongoDB?Control-C:通過Control-C的方式去停止MongoDB實(shí)例shutdownServer()指令:通過在admin庫中發(fā)送db.shutdownServer()指令去停止MongoDB實(shí)例Unix系統(tǒng)指令:在找到實(shí)例的進(jìn)程后,可能通過發(fā)送kill-2PID或kill-15PID來停止進(jìn)程11精選課件MongoDB下載安裝命令啟動(dòng)

進(jìn)入到bin目錄下,輸入命令./mongod--dbpath=/usr/local/soft/mongodb/data--logpath=/usr/local/soft/mongodb/logs/MongoDB.log--logappend--auth--port=27017--fork配置文件啟動(dòng)在mongodb下創(chuàng)建mongo.config文件,編輯mongo.config,輸入dbpath=D:\mongodb\data\dblogpath=D:\mongodb\log\mongo.log進(jìn)入bin目錄下,輸入 mongod--config/mongodb/mongo.config

12精選課件MongoDB下載安裝停止服務(wù)最穩(wěn)妥的方式,處理完當(dāng)前所有操作并將緩存的數(shù)據(jù)保存到磁盤上才停止>useradmin>db.shutdownServer();當(dāng)然我們也可以直接關(guān)閉進(jìn)程,但這種方式會(huì)導(dǎo)致緩存中的數(shù)據(jù)未急時(shí)刷新保存到磁盤上而丟失參數(shù)解釋:

--dbpath數(shù)據(jù)庫路徑(數(shù)據(jù)文件)--logpath日志文件路徑--master指定為主機(jī)器--slave指定為從機(jī)器--source指定主機(jī)器的IP地址--logappend日志文件末尾添加13精選課件MongoDB下載安裝

--pologSize指定日志文件大小不超過64M.因?yàn)閞esync是非常操作量大且耗時(shí),最好通過設(shè)置一個(gè)足夠大的oplogSize來避免resync(默認(rèn)的oplog大小是空閑磁盤大小的5%)。

--port啟用端口號(hào)

--fork在后臺(tái)運(yùn)行

--only指定只復(fù)制哪一個(gè)數(shù)據(jù)庫

--slavedelay指從復(fù)制檢測的時(shí)間間隔

--auth是否需要驗(yàn)證權(quán)限登錄(用戶名和密碼)14精選課件本節(jié)主要了解怎么運(yùn)用MongoDB,包括其添加,修改,刪除,查詢,索引,聚合。本節(jié)將會(huì)是重點(diǎn)。第三節(jié)返回15精選課件MongoDB應(yīng)用16精選課件MongoDB應(yīng)用添加?添加有兩種方式insert()與save()MongoDB是面向文檔存儲(chǔ)的數(shù)據(jù)庫,文檔結(jié)構(gòu)形式叫BSON(類似JSON)db.c1.insert({name:"user1"});db.c1.save({_id:1,name:"user1"});他們兩者之間的區(qū)別是:1、使用save函數(shù)里,如果原來的對(duì)象不存在,那他們都插入數(shù)據(jù),如果已經(jīng)存在,save會(huì)調(diào)用update更新里面的記錄,而insert則會(huì)忽略操作2、insert可以一次性插入一個(gè)列表,而不用遍歷,效率高,save則需要遍歷列表,一個(gè)個(gè)插入。具體的看一下函數(shù)的源碼。17精選課件MongoDB應(yīng)用數(shù)組操作?$push向文檔數(shù)組中添加元素,如果沒有該數(shù)組,則自動(dòng)添加數(shù)組。db.foo.update({},{"$push":{"users":1}})向users數(shù)組末尾添加一個(gè)1元素db.foo.update({},{"$push":{"users":{“$each”:[1,2]}}})向users數(shù)組末尾添加多個(gè)元素,要$each配合使用$addToSet可以避免插入重復(fù)元素,配合$each使用,可以添加多個(gè)不同的值,數(shù)組修改器慢,因?yàn)槲臋n大小可能會(huì)變$pop從頭部或尾部刪除元素$pull刪除滿足條件的元素,不止刪除一個(gè)默認(rèn)情況下,更新只能對(duì)符合匹配條件的第一個(gè)文檔執(zhí)行操作,要是多個(gè)文檔符合條件,只有第一個(gè)文檔會(huì)被更新,其他文檔不會(huì)發(fā)生變化,要更新所有匹配的文檔,可以將update的第四個(gè)參數(shù)設(shè)置為truedb.foo.update({},{"$set":{name:'tes'}},false,true)在MongoDB找下級(jí)是按點(diǎn)的方式:比如user下有叫l(wèi)ogs數(shù)組,就user.logs18精選課件MongoDB應(yīng)用修改?db.collection.update(<query>,<update>,<upsert>,<multi>)修改現(xiàn)有存在的文檔或集合時(shí)使用。默認(rèn)的update()方法值更新單個(gè)文檔。但是如果multi參數(shù)設(shè)置為true,則更新操作可以更新全部符合條件的文檔。Query–類型:文檔;用于更新選擇過濾。Update–類型:文檔;需要更新的文檔的內(nèi)容。Upsert–類型:文檔或boolean;設(shè)置為true時(shí),當(dāng)查詢沒有匹配到文檔時(shí)進(jìn)行新建。默認(rèn)值為falseMulti:-類型:文檔或boolean;設(shè)置為true時(shí),則更新滿足查詢條件的所有文檔(多個(gè))。設(shè)置為false時(shí)只更新單個(gè)文檔。默認(rèn)為false。19精選課件MongoDB應(yīng)用20精選課件MongoDB應(yīng)用刪除?db.collection.remove(query,justOne)Query–類型:文檔;用于刪除選擇過濾。JustOne–類型:boolean;當(dāng)設(shè)置為true時(shí)只刪除一個(gè)文檔。db.collection.remove({});刪除collection中的所有數(shù)據(jù),一旦刪除不可恢復(fù)。但是不會(huì)刪除collection;db.collection.drop();直接刪除collection;去重?Distinct()db.collection.distinct(field,query)Field–類型:字符串;返回非重復(fù)的字段。Query–類型:文檔;查詢條件。db.user.distinct("_id",{age:1})21精選課件MongoDB應(yīng)用查詢?db.collection.find(<criteria>,<projection>)find()返回的是一個(gè)文檔集合;db.collection.findOne(<criteria>,<projection>)findOne()返回的是一個(gè)文檔前一個(gè)是查詢條件,后一個(gè)參數(shù)是顯示的數(shù)據(jù)查詢操作符(QueryOperators)可以讓我們寫出復(fù)雜查詢條件,讓我們使用的過程更加靈活。比較查詢操作符

$all語法:{field:{$all:[<value>,<value1>...]}field:文檔中鍵的名稱(不使用雙引號(hào))。

$gt語法:{field:{$gt:value}}匹配鍵值大于指定值的所有文檔。22精選課件MongoDB應(yīng)用$gte

語法:{field:{$gte:value}}匹配鍵值不小于指定值的所有文檔。$lt

語法:{field:{$lt:value}}匹配鍵值小于指定值的所有文檔。$lte

語法:{field:{$lte:value}}匹配鍵值不大于指定值的所有文檔。$in

語法:{field:{$in:[<value1>,<value2>,...<valueN>]}}匹配鍵值等于指定數(shù)組中任意值的文檔。類似sql中in.$nin

語法:{field:{$nin:[<value1>,<value2>...<valueN>]}}匹配鍵不存在或者鍵值不等于指定數(shù)組的任意值的文檔。$ne

語法:{field:{$ne:value}}匹配鍵值不等于指定值的文檔。邏輯查詢操作符$and

語法:{$and:[{<expression1>},{<expression2>},...,{<expressionN>}]}and指定一個(gè)至少包含兩個(gè)表達(dá)式的數(shù)組,選擇出滿足該數(shù)組中所有表達(dá)式的文檔。and操作符使用短路操作,若第一個(gè)表達(dá)式的值為“false”,余下的表達(dá)式將不會(huì)執(zhí)行。$nor語法:{$nor:[{<expression1>},{<expression2>},...{<expressionN>}]}$nor執(zhí)行邏輯NOR運(yùn)算,指定一個(gè)至少包含兩個(gè)表達(dá)式的數(shù)組,選擇出都不滿足該數(shù)組中所有表達(dá)式的文檔。$not語法:{field:{$not:{<operator-expression>}}}$not執(zhí)行邏輯NOT運(yùn)算,選擇出不能匹配表達(dá)式的文檔,包括沒有指定鍵的文檔。$not操作符不能獨(dú)立使用,必須跟其他操作一起使用(除$regex)。23精選課件MongoDB應(yīng)用$or語法:{$or:[{<expression1>},{<expression2>},...,{<expressionN>}]}$or執(zhí)行邏輯OR運(yùn)算,指定一個(gè)至少包含兩個(gè)表達(dá)式的數(shù)組,選擇出至少滿足數(shù)組中一條表達(dá)式的文檔。元素查詢操作符

$exists語法:{field:{$exists:<boolean>}}如果$exists的值為true,選擇存在該字段的文檔;若值為false則選擇不包含該字段的文檔。如果該字段的值為null,$exists的值為true會(huì)返回該條文檔,false則不返回。$mod

語法:{field:{$mod:[divisor,remainder]}}匹配字段值對(duì)(divisor)取模,值等于(remainder)的文檔。$type語法:{field:{$type:<BSONtype>}}選擇字段值為指定的BSON數(shù)據(jù)類型的文檔.<BSONtype>使用下面類型對(duì)應(yīng)的編號(hào):24精選課件MongoDB應(yīng)用

25精選課件MongoDB應(yīng)用如果文檔的鍵值是一個(gè)數(shù)組。那么$type將對(duì)數(shù)組里面的元素進(jìn)行類型匹配而不是鍵值數(shù)組本身。JavaScript查詢操作符$regex

regex操作符查詢中可以對(duì)字符串的執(zhí)行正則匹配。MongoDB使用Perl兼容的正則表達(dá)式(PCRE)庫來匹配正則表達(dá)式.可以使用正則表達(dá)式對(duì)象或者regex操作符.db.inventory.find({name:/.4/i});db.inventory.find({name:{$regex:'.4',$options:'i'}});/egger/archive/2013/05/04/3059374.html26精選課件MongoDB應(yīng)用options(regex提供四個(gè)選項(xiàng)標(biāo)志)i如果設(shè)置了這個(gè)修飾符,模式中的字母會(huì)進(jìn)行大小寫不敏感匹配。m默認(rèn)情況下,PCRE認(rèn)為目標(biāo)字符串是由單行字符組成的(然而實(shí)際上它可能會(huì)包含多行).如果目標(biāo)字符串中沒有"\n"字符,或者模式中沒有出現(xiàn)“行首”/“行末”字符,設(shè)置這個(gè)修飾符不產(chǎn)生任何影響。s如果設(shè)置了這個(gè)修飾符,模式中的點(diǎn)號(hào)元字符匹配所有字符,包含換行符。如果沒有這個(gè)修飾符,點(diǎn)號(hào)不匹配換行符。x如果設(shè)置了這個(gè)修飾符,模式中的沒有經(jīng)過轉(zhuǎn)義的或不在字符類中的空白數(shù)據(jù)字符總會(huì)被忽略,并且位于一個(gè)未轉(zhuǎn)義的字符類外部的#字符和下一個(gè)換行符之間的字符也被忽略。這個(gè)修飾符使被編譯模式中可以包含注釋。注意:這僅用于數(shù)據(jù)字符??瞻鬃址€是不能在模式的特殊字符序列中出現(xiàn),比如序列。注:JavaScript只提供了i和m選項(xiàng),x和s選項(xiàng)必須使用$regex操作符。$where

$where操作符功能強(qiáng)大而且靈活,他可以使用任意的JavaScript作為查詢的一部分,包含JavaScript表達(dá)式的字符串或者JavaScript函數(shù)。最典型的應(yīng)用就是比較文檔中的兩個(gè)鍵的值是否相等.27精選課件MongoDB應(yīng)用索引?在MongoDB上,索引能提高讀操作和查詢性能,沒有索引,mongoDB必須掃描集合中的每一個(gè)文檔,然后選擇與查詢條件匹配的文檔。索引的管理<創(chuàng)建索引,刪除索引>創(chuàng)建索引命令db.foo.ensureIndex({“x”:1,“y”:-1})使用ensureIndex來創(chuàng)建索引,1為升序,-1為倒序>db.test.ensureIndex({“x”:1},{“unique”:true})上面這條語句是創(chuàng)建唯一索引,創(chuàng)建唯一索引前可能會(huì)有重復(fù)數(shù)據(jù),我們可以使用”dropDups”來魯莽的刪除這些重復(fù)數(shù)據(jù),寫法如下>db.test.ensureIndex({“x”:1},{“unique”:true,“dropDups”:true})28精選課件MongoDB應(yīng)用我們可以在創(chuàng)建索引時(shí),為索引起個(gè)名字,而不是用系統(tǒng)自動(dòng)生成的名字,寫法如下:db.test.ensureIndex({“x”:1},{“name”:“myindex”})當(dāng)我們的集合數(shù)據(jù)量很大的時(shí)候,創(chuàng)建索引是一件費(fèi)時(shí)費(fèi)力的事情,我們可以這些寫創(chuàng)建索引的語句,是創(chuàng)建索引的過程在后臺(tái)完成:db.test.ensureIndex({“x”:1},{“background”:true})刪除索引db.test.dropIndex("");29精選課件MongoDB應(yīng)用聚合函數(shù)?count最簡單的聚合工具就是count了,它返回document的數(shù)量db.foo.count()可以不跟參數(shù)也可以跟查詢條件distinctdistinct命令返回指定的key的所有不同的值。你必須指定一個(gè)collection和一個(gè)key。db.runCommand({"distinct":"people","key":"age"})group

{"$group":{"_id":"$author","count":"{"sum":1}"}}sort{"$sort":{"count":-1}}排序,類似于sql中的orderby-1是降序排列,1是正序排列l(wèi)imit分頁match用于對(duì)文檔集合進(jìn)行篩選30精選課件了解什么是GridFS,為什么要用GridFS,及其怎么使用GridFS存儲(chǔ)文件第四節(jié)返回31精選課件GridFSGridFS是一種將大型文件存儲(chǔ)在MongoDB數(shù)據(jù)庫中的文件規(guī)范。所有官方支持的驅(qū)動(dòng)均實(shí)現(xiàn)了GridFS規(guī)范。為什么要用GridFS?由于MongoDB中BSON對(duì)象大小是有限制的,所以GridFS規(guī)范提供了一種透明的機(jī)制,可以將一個(gè)大文件分割成為多個(gè)較小的文檔,這樣的機(jī)制允許我們有效的保存大文件對(duì)象,特別對(duì)于那些巨大的文件,比如視頻、高清圖片等。如何實(shí)現(xiàn)海量存儲(chǔ)?為實(shí)現(xiàn)這點(diǎn),該規(guī)范指定了一個(gè)將文件分塊的標(biāo)準(zhǔn)。每個(gè)文件都將在文件集合對(duì)象中保存一個(gè)元數(shù)據(jù)對(duì)象,一個(gè)或多個(gè)chunk塊對(duì)象可被組合保存在一個(gè)chunk塊集合中。大多數(shù)情況下,你無需了解此規(guī)范中細(xì)節(jié),而可將注意力放在各個(gè)語言版本的驅(qū)動(dòng)中有關(guān)GridFSAPI的部分或是如何使用mongofiles工具上。語言支持?GridFS對(duì)Java,Perl,PHP,Python,Ruby等程序語言均支持,且提供了良好的API接口。32精選課件GridFSGridFS使用兩個(gè)表來存儲(chǔ)數(shù)據(jù):

files包含元數(shù)據(jù)對(duì)象

chunks包含其他一些相關(guān)信息的二進(jìn)制塊為了使多個(gè)GridFS命名為一個(gè)單一的數(shù)據(jù)庫,文件和塊都有一個(gè)前綴,默認(rèn)情況下,前綴是fs,所以任何默認(rèn)的GridFS存儲(chǔ)將包括命名空間fs.files和fs.chunks。各種第三方語言的驅(qū)動(dòng)有權(quán)限改變這個(gè)前綴,所以你可以嘗試設(shè)置另一個(gè)GridFS命名空間用于存儲(chǔ)照片,它的具體位置為:photos.files和photos.chunks。mongofiles是從命令行操作GridFS的一種工具33精選課件本節(jié)將會(huì)詳細(xì)介紹MongoDB的復(fù)制和分片,將會(huì)作為重點(diǎn)。第五節(jié)返回34精選課件復(fù)制與分片復(fù)制:使用復(fù)制可以將數(shù)據(jù)副本保存到多臺(tái)服務(wù)器上,即使一臺(tái)或者多臺(tái)服務(wù)器出錯(cuò),也可以保證應(yīng)用程序正常運(yùn)行和數(shù)據(jù)的安全。什么是副本集?副本集是一組服務(wù)器,其中一個(gè)位主服務(wù)器,用于處理客戶端的請(qǐng)求,還有很多備份服務(wù)器,用于保存主服務(wù)器的數(shù)據(jù)副本,如果主服務(wù)器崩潰了,備份服務(wù)器會(huì)自動(dòng)將一個(gè)成員升級(jí)為新的主服務(wù)器。在mongoDB中創(chuàng)建一個(gè)副本集之后就可以使用復(fù)制功能了。使用復(fù)制功能時(shí),如果有一臺(tái)服務(wù)器宕機(jī)了,仍然可以從副本集的其他服務(wù)器上訪問數(shù)據(jù),如果服務(wù)器上的數(shù)據(jù)損壞或者不可訪問,可以從副本集的某個(gè)成員中創(chuàng)建一份新的數(shù)據(jù)副本創(chuàng)建副本集創(chuàng)建副本命令

>replicaSet=newReplSetTest({"nodes":3})>replicaSet.startSet();//啟動(dòng)3個(gè)mongod進(jìn)程>replicaSet.initiate();//配置復(fù)制功能35精選課件復(fù)制與分片在主節(jié)點(diǎn)上執(zhí)行:isMaster()可以查看副本集的狀態(tài)。isMaster其中有一個(gè)很重要的字段指明了這是一個(gè)主節(jié)點(diǎn)("isMaster":true),副本集還有一個(gè)hosts列表備份節(jié)點(diǎn)數(shù)據(jù)可能落后與主節(jié)點(diǎn),可能沒有最新寫入的數(shù)據(jù),所以默認(rèn)是拒絕訪問的。以防止應(yīng)用程序意外拿到過期的數(shù)據(jù)。如果在備份節(jié)點(diǎn)上做查詢,可能得到一個(gè)錯(cuò)誤提示,說當(dāng)前節(jié)點(diǎn)不是主節(jié)點(diǎn)。要想在備份節(jié)點(diǎn)讀取數(shù)據(jù)應(yīng)該輸入命令:setSlaveOk();這樣就可以讀取數(shù)據(jù)了。不能對(duì)備份節(jié)點(diǎn)執(zhí)行寫操作。備份節(jié)點(diǎn)只能通過復(fù)制功能寫入數(shù)據(jù),不接受客戶端的寫入請(qǐng)求。客戶端在單臺(tái)服務(wù)器上可以執(zhí)行的請(qǐng)求,都可以發(fā)送到主節(jié)點(diǎn)執(zhí)行關(guān)閉副本集命令:>replicaSet.stopSet()36精選課件復(fù)制與分片配置副本集啟動(dòng)mongoDB服務(wù)$mongod--replSetspock-fmongod.conf--fork只有第一個(gè)副本集成員擁有數(shù)據(jù),其他成員數(shù)據(jù)目錄為空,只要將成員添加到副本集中,會(huì)自動(dòng)克隆第一個(gè)成員的數(shù)據(jù)。剛開始啟動(dòng)服務(wù)是他們之間是互不相通的,要想讓成員知道彼此,需要?jiǎng)?chuàng)建一個(gè)配置文件: >config={"_id":"spock","members":[ {"_id":"0","host":"主機(jī)名1"}, {"_id":"1","host":"主機(jī)名2"}, {"_id":"2","host":"主機(jī)名3"} ]}37精選課件復(fù)制與分片將config對(duì)象發(fā)送給其中一個(gè)副本集成員連接到一個(gè)有數(shù)據(jù)的服務(wù),然后執(zhí)行命令,初始化副本集>rs.initiate(config)然后這個(gè)服務(wù)器就會(huì)解析配置對(duì)象,向其他成員發(fā)送消息,所有成員都配置完成之后,他們會(huì)自動(dòng)選出一個(gè)主節(jié)點(diǎn),就可以正常處理讀寫請(qǐng)求了。修改副本集配置>rs.add("服務(wù)主機(jī)名:端口號(hào)");為副本集添加新成員。>rs.remove("服務(wù)主機(jī)名:端口號(hào)")刪除副本集中的成員除了添加成員外,其他改變副本集配置的行為時(shí)主節(jié)點(diǎn)會(huì)關(guān)閉所有連接,重新配置副本集時(shí),主節(jié)點(diǎn)需要先退化為普通節(jié)點(diǎn),以便接受新的配置。重新配置副本集之后,副本集暫時(shí)沒有主節(jié)點(diǎn),之后就會(huì)經(jīng)過選舉產(chǎn)生新的主節(jié)點(diǎn)?;謴?fù)正常rs.config()查看配置修改是否成功。38精選課件復(fù)制與分片分片:是指將用戶拆分,將其分散存放在不同機(jī)器上的過程,用于處理更大的負(fù)載,mongoDB支持自動(dòng)分片。分片與復(fù)制的區(qū)別:復(fù)制是將數(shù)據(jù)同步的存在不同服務(wù)器上,每個(gè)節(jié)點(diǎn)的數(shù)據(jù)都是相同的,而分片每個(gè)節(jié)點(diǎn)的數(shù)據(jù)是不相同的,拆分?jǐn)?shù)據(jù)。sh.enablesharding();啟動(dòng)分片。sh.shardcollection("colection":{分片依據(jù)});進(jìn)行分片如果查詢的時(shí)候不使用片鍵的話,就會(huì)將查詢發(fā)送的每個(gè)分片;如果集合存在必須為片鍵添加索引,如果不添加索引,進(jìn)行分片的時(shí)候會(huì)報(bào)錯(cuò),如果集合不存在。mongodb會(huì)自動(dòng)在片鍵上創(chuàng)建索引。拆分快:達(dá)到拆分閥值點(diǎn)進(jìn)行拆分。39精選課件復(fù)制與分片對(duì)集合進(jìn)行拆分時(shí),要選擇一個(gè)或兩個(gè)字段用于拆分?jǐn)?shù)據(jù),這個(gè)鍵就叫片鍵。拆分?jǐn)?shù)據(jù)最常用的分發(fā)方式有三種:升序片鍵。類似于date或者是ObjectId隨著時(shí)間穩(wěn)定增長的字段。隨機(jī)分發(fā)的片鍵。可以是用戶名,MD5散列值或是數(shù)據(jù)集中其他一些沒有規(guī)律的鍵基于位置的片鍵,可以是用戶的IP,地址,經(jīng)緯度。片鍵策略:散列片鍵流水策略多熱點(diǎn)40精選課件復(fù)制與分片何時(shí)分片?通常不比太早分片,因?yàn)榉制粌H會(huì)增加部署的操作復(fù)雜度,還要求作出設(shè)計(jì)決策,而該決策以后很難改,另外最好也不要再系統(tǒng)運(yùn)行太久之后再做分片,在一個(gè)過載的系統(tǒng)上不停機(jī)進(jìn)行分片時(shí)非常困難的。分片用來:增加可用RAM,增加可用磁盤空間減輕單臺(tái)服務(wù)器的負(fù)載處理單個(gè)mongod無法承受的吞吐量41精選課件Mongodb存取數(shù)據(jù)機(jī)制第六節(jié)返回42精選課件Mongodb存取數(shù)據(jù)機(jī)制Collections:在mongodb中叫做集合,是文檔的集合。無模式,可以存儲(chǔ)各種各樣的文檔。類似mysql中的表。Document:這里的user集合(“表”)有一個(gè)document(document可以理解為mysql中的記錄)。文檔是mongodb保存數(shù)據(jù)的基本單元。數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)為BSON格式,也就是我們開始添加的文檔,keyvalue鍵值對(duì)類型。GridFS:因?yàn)閎son對(duì)象的大小有限制,不適合存儲(chǔ)大型文件,GridFS文件系統(tǒng)為大型文件提供了存儲(chǔ)的方案,GridFS下的fs保存的是圖片、視屏等大文件。43精選課件Mongodb存取數(shù)據(jù)機(jī)制寫入:了解了數(shù)據(jù)結(jié)構(gòu),就知道了存儲(chǔ)機(jī)制,MongoDB

的默認(rèn)數(shù)據(jù)目錄是/data/db,它負(fù)責(zé)存儲(chǔ)所有的MongoDB

的數(shù)據(jù)文件。在MongoDB內(nèi)部,每個(gè)數(shù)據(jù)庫都包含一個(gè).ns

文件和一些數(shù)據(jù)文件,而且這些數(shù)據(jù)文件會(huì)隨著數(shù)據(jù)量的增加而變得越來越多。MongoDB

內(nèi)部有預(yù)分配空間的機(jī)制,每個(gè)預(yù)分配的文件都用0

進(jìn)行填充,由于有了這個(gè)機(jī)制,

MongoDB

始終保持額外的空間和空余的數(shù)據(jù)文件,從而有效避免了由于數(shù)據(jù)暴增而帶來的磁盤壓力過大的問題。

由于表中數(shù)據(jù)量的增加,數(shù)據(jù)文件每新分配一次,它的大小都會(huì)是上一個(gè)數(shù)據(jù)文件大小的2倍,每個(gè)數(shù)據(jù)文件最大2G。這樣的機(jī)制有利于防止較小的數(shù)據(jù)庫浪費(fèi)過多的磁盤空間,同時(shí)又能保證較大的數(shù)據(jù)庫有相應(yīng)的預(yù)留空間使用。

數(shù)據(jù)庫的每張表都對(duì)應(yīng)一個(gè)命名空間,每個(gè)索引也有對(duì)應(yīng)的命名空間。這些命名空間的元數(shù)據(jù)都集中在*.ns

文件中。44精選課件Mongodb存取數(shù)據(jù)機(jī)制讀?。篗ongodb可以使用內(nèi)存映射文件來處理對(duì)磁盤文件中數(shù)據(jù)的讀寫請(qǐng)求,mongodb并不對(duì)磁盤和RAM這兩者進(jìn)行區(qū)別對(duì)待,只是將文件看做一個(gè)巨大的數(shù)組,然后按照字節(jié)為單位訪問其中的數(shù)據(jù),剩下的都交由操作系統(tǒng)處理。45精選課件權(quán)限管理,監(jiān)控MongoDB,備份第七節(jié)返回46精選課件MongoDB服務(wù)器管理使用認(rèn)證保護(hù)服務(wù)器?MongoDB支持簡單的基于角色的認(rèn)證系統(tǒng),通過該系統(tǒng)可以控制用戶對(duì)數(shù)據(jù)庫的訪問以及他們被授予的訪問級(jí)別。啟動(dòng)的時(shí)候指定參數(shù),可以阻止客戶端的訪問和連接。先啟用系統(tǒng)的登錄驗(yàn)證模塊,只需在啟動(dòng)時(shí)指定auth參數(shù)即可MongoDB用戶角色:Read:允許用戶讀取指定的數(shù)據(jù)庫。readWrite:授予用戶指定數(shù)據(jù)庫的讀和寫權(quán)限。dbAdmin:允許用戶在指定的數(shù)據(jù)庫中執(zhí)行管理函數(shù)。userAdmin:允許用戶向system.users集合中寫入,具有該權(quán)限的用戶可以在該數(shù)據(jù)庫中創(chuàng)建,刪除和管理用戶。clusterAdmin:只在admin數(shù)據(jù)庫可使用,為用戶賦予所有分片和復(fù)制集相關(guān)函數(shù)的完全管理權(quán)限。47精選課件MongoDB服務(wù)器管理添加刪除用戶?添加命令:db.addUser("user_reader","user_pwd",true)刪除命令:db.system.users.remove({user:"java1"});監(jiān)控MongoDB?性能監(jiān)控:mongosniff:此工具可以從底層監(jiān)控到底有哪些命令發(fā)送給了MongoDB去執(zhí)行。Mongostat:工具可以快速的查看某組運(yùn)行中的MongoDB實(shí)例的統(tǒng)計(jì)信息。db.serverStatus:這個(gè)命令是最常用也是最基礎(chǔ)的查看實(shí)例運(yùn)行狀態(tài)的命令之一。db.stats:查看數(shù)據(jù)庫狀態(tài)信息MongoDB從一面世就得到眾多開源愛好者和團(tuán)隊(duì)的重視,在常用的監(jiān)控框架如cacti、Nagios、Zabbix等基礎(chǔ)上進(jìn)行擴(kuò)展,進(jìn)行MongoDB的監(jiān)控都是非常方便的48精選課件MongoDB服務(wù)器管理備份?文件快照方式這是最簡單的備份方法。但是,需要系統(tǒng)文件支持快照和mongod必須啟用journal?;謴?fù)時(shí),確保沒有運(yùn)行mongod,執(zhí)行快照恢復(fù)操作命令,然后啟動(dòng)mongod進(jìn)程,mongod將重放journal日志。使用mongodump方式千萬不要fsyncLock與mongodump配合使用,如果數(shù)據(jù)庫被鎖定了,mo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論