奠定大數據的基石: NoSQL資料庫技術
作者 | 皮雄軍 |
---|---|
出版社 | 佳魁資訊股份有限公司 |
商品描述 | 奠定大數據的基石: NoSQL資料庫技術:騰訊前資深後台工程師力作,大數據時代必讀佳作!本書特色1.對NoSQL系統的理論進行深入淺出的分析,深入說明三種NoSQL系統:列式的、K |
作者 | 皮雄軍 |
---|---|
出版社 | 佳魁資訊股份有限公司 |
商品描述 | 奠定大數據的基石: NoSQL資料庫技術:騰訊前資深後台工程師力作,大數據時代必讀佳作!本書特色1.對NoSQL系統的理論進行深入淺出的分析,深入說明三種NoSQL系統:列式的、K |
內容簡介 騰訊前資深後台工程師力作,大數據時代必讀佳作! 1. 對NoSQL 系統的理論進行深入淺出的分析,深入說明三種NoSQL 系統:列式的、Key Value 的和文件類型,並說明MySQL 的效能最佳化。2. 對Hadoop HBase、MongoDB和Redis這三種NoSQL 系統都列出具體實作3. 詳細講述了NoSQL的分類及各類NoSQL系統的適用場景,為讀者在實際開發中的技術選型提供良好的指導。適合:沒有基礎的NoSQL 初學者、 網際網路公司高平行處理系統的後台開發人員、巨量資料、NoSQL 開發同好、中級程式設計師、大專院校師生、相關教育培訓班的學員。官網提供下載
作者介紹 ■作者簡介皮雄軍平台開發者和研究者、開源精神的忠實擁護者。曾擔任騰訊、三星等知名公司資深後台工程師。在NoSQL原理、技術選型和開發方面具豐富的實戰經驗和成功案例。
產品目錄 前言Chapter 01 NoSQL 與大數據簡介1.1 引子 —— NoSQL 在中國大陸使用的案例1.1.1 新浪微博1.1.2 淘寶資料平台1.1.3 視覺中國網站1.1.4 優酷營運資料分析1.1.5 飛信空間1.1.6 豆瓣社區1.2 大數據1.2.1 大數據的度量單位1.2.2 大數據的特點1.3 大數據相關技術1.3.1 大數據擷取技術1.3.2 大數據前置處理技術1.3.3 大數據儲存及管理技術1.3.4 大數據分析及採擷技術1.3.5 大數據展現與應用技術1.4 NoSQL 簡介1.4.1 什麼是NoSQL1.4.2 關聯式資料庫簡史1.4.3 資料庫分類1.4.4 關聯式資料庫的優勢1.4.5 不擅長的處理1.4.6 NoSQL 資料庫1.5 NoSQL 資料庫的類型1.5.1 鍵值(Key Value)儲存1.5.2 針對文件的資料庫1.5.3 針對列的資料庫1.6 如何使用和學習NoSQL 資料庫1.6.1 始終只是一種選擇1.6.2 在何種程度上信賴它1.7 雲端資料管理Chapter 02 NoSQL 的資料一致性2.1 傳統關聯式資料庫中的ACID2.1.1 最小性2.1.2 一致性2.1.3 隔離性2.1.4 持久性2.1.5 舉例2.2 CAP 理論2.2.1 NoSQL 系統是分散式系統2.2.2 CAP 理論說明2.3 AP 的實例 —— DNS 系統2.3.1 DNS 系統2.3.2 DNS 域名解析過程2.3.3 DNS 系統是最後一致性的2.4 資料一致性模型與BASE2.4.1 資料一致性模型2.4.2 BASE(Basically Available,Soft-state,Eventual consistency)2.5 資料一致性實現方法2.5.1 Quorum 系統NRW 策略2.5.2 時間戳記策略2.5.3 向量時鐘Chapter 03 NoSQL 的水平擴充與其他基礎知識3.1 所有資料儲存在一個伺服器上3.2 分片(Sharding)3.3 主從複製3.4 對等(Peer To Peer)複製3.5 複製和分片的同時使用3.6 資料水平擴充的方法歸納3.7 分片對資料的劃分方式3.7.1 Range-Based Partitioning3.7.2 Round-Robin3.8 一致性hash 演算法(Consistent Hashing)3.8.1 基本場景3.8.2 hash 演算法和單調性3.8.3 Consistent Hashing 演算法的原理3.8.4 虛擬節點3.9 磁碟的讀寫特點及五分鐘法則3.9.1 磁軌、磁區、磁柱和磁頭數3.9.2 固態硬碟(SSD):隨機讀寫速度快3.9.3 記憶體:讀寫速度極快3.9.4 五分鐘法則3.10 不要刪除資料Chapter 04 BigTable 與Google 雲端運算原理4.1 雲端運算4.1.1 雲端運算的概念4.1.2 雲端運算發展現狀4.1.3 雲端運算實現機制4.1.4 網格計算與雲端運算4.2 Google 檔案系統GFS4.2.1 系統架構4.2.2 容錯機制4.2.3 系統管理技術4.3 平行資料處理MapReduce4.3.1 產生背景4.3.2 程式設計模型4.3.3 實現機制4.4 分散式鎖服務Chubby4.4.1 Paxos 演算法4.4.2 Chubby 系統設計4.4.3 Chubby 檔案系統4.4.4 通訊協定4.4.5 正確性與效能4.5 分散式結構化資料表BigTable4.5.1 設計動機與目標4.5.2 資料模型4.5.3 系統架構4.5.4 主要伺服器4.5.5 子表伺服器4.5.6 效能最佳化Chapter 05 Google 雲端運算的開放原始碼版本——Hadoop5.1 Hadoop 簡介5.1.1 Hadoop 發展史5.1.2 Apache Hadoop 專案及系統結構5.2 Hadoop 產生的原因5.2.1 巨量的資料5.2.2 資料的儲存和分析5.3 Hadoop 和其他系統的比較5.3.1 和關聯式資料庫管理系統(RDBMS)的比較5.3.2 和網格計算的比較5.4 HDFS 的架構設計5.4.1 前提和設計目標5.4.2 Namenode 和Datanode5.4.3 檔案系統的Namespace5.4.4 資料複製5.4.5 檔案系統中繼資料的持久化5.4.6 通訊協定5.4.7 穩固性5.4.8 資料組織5.4.9 可存取性5.4.10 空間的回收5.5 安裝Hadoop5.5.1 安裝JDK 1.75.5.2 安裝Hadoop5.6 HDFS 操作5.6.1 使用FS Shell 指令操作HDFS5.6.2 程式設計讀寫HDFS5.7 Hadoop 中的MapReduce 模型5.7.1 MapReduce 計算模型5.7.2 Hadoop 中的Hello World 程式5.7.3 執行MapReduce 程式5.7.4 Hadoop 中的Hello World 程式——新的API5.7.5 MapReduce 的資料流程和控制流5.8 Zookeeper5.8.1 Zookeeper 設定安裝5.8.2 Zookeeper 的資料模型5.8.3 Zookeeper 的基本使用5.8.4 ZooKeeper 典型的應用場景5.8.5 統一命名服務(Name Service)5.8.6 共用鎖(Locks)5.8.7 佇列管理5.8.8 Zookeeper 歸納5.9 HBase5.9.1 簡介5.9.2 邏輯視圖5.9.3 實體儲存5.9.4 系統架構5.9.5 關鍵演算法 流程5.10 HBase 的安裝和設定5.11 HBase 使用實例Chapter 06 Dynamo:Amazon 的高可用鍵值對儲存6.1 簡介6.2 背景6.2.1 系統假設和要求6.2.2 服務水準協定(SLA)6.2.3 設計考慮6.3 系統架構6.3.1 系統介面6.3.2 劃分演算法6.3.3 複製6.3.4 版本的資料6.3.5 執行get() 和put() 操作6.3.6 故障處理:暗示移交(Hinted Handoff)6.3.7 處理永久性故障:備份同步6.3.8 會員和故障檢測6.3.9 增加 刪除儲存節點6.4 實現6.5 Amazon 使用的經驗與教訓6.5.1 平衡效能和耐久性6.5.2 確保均勻的負載分佈6.5.3 不同版本:何時以及有多少6.5.4 用戶端驅動或伺服器驅動協調6.5.5 權衡後台和前台工作6.5.6 討論6.6 結論Chapter 07 LevelDb——出自Google 的Key-Value 資料庫7.1 LevelDb 簡介7.2 LevelDb 的靜態部分7.2.1 整體架構7.2.2 log 檔案7.2.3 SSTable 檔案7.2.4 MemTable 詳解7.3 LevelDb 的動態部分7.3.1 寫入與刪除記錄7.3.2 讀取記錄7.3.3 Compaction 操作7.3.4 LevelDb 中的Cache7.3.5 Version、VersionEdit 和VersionSetChapter 08 Redis 實戰8.1 Redis 安裝與準備8.1.1 下載與安裝8.1.2 設定檔修改8.1.3 啟動Redis8.1.4 停止Redis8.2 Redis 所支援的資料結構8.2.1 String8.2.2 List8.2.3 Set8.2.4 Hash 雜湊 雜湊8.2.5 有序集合 Zset8.3 Key 操作指令8.3.1 概述8.3.2 指令範例8.4 事物8.4.1 事物概述8.4.2 相關指令8.4.3 指令範例8.4.4 WATCH 指令和以CAS 為基礎的樂觀鎖8.5 Redis 的主從複製8.5.1 Redis 的Replication8.5.2 Replication 的工作原理8.5.3 如何設定Replication8.5.4 應用範例8.6 Redis 的持久化8.6.1 持久化機制8.6.2 RDB 機制的優勢和劣勢8.6.3 AOF 機制的優勢和劣勢8.6.4 其他8.7 Redis 的虛擬記憶體8.7.1 簡介8.7.2 應用場景8.7.3 設定8.8 pipeline 管線8.8.1 請求回應協定和RTT8.8.2 管線(pipelining)8.8.3 Benchmark8.9 實例 .Chapter 09 針對文件的資料庫CouchDB9.1 CouchDB 介紹9.1.1 基本概念9.1.2 擴充概念9.2 CouchDB 安裝與設定9.3 REST API9.3.1 資料庫REST API9.3.2 文件REST API9.3.3 視圖REST API9.3.4 附件REST API9.4 為應用建模9.4.1 描述實體9.4.2 描述一對一和一對多關聯性9.4.3 描述多對多關係9.5 實戰開發9.5.1 開發Web 應用9.5.2 使用CouchDB jQuery 外掛程式9.5.3 範例應用建模9.5.4 管理文件9.5.5 視圖9.6 進階內容9.6.1 許可權控制與安全9.6.2 文件更新驗證9.6.3 分組9.6.4 鍵的排序Chapter 10 MongoDB 實戰10.1 為什麼要使用MongoDB10.1.1 不能確定的表結構資訊10.1.2 序列化可以解決一切問題嗎10.1.3 無需定義表結構的資料庫10.2 MongoDB 的優勢和不足10.2.1 無表結構10.2.2 容易擴充10.2.3 豐富的功能10.2.4 效能卓越10.2.5 簡便的管理10.2.6 MongoDB 的不足10.3 基本概念10.4 Linux 下MongoDB 的安裝和設定、啟動和停止10.4.1 下載10.4.2 安裝10.4.3 啟動資料庫10.4.4 停止資料庫10.5 建立、更新及刪除文件10.5.1 連接資料庫10.5.2 插入記錄10.5.3 _id key10.5.4 修改記錄10.5.5 刪除記錄10.6 查詢記錄10.6.1 普通查詢10.6.2 條件查詢10.6.3 findOne() 語法10.6.4 透過limit 限制結果集數量10.7 高級查詢10.7.1 條件運算符號10.7.2 $all 比對所有10.7.3 $exists 判斷欄位是否存在10.7.4 Null 值處理10.7.5 $mod 取模運算10.7.6 $ne 不等於10.7.7 $in 包含10.7.8 $nin 不包含10.7.9 $size 陣列元素個數10.7.10 正規表示法比對10.7.11 JavaScript 查詢和$where 查詢10.7.12 count 查詢記錄筆數10.7.13 skip 限制傳回記錄的起點10.7.14 sort 排序10.7.15 游標10.8 MapReduce10.8.1 Map10.8.2 Reduce10.8.3 Result10.8.4 Finalize10.8.5 Options10.9 索引10.9.1 基礎索引10.9.2 文件索引10.9.3 組合索引10.9.4 唯一索引10.9.5 強制使用索引310.9.6 刪除索引10.10 性能優化10.10.1 explain 執行計畫10.10.2 最佳化器Profile10.10.3 效能最佳化舉例10.11 性能監控10.11.1 mongosniff10.11.2 Mongostat10.11.3 db.serverStatus10.11.4 db.stats10.11.5 協力廠商工具10.12 Replica Sets 複製集10.12.1 部署Replica Sets10.12.2 主從操作記錄檔oplog10.12.3 主從設定資訊10.12.4 管理維護Replica Sets10.12.5 增減節點10.13 Sharding 分片10.13.1 建立Sharding Cluster10.13.2 管理維護Sharding10.14 Replica Sets 和Sharding 的結合10.14.1 建立資料目錄10.14.2 設定Replica Sets10.14.3 設定3 台Route Process10.14.4 設定Shard Cluster10.14.5 驗證Sharding 正常執行Chapter 11 MySQL 基礎11.1 CentOS 6.5 下MySQL 的安裝11.2 MySQL 基本指令11.3 MySQL 資料類型11.3.1 整數11.3.2 浮點數11.3.3 定點數11.3.4 字串(char,varchar,xxxtext)11.3.5 二進位資料11.3.6 日期時間類型11.3.7 資料類型的屬性11.4 建立資料庫和表11.5 檢索表中的資料11.6 多個表的操作Chapter12 MySQL 進階特性與效能最佳化12.1 MySQL Server 系統架構12.1.1 邏輯模組成12.1.2 各模組工作配合12.2 儲存引擎12.2.1 MySQL 儲存引擎概述12.2.2 MyISAM 儲存引擎簡介12.2.3 Innodb 儲存引擎簡介12.3 MySQL 中的鎖定機制12.3.1 MySQL 中鎖定機制概述12.3.2 合理利用鎖機制最佳化MySQL12.4 索引與最佳化12.4.1 選擇索引的資料類型12.4.2 索引入門12.4.3 索引的類型12.4.4 高性能的索引策略12.4.5 索引與加鎖12.5 MySQL 的MyISAM 和Innodb 的Cache 最佳化12.5.1 MyISAM 儲存引擎的Cache 最佳化12.5.2 Innodb 快取相關最佳化12.6 MySQL 的複製12.6.1 複製對於可擴充性的意義12.6.2 複製的原理12.6.3 體驗MySQL 複製12.6.4 複製的常用拓撲結構12.7 可擴充性設計之資料切分12.7.1 何謂資料切分12.7.2 資料的垂直切分12.7.3 資料的水平切分12.7.4 垂直與水平聯合切分的使用12.7.5 資料切分及整合方案12.7.6 資料切分與整合中可能存在的問題12.8 小結
書名 / | 奠定大數據的基石: NoSQL資料庫技術 |
---|---|
作者 / | 皮雄軍 |
簡介 / | 奠定大數據的基石: NoSQL資料庫技術:騰訊前資深後台工程師力作,大數據時代必讀佳作!本書特色1.對NoSQL系統的理論進行深入淺出的分析,深入說明三種NoSQL系統:列式的、K |
出版社 / | 佳魁資訊股份有限公司 |
ISBN13 / | 9789863791621 |
ISBN10 / | 9863791628 |
EAN / | 9789863791621 |
誠品26碼 / | 2681065691006 |
頁數 / | 520 |
開數 / | 18K |
注音版 / | 否 |
裝訂 / | P:平裝 |
語言 / | 1:中文 繁體 |
級別 / | N:無 |
提供維修 / | 無 |
內文 : 前言
「資料是21 世紀最有價值的資產,它比黃金和石油更有價值」。隨著大數據時代的來臨,傳統的關聯式資料庫在可擴充性、資料模型和可用性方面遇到了難以克服的障礙。此時各種NoSQL 系統出現了。它們的特點各不相同,分別應用於不同的場景並迅速獲得了極大的成功。作為一名從事後台開發多年的工作者,我對每一種新技術的出現與應用都充滿了渴望與期待,其中NoSQL 解決了我實際工作中遇到的許多問題。NoSQL 具有下面幾方面的優點:
1. 靈活的可擴充性
多年以來,資料庫管理員們都是透過「垂直擴充」的方式(當資料庫的負載增加的時候,購買更大型的伺服器來承載增加的負載)來進行擴充的,而非透過「水平擴充」的方式(當資料庫負載增加的時候,在多台主機上分配增加的負載)來進行擴充。但是,隨著請求量和可用性需求的增加,資料庫也正在移轉到雲端或虛擬化環境中,「水平擴充」的經濟優勢變得更加明顯了,對各大企業來說,這種「誘惑」是無法抗拒的。
要對RDBMS(關聯式資料庫,例如Oracle)做「水平擴充」,並不是很容易。但是各種新類型的NoSQL 資料庫主要是為了進行透明的擴充,來利用新節點而設計的,而且,它們通常都是為了低成本的commodity hardware 而設計的。
2. 輕鬆應對大數據
在過去的十年裡,正如請求量發生了天翻地覆的增長一樣,需要儲存的資料量也發生了急劇的膨脹。為了滿足資料量增長的需要,RDBMS 的容量也在日益增加,但是,對一些企業來說,隨著請求量的增加,單一資料庫能夠管理的資料量也變得越來越讓人無法忍受了。現在,大量的「大數據」可以透過NoSQL 系統(如MongoDB)來處理,它們能夠處理的資料量遠遠超出了最大型的RDBMS 所能處理的極限。
3. 維護簡單
在過去的幾年裡,雖然一些RDBMS 供應商們聲稱在可管理性方面做出了很多的改進,但是高階的RDBMS 系統維護起來十分昂貴,而且還需要訓練有素的DBA 們的協助。DBA 們需要親自參與高階的RDBMS 系統的設計、安裝和最佳化。
NoSQL 資料庫從一開始就是為了降低管理方面的要求而設計的:從理論上來說,自動修復,資料分配和簡單的資料模型的確可以讓管理和最佳化方面的要求降低很多。
4. 經濟
NoSQL 資料庫通常使用廉價的Commodity Servers 叢集來管理膨脹的資料和請求量,而RDBMS 通常需要依靠昂貴的專有伺服器和儲存系統來做到這一點。使用NoSQL,每GB 的成本或每秒處理的請求的成本都比使用RDBMS 的成本少很多,這可以讓企業花費更低的成本儲存和處理更多的資料。
5. 靈活的資料模型
對大型的生產性RDBMS 來說,變更管理是一件很令人頭痛的事情。即使只對一個RDBMS 的資料模型做出很小的改動,也必須要十分小心的管理,也許還需要停機或降低服務水準。NoSQL 資料庫在資料模型約束方面是更加寬鬆的,甚至可以說並不存在資料模型的約束。NoSQL 的Key/Value 資料庫和文件類型資料庫可以讓應用程式在一個資料元素裡儲存任何結構的資料。即使是規定更加嚴格的以「大表」為基礎的NoSQL 資料庫(如HBase)通常也允許建立新列,這並不會造成什麼麻煩。
應用程式變更和資料庫綱要的變更並不需要作為一個複雜的變更單元來管理。從理論上來說,這可以讓應用程式反覆運算的更快,但是,很明顯,如果應用程式無法維護資料的完整性,那麼這也會帶來一些不良的副作用。
本書特色
1. 內容全面、新穎
本書內容全面而新穎,既對NoSQL 系統的理論進行深入淺出的分析,又深入說明了列式的、Key/Value 的和文件類型這三種NoSQL 系統,最後還說明了MySQL 的效能最佳化。
2. 說明由淺入深,循序漸進
如果你從來沒有用過NoSQL 系統,本書正適合你。並且由淺入深將各種NoSQL系統聯繫起來,並分析各自的相同點和不同點,讀完之後你一定會對NoSQL 系統有更多的認識。
3. 理論與實作並重
對NoSQL 系統的產生原因和理論基礎做了廣泛而深入的分析,讓讀者知其然,更知其所以然。書中儘量消除初學者學習NoSQL 系統時容易遇到的障礙,變抽象為實際,變複雜為簡單。而且重點對Hadoop/HBase、MongoDB 和Redis 這三種NoSQL 系統都列出了實際實作。
4. 圖文並茂,容易了解
針對NoSQL 系統中的一些架構和較難了解的概念,提供了大量的插圖,並結合實際文字來說明,非常直觀,更有利於讀者的學習與了解。
5. 語言通俗容易
不使用讓人難以了解的語言分析問題,而是採用通俗易懂的敘述說明NoSQL 系統的相關知識,讓讀者能夠真正了解NoSQL 技術,繼而在開發中使用這些技術。
本書原始程式碼取得方式
本書有關的原始程式碼,請讀者自行到www.topteam.cc 上資源下載區下載。
本書作者
雖然筆者花費了大量精力寫作,並力圖將疏漏減少到最少,但仍恐百密一疏。如果您在閱讀本書的過程中發現有任何疏漏,或對本書的說明有任何疑問,請發送電子郵件到[email protected]。