NoSQL基本原理及常用開源實現(xiàn).ppt_第1頁
NoSQL基本原理及常用開源實現(xiàn).ppt_第2頁
NoSQL基本原理及常用開源實現(xiàn).ppt_第3頁
NoSQL基本原理及常用開源實現(xiàn).ppt_第4頁
NoSQL基本原理及常用開源實現(xiàn).ppt_第5頁
已閱讀5頁,還剩111頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、a,1,周凱 二一四年一月二十七日,a,2,課程內(nèi)容,a,3,課程內(nèi)容,a,4,NoSQL介紹,a,5,NoSQL是什么?,NoSQL概念在2009年被提了出來 NoSQL最常見的解釋是“non-relational”,“Not Only SQL”也被很多人接受 NoSQL被我們用得最多的當數(shù)key-value存儲,當然還有其他的文檔型的、列存儲、圖型數(shù)據(jù)庫、xml數(shù)據(jù)庫等。 在NoSQL概念提出之前,這些數(shù)據(jù)庫就被用于各種系統(tǒng)當中,但是卻很少用于web互聯(lián)網(wǎng)應(yīng)用。比如cdb、qdbm、bdb數(shù)據(jù)庫。,a,6,傳統(tǒng)關(guān)系數(shù)據(jù)庫的瓶頸,傳統(tǒng)的關(guān)系數(shù)據(jù)庫具有不錯的性能,高穩(wěn)定型,久經(jīng)歷史考驗,而且使

2、用簡單,功能強大,同時也積累了大量的成功案例。在互聯(lián)網(wǎng)領(lǐng)域,MySQL成為了絕對靠前的王者,毫不夸張的說,MySQL為互聯(lián)網(wǎng)的發(fā)展做出了卓越的貢獻。 在90年代,一個網(wǎng)站的訪問量一般都不大,用單個數(shù)據(jù)庫完全可以輕松應(yīng)付。在那個時候,更多的都是靜態(tài)網(wǎng)頁,動態(tài)交互類型的網(wǎng)站不多。 到了最近10年,網(wǎng)站開始快速發(fā)展?;鸨恼搲?、博客、sns、微博逐漸引領(lǐng)web領(lǐng)域的潮流。在初期,論壇的流量其實也不大,如果你接觸網(wǎng)絡(luò)比較早,你可能還記得那個時候還有文本型存儲的論壇程序,可以想象一般的論壇的流量有多大。,a,7,Memcached+MySQL,后來,隨著訪問量的上升,幾乎大部分使用MySQL架構(gòu)的網(wǎng)站在

3、數(shù)據(jù)庫上都開始出現(xiàn)了性能問題,web程序不再僅僅專注在功能上,同時也在追求性能。程序員們開始大量的使用緩存技術(shù)來緩解數(shù)據(jù)庫的壓力,優(yōu)化數(shù)據(jù)庫的結(jié)構(gòu)和索引。開始比較流行的是通過文件緩存來緩解數(shù)據(jù)庫壓力,但是當訪問量繼續(xù)增大的時候,多臺web機器通過文件緩存不能共享,大量的小文件緩存也帶了了比較高的IO壓力。在這個時候,Memcached就自然的成為一個非常時尚的技術(shù)產(chǎn)品。 Memcached作為一個獨立的分布式的緩存服務(wù)器,為多個web服務(wù)器提供了一個共享的高性能緩存服務(wù),在Memcached服務(wù)器上,又發(fā)展了根據(jù)hash算法來進行多臺Memcached緩存服務(wù)的擴展,然后又出現(xiàn)了一致性hash

4、來解決增加或減少緩存服務(wù)器導(dǎo)致重新hash帶來的大量緩存失效的弊端。當時,如果你去面試,你說你有Memcached經(jīng)驗,肯定會加分的。,a,8,性能優(yōu)化方向,Mysql主從讀寫分離 由于數(shù)據(jù)庫的寫入壓力增加,Memcached只能緩解數(shù)據(jù)庫的讀取壓力。讀寫集中在一個數(shù)據(jù)庫上讓數(shù)據(jù)庫不堪重負,大部分網(wǎng)站開始使用主從復(fù)制技術(shù)來達到讀寫分離,以提高讀寫性能和讀庫的可擴展性。Mysql的master-slave模式成為這個時候的網(wǎng)站標配了。 分表分庫 隨著web2.0的繼續(xù)高速發(fā)展,在Memcached的高速緩存,MySQL的主從復(fù)制,讀寫分離的基礎(chǔ)之上,這時MySQL主庫的寫壓力開始出現(xiàn)瓶頸,而數(shù)據(jù)

