Part1 NoSQL的兴起与理论基础 2
Chapter 01 NoSQL与大数据简介 2
1.1引子——NoSQL在中国大陆使用的案例 2
1.1.1新浪微博 2
1.1.2淘宝资料平台 3
1.1.3视觉中国网站 4
1.1.4优酷营运资料分析 5
1.1.5飞信空间 6
1.1.6豆瓣社区 7
1.2大数据 9
1.2.1大数据的度量单位 9
1.2.2大数据的特点 10
1.3大数据相关技术 12
1.3.1大数据撷取技术 12
1.3.2大数据前置处理技术 12
1.3.3大数据储存及管理技术 13
1.3.4大数据分析及采撷技术 13
1.3.5大数据展现与应用技术 14
1.4 NoSQL简介 15
1.4.1什么是NoSQL 15
1.4.2关联式资料库简史 15
1.4.3资料库分类 15
1.4.4关联式资料库的优势 17
1.4.5不擅长的处理 18
1.4.6 NoSQL资料库 21
1.5 NoSQL资料库的类型 23
1.5.1键值(Key/Value)储存 23
1.5.2针对文件的资料库 25
1.5.3针对列的资料库 25
1.6如何使用和学习NoSQL资料库 26
1.6.1始终只是一种选择 26
1.6.2在何种程度上信赖它 27
1.7云端资料管理 27
Chapter 02 NOSQL的资料一致性 29
2.1传统关联式资料库中的ACID 30
2.1.1最小性 30
2.1.2一致性 30
2.1.3隔离性 31
2.1.4持久性 31
2.1.5举例 31
2.2 CAP理论 32
2.2.1 NoSQL系统是分散式系统 32
2.2.2 CAP理论说明 33
2.3 AP的实例——DNS系统 35
2.3.1 DNS系统 35
2.3.2 DNS域名解析过程 35
2.3.3 DNS系统是最后一致性的 38
2.4资料一致性模型与BASE 38
2.4.1资料一致性模型 38
2.4.2 BASE(Basically Available,Soft-state,Eventual consistency) 40
2.5资料一致性实现方法 40
2.5.1 Quorum系统NRW策略 41
2.5.2时间戳记策略 42
2.5.3向量时钟 46
Chapter 03 NOSQL的水平扩充与其他基础知识 51
3.1所有资料储存在一个伺服器上 52
3.2分片(Sharding) 53
3.3主从复制 55
3.4对等(PeerTo Peer)复制 56
3.5复制和分片的同时使用 57
3.6资料水平扩充的方法归纳 58
3.7分片对资料的划分方式 58
3.7.1 Range-Based Partitioning 59
3.7.2 Round-Robin 62
3.8一致性hash演算法(Consistent Hashing) 63
3.8.1基本场景 63
3.8.2 hash演算法和单调性 64
3.8.3 Consistent Hashing演算法的原理 64
3.8.4虚拟节点 67
3.9磁碟的读写特点及五分钟法则 68
3.9.1磁轨、磁区、磁柱和磁头数 69
3.9.2固态硬碟(SSD)随机读写速度快 70
3.9.3记忆体:读写速度极快 70
3.9.4五分钟法则 71
3.10不要删除资料 71
Part2 列式NoSQL系统 73
Chapter 04 BigTable与Google云端运算原理 73
4.1云端运算 74
4.1.1云端运算的概念 74
4.1.2云端运算发展现状 78
4.1.3云端运算实现机制 79
4.1.4网格计算与云端运算 81
4.2 Google档案系统GFS 85
4.2.1系统架构 86
4.2.2容错机制 89
4.2.3系统管理技术 90
4.3平行资料处理MapReduce 91
4.3.1产生背景 91
4.3.2程式设计模型 92
4.3.3实现机制 93
4.4分散式锁服务Chubby 97
4.4.1 Paxos演算法 97
4.4.2 Chubby系统设计 98
4.4.3 Chubby档案系统 101
4.4.4通讯协定 102
4.4.5正确性与效能 105
4.5分散式结构化资料表BigTable 106
4.5.1设计动机与目标 107
4.5.2资料模型 109
4.5.3系统架构 109
4.5.4主要伺服器 110
4.5.5子表伺服器 111
4.5.6效能最佳化 115
Chapter 05 Google云端运算的开放原始码版本——Hadoop 117
5.1 Hadoop简介 118
5.1.1 Hadoop发展史 118
5.1.2 Apache Hadoop专案及系统结构 120
5.2 Hadoop产生的原因 121
5.2.1巨量的资料 121
5.2.2资料的储存和分析 123
5.3 Hadoop和其他系统的比较 124
5.3.1和关联式资料库管理系统(RDBMS)的比较 125
5.3.2和网格计算的比较 126
5.4 HDFS的架构设计 128
5.4.1前提和设计目标 128
5.4.2 Namenode和Datanode 129
5.4.3档案系统的Namespace 129
5.4.4资料复制 130
5.4.5档案系统中继资料的持久化 131
5.4.6通讯协定 132
5.4.7稳固性 133
5.4.8资料组织 134
5.4.9可存取性 135
5.4.10空间的回收 135
5.5安装Hadoop 136
5.5.1安装JDK 1.7 136
5.5.2安装Hadoop 138
5.6 HDFS操作 144
5.6.1使用FS Shell指令操作H DFS 144
5.6.2程式设计读写HDFS 149
5.7 Hadoop中的MapReduce模型 151
5.7.1 MapReduce计算模型 151
5.7.2 Hadoop中的 Hello World程式 152
5.7.3执行MapReduce程式 158
5.7.4 Hadoop中的Hello World程式——新的API 160
5.7.5 MapReduce的资料流程和控制流 162
5.8 Zookeeper 164
5.8.1 Zookeeper设定安装 164
5.8.2 Zookeeper的资料模型 166
5.8.3 Zookeeper的基本使用 167
5.8.4 ZooKeeper典型的应用场景 170
5.8.5统一命名服务(Name Service) 170
5.8.6共用锁(Locks ) 173
5.8.7佇列管理 174
5.8.8 Zookeeper归纳 177
5.9 HBase 177
5.9.1简介 177
5.9.2逻辑视图 178
5.9.3实体储存 179
5.9.4系统架构 183
5.9.5关键演算法/流程 185
5.10 HBase的安装和设定 190
5.11 HBase使用实例 192
Part3 Key/Value NoSQL系统 195
Chapter 06 Dynamo:Amazon的高可用键值对储存 195
6.1简介 196
6.2背景 197
6.2.1系统假设和要求 198
6.2.2服务水准协定(SLA) 199
6.2.3设计考虑 201
6.3系统架构 203
6.3.1系统介面 203
6.3.2划分演算法 204
6.3.3复制 205
6.3.4版本的资料 205
6.3.5执行get()和put()操作 208
6.3.6故障处理:暗示移交(Hinted Handoff) 210
6.3.7处理永久性故障:备份同步 210
6.3.8会员和故障检测 211
6.3.9增加/删除储存节点 213
6.4实现 213
6.5 Amazon使用的经验与教训 215
6.5.1平衡效能和耐久性 216
6.5.2确保均匀的负载分布 218
6.5.3不同版本:何时以及有多少 222
6.5.4用户端驱动或伺服器驱动协调 223
6.5.5权衡后台和前台工作 224
6.5.6讨论 225
6.6结论 225
Chapter07 LevelDb——出自Google的Key-Value资料库 227
7.1 LevelD b简介 228
7.2 LevelDb的静态部分 229
7.2.1整体架构 229
7.2.2 log档案 232
7.2.3 SSTable档案 233
7.2.4 MemTable详解 237
7.3 LevelDb的动态部分 238
7.3.1写入与删除记录 238
7.3.2读取记录 239
7.3.3 Compaction操作 242
7.3.4 LevelDb中的Cache 245
7.3.5 Version、VersionEdit和VersionSet 247
Chapter 08 RediS实战 249
8.1 Redis安装与准备 250
8.1.1下载与安装 250
8.1.2设定档修改 251
8.1.3启动Red is 253
8.1.4停止Redis 254
8.2 Redis所支援的资料结构 255
8.2.1 String 256
8.2.2 List 260
8.2.3 Set 266
8.2.4 Hash/杂凑/杂凑 270
8.2.5有序集合/Zset 274
8.3 Key操作指令 281
8.3.1概述 281
8.3.2指令范例 282
8.4事物 286
8.4.1事物概述 286
8.4.2相关指令 287
8.4.3指令范例 288
8.4.4 WATCH指令和以CAS为基础的乐观锁 289
8.5 Redis的主从复制 290
8.5.1 Redis的Replication 290
8.5.2 Replication的工作原理 291
8.5.3如何设定Replication 291
8.5.4应用范例 292
8.6 Redis的持久化 293
8.6.1持久化机制 293
8.6.2 RDB机制的优势和劣势 293
8.6.3 AOF机制的优势和劣势 294
8.6.4其他 295
8.7 Redis的虚拟记忆体 296
8.7.1简介 296
8.7.2应用场景 297
8.7.3设定 297
8.8 pipeline/管线 299
8.8.1请求回应协定和RTT 299
8.8.2管线(pipelining) 299
8.8.3 Benchmark 300
8.9实例 301
Part4 文件型NoSQL系统 307
Chapter 09针对文件的资料库CouchDB 307
9.1 CouchDB介绍 308
9.1.1基本概念 308
9.1.2扩充概念 308
9.2 CouchDB安装与设定 309
9.3 RESTAPI 311
9.3.1资料库REST API 311
9.3.2文件REST API 311
9.3.3视图REST API 312
9.3.4附件REST API 312
9.4为应用建模 313
9.4.1描述实体 313
9.4.2描述一对一和一对多关联性 314
9.4.3描述多对多关系 315
9.5实战开发 317
9.5.1开发Web应用 317
9.5.2使用CouchDB jQuery外挂程式 319
9.5.3范例应用建模 320
9.5.4管理文件 321
9.5.5视图 325
9.6进阶内容 332
9.6.1许可权控制与安全 332
9.6.2文件更新验证 333
9.6.3分组 333
9.6.4键的排序 334
Chapter10 MongoDB实战 335
10.1为什么要使用MongoDB 336
10.1.1不能确定的表结构资讯 336
10.1.2序列化可以解决一切问题吗 336
10.1.3无需定义表结构的资料库 337
10.2 MongoDB的优势和不足 337
10.2.1无表结构 337
10.2.2容易扩充 338
10.2.3丰富的功能 339
10.2.4效能卓越 339
10.2.5简便的管理 339
10.2.6 MongoDB的不足 340
10.3基本概念 340
10.4 Linux下MongoDB的安装和设定、启动和停止 341
10.4.1下载 341
10.4.2安装 341
10.4.3启动资料库 343
10.4.4停止资料库 346
10.5建立、更新及删除文件 347
10.5.1连接资料库 347
10.5.2插入记录 348
10.5.3_ id key 349
10.5.4修改记录 350
10.5.5删除记录 350
10.6查询记录 351
10.6.1普通查询 351
10.6.2条件查询 352
10.6.3 findOne()语法 353
10.6.4透过limit限制结果集数量 353
10.7高级查询 353
10.7.1条件运算符号 354
10.7.2 $all比对所有 354
10.7.3 $exists判断栏位是否存在 354
10.7.4 Null值处理 355
10.7.5 $mod取模运算 356
10.7.6 $ne不等於 356
10.7.7 $in包含 357
10.7.8 $nin不包含 357
10.7.9 $size阵列元素个数 358
10.7.10正规表示法比对 358
10.7.11 JavaScript查询和$where查询 358
10.7.12 count查询记录笔数 359
10.7.13 skip限制传回记录的起点 359
10.7.14 sort排序 360
10.7.15游标 360
10.8 MapReduce 361
10.8.1 Map 362
10.8.2 Reduce 363
10.8.3 Result 363
10.8.4 Finalize 364
10.8.5 Options 365
10.9索引 365
10.9.1基础索引 366
10.9.2文件索引 366
10.9.3组合索引 367
10.9.4唯一索引 367
10.9.5强制使用索引 367
10.9.6删除索引 369
10.10性能优化 369
10.10.1 explain执行计画 369
10.10.2最佳化器Profile 370
10.10.3效能最佳化举例 372
10.11性能监控 374
10.11.1 mongosniff 374
10.11.2 Mongostat 375
10.11.3 db.serverStatus 376
10.11.4 db.stats 378
10.11.5协力厂商工具 378
10.12 Replica Sets复制集 379
10.12.1部署Replica Sets 379
10.12.2主从操作记录档oplog 383
10.12.3主从设定资讯 384
10.12.4管理维护Replica Sets 385
10.12.5增减节点 388
10.13 Sharding分片 393
10.13.1建立Sharding Cluster 394
10.13.2管理维护Sharding 397
10.14 Replica Sets和Sharding的结合 404
10.14.1建立资料目录 405
10.14.2设定Replica-Sets 406
10.14.3设定3台Route Process 408
10.14.4设定Shard Cluster 409
10.14.5验证Sharding正常执行 409
Part5 MySQL基础与效能最佳化 411
Chapter11 MySQL基础 411
11.1 CentOS 6.5下MySQL的安装 412
11.2 MySQL基本指令 415
11.3 MySQ L资料类型 419
11.3.1整数 419
11.3.2浮点数 419
11.3.3定点数 420
11.3.4字串(char,varchar,xxxtext ) 420
11.3.5二进位资料 421
11.3.6日期时间类型 421
11.3.7资料类型的属性 421
11.4建立资料库和表 422
11.5检索表中的资料 426
11.6多个表的操作 430
Chapter 12 MySQL进阶特性与效能最佳化 435
12.1 MySQL Server系统架构 436
12.1.1逻辑模组成 436
12.1.2各模组工作配合 439
12.2储存引擎 443
12.2.1 MySQL储存引擎概述 443
12.2.2 MyISAM储存引擎简介 444
12.2.3 Innodb储存引擎简介 446
12.3 MySQL中的锁定机制 448
12.3.1 MySQL中锁定机制概述 448
12.3.2合理利用锁机制最佳化MySQL 450
12.4索引与最佳化 453
12.4.1选择索引的资料类型 453
12.4.2索引入门 454
12.4.3索引的类型 454
12.4.4高性能的索引策略 456
12.4.5索引与加锁 462
12.5 MySQL的MyISAM和Innodb的Cache最佳化 464
12.5.1 MyISAM储存引擎的Cache最佳化 464
12.5.2 Innodb快取相关最佳化 468
12.6 MySQL的复制 471
12.6.1复制对於可扩充性的意义 471
12.6.2复制的原理 472
12.6.3体验MySQL复制 473
12.6.4复制的常用拓扑结构 478
12.7可扩充性设计之资料切分 484
12.7.1何谓资料切分 485
12.7.2资料的垂直切分 485
12.7.3资料的水平切分 488
12.7.4垂直与水平联合切分的使用 490
12.7.5资料切分及整合方案 493
12.7.6资料切分与整合中可能存在的问题 500
12.8小结 502