專題講座-NoSQL課件_第1頁(yè)
專題講座-NoSQL課件_第2頁(yè)
專題講座-NoSQL課件_第3頁(yè)
專題講座-NoSQL課件_第4頁(yè)
專題講座-NoSQL課件_第5頁(yè)
已閱讀5頁(yè),還剩73頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、NoSQLBy Wu Run racoonwr議程轉(zhuǎn)折什么是NoSQLCAP 原理、最終一致性、BASE模型NoSQL的類型轉(zhuǎn)折(關(guān)系型數(shù)據(jù)庫(kù)的瓶頸)關(guān)系數(shù)據(jù)庫(kù)如何應(yīng)對(duì)大數(shù)據(jù)High performance 高并發(fā)讀寫的需求問(wèn)題: 數(shù)據(jù)庫(kù)讀寫壓力巨大, 硬盤IO無(wú)法承受解決方案: Master-Slave,主從分離 分庫(kù)、分表,緩解寫壓力,增強(qiáng)讀庫(kù)的可擴(kuò)展性轉(zhuǎn)折(關(guān)系型數(shù)據(jù)庫(kù)的瓶頸)關(guān)系數(shù)據(jù)庫(kù)如何應(yīng)對(duì)大數(shù)據(jù)Huge Storage 海量數(shù)據(jù)的高效率存儲(chǔ)和訪問(wèn)的需求問(wèn)題: 存儲(chǔ)記錄數(shù)量有限, SQL查詢效率極低解決方案: 分庫(kù)、分表,緩解數(shù)據(jù)增長(zhǎng)壓力轉(zhuǎn)折(關(guān)系型數(shù)據(jù)庫(kù)的瓶頸)關(guān)系數(shù)據(jù)庫(kù)如何應(yīng)對(duì)大

2、數(shù)據(jù)High Scalability & High Availability 高可擴(kuò)展性和高可用性的需求問(wèn)題: 橫向擴(kuò)展艱難,無(wú)法通過(guò)快速增加服務(wù)器節(jié)點(diǎn)實(shí)現(xiàn), 系統(tǒng)升級(jí)和維護(hù)造成服務(wù)不可用解決方案: Master-Slave,增強(qiáng)讀庫(kù)的可擴(kuò)展性 MMMMaster -Master Replication Manager for MySQL轉(zhuǎn)折(Nosql優(yōu)勢(shì))易擴(kuò)展 NoSQL數(shù)據(jù)庫(kù)種類繁多,但是一個(gè)共同的特點(diǎn)都是去掉關(guān)系數(shù)據(jù)庫(kù)的關(guān)系型特性。數(shù)據(jù)之間無(wú)關(guān)系,這樣就非常容易擴(kuò)展。也無(wú)形之間,在架構(gòu)的層面上帶來(lái)了可擴(kuò)展的能力。甚至有多種NoSQL之間的整合。靈活的數(shù)據(jù)模型 NoSQL無(wú)需事先為要存

3、儲(chǔ)的數(shù)據(jù)建立字段,隨時(shí)可以存儲(chǔ)自定義的數(shù)據(jù)格式。而在關(guān)系數(shù)據(jù)庫(kù)里,增刪字段是一件非常麻煩的事情。如果是非常大數(shù)據(jù)量的表,增加字段簡(jiǎn)直就是一個(gè)噩夢(mèng)。轉(zhuǎn)折(Nosql優(yōu)勢(shì))高可用 NoSQL在不太影響性能的情況,就可以方便的實(shí)現(xiàn)高可用的架構(gòu)。比如Cassandra,HBase模型,通過(guò)復(fù)制模型也能實(shí)現(xiàn)高可用。大數(shù)據(jù)量,高性能 NoSQL數(shù)據(jù)庫(kù)都具有非常高的讀寫性能,尤其在大數(shù)據(jù)量下,同樣表現(xiàn)優(yōu)秀。這得益于它的無(wú)關(guān)系性,數(shù)據(jù)庫(kù)的結(jié)構(gòu)簡(jiǎn)單。什么是NoSQL(為什么選擇 NoSQL)特點(diǎn)它們可以處理超大量的數(shù)據(jù)。 它們運(yùn)行在便宜的PC服務(wù)器集群上。 PC集群擴(kuò)充起來(lái)非常方便并且成本很低,避免了“shar

4、ding”操作的復(fù)雜性和成本。 它們擊碎了性能瓶頸。 NoSQL的支持者稱,通過(guò)NoSQL架構(gòu)可以省去將Web或Java應(yīng)用和數(shù)據(jù)轉(zhuǎn)換成SQL友好格式的時(shí)間,執(zhí)行速度變得更快。 什么是NoSQL(為什么選擇 NoSQL)“SQL并非適用于所有的程序代碼,” 對(duì)于那些繁重的重復(fù)操作的數(shù)據(jù),SQL值得花錢。但是當(dāng)數(shù)據(jù)庫(kù)結(jié)構(gòu)非常簡(jiǎn)單時(shí),SQL可能沒(méi)有太大用處。 沒(méi)有過(guò)多的操作。 雖然NoSQL的支持者也承認(rèn)關(guān)系數(shù)據(jù)庫(kù)提供了無(wú)可比擬的功能集合,而且在數(shù)據(jù)完整性上也發(fā)揮絕對(duì)穩(wěn)定,他們同時(shí)也表示,企業(yè)的具體需求可能沒(méi)有那么多。 Bootstrap支持 因?yàn)镹oSQL項(xiàng)目都是開(kāi)源的,因此它們?nèi)狈?yīng)商提供的