5、量的持續(xù)猛增,由于MyISAM使用表鎖,在高并發(fā)下會出現(xiàn)嚴重的鎖問題,大量的高并發(fā)MySQL應(yīng)用開始使用InnoDB引擎代替MyISAM。同時,開始流行使用分表分庫來緩解寫壓力和數(shù)據(jù)增長的擴展問題。這個時候,分表分庫成了一個熱門技術(shù),是業(yè)界討論的熱門技術(shù)問題。也就在這個時候,MySQL推出了還不太穩(wěn)定的表分區(qū),這也給技術(shù)實力一般的公司帶來了希望。雖然MySQL推出了MySQL Cluster集群,但是由于在互聯(lián)網(wǎng)幾乎沒有成功案例,性能也不能滿足互聯(lián)網(wǎng)的要求,只是在高可靠性上提供了非常大的保證。,a,9,MySQL的擴展性瓶頸,在互聯(lián)網(wǎng),大部分的MySQL都應(yīng)該是IO密集型的,事實上,如果你的M

6、ySQL是個CPU密集型的話,那么很可能你的MySQL設(shè)計得有性能問題,需要優(yōu)化了。大數(shù)據(jù)量高并發(fā)環(huán)境下的MySQL應(yīng)用開發(fā)越來越復(fù)雜,也越來越具有技術(shù)挑戰(zhàn)性。分表分庫的規(guī)則把握都是需要經(jīng)驗的。雖然有像淘寶這樣技術(shù)實力強大的公司開發(fā)了透明的中間件層來屏蔽開發(fā)者的復(fù)雜性,但是避免不了整個架構(gòu)的復(fù)雜性。分庫分表的子庫到一定階段又面臨擴展問題。還有就是需求的變更,可能又需要一種新的分庫方式。 MySQL數(shù)據(jù)庫也經(jīng)常存儲一些大文本字段,導(dǎo)致數(shù)據(jù)庫表非常的大,在做數(shù)據(jù)庫恢復(fù)的時候就導(dǎo)致非常的慢,不容易快速恢復(fù)數(shù)據(jù)庫。比如1000萬4KB大小的文本就接近40GB的大小,如果能把這些數(shù)據(jù)從MySQL省去,M

7、ySQL將變得非常的小。 關(guān)系數(shù)據(jù)庫很強大,但是它并不能很好的應(yīng)付所有的應(yīng)用場景。MySQL的擴展性差(需要復(fù)雜的技術(shù)來實現(xiàn)),大數(shù)據(jù)下IO壓力大,表結(jié)構(gòu)更改困難,正是當前使用MySQL的開發(fā)人員面臨的問題。,a,10,NoSQL誕生的原因,關(guān)系型數(shù)據(jù)庫面臨的問題 擴展困難:由于存在類似Join這樣多表查詢機制,使得數(shù)據(jù)庫在擴展方面很艱難; 讀寫慢:這種情況主要發(fā)生在數(shù)據(jù)量達到一定規(guī)模時由于關(guān)系型數(shù)據(jù)庫的系統(tǒng)邏輯非常復(fù)雜,使得其非常容易發(fā)生死鎖等的并發(fā)問題,所以導(dǎo)致其讀寫速度下滑非常嚴重; 成本高:企業(yè)級數(shù)據(jù)庫的License價格很驚人,并且隨著系統(tǒng)的規(guī)模,而不斷上升; 有限的支撐容量:現(xiàn)有關(guān)

8、系型解決方案還無法支撐Google這樣海量的數(shù)據(jù)存儲; 數(shù)據(jù)庫訪問的新需求 低延遲的讀寫速度:應(yīng)用快速地反應(yīng)能極大地提升用戶的滿意度; 支撐海量的數(shù)據(jù)和流量:對于搜索這樣大型應(yīng)用而言,需要利用PB級別的數(shù)據(jù)和能應(yīng)對百萬級的流量; 大規(guī)模集群的管理:系統(tǒng)管理員希望分布式應(yīng)用能更簡單的部署和管理; 龐大運營成本的考量:IT經(jīng)理們希望在硬件成本、軟件成本和人力成本能夠有大幅度地降低;,a,11,NoSQL數(shù)據(jù)庫的共有原則,假設(shè)失效是必然發(fā)生的 NOSQL實現(xiàn)都建立在硬盤、機器和網(wǎng)絡(luò)都會失效這些假設(shè)之上。 我們不能徹底阻止這些時效,我們需要讓我們的系統(tǒng)能夠在即使非常極端的條件下也能應(yīng)付這些失效。 對數(shù)

