本書介紹了NoSQL數(shù)據(jù)庫生態(tài)圈體系,包括Redis、MongoDB和HBase,內(nèi)容涉及開發(fā)、運維、管理與架構(gòu)。“第1篇 基于內(nèi)存的NoSQL數(shù)據(jù)庫”(第1~5章)包括:內(nèi)存對象緩存技術(shù)Memcached、Redis基礎(chǔ)、Redis高級特性及原理、Redis集群與高可用和Redis故障診斷與優(yōu)化。“第2篇 基于文檔的NoSQL數(shù)據(jù)庫”(第6~10章)包括:MongoDB基礎(chǔ)、操作MongoDB的數(shù)據(jù)、MongoDB的數(shù)據(jù)建模、MongoDB的管理和MongoDB的集群。“第3篇 列式存儲NoSQL數(shù)據(jù)庫”(第11~15章)包括:HBase基礎(chǔ)、部署與操作HBase、HBase原理剖析、HBase的高級特性和監(jiān)控與優(yōu)化HBase集群。
趙渝強(qiáng),曾任京東大學(xué)大數(shù)據(jù)學(xué)院院長、Oracle(中國)高級技術(shù)顧問,現(xiàn)專職從事培訓(xùn)工作。出版了《大數(shù)據(jù)原理與實戰(zhàn)》《Kafka進(jìn)階》等書。
==第1篇 基于內(nèi)存的NoSQL數(shù)據(jù)庫
第1章 內(nèi)存對象緩存技術(shù)Memcached /2
★1.1 Memcached基礎(chǔ) /2
1.1.1 Memcached的體系架構(gòu) /2
1.1.2 Memcached的數(shù)據(jù)存儲方式 /3
★1.2 使用Memcached在內(nèi)存中緩存數(shù)據(jù) /3
1.2.1 【實戰(zhàn)】在CentOS上部署Memcached /4
1.2.2 【實戰(zhàn)】使用Telnet操作Memcached /6
1.2.3 【實戰(zhàn)】使用Java操作Memcached /10
1.2.4 【實戰(zhàn)】實現(xiàn)Memcached的客戶端路由 /12
★1.3 Memcached集群 /16
1.3.1 【實戰(zhàn)】部署Memcached的“主主復(fù)制”集群 /16
1.3.2 【實戰(zhàn)】使用KeepAlived實現(xiàn)Memcached的高可用 /19
第2章 Redis基礎(chǔ) /25
★2.1 Redis入門 /25
2.1.1 緩存的架構(gòu) /26
2.1.2 Redis的優(yōu)勢 /27
2.1.3 Redis與其他Key-Value數(shù)據(jù)庫有何不同 /27
2.1.4 一個典型的Redis應(yīng)用案例——記錄用戶的登錄次數(shù),查詢活躍用戶 /27
★2.2 Redis的安裝和訪問 /29
★2.3 Redis的數(shù)據(jù)結(jié)構(gòu) /32
2.3.1 簡單動態(tài)字符串 /32
2.3.2 跳躍表 /33
2.3.3 壓縮列表 /35
2.3.4 整數(shù)集合 /36
2.3.5 字典 /37
2.3.6 快表 /38
2.3.7 Stream /40
2.3.8 HyperLogLog /42
2.3.9 RedisObject /43
★2.4 Redis的存儲結(jié)構(gòu) /43
★2.5 鍵管理 /45
2.5.1 鍵管理的基本操作 /45
2.5.2 【實戰(zhàn)】遍歷鍵 /49
2.5.3 【實戰(zhàn)】遷移鍵 /53
第3章 Redis高級特性及原理 /56
★3.1 消息的發(fā)布與訂閱 /56
3.1.1 “發(fā)布者-訂閱者”模式 /56
3.1.2 “生產(chǎn)者-消費者”模式 /59
★3.2 Redis的事務(wù) /60
3.2.1 【實戰(zhàn)】使用命令操作Redis的事務(wù) /61
3.2.2 【實戰(zhàn)】在事務(wù)操作中使用watch功能 /61
3.2.3 【實戰(zhàn)】使用Java API操作Redis的事務(wù) /62
★3.3 數(shù)據(jù)持久化 /63
3.3.1 RDB持久化 /63
3.3.2 AOF持久化 /66
★3.4 使用PipeLine優(yōu)化請求的傳遞 /69
★3.5 慢查詢?nèi)罩? /71
3.5.1 慢查詢的配置參數(shù) /72
3.5.2 【實戰(zhàn)】管理和使用慢查詢?nèi)罩? /73
3.5.3 慢查詢?nèi)罩咀罴褜嵺` /74
★3.6 Lua腳本編程語言 /75
3.6.1 Lua基礎(chǔ) /75
3.6.2 【實戰(zhàn)】使用Lua腳本實現(xiàn)限流 /76
第4章 Redis集群與高可用 /79
★4.1 Redis主從復(fù)制 /79
4.1.1 部署Redis主從復(fù)制 /80
4.1.2 Redis主從復(fù)制的源碼剖析 /82
★4.2 基于哨兵的高可用架構(gòu) /84
4.2.1 部署Redis哨兵 /84
4.2.2 哨兵的主要配置參數(shù) /86
4.2.3 哨兵的工作原理 /87
★4.3 Redis Cluster集群 /90
4.3.1 什么是Redis Cluster集群 /90
4.3.2 Redis Cluster集群的體系架構(gòu) /90
4.3.3 部署Redis Cluster集群 /92
4.3.4 【實戰(zhàn)】操作與管理Redis Cluster集群 /96
4.3.5 【實戰(zhàn)】實現(xiàn)Redis Cluster集群的代理分片 /101
★4.4 Codis集群 /103
4.4.1 Codis集群的體系架構(gòu) /104
4.4.2 部署Codis集群 /105
4.4.3 【實戰(zhàn)】基于Codis集群的主從復(fù)制 /109
4.4.4 【實戰(zhàn)】基于Codis集群的數(shù)據(jù)分布式存儲 /112
第5章 Redis故障診斷與優(yōu)化 /115
★5.1 監(jiān)控Redis /115
5.1.1 監(jiān)控Redis的內(nèi)存 /115
5.1.2 監(jiān)控Redis的吞吐量 /116
5.1.3 監(jiān)控Redis的運行時信息 /116
5.1.4 監(jiān)控Redis的延時 /117
★5.2 刪除策略和淘汰策略 /120
5.2.1 內(nèi)存的刪除策略 /120
5.2.2 內(nèi)存的淘汰策略 /122
★5.3 Hot Key /124
5.3.1 監(jiān)控Hot Key /124
5.3.2 Hot Key的常見處理辦法 /125
★5.4 Big Key /125
★5.5 緩存的更新策略 /126
5.5.1 “maxmemory-policy更新”策略 /126
5.5.2 “超時更新”策略 /126
5.5.3 “主動更新”策略 /126
★5.6 緩存與數(shù)據(jù)庫的數(shù)據(jù)一致性 /127
5.6.1 數(shù)據(jù)一致性案例分析 /127
5.6.2 延時雙刪策略 /128
5.6.3 異步更新緩存 /129
★5.7 分布式鎖 /129
★5.8 Redis緩存的常見問題 /131
5.8.1 提高緩存命中率 /131
5.8.2 緩存預(yù)熱 /131
5.8.3 緩存穿透 /132
5.8.4 緩存雪崩 /132
5.8.5 緩存擊穿 /133
==第2篇 基于文檔的NoSQL數(shù)據(jù)庫
第6章 MongoDB基礎(chǔ) /136
★6.1 MongoDB簡介 /136
★6.2 部署和使用MongoDB /137
6.2.1 【實戰(zhàn)】在CentOS上安裝MongoDB 5.0 /137
6.2.2 【實戰(zhàn)】使用配置文件啟動MongoDB服務(wù)器 /139
6.2.3 【實戰(zhàn)】使用JavaScript命令行工具mongoshell /141
6.2.4 【實戰(zhàn)】使用MongoDB圖形化工具M(jìn)ongoDB Compass /145
★6.3 MongoDB中的數(shù)據(jù)類型 /148
6.3.1 ObjectId類型 /148
6.3.2 日期類型 /149
6.3.3 數(shù)值類型 /149
6.3.4 其他數(shù)據(jù)類型 /151
★6.4 MongoDB的體系結(jié)構(gòu) /152
6.4.1 邏輯存儲結(jié)構(gòu) /152
6.4.2 物理存儲結(jié)構(gòu) /153
★6.5 MongoDB的存儲引擎 /154
6.5.1 WiredTiger存儲引擎 /154
6.5.2 MMAP v1存儲引擎 /159
6.5.3 In-Memory存儲引擎 /161
★6.6 MongoDB的日志——Journal日志 /163
第7章 操作MongoDB中的數(shù)據(jù) /164
★7.1 使用DML語句操作數(shù)據(jù) /164
7.1.1 使用insert語句插入文檔 /164
7.1.2 使用update語句更新文檔 /166
7.1.3 使用delete語句刪除文檔 /167
7.1.4 批處理操作 /168
★7.2 使用DQL語句查詢數(shù)據(jù) /169
7.2.1 【實戰(zhàn)】基本查詢 /169
7.2.2 【實戰(zhàn)】查詢嵌套的文檔 /171
7.2.3 【實戰(zhàn)】查詢數(shù)組中的文檔 /173
7.2.4 【實戰(zhàn)】查詢數(shù)組中嵌套的文檔 /174
7.2.5 【實戰(zhàn)】查詢空值和缺失的列 /175
7.2.6 【實戰(zhàn)】使用游標(biāo)查詢文檔 /176
★7.3 全文檢索 /177
7.3.1 【實戰(zhàn)】執(zhí)行全文索引 /178
7.3.2 【實戰(zhàn)】在全文檢索中聚合數(shù)據(jù) /179
★7.4 地理空間查詢 /181
★7.5 聚合操作 /182
7.5.1 【實戰(zhàn)】使用Pipeline方式聚合數(shù)據(jù) /182
7.5.2 【實戰(zhàn)】使用MapReduce方式聚合數(shù)據(jù) /184
7.6 MongoDB中的事務(wù) /189
第8章 MongoDB的數(shù)據(jù)建模 /190
★8.1 數(shù)據(jù)庫建模基礎(chǔ) /190
8.1.1 MongoDB的數(shù)據(jù)建模方式 /190
8.1.2 驗證MongoDB的數(shù)據(jù)文檔 /191
★8.2 MongoDB數(shù)據(jù)模型設(shè)計 /195
8.2.1 文檔的“一對一”關(guān)系模型 /195
8.2.2 文檔的“一對多”關(guān)系模型 /196
8.2.3 文檔的樹型模型 /196
★8.3 使用MongoDB的索引 /201
8.3.1 了解索引 /201
8.3.2 了解MongoDB中的索引 /202
8.3.3 【實戰(zhàn)】在查詢中使用單鍵索引 /205
8.3.4 【實戰(zhàn)】在查詢中使用多鍵索引 /206
8.3.5 【實戰(zhàn)】在查詢中使用復(fù)合索引 /207
8.3.6 【實戰(zhàn)】在查詢中使用過期索引 /210
8.3.7 【實戰(zhàn)】在查詢中使用全文索引 /212
8.3.8 【實戰(zhàn)】在查詢中使用地理空間索引 /213
第9章 MongoDB的管理 /216
★9.1 管理MongoDB的運行 /216
9.1.1 【實戰(zhàn)】啟動MongoDB服務(wù)器 /216
9.1.2 【實戰(zhàn)】停止MongoDB服務(wù)器 /218
★9.2 MongoDB的安全機(jī)制 /219
9.2.1 了解MongoDB的用戶認(rèn)證機(jī)制 /219
9.2.2 【實戰(zhàn)】啟用MongoDB的用戶認(rèn)證機(jī)制 /219
9.2.3 【實戰(zhàn)】在MongoDB中進(jìn)行用戶管理 /221
★9.3 基于角色的訪問控制 /223
9.3.1 了解MongoDB中的角色 /223
9.3.2 【實戰(zhàn)】基于角色控制用戶的訪問 /224
★9.4 MongoDB的審計功能 /227
9.4.1 與審計相關(guān)的參數(shù) /227
9.4.2 【實戰(zhàn)】審計功能舉例 /227
★9.5 監(jiān)控MongoDB的運行 /229
9.5.1 【實戰(zhàn)】通過命令行工具監(jiān)控MongoDB /229
9.5.2 【實戰(zhàn)】通過可視化工具Compass監(jiān)控MongoDB /232
★9.6 MongoDB的數(shù)據(jù)安全 /232
9.6.1 【實戰(zhàn)】導(dǎo)入/導(dǎo)出MongoDB的數(shù)據(jù) /232
9.6.2 【實戰(zhàn)】備份/恢復(fù)MongoDB的數(shù)據(jù) /235
第10章 MongoDB的集群 /238
★10.1 基于MongoDB復(fù)制集實現(xiàn)主從 同步 /238
10.1.1 MongoDB復(fù)制集基礎(chǔ) /238
10.1.2 部署MongoDB復(fù)制集 /240
10.1.3 管理MongoDB復(fù)制集 /247
10.1.4 【實戰(zhàn)】MongoDB復(fù)制集的選舉機(jī)制 /253
10.1.5 【實戰(zhàn)】Oplog日志和數(shù)據(jù)的同步 /255
10.1.6 【實戰(zhàn)】MongoDB的事務(wù) /257
★10.2 基于MongoDB分片實現(xiàn)數(shù)據(jù)的分布式存儲 /261
10.2.1 MongoDB分片架構(gòu) /261
10.2.2 【實戰(zhàn)】搭建MongoDB分片架構(gòu) /262
10.2.3 【實戰(zhàn)】查看配置服務(wù)器 /268
10.2.4 片鍵的選擇 /270
==第3篇 列式存儲NoSQL數(shù)據(jù)庫
第11章 HBase基礎(chǔ) /274
★11.1 大數(shù)據(jù)基礎(chǔ) /274
11.1.1 大數(shù)據(jù)的基本概念和特性 /274
11.1.2 大數(shù)據(jù)平臺要解決的核心問題 /276
11.1.3 數(shù)據(jù)倉庫與大數(shù)據(jù) /278
11.1.4 Hadoop生態(tài)圈 /279
★11.2 BigTable(大表)與HBase的數(shù)據(jù)模型 /281
★11.3 HBase的體系架構(gòu) /283
11.3.1 HMaster /284
11.3.2 Region Server /284
11.3.3 ZooKeeper /285
★11.4 部署Hadoop環(huán)境 /286
11.4.1 部署前的準(zhǔn)備 /287
11.4.2 Hadoop的目錄結(jié)構(gòu) /289
11.4.3 【實戰(zhàn)】部署Hadoop偽分布模式 /290
11.4.4 【實戰(zhàn)】部署Hadoop全分布模式 /295
第12章 部署與操作HBase /299
★12.1 在Linux上部署HBase環(huán)境 /299
12.1.1 部署HBase的本地模式 /299
12.1.2 部署HBase的偽分布模式 /301
12.1.3 部署HBase的全分布模式 /303
12.1.4 部署HBase的高可用模式 /305
★12.2 使用命令行操作HBase /307
12.2.1 【實戰(zhàn)】基礎(chǔ)操作 /307
12.2.2 【實戰(zhàn)】DDL操作 /308
12.2.3 【實戰(zhàn)】DML操作 /311
★12.3 HBase的Java API /313
12.3.1 【實戰(zhàn)】使用Java API操作HBase /313
12.3.2 【實戰(zhàn)】使用HBase的過濾器過濾數(shù)據(jù) /317
12.3.3 【實戰(zhàn)】使用MapReduce處理存儲在HBase中的數(shù)據(jù) /322
★12.4 HBase的圖形工具——Web控制臺 /325
第13章 HBase原理剖析 /327
★13.1 了解HBase的存儲結(jié)構(gòu) /327
13.1.1 HBase的邏輯存儲結(jié)構(gòu) /328
13.1.2 HBase的物理存儲結(jié)構(gòu) /329
13.1.3 LSM樹與Compaction機(jī)制 /333
★13.2 HBase讀數(shù)據(jù)的流程 /335
13.2.1 meta表與讀取過程 /335
13.2.2 讀合并與讀放大 /337
★13.3 HBase寫數(shù)據(jù)的流程 /338
★13.4 負(fù)載均衡和數(shù)據(jù)分發(fā)的最基本單元Region的管理 /339
13.4.1 Region的狀態(tài) /339
13.4.2 Region的拆分 /341
13.4.3 Region的合并 /342
13.4.4 Region拆分的影響 /342
★13.5 HBase的內(nèi)存刷新策略 /343
13.5.1 Region Server級別的刷新策略 /343
13.5.2 Region級別的刷新策略 /344
13.5.3 按照時間決定的刷新策略 /345
13.5.4 依據(jù)WAL文件數(shù)量的刷新策略 /345
★13.6 了解HBase的Rowkey /346
13.6.1 Rowkey的設(shè)計原則 /346
13.6.2 HBase表的熱點 /347
第14章 HBase的高級特性 /348
★14.1 【實戰(zhàn)】使用多版本保存數(shù)據(jù) /348
★14.2 【實戰(zhàn)】使用HBase的快照 /350
★14.3 【實戰(zhàn)】使用Bulk Loading方式導(dǎo)入數(shù)據(jù) /352
★14.4 HBase的訪問控制 /354
14.4.1 了解HBase的用戶權(quán)限管理 /354
14.4.2 【實戰(zhàn)】HBase的用戶權(quán)限管理 /355
★14.5 備份HBase的數(shù)據(jù) /357
14.5.1 【實戰(zhàn)】使用Export/Import備份數(shù)據(jù) /358
14.5.2 【實戰(zhàn)】使用CopyTable備份數(shù)據(jù) /360
★14.6 HBase的計數(shù)器 /361
14.6.1 【實戰(zhàn)】在hbase shell中使用計數(shù)器 /361
14.6.2 【實戰(zhàn)】在Java API中使用單計數(shù)器 /362
14.6.3 【實戰(zhàn)】在Java API中使用多計數(shù)器 /363
★14.7 布隆過濾器 /364
14.7.1 布隆過濾器的工作原理 /365
14.7.2 HBase中的布隆過濾器 /366
★14.8 【實戰(zhàn)】HBase的主從復(fù)制 /366
★14.9 在HBase中使用SQL /368
14.9.1 安裝和使用Phoenix /369
14.9.2 Phoenix與HBase的映射關(guān)系 /371
14.9.3 Phoenix中的索引 /372
14.9.4 【實戰(zhàn)】通過JDBC程序訪問Phoniex中的數(shù)據(jù) /376
第15章 監(jiān)控與優(yōu)化HBase集群 /380
★15.1 HBase集群的監(jiān)控指標(biāo) /380
15.1.1 主機(jī)監(jiān)控指標(biāo) /381
15.1.2 JVM監(jiān)控指標(biāo) /381
15.1.3 HMaster監(jiān)控指標(biāo) /383
15.1.4 Region Server監(jiān)控指標(biāo) /384
★15.2 利用可視化工具監(jiān)控HBase集群 /387
15.2.1 【實戰(zhàn)】使用Ganglia監(jiān)控HBase集群 /387
15.2.2 【實戰(zhàn)】使用JConsole監(jiān)控HBase集群 /391
15.2.3 【實戰(zhàn)】使用JVisualVM監(jiān)控HBase集群 /394
★15.3 HBase集群的優(yōu)化 /397
15.3.1 優(yōu)化HBase的數(shù)據(jù)管理 /397
15.3.2 優(yōu)化HBase的客戶端 /401
15.3.3 優(yōu)化HBase的配置 /402