5、正式支持。這一點(diǎn)它們與大多數(shù)開(kāi)源項(xiàng)目一樣,不得不從社區(qū)中尋求支持。 什么是NoSQL(放棄了什么)joinsgroup byorder byACID transactions作為一個(gè)有時(shí)令人沮喪,但仍然強(qiáng)大的查詢語(yǔ)言的SQLCAP 原理、最終一致性、BASE模型(CAP 原理)CAP 原理、最終一致性、BASE模型(最終一致性)When no updates occur for a long period of time, eventually all updates will propagate through the system and all the nodes will be con

6、sistent當(dāng)發(fā)生了很長(zhǎng)一段時(shí)間沒(méi)有更新,最終的所有更新將通過(guò)系統(tǒng)傳播,和所有的節(jié)點(diǎn)將是一致的For a given accepted update and a given node, eventually either the update reaches the node or the node is removed from service對(duì)于一個(gè)給定的公認(rèn)的更新和一個(gè)給定節(jié)點(diǎn),最終更新到達(dá)的節(jié)點(diǎn)或節(jié)點(diǎn),從服務(wù)中移除Known as BASE (Basically Available, Soft state, Eventual consistency基本上是可用的,軟的狀態(tài),最終一致性

7、), as opposed to ACIDNoSQL的類型類型部分代表特點(diǎn)列存儲(chǔ)HbaseCassandraHypertable顧名思義,是按列存儲(chǔ)數(shù)據(jù)的。最大的特點(diǎn)是方便存儲(chǔ)結(jié)構(gòu)化和半結(jié)構(gòu)化數(shù)據(jù),方便做數(shù)據(jù)壓縮,對(duì)針對(duì)某一列或者某幾列的查詢有非常大的IO優(yōu)勢(shì)。文檔存儲(chǔ)MongoDBCouchDB文檔存儲(chǔ)一般用類似json的格式存儲(chǔ),存儲(chǔ)的內(nèi)容是文檔型的。這樣也就有有機(jī)會(huì)對(duì)某些字段建立索引,實(shí)現(xiàn)關(guān)系數(shù)據(jù)庫(kù)的某些功能。key-value存儲(chǔ)Tokyo Cabinet / TyrantBerkeley DBMemcacheDBRedis可以通過(guò)key快速查詢到其value。一般來(lái)說(shuō),存儲(chǔ)不管val

8、ue的格式,照單全收。(Redis包含了其他功能)圖存儲(chǔ)Neo4JFlockDBInfoGrid圖形關(guān)系的最佳存儲(chǔ)。使用傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)來(lái)解決的話性能低下,而且設(shè)計(jì)使用不方便。對(duì)象存儲(chǔ)db4oVersant通過(guò)類似面向?qū)ο笳Z(yǔ)言的語(yǔ)法操作數(shù)據(jù)庫(kù),通過(guò)對(duì)象的方式存取數(shù)據(jù)。xml數(shù)據(jù)庫(kù)Berkeley DB XMLBaseX高效的存儲(chǔ)XML數(shù)據(jù),并支持XML的內(nèi)部查詢語(yǔ)法,比如XQuery,Xpath。NoSQL的類型(幾種主流NoSQL數(shù)據(jù)庫(kù))BigTableDynamoCassandraHBaseRedisMongoDBNoSQL的類型(BigTable)BigTable簡(jiǎn)介 Bigtable是一

9、個(gè)分布式的結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)系統(tǒng),它被設(shè)計(jì)用來(lái)處理海量數(shù)據(jù):通常是分布在數(shù)千臺(tái)普通服務(wù)器上的PB級(jí)的數(shù)據(jù)。Google的很多項(xiàng)目使用Bigtable存儲(chǔ)數(shù)據(jù),包括Web索引、Google Earth等數(shù)據(jù)模型 Bigtable是一個(gè)稀疏的、分布式的、持久化存儲(chǔ)的多維度排序Map。Map的索引是行關(guān)鍵字、列關(guān)鍵字以及時(shí)間戳;Map中的每個(gè)value都是一個(gè)未經(jīng)解析的byte數(shù)組(row:string, column:string,time:int64)-stringNoSQL的類型(BigTable)數(shù)據(jù)模型 一個(gè)存儲(chǔ)Web網(wǎng)頁(yè)的例子的表的片斷 行名:”n.www” contents列族:存放的是網(wǎng)