9、據(jù)進行分區(qū) 最小化了失效帶來的影響,也將讀寫操作的負載分布到了不同的機器上。 保存同一數(shù)據(jù)的多個副本 大部分 NOSQL 實現(xiàn)都基于數(shù)據(jù)副本的熱備份來保證連續(xù)的高可用性。 一些實現(xiàn)提供了 API,可以控制副本的復(fù)制,也就是說,當你存儲一個對象的時候,你可以在對象級指定你希望保存的副本數(shù)。 查詢支持 在這個方面,不同的實現(xiàn)有相當 本質(zhì)的區(qū)別。不同實現(xiàn)的一個共性在于哈希表中的 key/value 匹配。,a,12,關(guān)系數(shù)據(jù)庫 VS NoSQL,關(guān)系數(shù)據(jù)庫 表都是存儲一些格式化的數(shù)據(jù)結(jié)構(gòu) 每個元組字段的組成都一樣 即使不是每個元組都需要所有的字段,但數(shù)據(jù)庫會為每個元組分配所有的字段 這樣的結(jié)構(gòu)可以便

10、于表與表之間進行連接等操作,NoSQL 以鍵值對存儲,它的結(jié)構(gòu)不固定 每一個元組可以有不一樣的字段 每個元組可以根據(jù)需要增加一些自己的鍵值對 不會局限于固定的結(jié)構(gòu),可以減少一些時間和空間的開銷,a,13,關(guān)系數(shù)據(jù)庫 VS NoSQL,關(guān)系數(shù)據(jù)庫 分布式關(guān)系型數(shù)據(jù)庫中強調(diào)的ACID分別是: 原子性(Atomicity)、 一致性(Consistency)、 隔離性(Isolation)、持久性(Durability)。 ACID的目的就是通過事務(wù)支持,保證數(shù)據(jù)的完整性和正確性,NoSQL 對于許多互聯(lián)網(wǎng)應(yīng)用來說,對于一致性要求可以降低,而可用性(Availability)的要求則更為明顯,從而產(chǎn)

11、生了弱一致性的理論BASE。 BASE分別是英文:Basically,Available, Soft-state,Eventual Consistency的縮寫,這個模型是反ACID模型。,a,14,NoSQL和關(guān)系數(shù)據(jù)庫,NoSQL數(shù)據(jù)庫僅僅是關(guān)系數(shù)據(jù)庫在某些方面(性能、擴展)的一個彌補 單從功能上講,NoSQL的幾乎所有的功能,在關(guān)系數(shù)據(jù)庫上都能夠滿足。 一般會把NoSQL和關(guān)系數(shù)據(jù)庫進行結(jié)合使用,各取所長,各得其所。 在某些應(yīng)用場合,比如一些配置的關(guān)系鍵值映射存儲、用戶名和密碼的存儲、Session會話存儲等等 用NoSQL完全可以替代關(guān)系數(shù)據(jù)庫(如:MySQL)存儲。不但具有更高的性能

12、,而且開發(fā)也更加方便,a,15,NoSQL的優(yōu)缺點,優(yōu)點 簡單的擴展 典型例子是Cassandra,由于其架構(gòu)是類似于經(jīng)典的P2P,所以能通過輕松地添加新的節(jié)點來擴展這個集群; 快速的讀寫 主要例子有Redis,由于其邏輯簡單,而且純內(nèi)存操作,使得其性能非常出色,單節(jié)點每秒可以處理超過10萬次讀寫操作; 低廉的成本 這是大多數(shù)分布式數(shù)據(jù)庫共有的特點,因為主要都是開源軟件,沒有昂貴的License成本;,不足 不提供對SQL的支持 如果不支持SQL這樣的工業(yè)標準,將會對用戶產(chǎn)生一定的學習和應(yīng)用遷移成本; 支持的特性不夠豐富 現(xiàn)有產(chǎn)品所提供的功能都比較有限,大多數(shù)NoSQL數(shù)據(jù)庫都不支持事務(wù),也不

13、像MS SQL Server和Oracle那樣能提供各種附加功能,比如BI和報表等; 現(xiàn)有產(chǎn)品的不夠成熟 大多數(shù)產(chǎn)品都還處于初創(chuàng)期,和關(guān)系型數(shù)據(jù)庫幾十年的完善不可同日而語;,a,16,總結(jié),NoSQL數(shù)據(jù)庫的出現(xiàn),彌補了關(guān)系數(shù)據(jù)(比如MySQL)在某些方面的不足,在某些方面能極大的節(jié)省開發(fā)成本和維護成本。 MySQL和NoSQL都有各自的特點和使用的應(yīng)用場景,兩者的緊密結(jié)合將會給web2.0的數(shù)據(jù)庫發(fā)展帶來新的思路。讓關(guān)系數(shù)據(jù)庫關(guān)注在關(guān)系上,NoSQL關(guān)注在存儲上。,a,17,NoSQL介紹,a,18,按CAP 分類,一致性(Consistency) 任何一個讀操作總是能讀取到之前完成的寫操作

