NoSQL數(shù)據(jù)庫(kù)技術(shù)實(shí)戰(zhàn)
定 價(jià):69 元
- 作者:皮雄軍
- 出版時(shí)間:2014/11/1
- ISBN:9787302380399
- 出 版 社:清華大學(xué)出版社
- 中圖法分類:TP311.138
- 頁(yè)碼:
- 紙張:膠版紙
- 版次:1
- 開本:16K
本書由淺入深,全面系統(tǒng)地介紹了NoSQL系統(tǒng)。本書既對(duì)NoSQL系統(tǒng)的理論進(jìn)行了深入淺出的分析,又介紹了每一種NoSQL數(shù)據(jù)庫(kù)在業(yè)界廣泛應(yīng)用的一個(gè)具體系統(tǒng),理論與實(shí)戰(zhàn)并重。
本書共分5篇,12章。涵蓋的內(nèi)容有:NoSQL與大數(shù)據(jù)簡(jiǎn)介、NoSQL的數(shù)據(jù)一致性、NoSQL的水平擴(kuò)展與其他基礎(chǔ)知識(shí)、BigTable與Google云計(jì)算原理、Google云計(jì)算的開源版本——Hadoop、Dynamo:Amazon的高可用鍵值對(duì)存儲(chǔ)、LevelDb——出自Google的Key-Value數(shù)據(jù)庫(kù)、Redis實(shí)戰(zhàn)、面向文檔的數(shù)據(jù)庫(kù)CouchDB、MongoDB實(shí)戰(zhàn)、MySQL基礎(chǔ)、MySQL高級(jí)特性與性能優(yōu)化。
本書涉及面廣,從基本操作到高級(jí)技術(shù)和核心原理,再到項(xiàng)目開發(fā),幾乎涉及NoSQL系統(tǒng)的所有重要知識(shí)。本書適合所有想全面學(xué)習(xí)NoSQL的人員閱讀,也適合各種使用NoSQL進(jìn)行開發(fā)的工程技術(shù)人員使用。
“數(shù)據(jù)是21世紀(jì)最有價(jià)值的資產(chǎn),它比黃金和石油更有價(jià)值”。隨著大數(shù)據(jù)時(shí)代的來臨,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)在可擴(kuò)展性、數(shù)據(jù)模型和可用性方面遇到了難以克服的障礙。此時(shí)各種NoSQL系統(tǒng)出現(xiàn)了。它們的特點(diǎn)各不相同,分別應(yīng)用于不同的場(chǎng)景并迅速取得了巨大的成功。作為一名從事后臺(tái)開發(fā)多年的工作者,我對(duì)每一種新技術(shù)的出現(xiàn)與應(yīng)用都充滿了渴望與期待,其中NoSQL解決了我實(shí)際工作中遇到的許多問題。NoSQL具有下面幾方面的優(yōu)點(diǎn):
1.靈活的可擴(kuò)展性
多年以來,數(shù)據(jù)庫(kù)管理員們都是通過“垂直擴(kuò)展”的方式(當(dāng)數(shù)據(jù)庫(kù)的負(fù)載增加的時(shí)候,購(gòu)買更大型的服務(wù)器來承載增加的負(fù)載)來進(jìn)行擴(kuò)展的,而不是通過“水平擴(kuò)展”的方式(當(dāng)數(shù)據(jù)庫(kù)負(fù)載增加的時(shí)候,在多臺(tái)主機(jī)上分配增加的負(fù)載)來進(jìn)行擴(kuò)展。但是,隨著請(qǐng)求量和可用性需求的增加,數(shù)據(jù)庫(kù)也正在遷移到云端或虛擬化環(huán)境中,“水平擴(kuò)展”的經(jīng)濟(jì)優(yōu)勢(shì)變得更加明顯了,對(duì)各大企業(yè)來說,這種“誘惑”是無法抗拒的。
要對(duì)RDBMS(關(guān)系型數(shù)據(jù)庫(kù),比如Oracle)做“水平擴(kuò)展”,并不是很容易。但是各種新類型的NoSQL數(shù)據(jù)庫(kù)主要是為了進(jìn)行透明的擴(kuò)展,來利用新節(jié)點(diǎn)而設(shè)計(jì)的,而且,它們通常都是為了低成本的commodity hardware而設(shè)計(jì)的。
2. 輕松應(yīng)對(duì)海量數(shù)據(jù)
在過去的十年里,正如請(qǐng)求量發(fā)生了翻天覆地的增長(zhǎng)一樣,需要存儲(chǔ)的數(shù)據(jù)量也發(fā)生了急劇的膨脹。為了滿足數(shù)據(jù)量增長(zhǎng)的需要,RDBMS的容量也在日益增加,但是,對(duì)一些企業(yè)來說,隨著請(qǐng)求量的增加,單一數(shù)據(jù)庫(kù)能夠管理的數(shù)據(jù)量也變得越來越讓人無法忍受了,F(xiàn)在,大量的“大數(shù)據(jù)”可以通過NoSQL系統(tǒng)(如MongoDB)來處理,它們能夠處理的數(shù)據(jù)量遠(yuǎn)遠(yuǎn)超出了最大型的RDBMS所能處理的極限。
3. 維護(hù)簡(jiǎn)單
在過去的幾年里,雖然一些RDBMS供應(yīng)商們聲稱在可管理性方面做出了很多的改進(jìn),但是高端的RDBMS系統(tǒng)維護(hù)起來仍然十分昂貴,而且還需要訓(xùn)練有素的DBA們的協(xié)助。DBA們需要親自參與高端的RDBMS系統(tǒng)的設(shè)計(jì)、安裝和調(diào)優(yōu)。
NoSQL數(shù)據(jù)庫(kù)從一開始就是為了降低管理方面的要求而設(shè)計(jì)的:從理論上來說,自動(dòng)修復(fù),數(shù)據(jù)分配和簡(jiǎn)單的數(shù)據(jù)模型的確可以讓管理和調(diào)優(yōu)方面的要求降低很多。
4. 經(jīng)濟(jì)
NoSQL數(shù)據(jù)庫(kù)通常使用廉價(jià)的Commodity Servers集群來管理膨脹的數(shù)據(jù)和請(qǐng)求量,而RDBMS通常需要依靠昂貴的專有服務(wù)器和存儲(chǔ)系統(tǒng)來做到這一點(diǎn)。使用NoSQL,每GB的成本或每秒處理的請(qǐng)求的成本都比使用RDBMS的成本少很多,這可以讓企業(yè)花費(fèi)更低的成本存儲(chǔ)和處理更多的數(shù)據(jù)。
5. 靈活的數(shù)據(jù)模型
對(duì)于大型的生產(chǎn)性RDBMS來說,變更管理是一件很令人頭痛的事情。即使只對(duì)一個(gè)RDBMS的數(shù)據(jù)模型做出很小的改動(dòng),也必須要十分小心的管理,也許還需要停機(jī)或降低服務(wù)水平。NoSQL數(shù)據(jù)庫(kù)在數(shù)據(jù)模型約束方面是更加寬松的,甚至可以說并不存在數(shù)據(jù)模型的約束。NoSQL的Key/Value數(shù)據(jù)庫(kù)和文檔型數(shù)據(jù)庫(kù)可以讓應(yīng)用程序在一個(gè)數(shù)據(jù)元素里存儲(chǔ)任何結(jié)構(gòu)的數(shù)據(jù)。即使是規(guī)定更加嚴(yán)格的基于“大表”的NoSQL數(shù)據(jù)庫(kù)(如HBase)通常也允許創(chuàng)建新列,這并不會(huì)造成什么麻煩。
應(yīng)用程序變更和數(shù)據(jù)庫(kù)模式的變更并不需要作為一個(gè)復(fù)雜的變更單元來管理。從理論上來說,這可以讓應(yīng)用程序迭代的更快,但是,很明顯,如果應(yīng)用程序無法維護(hù)數(shù)據(jù)的完整性,那么這也會(huì)帶來一些不良的副作用。
本書的誕生
在當(dāng)前的圖書市場(chǎng)上,還沒有一本全面而深入介紹NoSQL系統(tǒng)的圖書。要么只有理論內(nèi)容并且大部分并不全面,要么千篇一律把某個(gè)NoSQL系統(tǒng)的操作一一羅列。為了讓眾多的NoSQL學(xué)習(xí)人員能夠更加全面和深入地學(xué)習(xí)NoSQL技術(shù),筆者編寫了本書。本書從系統(tǒng)的角度出發(fā),既深入講解NoSQL的產(chǎn)生原因與理論基礎(chǔ),又對(duì)三種典型NoSQL系統(tǒng)引入了豐富的實(shí)戰(zhàn),使讀者可以全面而深入地了解各種NoSQL,知道各個(gè)NoSQL和MySQL系統(tǒng)的聯(lián)系和不同,在實(shí)際中根據(jù)自己的情況進(jìn)行正確的技術(shù)選型。
本書特色
1.內(nèi)容全面、新穎
本書內(nèi)容全面而新穎,既對(duì)NoSQL系統(tǒng)的理論進(jìn)行了深入淺出的分析,又深入講解了列式的、Key/Value的和文檔類型這三種NoSQL系統(tǒng),最后還講解了MySQL的性能 優(yōu)化。
2.講解由淺入深,循序漸進(jìn)
本書是一本入門圖書,如果你從來沒有用過NoSQL系統(tǒng),那么本書正好適合你。本書也是一本深入講解NoSQL的圖書,它將各種NoSQL系統(tǒng)聯(lián)系起來并分析各自的相同點(diǎn)和不同點(diǎn),讀完之后你一定會(huì)對(duì)NoSQL系統(tǒng)有一個(gè)高屋建瓴的認(rèn)識(shí)。
3.理論與實(shí)踐并重
本書對(duì)NoSQL系統(tǒng)的產(chǎn)生原因和理論基礎(chǔ)做了廣泛而深入的分析,讓讀者知其然,更知其所以然。書中盡力消除初學(xué)者學(xué)習(xí)NoSQL系統(tǒng)時(shí)容易遇到的障礙,變抽象為具體,變復(fù)雜為簡(jiǎn)單。而且重點(diǎn)對(duì)Hadoop/HBase、MongoDB和Redis這三種NoSQL系統(tǒng)都給出了具體實(shí)踐。
4.圖文并茂,容易理解
本書針對(duì)NoSQL系統(tǒng)中的一些架構(gòu)和較難理解的概念,提供了大量的插圖,并結(jié)合具體文字來講解,非常直觀,更有利于讀者的學(xué)習(xí)與理解。
5.語(yǔ)言通俗易懂
本書不使用那些讓人難以理解的語(yǔ)言來分析問題,而是采用通俗易懂的語(yǔ)言去講解NoSQL系統(tǒng)的相關(guān)知識(shí),讓讀者能夠真正了解NoSQL技術(shù),繼而在開發(fā)中使用這些技術(shù)。
本書內(nèi)容
第1篇 NoSQL的興起與理論基礎(chǔ)(第1~3章)
本篇介紹了大數(shù)據(jù)時(shí)代NoSQL的興起原因及NoSQL的理論基礎(chǔ),包括NoSQL與大數(shù)據(jù)簡(jiǎn)介,NoSQL系統(tǒng)的分類和特點(diǎn),各種數(shù)據(jù)一致性模型的定義、原理、實(shí)現(xiàn)、舉例及適用場(chǎng)景,NoSQL系統(tǒng)水平擴(kuò)展的方法,主要是復(fù)制和分區(qū)技術(shù)的難點(diǎn)、在實(shí)際系統(tǒng)中的運(yùn)用及和數(shù)據(jù)一致性的關(guān)系,最后簡(jiǎn)單介紹了其他雜項(xiàng)知識(shí)比如五分鐘法則等。這些內(nèi)容都是學(xué)習(xí)后續(xù)章節(jié)所必須要掌握的基礎(chǔ)知識(shí),后續(xù)章節(jié)中的實(shí)際NoSQL系統(tǒng)如Redis可以看成是這些理論知識(shí)的運(yùn)用。
第2篇 列式NoSQL系統(tǒng)(第4、5章)
本篇主要介紹了列式NoSQL系統(tǒng)。首先以Google的BigTable為例介紹了列式NoSQL系統(tǒng)的特點(diǎn)、原理和應(yīng)用。然后實(shí)戰(zhàn)演練開源的HBase系統(tǒng)。由于HBase與Hadoop、Zookeeper等有著十分密切的關(guān)系,因此對(duì)其一并進(jìn)行了介紹。
第3篇 Key/Value NoSQL系統(tǒng)(第6~8章)
本篇主要介紹了Key/Value NoSQL系統(tǒng)。首先以Amazon的Dynamo為例介紹了Key/Value系統(tǒng)的特點(diǎn)、原理和應(yīng)用場(chǎng)景,并詳細(xì)描述了這個(gè)系統(tǒng)是如何運(yùn)用本書第1篇中的理論知識(shí)而構(gòu)建的。然后介紹了另一個(gè)來自Google的LevelDB系統(tǒng),最后實(shí)戰(zhàn)演練了被廣泛使用的Redis系統(tǒng)。
第4篇 文檔型 NoSQL系統(tǒng)(第9、10章)
本篇主要介紹了文檔型NoSQL系統(tǒng)。首先以CouchDB為例介紹了文檔型NoSQL的特點(diǎn)、原理和應(yīng)用場(chǎng)景,然后實(shí)戰(zhàn)演練了被廣泛使用的MongoDB系統(tǒng)。
第5篇 MySQL基礎(chǔ)與性能優(yōu)化(第11、12章)
本篇主要介紹了目前在互聯(lián)網(wǎng)公司被廣泛使用的MySQL關(guān)系型數(shù)據(jù)庫(kù)。雖然在大數(shù)據(jù)時(shí)代NoSQL將會(huì)占據(jù)數(shù)據(jù)處理技術(shù)的主流,但是傳統(tǒng)的MySQL在一些應(yīng)用場(chǎng)景仍有著自己的優(yōu)勢(shì)。所以本篇開始先介紹了一些MySQL的基礎(chǔ)知識(shí),然后詳細(xì)描述了其高級(jí)特性,最后介紹了MySQL的性能優(yōu)化、復(fù)制技術(shù)、垂直擴(kuò)展、水平擴(kuò)展和綜合應(yīng)用。
本書讀者對(duì)象
* 沒有基礎(chǔ)的NoSQL初學(xué)者;
* 互聯(lián)網(wǎng)公司高并發(fā)系統(tǒng)的后臺(tái)開發(fā)人員;
* 大數(shù)據(jù)、NoSQL開發(fā)愛好者;
* 剛?cè)肼毜某踔屑?jí)程序員;
* 高等院校師生;
* 相關(guān)培訓(xùn)班的學(xué)員。
本書源程序獲取方式
本書涉及的源程序與資源請(qǐng)讀者自行到www.tup.com.cn上搜索到本書頁(yè)面后按提示下載,也可以到www.wanjuanchina.net上的相關(guān)版塊下載。
本書作者
本書由皮雄軍主筆編寫。其他參與編寫的人員有吳萬(wàn)軍、項(xiàng)延鐵、謝邦鐵、許黎民、薛在軍、楊佩璐、楊習(xí)偉、于洪亮、張寶梅、張功勤、張建華、張建志、張敬東、張倩、張慶利、趙劍川、趙薇、鄭強(qiáng)、周靜、朱盛鵬、祝明慧、張晶晶。
雖然筆者花費(fèi)了大量精力寫作本書,并力圖將疏漏減少到最少,但仍恐百密一疏。如果您在閱讀本書的過程中發(fā)現(xiàn)有任何疏漏,或者對(duì)本書的講解有任何疑問,發(fā)送電子郵件到bookservice2008@163.com以獲得幫助。
編者
第1篇 NoSQL的興起與理論基礎(chǔ)
第1章 NoSQL與大數(shù)據(jù)簡(jiǎn)介 2
1.1 引子——NoSQL在國(guó)內(nèi)使用的案例 2
1.1.1 新浪微博 2
1.1.2 淘寶數(shù)據(jù)平臺(tái) 3
1.1.3 視覺中國(guó)網(wǎng)站 4
1.1.4 優(yōu)酷運(yùn)營(yíng)數(shù)據(jù)分析 5
1.1.5 飛信空間 6
1.1.6 豆瓣社區(qū) 7
1.2 大數(shù)據(jù) 8
1.2.1 大數(shù)據(jù)的度量單位 8
1.2.2 大數(shù)據(jù)的特點(diǎn) 9
1.3 大數(shù)據(jù)相關(guān)技術(shù) 10
1.3.1 大數(shù)據(jù)采集技術(shù) 10
1.3.2 大數(shù)據(jù)預(yù)處理技術(shù) 11
1.3.3 大數(shù)據(jù)存儲(chǔ)及管理技術(shù) 11
1.3.4 大數(shù)據(jù)分析及挖掘技術(shù) 11
1.3.5 大數(shù)據(jù)展現(xiàn)與應(yīng)用技術(shù) 12
1.4 NoSQL簡(jiǎn)介 12
1.4.1 什么是NoSQL 12
1.4.2 關(guān)系型數(shù)據(jù)庫(kù)簡(jiǎn)史 13
1.4.3 數(shù)據(jù)庫(kù)分類 13
1.4.4 關(guān)系型數(shù)據(jù)庫(kù)的優(yōu)勢(shì) 14
1.4.5 不擅長(zhǎng)的處理 15
1.4.6 NoSQL數(shù)據(jù)庫(kù) 18
1.5 NoSQL數(shù)據(jù)庫(kù)的類型 20
1.5.1 鍵值(Key/Value)存儲(chǔ) 20
1.5.2 面向文檔的數(shù)據(jù)庫(kù) 21
1.5.3 面向列的數(shù)據(jù)庫(kù) 22
1.6 如何使用和學(xué)習(xí)NoSQL數(shù)據(jù)庫(kù) 23
1.6.1 始終只是一種選擇 23
1.6.2 在何種程度上信賴它 23
1.7 云數(shù)據(jù)管理 24
第2章 NoSQL的數(shù)據(jù)一致性 25
2.1 傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)中的ACID 25
2.1.1 原子性 25
2.1.2 一致性 25
2.1.3 隔離性 26
2.1.4 持久性 26
2.1.5 舉例 26
2.2 CAP理論 27
2.2.1 NoSQL系統(tǒng)是分布式系統(tǒng) 27
2.2.2 CAP理論闡述 27
2.3 AP的例子——DNS系統(tǒng) 29
2.3.1 DNS系統(tǒng) 29
2.3.2 DNS域名解析過程 29
2.3.3 DNS系統(tǒng)是最終一致性的 31
2.4 數(shù)據(jù)一致性模型與BASE 31
2.4.1 數(shù)據(jù)一致性模型 31
2.4.2 BASE(Basically Available,Soft-state,Eventual consistency) 32
2.5 數(shù)據(jù)一致性實(shí)現(xiàn)方法 33
2.5.1 Quorum系統(tǒng)NRW策略 33
2.5.2 時(shí)間戳策略 34
2.5.3 向量時(shí)鐘 37
第3章 NoSQL的水平擴(kuò)展與其他基礎(chǔ)知識(shí) 41
3.1 所有數(shù)據(jù)存放在一個(gè)服務(wù)器上 41
3.2 分片(Sharding) 41
3.3 主從復(fù)制 43
3.4 對(duì)等(Peer To Peer)復(fù)制 44
3.5 復(fù)制和分片的同時(shí)使用 45
3.6 數(shù)據(jù)水平擴(kuò)展的方法總結(jié) 46
3.7 分片對(duì)數(shù)據(jù)的劃分方式 46
3.7.1 Range-Based Partitioning 47
3.7.2 Round-Robin 49
3.8 一致性hash算法(Consistent Hashing) 50
3.8.1 基本場(chǎng)景 51
3.8.2 hash算法和單調(diào)性 51
3.8.3 Consistent Hashing算法的原理 51
3.8.4 虛擬節(jié)點(diǎn) 54
3.9 磁盤的讀寫特點(diǎn)及五分鐘法則 55
3.9.1 磁道、扇區(qū)、柱面和磁頭數(shù) 56
3.9.2 固態(tài)硬盤(SSD):隨機(jī)讀寫速度快 57
3.9.3 內(nèi)存:讀寫速度極快 57
3.9.4 五分鐘法則 57
3.10 不要?jiǎng)h除數(shù)據(jù) 58
第2篇 列式NoSQL系統(tǒng)
第4章 BigTable與Google云計(jì)算原理 60
4.1 云計(jì)算 60
4.1.1 云計(jì)算的概念 60
4.1.2 云計(jì)算發(fā)展現(xiàn)狀 63
4.1.3 云計(jì)算實(shí)現(xiàn)機(jī)制 64
4.1.4 網(wǎng)格計(jì)算與云計(jì)算 66
4.2 Google文件系統(tǒng)GFS 68
4.2.1 系統(tǒng)架構(gòu) 69
4.2.2 容錯(cuò)機(jī)制 71
4.2.3 系統(tǒng)管理技術(shù) 72
4.3 并行數(shù)據(jù)處理MapReduce 73
4.3.1 產(chǎn)生背景 73
4.3.2 編程模型 73
4.3.3 實(shí)現(xiàn)機(jī)制 74
4.4 分布式鎖服務(wù)Chubby 78
4.4.1 Paxos算法 78
4.4.2 Chubby系統(tǒng)設(shè)計(jì) 79
4.4.3 Chubby文件系統(tǒng) 80
4.4.4 通信協(xié)議 82
4.4.5 正確性與性能 83
4.5 分布式結(jié)構(gòu)化數(shù)據(jù)表BigTable 84
4.5.1 設(shè)計(jì)動(dòng)機(jī)與目標(biāo) 85
4.5.2 數(shù)據(jù)模型 85
4.5.3 系統(tǒng)架構(gòu) 87
4.5.4 主服務(wù)器 88
4.5.5 子表服務(wù)器 89
4.5.6 性能優(yōu)化 92
第5章 Google云計(jì)算的開源版本——Hadoop 94
5.1 Hadoop簡(jiǎn)介 94
5.1.1 Hadoop發(fā)展史 94
5.1.2 Apache Hadoop項(xiàng)目及體系結(jié)構(gòu) 96
5.2 Hadoop產(chǎn)生的原因 97
5.2.1 海量的數(shù)據(jù) 97
5.2.2 數(shù)據(jù)的存儲(chǔ)和分析 98
5.3 Hadoop和其他系統(tǒng)的比較 99
5.3.1 和關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)的比較 99
5.3.2 和網(wǎng)格計(jì)算的比較 100
5.4 HDFS的架構(gòu)設(shè)計(jì) 101
5.4.1 前提和設(shè)計(jì)目標(biāo) 102
5.4.2 Namenode和Datanode 102
5.4.3 文件系統(tǒng)的Namespace 103
5.4.4 數(shù)據(jù)復(fù)制 103
5.4.5 文件系統(tǒng)元數(shù)據(jù)的持久化 104
5.4.6 通訊協(xié)議 105
5.4.7 健壯性 105
5.4.8 數(shù)據(jù)組織 106
5.4.9 可訪問性 107
5.4.10 空間的回收 107
5.5 安裝Hadoop 108
5.5.1 安裝K 1.7 108
5.5.2 安裝Hadoop 109
5.6 HDFS操作 113
5.6.1 使用FS Shell命令操作HDFS 113
5.6.2 編程讀寫HDFS 118
5.7 Hadoop中的MapReduce模型 119
5.7.1 MapReduce計(jì)算模型 119
5.7.2 Hadoop中的Hello World程序 120
5.7.3 運(yùn)行MapReduce程序 124
5.7.4 Hadoop中的Hello World程序——新的API 125
5.7.5 MapReduce的數(shù)據(jù)流和控制流 127
5.8 Zookeeper 129
5.8.1 Zookeeper配置安裝 129
5.8.2 Zookeeper的數(shù)據(jù)模型 130
5.8.3 Zookeeper的基本使用 131
5.8.4 ZooKeeper 典型的應(yīng)用場(chǎng)景 133
5.8.5 統(tǒng)一命名服務(wù)(Name Service) 133
5.8.6 共享鎖(Locks) 136
5.8.7 隊(duì)列管理 137
5.8.8 Zookeeper總結(jié) 139
5.9 HBase 139
5.9.1 簡(jiǎn)介 139
5.9.2 邏輯視圖 139
5.9.3 物理存儲(chǔ) 141
5.9.4 系統(tǒng)架構(gòu) 144
5.9.5 關(guān)鍵算法/流程 146
5.10 HBase的安裝和配置 149
5.11 HBase使用例子 151
第3篇 Key/Value NoSQL系統(tǒng)
第6章 Dynamo:Amazon的高可用鍵值對(duì)存儲(chǔ) 156
6.1 簡(jiǎn)介 156
6.2 背景 157
6.2.1 系統(tǒng)假設(shè)和要求 158
6.2.2 服務(wù)水平協(xié)議(SLA) 158
6.2.3 設(shè)計(jì)考慮 160
6.3 系統(tǒng)架構(gòu) 161
6.3.1 系統(tǒng)接口 162
6.3.2 劃分算法 162
6.3.3 復(fù)制 163
6.3.4 版本的數(shù)據(jù) 163
6.3.5 執(zhí)行g(shù)et()和put()操作 165
6.3.6 故障處理:暗示移交(Hinted Handoff) 166
6.3.7 處理永久性故障:副本同步 167
6.3.8 會(huì)員和故障檢測(cè) 167
6.3.9 添加/刪除存儲(chǔ)節(jié)點(diǎn) 169
6.4 實(shí)現(xiàn) 169
6.5 Amazon使用的經(jīng)驗(yàn)與教訓(xùn) 170
6.5.1 平衡性能和耐久性 171
6.5.2 確保均勻的負(fù)載分布 172
6.5.3 不同版本:何時(shí)以及有多少 175
6.5.4 客戶端驅(qū)動(dòng)或服務(wù)器驅(qū)動(dòng)協(xié)調(diào) 176
6.5.5 權(quán)衡后臺(tái)和前臺(tái)任務(wù) 177
6.5.6 討論 177
6.6 結(jié)論 178
第7章 LevelDb——出自Google的 Key-Value數(shù)據(jù)庫(kù) 179
7.1 LevelDb簡(jiǎn)介 179
7.2 LevelDb的靜態(tài)部分 180
7.2.1 整體架構(gòu) 180
7.2.2 log文件 182
7.2.3 SSTable文件 183
7.2.4 MemTable詳解 186
7.3 LevelDb的動(dòng)態(tài)部分 187
7.3.1 寫入與刪除記錄 187
7.3.2 讀取記錄 188
7.3.3 Compaction操作 190
7.3.4 LevelDb中的Cache 192
7.3.5 Version、VersionEdit和VersionSet 194
第8章 Redis實(shí)戰(zhàn) 195
8.1 Redis安裝與準(zhǔn)備 195
8.1.1 下載與安裝 195
8.1.2 配置文件修改 196
8.1.3 啟動(dòng)Redis 197
8.1.4 停止Redis 198
8.2 Redis所支持的數(shù)據(jù)結(jié)構(gòu) 198
8.2.1 String 199
8.2.2 List 203
8.2.3 Set 207
8.2.4 Hash/哈希/散列 210
8.2.5 有序集合/Zset 213
8.3 Key操作命令 218
8.3.1 概述 218
8.3.2 命令示例 220
8.4 事物 223
8.4.1 事物概述 223
8.4.2 相關(guān)命令 223
8.4.3 命令示例 224
8.4.4 WATCH命令和基于CAS的樂觀鎖 225
8.5 Redis的主從復(fù)制 226
8.5.1 Redis的Replication 226
8.5.2 Replication的工作原理 227
8.5.3 如何配置Replication 227
8.5.4 應(yīng)用示例 228
8.6 Redis的持久化 228
8.6.1 持久化機(jī)制 228
8.6.2 RDB機(jī)制的優(yōu)勢(shì)和劣勢(shì) 229
8.6.3 AOF機(jī)制的優(yōu)勢(shì)和劣勢(shì) 229
8.6.4 其他 230
8.7 Redis的虛擬內(nèi)存 231
8.7.1 簡(jiǎn)介 231
8.7.2 應(yīng)用場(chǎng)景 231
8.7.3 配置 231
8.8 pipeline/管線 233
8.8.1 請(qǐng)求應(yīng)答協(xié)議和RTT 233
8.8.2 管線(pipelining) 233
8.8.3 Benchmark 234
8.9 實(shí)例 234
第4篇 文檔型NoSQL系統(tǒng)
第9章 面向文檔的數(shù)據(jù)庫(kù)CouchDB 240
9.1 CouchDB介紹 240
9.1.1 基本概念 240
9.1.2 擴(kuò)展概念 241
9.2 CouchDB安裝與配置 241
9.3 REST API 242
9.3.1 數(shù)據(jù)庫(kù)REST API 243
9.3.2 文檔REST API 243
9.3.3 視圖 REST API 243
9.3.4 附件 REST API 244
9.4 為應(yīng)用建模 244
9.4.1 描述實(shí)體 244
9.4.2 描述一對(duì)一和一對(duì)多關(guān)系 245
9.4.3 描述多對(duì)多關(guān)系 246
9.5 實(shí)戰(zhàn)開發(fā) 247
9.5.1 開發(fā)Web應(yīng)用 247
9.5.2 使用CouchDB jQuery插件 248
9.5.3 示例應(yīng)用建模 249
9.5.4 管理文檔 250
9.5.5 視圖 253
9.6 高級(jí)話題 259
9.6.1 權(quán)限控制與安全 259
9.6.2 文檔更新校驗(yàn) 259
9.6.3 分組 259
9.6.4 鍵的排序 260
第10章 MongoDB實(shí)戰(zhàn) 261
10.1 為什么要使用MongoDB 261
10.1.1 不能確定的表結(jié)構(gòu)信息 261
10.1.2 序列化可以解決一切問題嗎 261
10.1.3 無需定義表結(jié)構(gòu)的數(shù)據(jù)庫(kù) 262
10.2 MongoDB的優(yōu)勢(shì)和不足 262
10.2.1 無表結(jié)構(gòu) 262
10.2.2 容易擴(kuò)展 263
10.2.3 豐富的功能 263
10.2.4 性能卓越 264
10.2.5 簡(jiǎn)便的管理 264
10.2.6 MongoDB的不足 264
10.3 基本概念 264
10.4 Linux下MongoDB的安裝和配置、啟動(dòng)和停止 265
10.4.1 下載 265
10.4.2 安裝 266
10.4.3 啟動(dòng)數(shù)據(jù)庫(kù) 267
10.4.4 停止數(shù)據(jù)庫(kù) 269
10.5 創(chuàng)建、更新及刪除文檔 270
10.5.1 連接數(shù)據(jù)庫(kù) 270
10.5.2 插入記錄 270
10.5.3 _id key 272
10.5.4 修改記錄 272
10.5.5 刪除記錄 272
10.6 查詢記錄 273
10.6.1 普通查詢 273
10.6.2 條件查詢 274
10.6.3 findOne()語(yǔ)法 274
10.6.4 通過limit限制結(jié)果集數(shù)量 274
10.7 高級(jí)查詢 275
10.7.1 條件操作符 275
10.7.2 $all匹配所有 275
10.7.3 $exists判斷字段是否存在 276
10.7.4 Null值處理 276
10.7.5 $mod取模運(yùn)算 276
10.7.6 $ne不等于 277
10.7.7 $in包含 277
10.7.8 $nin不包含 278
10.7.9 $size數(shù)組元素個(gè)數(shù) 278
10.7.10 正則表達(dá)式匹配 278
10.7.11 JavaScript查詢和$where查詢 279
10.7.12 count查詢記錄條數(shù) 279
10.7.13 skip限制返回記錄的起點(diǎn) 279
10.7.14 sort排序 280
10.7.15 游標(biāo) 280
10.8 MapReduce 281
10.8.1 Map 282
10.8.2 Reduce 282
10.8.3 Result 282
10.8.4 Finalize 283
10.8.5 Options 283
10.9 索引 284
10.9.1 基礎(chǔ)索引 284
10.9.2 文檔索引 285
10.9.3 組合索引 285
10.9.4 唯一索引 285
10.9.5 強(qiáng)制使用索引 286
10.9.6 刪除索引 287
10.10 性能優(yōu)化 287
10.10.1 explain執(zhí)行計(jì)劃 287
10.10.2 優(yōu)化器Profile 288
10.10.3 性能優(yōu)化舉例 289
10.11 性能監(jiān)控 290
10.11.1 mongosniff 291
10.11.2 Mongostat 292
10.11.3 db.serverStatus 292
10.11.4 db.stats 294
10.11.5 第三方工具 294
10.12 Replica Sets復(fù)制集 294
10.12.1 部署Replica Sets 295
10.12.2 主從操作日志oplog 297
10.12.3 主從配置信息 298
10.12.4 管理維護(hù)Replica Sets 299
10.12.5 增減節(jié)點(diǎn) 301
10.13 Sharding分片 305
10.13.1 建立Sharding Cluster 306
10.13.2 管理維護(hù)Sharding 308
10.14 Replica Sets和Sharding的結(jié)合 313
10.14.1 創(chuàng)建數(shù)據(jù)目錄 314
10.14.2 配置Replica Sets 314
10.14.3 配置3臺(tái)Route Process 316
10.14.4 配置Shard Cluster 316
10.14.5 驗(yàn)證Sharding正常工作 317
第5篇 MySQL基礎(chǔ)與性能優(yōu)化
第11章 MySQL基礎(chǔ) 320
11.1 CentOS 6.5下MySQL的安裝 320
11.2 MySQL基本命令 322
11.3 MySQL數(shù)據(jù)類型 325
11.3.1 整型 325
11.3.2 浮點(diǎn)型 326
11.3.3 定點(diǎn)數(shù) 326
11.3.4 字符串(char,varchar,xxxtext) 326
11.3.5 二進(jìn)制數(shù)據(jù) 327
11.3.6 日期時(shí)間類型 327
11.3.7 數(shù)據(jù)類型的屬性 327
11.4 創(chuàng)建數(shù)據(jù)庫(kù)和表 328
11.5 檢索表中的數(shù)據(jù) 331
11.6 多個(gè)表的操作 334
第12章 MySQL高級(jí)特性與性能優(yōu)化 338
12.1 MySQL Server系統(tǒng)架構(gòu) 338
12.1.1 邏輯模塊組成 338
12.1.2 各模塊工作配合 341
12.2 存儲(chǔ)引擎 343
12.2.1 MySQL存儲(chǔ)引擎概述 343
12.2.2 MyISAM存儲(chǔ)引擎簡(jiǎn)介 344
12.2.3 Innodb 存儲(chǔ)引擎簡(jiǎn)介 346
12.3 MySQL中的鎖定機(jī)制 347
12.3.1 MySQL中鎖定機(jī)制概述 347
12.3.2 合理利用鎖機(jī)制優(yōu)化MySQL 349
12.4 索引與優(yōu)化 350
12.4.1 選擇索引的數(shù)據(jù)類型 351
12.4.2 索引入門 351
12.4.3 索引的類型 352
12.4.4 高性能的索引策略 353
12.4.5 索引與加鎖 358
12.5 MySQL的MyISAM和Innodb的Cache優(yōu)化 359
12.5.1 MyISAM存儲(chǔ)引擎的Cache優(yōu)化 359
12.5.2 Innodb緩存相關(guān)優(yōu)化 362
12.6 MySQL的復(fù)制 364
12.6.1 復(fù)制對(duì)于可擴(kuò)展性的意義 364
12.6.2 復(fù)制的原理 365
12.6.3 體驗(yàn)MySQL復(fù)制 366
12.6.4 復(fù)制的常用拓?fù)浣Y(jié)構(gòu) 370
12.7 可擴(kuò)展性設(shè)計(jì)之?dāng)?shù)據(jù)切分 375
12.7.1 何謂數(shù)據(jù)切分 375
12.7.2 數(shù)據(jù)的垂直切分 375
12.7.3 數(shù)據(jù)的水平切分 377
12.7.4 垂直與水平聯(lián)合切分的使用 379
12.7.5 數(shù)據(jù)切分及整合方案 381
12.7.6 數(shù)據(jù)切分與整合中可能存在的問題 386
12.8 小結(jié)
作者介紹