10、頁(yè)的內(nèi)容 anchor列族:存放引用該網(wǎng)頁(yè)的錨鏈接文本。 “anchor:”列表示被引用 “anchhor:my.look.ca”列表示被my.look.ca引用 (”n.www”,” anchor: my.look.ca”,t8)-”CNN.com”NoSQL的類型(BigTable)技術(shù)要點(diǎn)基礎(chǔ):GFS, Chubby, SSTable。BigTable使用Google的分布式文件系統(tǒng)(GFS)存儲(chǔ)日志文件和數(shù)據(jù)文件Chubby是一個(gè)高可用的、序列化的分布式鎖服務(wù)組件BigTable內(nèi)部存儲(chǔ)數(shù)據(jù)的文件是Google SSTable格式的。元數(shù)據(jù)組織:chubby-metadata-tabl

11、et。元數(shù)據(jù)與數(shù)據(jù)都保存在 Google FS 中,客戶端通過(guò) Chubby 服務(wù)獲得表格元數(shù)據(jù)的位置。NoSQL的類型(BigTable)技術(shù)要點(diǎn)數(shù)據(jù)維護(hù)與訪問(wèn):master server 將每個(gè) tablet 的管理責(zé)任分配給各個(gè) tablet server,tablet 的分布信息都保存在元數(shù)據(jù)中,所以客戶端無(wú)須通過(guò) master 來(lái)訪問(wèn)數(shù)據(jù),只需要直接跟 tablet server 通信。NoSQL的類型(BigTable)特點(diǎn)1、適合大規(guī)模海量數(shù)據(jù),PB級(jí)數(shù)據(jù); 2、分布式、并發(fā)數(shù)據(jù)處理,效率極高; 3、易于擴(kuò)展,支持動(dòng)態(tài)伸縮; 4、適用于廉價(jià)設(shè)備; 5、適合于讀操作,不適合寫操作。

12、 6、不適用于傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù);NoSQL的類型(Dynamo)Dynamo簡(jiǎn)介 Dynamo 最初是 Amazon 所使用的一個(gè)私有的分布式存儲(chǔ)系統(tǒng)。設(shè)計(jì)要點(diǎn) P2P 的架構(gòu):這區(qū)別于 Google FS 的 Single Master 架構(gòu),無(wú)須一個(gè)中心服務(wù)器來(lái)記錄系統(tǒng)的元數(shù)據(jù)。 NoSQL的類型(Dynamo)技術(shù)要點(diǎn)數(shù)據(jù)定位使用一致性哈希; Vector lock,允許數(shù)據(jù)的多個(gè)備份存在多個(gè)版本,提高寫操作的可用性(用弱一致性來(lái)?yè)Q取高的可用性)容錯(cuò):Sloppy Quorum, hinted handoff, Merkle tree Sloppy Quorum馬虎仲裁,并非采用嚴(yán)格的數(shù)據(jù)

13、一致性檢查,用于實(shí)現(xiàn)最終一致性 hinted handoff,節(jié)點(diǎn)故障會(huì)恢復(fù)時(shí),可動(dòng)態(tài)維護(hù)系統(tǒng)可用性,使系統(tǒng)的寫入成功大大提升。 使用Merkle tree為數(shù)據(jù)建立索引,只要任意數(shù)據(jù)有變動(dòng),都將快速反饋出來(lái)。網(wǎng)絡(luò)互聯(lián): Gossip-based membership protocol ,一種通訊協(xié)議,目標(biāo)是讓節(jié)點(diǎn)與節(jié)點(diǎn)之間通信,實(shí)現(xiàn)去中心化。Storage load balancing Client-driven Coordination NoSQL的類型(Dynamo)特點(diǎn)高可用:設(shè)計(jì)上天然沒(méi)有單點(diǎn),每個(gè)實(shí)例由一組節(jié)點(diǎn)組成,從應(yīng)用的角度看,實(shí)例提供 IO 能力。一個(gè)實(shí)例上的節(jié)點(diǎn)可能位于不同

14、的數(shù)據(jù)中心內(nèi), 這樣一個(gè)數(shù)據(jù)中心出問(wèn)題也不會(huì)導(dǎo)致數(shù)據(jù)丟失。 總是可寫:hinted handoff確保在系統(tǒng)節(jié)點(diǎn)出現(xiàn)故障或節(jié)點(diǎn)恢復(fù)時(shí),能靈活處理可根據(jù)應(yīng)用類型優(yōu)化可用性、容錯(cuò)性和高效性配置去中心化,人工管理工作少可擴(kuò)展性較差:由于增加機(jī)器需要給機(jī)器分配DHT(分布式hash table)算法所需的編號(hào),操作復(fù)雜度較高,且每臺(tái)機(jī)器存儲(chǔ)了整個(gè)集群的機(jī)器信息及數(shù)據(jù)文件的Merkle Tree信息,機(jī)器最大規(guī)模只能到幾千臺(tái)。NoSQL的類型(Cassandra)Cassandra簡(jiǎn)介 Apache Cassandra 是一套開(kāi)源分布式NoSQL數(shù)據(jù)庫(kù)系統(tǒng)。它最初由Facebook開(kāi)發(fā),用于儲(chǔ)存收件箱等