14、結(jié)果,也就是在分布式環(huán)境中,多點的數(shù)據(jù)是一致的; 可用性(Availability) 每一個操作總是能夠在確定的時間內(nèi)返回,也就是系統(tǒng)隨時都是可用的。 分區(qū)容忍性(Partition Tolerance) 在出現(xiàn)網(wǎng)絡(luò)分區(qū)(比如斷網(wǎng))的情況下,分離的系統(tǒng)也能正常運行。,一個分布式系統(tǒng)不能同時滿足一致性,可用性和分區(qū)容錯性這三個需求 ,最多只能同時滿足兩個。,CAP理論,a,19,標題,a,20,關(guān)注一致性和可用性的 (CA),這些數(shù)據(jù)庫對于分區(qū)容忍性方面比較不感冒,主要采用復(fù)制(Replication)這種方式來保證數(shù)據(jù)的安全性,常見的CA系統(tǒng)有: 傳統(tǒng)關(guān)系型數(shù)據(jù)庫,比如Postgres和MyS

15、QL等(Relational) Vertica (Column-oriented) Aster Data (Relational) Greenplum (Relational),按CAP 分類,a,21,關(guān)注一致性和分區(qū)容忍性的(CP),這種系統(tǒng)將數(shù)據(jù)分布在多個網(wǎng)絡(luò)分區(qū)的節(jié)點上,并保證這些數(shù)據(jù)的一致性,但是對于可用性的支持方面有問題,比如當集群出現(xiàn)問題的話,節(jié)點有可能因無法確保數(shù)據(jù)是一致性的而拒絕提供服務(wù),主要的CP系統(tǒng)有: BigTable (Column-oriented) Hypertable (Column-oriented) HBase (Column-oriented) Mongo

16、DB (Document) Terrastore (Document) Redis (Key-value) Scalaris (Key-value) MemcacheDB (Key-value) Berkeley DB (Key-value),按CAP 分類,a,22,關(guān)于可用性和分區(qū)容忍性的(AP),這類系統(tǒng)主要以實現(xiàn)“最終一致性(Eventual Consistency)”來確??捎眯院头謪^(qū)容忍性,AP的系統(tǒng)有: Dynamo (Key-value) Voldemort (Key-value) Tokyo Cabinet (Key-value) KAI (Key-value) Cassan

17、dra (Column-oriented) CouchDB (Document-oriented) SimpleDB (Document-oriented) Riak (Document-oriented),按CAP 分類,a,23,按數(shù)據(jù)模型分類,NoSQL-三種主流的數(shù)據(jù)模型,Column-oriented(列式) 主要圍繞著“列(Column)”,而非 “行(Row)”進行數(shù)據(jù)存儲 屬于同一列的數(shù)據(jù)會盡可能地存儲在硬盤同一個頁(Page)中 大多數(shù)列式數(shù)據(jù)庫都支持Column Family這個特性 (很多類似數(shù)據(jù)倉庫(Data Warehouse)的應(yīng)用,雖然每次查詢都會處理很多數(shù)據(jù),但

18、是每次所涉及的列并沒有很多) 特點:比較適合匯總(Aggregation)和數(shù)據(jù)倉庫這類應(yīng)用。 Key-value 類似常見的HashTable,一個Key對應(yīng)一個Value,但是其能提供非常快的查詢速度、大的數(shù)據(jù)存放量和高并發(fā)操作, 非常適合通過主鍵對數(shù)據(jù)進行查詢和修改等操作, 雖然不支持復(fù)雜的操作,但可通過上層的開發(fā)來彌補這個缺陷。 Document(文檔) 類似常見的HashTable,一個Key對應(yīng)一個Value, 其能提供非??斓牟樵兯俣?、大的數(shù)據(jù)存放量和高并發(fā)操作, 非常適合通過主鍵對數(shù)據(jù)進行查詢和修改等操作, 雖然不支持復(fù)雜的操作,但是可以通過上層的開發(fā)來彌補這個缺陷。,a,24

19、,NoSQL按數(shù)據(jù)模型分類,a,25,選擇合適的NoSQL,NoSQL數(shù)據(jù)庫的出現(xiàn),彌補了關(guān)系數(shù)據(jù)(比如MySQL)在某些方面的不足,在某些方面能極大的節(jié)省開發(fā)成本和維護成本。 MySQL和NoSQL都有各自的特點和使用的應(yīng)用場景,兩者的緊密結(jié)合將會給web2.0的數(shù)據(jù)庫發(fā)展帶來新的思路。讓關(guān)系數(shù)據(jù)庫關(guān)注在關(guān)系上,NoSQL關(guān)注在存儲上。,a,26,課程內(nèi)容,a,27,NoSQL在系統(tǒng)架構(gòu)中的應(yīng)用,a,28,以NoSQL為輔,NoSQL作為鏡像 不改變原有的以MySQL作為存儲的架構(gòu),使用NoSQL作為輔助鏡像存儲,用NoSQL的優(yōu)勢輔助提升性能。 在原有基于MySQL數(shù)據(jù)庫的架構(gòu)上增加了一層