15、簡(jiǎn)單格式數(shù)據(jù),集Google BigTable的數(shù)據(jù)模型與Amazon Dynamo的完全分布式的架構(gòu)于一身。Facebook于2008將 Cassandra 開(kāi)源,此后,由于Cassandra良好的可擴(kuò)放性,被Digg、Twitter等知名Web 2.0網(wǎng)站所采納,成為了一種流行的分布式結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)方案。NoSQL的類型(Cassandra)架構(gòu)要點(diǎn)使用了Google BigTable的數(shù)據(jù)模型 這是一種面向列的數(shù)據(jù)庫(kù),列被組織成為列族(Column Family),在數(shù)據(jù)庫(kù)中增加一列非常方便。對(duì)于搜索和一般的結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ),這個(gè)結(jié)構(gòu)足夠豐富和有效。系統(tǒng)架構(gòu)與Dynamo一脈相承 是基于O

16、(1)DHT(分布式哈希表)的完全P2P架構(gòu),與傳統(tǒng)的基于Sharding的數(shù)據(jù)庫(kù)集群相比,Cassandra可以幾乎無(wú)縫地加入或刪除節(jié)點(diǎn),非常適于對(duì)于節(jié)點(diǎn)規(guī)模變化比較快的應(yīng)用場(chǎng)景。Cassandra的數(shù)據(jù)會(huì)寫入多個(gè)節(jié)點(diǎn) 保證數(shù)據(jù)的可靠性,在一致性、可用性和網(wǎng)絡(luò)分區(qū)耐受能力(CAP)的折衷問(wèn)題上,Cassandra比較靈活,用戶在讀取時(shí)可以指定要求所有副本一致(高一致性)、讀到一個(gè)副本即可(高可用性)或是通過(guò)選舉來(lái)確認(rèn)多數(shù)副本一致即可(折衷)。這樣,Cassandra可以適用于有節(jié)點(diǎn)、網(wǎng)絡(luò)失效,以及多數(shù)據(jù)中心的場(chǎng)景。NoSQL的類型(Cassandra)突出特點(diǎn)模式靈活 :使用Cassandr

17、a,像文檔存儲(chǔ),你不必提前解決記錄中的字段。你可以在系統(tǒng)運(yùn)行時(shí)隨意的添加或移除字段。這是一個(gè)驚人的效率提升,特別是在大型部署上。 真正的可擴(kuò)展性 :Cassandra是純粹意義上的水平擴(kuò)展。為給集群添加更多容量,可以指向另一臺(tái)電腦。你不必重啟任何進(jìn)程,改變應(yīng)用查詢,或手動(dòng)遷移任何數(shù)據(jù)。多數(shù)據(jù)中心識(shí)別 :你可以調(diào)整你的節(jié)點(diǎn)布局來(lái)避免某一個(gè)數(shù)據(jù)中心起火,一個(gè)備用的數(shù)據(jù)中心將至少有每條記錄的完全復(fù)制。NoSQL的類型(HBase)HBase簡(jiǎn)介 HBase Hadoop Database,是一個(gè)高可靠性、高性能、面向列、可伸縮的分布式存儲(chǔ)系統(tǒng),利用HBase技術(shù)可在廉價(jià)PC Server上搭建起大規(guī)

18、模結(jié)構(gòu)化存儲(chǔ)集群。HBase是Google Bigtable的開(kāi)源實(shí)現(xiàn),類似Google Bigtable利用GFS作為其文件存儲(chǔ)系統(tǒng),HBase利用Hadoop HDFS作為其文件存儲(chǔ)系統(tǒng);Google運(yùn)行MapReduce來(lái)處理Bigtable中的海量數(shù)據(jù),HBase同樣利用Hadoop MapReduce來(lái)處理HBase中的海量數(shù)據(jù);Google Bigtable利用 Chubby作為協(xié)同服務(wù),HBase利用Zookeeper作為對(duì)應(yīng)。NoSQL的類型(HBase)數(shù)據(jù)模型Row key、列族、列、時(shí)間戳,同bigtable定義NoSQL的類型(HBase)物理存儲(chǔ)每個(gè)HRegion由多

19、個(gè)Store構(gòu)成,每個(gè)Store由一個(gè)memStore和0或多個(gè)StoreFile組成,每個(gè)Store保存一個(gè)Columns FamilyStoreFile以HFile格式存儲(chǔ)在HDFS中NoSQL的類型(HBase)架構(gòu)圖NoSQL的類型(HBase)架構(gòu)圖Client 包含訪問(wèn)hbase 的接口,client 維護(hù)著一些cache 來(lái)加快對(duì)hbase 的訪問(wèn),比如regione 的位置信息Zookeeper 保證任何時(shí)候,集群中只有一個(gè)master 存貯所有Region 的尋址入口 實(shí)時(shí)監(jiān)控Region Server 的狀態(tài),將Region server 的上線和下線信息,實(shí)時(shí)通知給Mas