20、輔助的NoSQL存儲, 在寫入MySQL數(shù)據(jù)庫后,同時寫入到NoSQL數(shù)據(jù)庫,讓MySQL和NoSQL擁有相同的鏡像數(shù)據(jù) 在某些可以根據(jù)主鍵查詢的地方,使用高效的NoSQL數(shù)據(jù)庫查詢,a,29,NoSQL為鏡像(同步模式) 通過MySQL把數(shù)據(jù)同步到NoSQL中, ,是一種對寫入透明但是具有更高技術(shù)難度一種模式 適用于現(xiàn)有的比較復(fù)雜的老系統(tǒng),通過修改代碼不易實現(xiàn),可能引起新的問題。同時也適用于需要把數(shù)據(jù)同步到多種類型的存儲中。,以NoSQL為輔,a,30,MySQL和NoSQL組合 MySQL中只存儲需要查詢的小字段,NoSQL存儲所有數(shù)據(jù)。 把需要查詢的字段,一般都是數(shù)字,時間等類型的小字段

21、存儲于MySQL中,根據(jù)查詢建立相應(yīng)的索引, 其他不需要的字段,包括大文本字段都存儲在NoSQL中。 在查詢的時候,我們先從MySQL中查詢出數(shù)據(jù)的主鍵,然后從NoSQL中直接取出對應(yīng)的數(shù)據(jù)即可。,以NoSQL為輔,a,31,NoSQL在系統(tǒng)架構(gòu)中的應(yīng)用,a,32,純NoSQL架構(gòu) 在一些數(shù)據(jù)結(jié)構(gòu)、查詢關(guān)系非常簡單的系統(tǒng)中,我們可以只使用NoSQL即可以解決存儲問題。 在一些數(shù)據(jù)庫結(jié)構(gòu)經(jīng)常變化,數(shù)據(jù)結(jié)構(gòu)不定的系統(tǒng)中,就非常適合使用NoSQL來存儲。 比如監(jiān)控系統(tǒng)中的監(jiān)控信息的存儲,可能每種類型的監(jiān)控信息都不太一樣。 有些NoSQL數(shù)據(jù)庫已經(jīng)具有部分關(guān)系數(shù)據(jù)庫的關(guān)系查詢特性,他們的功能介于key

22、-value和關(guān)系數(shù)據(jù)庫之間,卻具有key-value數(shù)據(jù)庫的性能,基本能滿足絕大部分web 2.0網(wǎng)站的查詢需求。,以NoSQL為主,a,33,以NoSQL為數(shù)據(jù)源的架構(gòu) 數(shù)據(jù)直接寫入NoSQL,再通過NoSQL同步協(xié)議復(fù)制到其他存儲。 根據(jù)應(yīng)用的邏輯來決定去相應(yīng)的存儲獲取數(shù)據(jù)。 應(yīng)用程序只負責把數(shù)據(jù)直接寫入到NoSQL數(shù)據(jù)庫,然后通過NoSQL的復(fù)制協(xié)議,把NoSQL數(shù)據(jù)的每次寫入,更新,刪除操作都復(fù)制到MySQL數(shù)據(jù)庫中。 同 時,也可以通過復(fù)制協(xié)議把數(shù)據(jù)同步復(fù)制到全文檢索實現(xiàn)強大的檢索功能。 這種架構(gòu)需要考慮數(shù)據(jù)復(fù)制的延遲問題,這跟使用MySQL的master-salve模式的延遲問題

23、是一樣的,解決方法也一樣。,以NoSQL為主,a,34,NoSQL在系統(tǒng)架構(gòu)中的應(yīng)用,a,35,內(nèi)存模式 Memcached提供了相當高的讀寫性能,在互聯(lián)網(wǎng)發(fā)展過程中,一直是緩存服務(wù)器的首選。 NoSQL數(shù)據(jù)庫Redis又為我們提供了功能更加強大的內(nèi)存存儲功能。跟Memcached比,Redis的一個key的可以存儲多種數(shù)據(jù)結(jié)構(gòu)Strings、Hashes、Lists、Sets、Sorted sets。 Redis不但功能強大,而且它的性能完全超越大名鼎鼎的Memcached。 Redis支持List、hashes等多種數(shù)據(jù)結(jié)構(gòu)的功能,提供了更加易于使用的api和操作性能,比如對緩存的list

24、數(shù)據(jù)的修改。,以NoSQL為緩存,由于NoSQL數(shù)據(jù)庫天生具有高性能、易擴展的特點,所以我們常常結(jié)合關(guān)系數(shù)據(jù)庫,存儲一些高性能的、海量的數(shù)據(jù)。 從另外一個角度看,根據(jù)NoSQL的高性能特點,它同樣適合用于緩存數(shù)據(jù)。用NoSQL緩存數(shù)據(jù)可以分為內(nèi)存模式和磁盤持久化模式。,a,36,持久化模式 雖然基于內(nèi)存的緩存服務(wù)器具有高性能,低延遲的特點,但是內(nèi)存成本高、內(nèi)存數(shù)據(jù)易失卻不容忽視。 大部分互聯(lián)網(wǎng)應(yīng)用的特點都是數(shù)據(jù)訪問有熱點,也就是說,只有一部分數(shù)據(jù)是被頻繁訪問的。 其實NoSQL數(shù)據(jù)庫內(nèi)部也是通過內(nèi)存緩存來提高性能的,通過一些比較好的算法 把熱點數(shù)據(jù)進行內(nèi)存cache 非熱點數(shù)據(jù)存儲到磁盤 以節(jié)

25、省內(nèi)存占用 使用NoSQL來做緩存,由于其不受內(nèi)存大小的限制,我們可以把一些不常訪問、不怎么更新的數(shù)據(jù)也緩存起來。,以NoSQL為緩存,a,37,課程內(nèi)容,a,38,NoSQL產(chǎn)品介紹及對比,a,39,Memcache是什么? Memcache有什么特點? Memcache在什么場景下適用? Memcache具體怎么用? 在用Memcache中碰到的問題?,NoSQL- Memcache,a,40,Memcache 是什么,Memcache是個高性能的基于內(nèi)存的分布式緩存系統(tǒng),Memcache的分布式是基于客戶端的Key的hash來做均衡,是個偽分布式的系統(tǒng)。 Memcache有2個組件,一個

26、客戶端(java),一個服務(wù)器端c編寫。,NoSQL- Memcache,a,41,Memcache 的特點,基于內(nèi)存(但是重啟了后,數(shù)據(jù)丟失)。 提供簡單的get,set方法。 緩存對象只能小于1M。 安裝,使用比較簡單。,NoSQL- Memcache,a,42,Memcache 的使用場景,中小型網(wǎng)站應(yīng)用中來存放非可靠性的只讀數(shù)據(jù)。例如 存放用戶的信息。 網(wǎng)站的計數(shù)。 數(shù)據(jù)庫DAO前的行記錄緩存。 全局的代碼參數(shù)。,NoSQL- Memcache,a,43,Memcache具體怎么用,安裝 libevent 安裝 wget tar -zxvf libevent-2.0.21-stable

27、.tar.gz ./configure -prefix=/usr make make install,NoSQL- Memcache,a,44,Memcache具體怎么用,memcache 安裝 wget tar -zxvf memcached-1.4.15.tar.gz ./configure -with-libevent=/usr make make install,NoSQL- Memcache,a,45,Memcache的啟動參數(shù),啟動 ./memcached -d -m 10240 -p 11211 -u root 啟動參數(shù) 啟動參數(shù)說明 -d選項是啟動一個守護進程,后臺掛起跑 -m

28、是分配給Memcache使用的內(nèi)存數(shù)量,單位是MB -u是運行Memcache的用戶 -l是監(jiān)聽的服務(wù)器IP地址,如果有多個地址的話, -p是設(shè)置Memcache監(jiān)聽的端口 -c選項是最大運行的并發(fā)連接數(shù),默認是1024, -P是設(shè)置保存Memcache的pid文件 關(guān)閉 killall memcached,NoSQL- Memcache,a,46,Memcache-Java客戶端,spymemcached 官方,單線程 /code/couchbase/java Java memcached client memcache-client-forja

29、va ,NoSQL- Memcache,a,47,Java客戶端操作Memcache,NoSQL- Memcache,a,48,Memcache中碰到的問題,Memcache 無文件備份機制,機器重啟,數(shù)據(jù)掉失。 只能存放1M的內(nèi)容,有一定的局限性。 偽分布式存儲,JAVA客戶端做HASH的路由, 節(jié)點的增加和宕機都是會造成數(shù)據(jù)的掉失。 只提供了核心的2個get/set命令,無其他豐富的API 節(jié)點的增加和減少導(dǎo)致的數(shù)據(jù)問題,NoSQL- Memcache,a,49,Hash一致性問題,解決方案 1 主從模式,主從模式之間保持數(shù)據(jù)同步. 2 一致性Hash算法. 3 Redis來代替Memca