20、ter 存儲(chǔ)Hbase 的schema,包括有哪些table,每個(gè)table 有哪些column familyMaster為Region server 分配region負(fù)責(zé)region server 的負(fù)載均衡發(fā)現(xiàn)失效的region server 并重新分配其上的regionGFS 上的垃圾文件回收處理schema 更新請(qǐng)求NoSQL的類型(HBase)架構(gòu)圖Region Server維護(hù)Master 分配給它的region,處理對(duì)這些region 的IO 請(qǐng)求負(fù)責(zé)切分在運(yùn)行過(guò)程中變得過(guò)大的region 可以看出,client 訪問(wèn)hbase 上數(shù)據(jù)的過(guò)程并不需要master 參與,尋址訪問(wèn)z

21、ookeeper 和region server,數(shù)據(jù)讀寫訪問(wèn)regione server,master僅僅維護(hù)者table 和region 的元數(shù)據(jù)信息,負(fù)載很低NoSQL的類型(HBase)架構(gòu)圖Hadoop EcoSystem中的各層系統(tǒng),其中HBase位于結(jié)構(gòu)化存儲(chǔ)層,Hadoop HDFS為HBase提供了高可靠性的底層存儲(chǔ)支持,Hadoop MapReduce為HBase提供了高性能的計(jì)算能力,Zookeeper為HBase提供了穩(wěn)定服務(wù)和failover機(jī)制NoSQL的類型(Redis)Redis簡(jiǎn)介 redis是一個(gè)key-value存儲(chǔ)系統(tǒng)。 和Memcached類似,它支持存

22、儲(chǔ)的value類型相對(duì)更多,包括string(字符串)、list(鏈表)、set(集合)和zset(有序集 合)。這些數(shù)據(jù)類型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎(chǔ)上,redis 支持各種不同方式的排序。與memcached一樣,為了保證效率,數(shù)據(jù)都是緩存在內(nèi)存中。區(qū)別的是redis會(huì)周期性的把更新的數(shù)據(jù)寫入磁盤或者把修改 操作寫入追加的記錄文件,并且在此基礎(chǔ)上實(shí)現(xiàn)了master-slave(主從)同步。相比memcached的優(yōu)勢(shì):value類型更豐富數(shù)據(jù)操作方法更多可將內(nèi)存數(shù)據(jù)持久化NoSQL的類型(MongoDB)

23、MongoDB簡(jiǎn)介MongoDB是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫(kù)。由C+語(yǔ)言編寫。旨在為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。特點(diǎn)是高性能、易部署、易使用,存儲(chǔ)數(shù)據(jù)方便。 MongoDB是一個(gè)介于關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù)之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫(kù)當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫(kù)的。他支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類似json的bjson格式,因此可以存儲(chǔ)比較復(fù)雜的數(shù)據(jù)類型。Mongo最大的特點(diǎn)是他支持的查詢語(yǔ)言非常強(qiáng)大,其語(yǔ)法有點(diǎn)類似于面向?qū)ο蟮牟樵冋Z(yǔ)言,幾乎可以實(shí)現(xiàn)類似關(guān)系數(shù)據(jù)庫(kù)單表查詢的絕大部分功能,而且還支持對(duì)數(shù)據(jù)建立索引。NoSQL的類型(MongoDB)主要特點(diǎn)面向集合存儲(chǔ):易存儲(chǔ)

24、對(duì)象類型的數(shù)據(jù),包括文檔內(nèi)嵌對(duì)象及數(shù)組。模式自由:無(wú)需知道存儲(chǔ)數(shù)據(jù)的任何結(jié)構(gòu)定義,支持動(dòng)態(tài)查詢、完全索引,可輕易查詢文檔中內(nèi)嵌的對(duì)象和數(shù)組文檔型:存儲(chǔ)在集合中的文檔,被存儲(chǔ)為鍵-值對(duì)的形式。鍵用于唯一標(biāo)識(shí)一個(gè)文檔,為字符串類型,而值則可以是各種復(fù)雜的文件類型。高效的數(shù)據(jù)存儲(chǔ):支持二進(jìn)制數(shù)據(jù)及大型對(duì)象支持復(fù)制和故障恢復(fù):提供Master-Master、Master-Slave模式的數(shù)據(jù)復(fù)制及服務(wù)器之間的數(shù)據(jù)復(fù)制 自動(dòng)分片:以支持云級(jí)別的伸縮性,支持水平的數(shù)據(jù)庫(kù)集群,可動(dòng)態(tài)添加額外的服務(wù)器NoSQL的類型(MongoDB)不適用場(chǎng)景要求高度事務(wù)性的系統(tǒng)傳統(tǒng)的商業(yè)智能應(yīng)用復(fù)雜的跨文檔(表)級(jí)聯(lián)查詢N