30、che.,NoSQL- Memcache,a,50,Hash一致性,NoSQL- Memcache,a,51,Hash一致性,NoSQL- Memcache,a,52,NoSQL產(chǎn)品介紹及對比,a,53,NoSQL-Redis,Redis 是什么? Redis 能干嗎? Redis 有什么特點? Redis 在什么場景下適用? Redis 具體怎么用? 在用Redis中碰到的問題?,a,54,Redis 是什么?,Redis 是一個 用c語言寫的類似Memcache 的key-value的存儲系統(tǒng),它比Memcache提供了更多的API接口和更好的并發(fā)性能,可以支持10萬并發(fā)的讀寫,建議用Re

31、dis代替Memcahe。 Redis 是基于內(nèi)存的,因此部署Redis的機器對于內(nèi)存是非常有高的要求的,Redis是會把數(shù)據(jù)實時寫到內(nèi)存中,再定時同步到文件。,NoSQL-Redis,a,55,Redis 能干嘛?,Redis 可以當作數(shù)據(jù)庫來用,但是有缺陷,在可靠性上,沒有Oracle關(guān)系型數(shù)據(jù)庫來的穩(wěn)定。 可以作為持久層的Cache層??梢跃彺嫦旅娴臄?shù)據(jù)庫結(jié)構(gòu)。 計數(shù) 排行榜樣,最新瀏覽的數(shù)據(jù) 隊列(訂閱關(guān)系),NoSQL-Redis,a,56,Redis 特點?,完全居于內(nèi)存,數(shù)據(jù)實時的讀寫內(nèi)存,定時閃回到文件中 讀寫速度快 支持高并發(fā)量,官方宣傳支持10萬級別的并發(fā)讀寫 支持機器重啟

32、后的,重新加載模式,不會掉數(shù)據(jù),NoSQL-Redis,a,57,Redis 適用場景?,在非可靠數(shù)據(jù)存儲中,可以作為數(shù)據(jù)持久層或者是數(shù)據(jù)緩存區(qū)。 對于讀寫壓力比較大,實時性要求比較高的場景下。 關(guān)系型數(shù)據(jù)庫不能勝任的模型下的場景。 例如 在SNS中訂閱關(guān)系 。,NoSQL-Redis,a,58,Redis 具體用法?,安裝,啟動,關(guān)閉,配置,Java訪問操作 安裝 $ tar xzf redis-2.6.7.tar.gz $ cd redis-2.6.7 $ make install,NoSQL-Redis,a,59,Redis 啟動 & 關(guān)閉,啟動 ./src/redis-server /

33、etc/redis.conf & 關(guān)閉 ./src/redis-cli shutdown,NoSQL-Redis,a,60,Redis 的配置-基本配置,Redis的核心配置文件,只有一個,就是redis.conf 文件,下面是列舉了核心的配置項。,a,61,Redis 的配置-快照配置,a,62,Redis 的配置-同步配置,a,63,Redis 的配置-安全配置,a,64,Redis 的配置-數(shù)據(jù)追加配置,a,65,Java操作Redis,Java客戶端別表 Jedis 官方推薦 Jredis 推薦 JDBC-Jredis 不推薦 RJC 不推薦 Redis-protocol 不推薦,No

34、SQL-Redis,a,66,Java操作Redis,a,67,Redis高級特性,主從模式復(fù)制 Redis支持主從同步。數(shù)據(jù)可以從主服務(wù)器向任意數(shù)量的從服務(wù)器上同步,從服務(wù)器可以是關(guān)聯(lián)其他從服務(wù)器的主服務(wù)器。這使得Redis可執(zhí)行單層樹復(fù)制。從盤可以有意無意的對數(shù)據(jù)進行寫操作。 發(fā)布訂閱模式 由于完全實現(xiàn)了發(fā)布/訂閱機制,使得從數(shù)據(jù)庫在任何地方同步樹時,可訂閱一個頻道并接收主服務(wù)器完整的消息發(fā)布記錄。同步對讀取操作的可擴展性和數(shù)據(jù)冗余很有幫助。,NoSQL-Redis,a,68,NoSQL產(chǎn)品介紹及對比,a,69,Mongdb 是什么?,Mongodb是一個底層用C+語言編寫的一個分布式文件