25、oSQL的類型(MongoDB)功能面向集合的存儲(chǔ):適合存儲(chǔ)對(duì)象及JSON形式的數(shù)據(jù)。動(dòng)態(tài)查詢:Mongo支持豐富的查詢表達(dá)式。查詢指令使用JSON形式的標(biāo)記,可輕易查詢文檔中內(nèi)嵌的對(duì)象及數(shù)組。完整的索引支持:包括文檔內(nèi)嵌對(duì)象及數(shù)組。Mongo的查詢優(yōu)化器會(huì)分析查詢表達(dá)式,并生成一個(gè)高效的查詢計(jì)劃。查詢監(jiān)視:Mongo包含一個(gè)監(jiān)視工具用于分析數(shù)據(jù)庫(kù)操作的性能。復(fù)制及自動(dòng)故障轉(zhuǎn)移:Mongo數(shù)據(jù)庫(kù)支持服務(wù)器之間的數(shù)據(jù)復(fù)制,支持主-從模式及服務(wù)器之間的相互復(fù)制。復(fù)制的主要目標(biāo)是提供冗余及自動(dòng)故障轉(zhuǎn)移。高效的傳統(tǒng)存儲(chǔ)方式:支持二進(jìn)制數(shù)據(jù)及大型對(duì)象(如照片或圖片)自動(dòng)分片以支持云級(jí)別的伸縮性:自動(dòng)分片