35、存儲系統(tǒng),可以簡單的理解成一個類Mysql數(shù)據(jù)庫的分布式文件系統(tǒng)。 Mongodb底層是用C+語言編寫的。 一個分布式的文件存儲系統(tǒng),NoSQL- Mongdb,a,70,Mongdb 能干嘛?,作為MySQL的代替品,存儲海量的相對非可靠的數(shù)據(jù), 例如大眾點評的評論 . 淘寶網(wǎng) ,NoSQL- Mongdb,a,71,Mongdb 特點?,天生有分布式的優(yōu)點(最強的一個優(yōu)點)。 海量文件,文本類型數(shù)據(jù)的存儲。 性能卓越的海量數(shù)據(jù)的存儲情況下的讀寫性能。,NoSQL- Mongdb,a,72,Mongdb的數(shù)據(jù)模型,a,73,Mongodb 適用場景?,MySQL 的代替品或者是半代替品(對復(fù)

36、雜查詢要求不高的情況下) 讀壓力比寫的壓力大的情況下的文件和文本類型的數(shù)據(jù),并且數(shù)據(jù)量比較大。,NoSQL- Mongdb,a,74,Mongdb具體用法?,安裝,啟動,關(guān)閉,配置,Java訪問操作 安裝 解壓縮 tar xzvf mongodb-linux-i686-2.2.2.tgz 新建數(shù)據(jù)庫目錄 mkdir p /data/db,NoSQL- Mongdb,a,75,Mongdb 啟動 & 關(guān)閉,啟動 ./mongod & 關(guān)閉 服務(wù)端關(guān)閉 沒有掛起跑的話 直接ctrl+c 掛起跑的話的話 直接kill 進程號 客戶端關(guān)閉 db.shutdownerver(),NoSQL- Mongd

37、b,a,76,Java操作Mongodb,Java客戶端列表 mongo-java-driver ,NoSQL- Mongdb,a,77,Java操作Mongodb,NoSQL- Mongdb,a,78,NoSQL產(chǎn)品介紹及對比,a,79,NoSQL-Oracle TimesTen,TimesTen是什么? TimesTen能干嗎? TimesTen有什么特點? TimesTen在什么場景下適用? TimesTen具體怎么用? 在用TimesTen中碰到的問題?,a,80,Oracle TimesTen 是什么,Oracle TimesTen 是HP實驗室人員在1992年做的一個內(nèi)存數(shù)據(jù)庫產(chǎn)品

38、,后來惠普實驗室的人成立了TimesTen公司,Oracle在2005年的時候把TimesTen收購了的。,NoSQL-Oracle TimesTen,a,81,Oracle TimesTen 特點,及時響應(yīng) 完全居于內(nèi)存,對于CPU,磁盤的IO壓力非常低。 支持事物 兼容標準SQL 高性能 高可用性 主從模式,NoSQL-Oracle TimesTen,a,82,TT的物理組成,NoSQL-Oracle TimesTen,a,83,TT物理結(jié)構(gòu),Shared libraries:共享庫:可以理解為訪問數(shù)據(jù)的驅(qū)動程序 內(nèi)存中的數(shù)據(jù)結(jié)構(gòu):表,索引在內(nèi)存的數(shù)據(jù) 系統(tǒng)進程: 管理程序:備份程序 磁盤

39、上的檢查點和日志文件:數(shù)據(jù)和日志存入到磁盤文件上。,NoSQL-Oracle TimesTen,a,84,TT的特性,復(fù)制 負載均衡 可以作為Oracle數(shù)據(jù)庫的前端Cache,不支持其他數(shù)據(jù)庫 支持本地的高速訪問和網(wǎng)絡(luò)訪問方式 可靠性高。支持完整日志,支持鏡像復(fù)制功能。 不是開源代碼,需要較高費用 不支持存儲過程和觸發(fā)器,NoSQL-Oracle TimesTen,a,85,TimesTen復(fù)制,NoSQL-Oracle TimesTen,a,86,Oracle TimesTen 適用場景,實時計費系統(tǒng)(移動,聯(lián)通) 基金,股票實時撮合交易系統(tǒng) 網(wǎng)站Cache層或者是持久層 CCTV 把用戶

40、的信息存儲在TT中而不是關(guān)系數(shù)據(jù)庫中,NoSQL-Oracle TimesTen,a,87,NoSQL-Oracle TimesTen,a,88,RDBMS特點,1.數(shù)據(jù)以表格的形式出現(xiàn) 2.每行為各種記錄名稱 3.每列為記錄名稱所對應(yīng)的數(shù)據(jù)域 4.許多的行和列組成一張表單 5.若干的表單組成database RDBMS 指的就是關(guān)系型數(shù)據(jù)庫管理系統(tǒng),a,89,NoSQL-Oracle TimesTen,SMP(Symmetric Multi-Processing),對稱多處理結(jié)構(gòu)的簡稱,是指在一個計算機上匯集了一組處理器(多CPU),各CPU之間共享內(nèi)存子系統(tǒng)以及總線結(jié)構(gòu)。在這種技術(shù)的支持下,一個服

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論