26、功能支持水平的數(shù)據(jù)庫(kù)集群,可動(dòng)態(tài)添加額外的機(jī)器。 NoSQL的類型(MongoDB)安裝wget /linux/mongodb-linux-x86_64-1.2.4.tgztar -zxvf mongodb-linux-x86_64-1.2.4.tgzmkdir -p /data/dbcd /data/dbmkdir m_data m_logcd mongodb-linux-x86_64-1.2.4啟動(dòng):bin/mongod -dbpath=/data/db/m_data -logpath=/data/db/m_log -logappend -port=27017 &NoSQL的類型(Mong

27、oDB)普通操作1、新建集合集: db.createCollection(user);2、查入數(shù)據(jù): db.user.insert(uid:1,username:Falcon.C,age:25); j = name: mongo; db.things.save(j); for( var i = 1; i db.user.update(uid:1,$set:age:26)#age=26 db.user.update(uid:1,$inc:age:-1)#age=age-1NoSQL的類型(MongoDB)普通操作4、查詢: 4.1遍歷集 var cursor = db.things.find()

28、; while (cursor.hasNext() print(tojson(cursor.next(); 4.2 方法2 db.things.find().forEach( function(x)print(tojson(x);); 4.3、獲取結(jié)果集 var cursor = db.things.find(); print (tojson(cursor4); var arr = db.things.find().toArray(); arr5;NoSQL的類型(MongoDB)普通操作5、條件查詢: db.things.find(name:mongo).forEach(function(x

29、) print(tojson(x);); 等價(jià)于: SQL:SELECT * FROM things WHERE name=mongo db.things.find(x:4, j:true).forEach(function(x) print(tojson(x);); 等價(jià)于: SQL:SELECT j FROM things WHERE x=4NoSQL的類型(MongoDB)普通操作6、sort用法 db.things.find(tags :economy).sort(ts:-1).limit(10); 等價(jià)于: SQL: select * from things where econom

30、y in tags order by ts DESC limit 107、findOne用法 var mongo = db.things.findOne(name:mongo); print(tojson(mongo);8、limit用法 db.things.find().limit(3);NoSQL的類型(MongoDB)索引db.u_info.insert(uid:1,name:Falcon.C,address:Beijing);db.u_info.insert(uid:2,name:sexMan,address:Wuhan);添加:db.u_info.ensureIndex(uid:1)

31、;db.u_info.ensureIndex(name:1);刪除:db.u_info.dropIndex(name_1)查詢索引db.u_info.find(name:Falcon.C).explain();查詢的條件中有索引時(shí),查詢走BtreeCursor 的索引,而沒(méi)有索引時(shí)走BasicCursor。NoSQL的類型(MongoDB)MongoDB操作 同步復(fù)制1、Master對(duì)SlaveMasterbin/mongod -dbpath=/data/db/m_data -logpath=/data/db/m_log -logappend -port=27017 -master -auth

32、 &Slavebin/mongod -dbpath=/data/db/m_data -logpath=/data/db/m_log -logappend -port=27017 -slave -source=5:27017 -auth &MongoDB操作 同步復(fù)制2、Master對(duì)MasterMaster1bin/mongod -dbpath=/data/db/m_data -logpath=/data/db/m_log -logappend -port=27017 -master -slave -source=4:27017 &Master2bin/mongod -dbpath=/data

33、/db/m_data -logpath=/data/db/m_log -logappend -port=27017 -master -slave -source=5:27017 &MongoDB操作 分布式-Sharding(切片)MongoDB操作 分布式-Sharding(切片)MongoDB的auto-sharding功能是指mongodb通過(guò)mongos自動(dòng)建立一個(gè)水平擴(kuò)展的數(shù)據(jù)庫(kù)集群系統(tǒng),將數(shù)據(jù)庫(kù)分表存儲(chǔ)在sharding的各個(gè)節(jié)點(diǎn)上。一個(gè)mongodb集群包括一些shards(包括一些mongod進(jìn)程),mongos路由進(jìn)程,一個(gè)或多個(gè)config服務(wù)器Shards每一個(gè)shard

34、包括一個(gè)或多個(gè)服務(wù)和存儲(chǔ)數(shù)據(jù)的mongod進(jìn)程(mongod是MongoDB數(shù)據(jù)的核心進(jìn)程)典型的每個(gè)shard開(kāi)啟多個(gè)服務(wù)來(lái)提高服務(wù)的可用性。這些服務(wù)/mongod進(jìn)程在shard中組成一個(gè)復(fù)制集MongoDB操作 分布式-Sharding(切片) ChunksChunk是一個(gè)來(lái)自特殊集合中的一個(gè)數(shù)據(jù)范圍,(collection,minKey,maxKey)描敘一個(gè)chunk,它介于minKey和maxKey范圍之間。例如chunks 的maxsize大小是100M,如果一個(gè)文件達(dá)到或超過(guò)這個(gè)范圍時(shí),會(huì)被切分到2個(gè)新的chunks中。當(dāng)一個(gè)shard的數(shù)據(jù)過(guò)量時(shí),chunks將會(huì)被遷移到其他

35、的shards上。同樣,chunks也可以遷移到其他的shards上。 Config ServersConfig服務(wù)器存儲(chǔ)著集群的metadata信息,包括每個(gè)服務(wù)器,每個(gè)shard的基本信息和chunk信息,Config服務(wù)器主要存儲(chǔ)的是chunk信息。每一個(gè)config服務(wù)器都復(fù)制了完整的chunk信息。MongoDB操作 分布式-Sharding(切片)Mongodb配置Sharding詳細(xì)過(guò)程.doc優(yōu)化SQL Server有工具進(jìn)行數(shù)據(jù)庫(kù)的優(yōu)化,Mongo Database Profiler.不僅有,而且功能更強(qiáng)大。MongoDB 自帶 Profiler,可以非常方便地記錄下所有耗時(shí)

36、過(guò)長(zhǎng)操作,以便于調(diào)優(yōu)。有兩種方式可以控制 Profiling 的開(kāi)關(guān)和級(jí)別,第一種是直接在啟動(dòng)參數(shù)里直接進(jìn)行設(shè)置。啟動(dòng)MongoDB時(shí)加上profile=級(jí)別 即可。也可以在客戶端調(diào)用db.setProfilingLevel(級(jí)別) 命令來(lái)實(shí)時(shí)配置??梢酝ㄟ^(guò)db.getProfilingLevel()命令來(lái)獲取當(dāng)前的Profile級(jí)別。123 db.setProfilingLevel(2);was : 0 , ok : 1 db.getProfilingLevel()上面斜體的級(jí)別可以取0,1,2 三個(gè)值,他們表示的意義如下:0 不開(kāi)啟,關(guān)閉性能分析,測(cè)試環(huán)境可以打開(kāi),生成環(huán)境關(guān)閉,對(duì)性能有很

37、大影響1 記錄慢命令 (默認(rèn)為100ms)2 記錄所有命令Profile 記錄在級(jí)別1時(shí)會(huì)記錄慢命令,那么這個(gè)慢的定義是什么?上面我們說(shuō)到其默認(rèn)為100ms,當(dāng)然有默認(rèn)就有設(shè)置,其設(shè)置方法和級(jí)別一樣有兩種,一種是通過(guò)添加slowms啟動(dòng)參數(shù)配置。第二種是調(diào)用db.setProfilingLevel時(shí)加上第二個(gè)參數(shù):1 2db.setProfilingLevel( level , slowms )db.setProfilingLevel( 1 , 10 );優(yōu)化Profiler 信息保存在 file (Capped Collection) 中。也可以通過(guò)這個(gè)工具進(jìn)行設(shè)置和查看數(shù)據(jù):強(qiáng)大的Mong

38、oDB數(shù)據(jù)庫(kù)管理工具M(jìn)ongo Shell 還提供了一個(gè)比較簡(jiǎn)潔的命令show profile,可列出最近5條執(zhí)行時(shí)間超過(guò)1ms的 Profile 記錄。查看當(dāng)前庫(kù)下所有集合的分析數(shù)據(jù)file.find() 查看某一個(gè)集合的分析數(shù)據(jù)file.find(info:/) 查看執(zhí)行時(shí)間大于100毫秒的執(zhí)行操作,并倒序排列,并取前5行file.find(millis:$gt:100).sort($natural:-1).limit(5);Profile 信息內(nèi)容詳解:ts-該命令在何時(shí)執(zhí)行.millis Time-該命令執(zhí)行耗時(shí),以毫秒記.info-本命令的詳細(xì)信息.query-表明這是一個(gè)query

39、查詢操作.ntoreturn-本次查詢客戶端要求返回的記錄數(shù).比如, findOne()命令執(zhí)行時(shí) ntoreturn 為 1.有l(wèi)imit(n) 條件時(shí)ntoreturn為n.query-具體的查詢條件(如x3).nscanned-本次查詢掃描的記錄數(shù).reslen-返回結(jié)果集的大小.nreturned-本次查詢實(shí)際返回的結(jié)果集.update-表明這是一個(gè)update更新操作.fastmod-Indicates a fast modify operation. See Updates. These operations are normally quite fast.fastmodinser

40、t indicates a fast modify operation that performed an upsert.upsert-表明update的upsert參數(shù)為true.此參數(shù)的功能是如果update的記錄不存在,則用update的條件insert一條記錄.moved-表明本次update是否移動(dòng)了硬盤上的數(shù)據(jù),如果新記錄比原記錄短,通常不會(huì)移動(dòng)當(dāng)前記錄,如果新記錄比原記錄長(zhǎng),那么可能會(huì)移動(dòng)記錄到其它位置,這時(shí)候會(huì)導(dǎo)致相關(guān)索引的更新.磁盤操作更多,加上索引更新,會(huì)使得這樣的操作比較慢.insert-這是一個(gè)insert插入操作. getmore-這是一個(gè)getmore 操作,get

41、more通常發(fā)生在結(jié)果集比較大的查詢時(shí),第一個(gè)query返回了部分結(jié)果,后續(xù)的結(jié)果是通過(guò)getmore來(lái)獲取的。優(yōu)化MongoDB 查詢優(yōu)化如果nscanned(掃描的記錄數(shù))遠(yuǎn)大于nreturned(返回結(jié)果的記錄數(shù))的話,那么我們就要考慮通過(guò)加索引來(lái)優(yōu)化記錄定位了。reslen 如果過(guò)大,那么說(shuō)明我們返回的結(jié)果集太大了,這時(shí)請(qǐng)查看find函數(shù)的第二個(gè)參數(shù)是否只寫上了你需要的屬性名。(類似于MySQL中不要總是select *)對(duì)于創(chuàng)建索引的建議是:如果很少讀,那么盡量不要添加索引,因?yàn)樗饕蕉?,寫操作?huì)越慢。如果讀量很大,那么創(chuàng)建索引還是比較劃算的。MongoDB 更新優(yōu)化如果寫查詢量或者

42、update量過(guò)大的話,多加索引是會(huì)有好處的。以及(省略N字,和RDBMS差不多的道理)Use fast modify operations when possible (and usually with these, an index). See Updates.Profiler 的效率Profiling 功能肯定是會(huì)影響效率的,但是不太嚴(yán)重,原因是他使用的是file 來(lái)記錄,而file 是一個(gè)capped collection 這種collection 在操作上有一些限制和特點(diǎn),但是效率更高。優(yōu)化建議:如果 nscanned 遠(yuǎn)大于 nreturned,那么需要使用索引。如果 reslen

43、 返回字節(jié)非常大,那么考慮只獲取所需的字段。執(zhí)行 update 操作時(shí)同樣檢查一下 nscanned,并使用索引減少文檔掃描數(shù)量。使用 db.eval() 在服務(wù)端執(zhí)行某些統(tǒng)計(jì)操作。減少返回文檔數(shù)量,使用 skip & limit 分頁(yè) MongoDB技巧匯總 備份./mongodump -u admin -p 123456 -d user -o user -d db -o path還原./mongorestore -u admin -p 123456 -d user -c user user/user/user.bson幫助信息db.help();db.user.help();監(jiān)控地址47:

44、28017/數(shù)據(jù)訪問(wèn)接口5:28017/user/user/MongoDB管理平臺(tái) Opricot phpMoAdminMongoDB是什么三MongoDB數(shù)據(jù)庫(kù)是什么?取自“humongous”(海量的),是由10gen開(kāi)發(fā)并維護(hù)的一種開(kāi)源,高性能,可擴(kuò)展,無(wú)模式,面向文檔(document-oriented)的數(shù)據(jù)庫(kù),其內(nèi)存儲(chǔ)的是一種 JSON-like結(jié)構(gòu)化數(shù)據(jù)。它介于關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù)之間,是非關(guān)系數(shù)據(jù)庫(kù)中最像關(guān)系數(shù)據(jù)庫(kù)的。官網(wǎng):/下載:/downloads最新版本:1.6.3(2010-09-23)支持操作系統(tǒng):Os X Linux Windows SolarisMongoDB

45、的特性一JSON格式文檔數(shù)據(jù)庫(kù)MongoDB的特性document!=row 文檔 _id : ObjectId(4caeb59438336e36fcdb2b59), uid : 11909,uname : bird007 ,address : province : 湖北, city : 武漢“, ,_id : ObjectId(4caeb59438336e36fc9306f4), uid : 11910,uname : magicman , “sex : 0 MongoDB的特性二自由數(shù)據(jù)模式支持在對(duì)象和數(shù)組內(nèi)嵌入其它的對(duì)象和數(shù)組Mongo模式設(shè)計(jì)中的一個(gè)關(guān)鍵問(wèn)題就是“是值得為這個(gè)對(duì)象新建一個(gè)集合呢,還是把這個(gè)對(duì)象嵌入到其它的集合中”。MongoDB的特性三全面索引支持基本索引:db.t_user.ensureIndex(uname:1)唯一索引:db.t_user.ensureIndex(uname:1,unique:true)內(nèi)嵌文檔中的key:db.t_user.ensureIndex(address.city:1)文檔本身:db.t_user.ensureIndex(address:1)復(fù)合索引:db.t_user.ensureIn

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論