NoSQL数据库技术实战由浅入深,全面系统地介绍了NoSQL系统。本书既对NoSQL系统的理论进行了深入浅出的分析,又介绍了每一种NoSQL数据库在业界广泛应用的一个具体系统,理论与实战并重。
本书共分5篇,12章。涵盖的内容有:NoSQL与大数据简介、NoSQL的数据一致性、NoSQL的水平扩展与其他基础知识、BigTable与Google云计算原理、Google云计算的开源版本——Hadoop、Dynamo:Amazon的高可用键值对存储、LevelDb——出自Google的Key-Value数据库、Redis实战、面向文档的数据库CouchDB、MongoDB实战、MySQL基础、MySQL高级特性与性能优化。
本书涉及面广,从基本操作到高级技术和核心原理,再到项目开发,几乎涉及NoSQL系统的所有重要知识。本书适合所有想全面学习NoSQL的人员阅读,也适合各种使用NoSQL进行开发的工程技术人员使用。
目录
- 第1篇 NoSQL的兴起与理论基础
- 第1章 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 大数据 8
- 1.2.1 大数据的度量单位 8
- 1.2.2 大数据的特点 9
- 1.3 大数据相关技术 10
- 1.3.1 大数据采集技术 10
- 1.3.2 大数据预处理技术 11
- 1.3.3 大数据存储及管理技术 11
- 1.3.4 大数据分析及挖掘技术 11
- 1.3.5 大数据展现与应用技术 12
- 1.4 NoSQL简介 12
- 1.4.1 什么是NoSQL 12
- 1.4.2 关系型数据库简史 13
- 1.4.3 数据库分类 13
- 1.4.4 关系型数据库的优势 14
- 1.4.5 不擅长的处理 15
- 1.4.6 NoSQL数据库 18
- 1.5 NoSQL数据库的类型 20
- 1.5.1 键值(Key/Value)存储 20
- 1.5.2 面向文档的数据库 21
- 1.5.3 面向列的数据库 22
- 1.6 如何使用和学习NoSQL数据库 23
- 1.6.1 始终只是一种选择 23
- 1.6.2 在何种程度上信赖它 23
- 1.7 云数据管理 24
- 第2章 NoSQL的数据一致性 25
- 2.1 传统关系数据库中的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系统是分布式系统 27
- 2.2.2 CAP理论阐述 27
- 2.3 AP的例子——DNS系统 29
- 2.3.1 DNS系统 29
- 2.3.2 DNS域名解析过程 29
- 2.3.3 DNS系统是最终一致性的 31
- 2.4 数据一致性模型与BASE 31
- 2.4.1 数据一致性模型 31
- 2.4.2 BASE(Basically Available,Soft-state,Eventual consistency) 32
- 2.5 数据一致性实现方法 33
- 2.5.1 Quorum系统NRW策略 33
- 2.5.2 时间戳策略 34
- 2.5.3 向量时钟 37
- 第3章 NoSQL的水平扩展与其他基础知识 41
- 3.1 所有数据存放在一个服务器上 41
- 3.2 分片(Sharding) 41
- 3.3 主从复制 43
- 3.4 对等(Peer To Peer)复制 44
- 3.5 复制和分片的同时使用 45
- 3.6 数据水平扩展的方法总结 46
- 3.7 分片对数据的划分方式 46
- 3.7.1 Range-Based Partitioning 47
- 3.7.2 Round-Robin 49
- 3.8 一致性hash算法(Consistent Hashing) 50
- 3.8.1 基本场景 51
- 3.8.2 hash算法和单调性 51
- 3.8.3 Consistent Hashing算法的原理 51
- 3.8.4 虚拟节点 54
- 3.9 磁盘的读写特点及五分钟法则 55
- 3.9.1 磁道、扇区、柱面和磁头数 56
- 3.9.2 固态硬盘(SSD):随机读写速度快 57
- 3.9.3 内存:读写速度极快 57
- 3.9.4 五分钟法则 57
- 3.10 不要删除数据 58
- 第2篇 列式NoSQL系统
- 第4章 BigTable与Google云计算原理 60
- 4.1 云计算 60
- 4.1.1 云计算的概念 60
- 4.1.2 云计算发展现状 63
- 4.1.3 云计算实现机制 64
- 4.1.4 网格计算与云计算 66
- 4.2 Google文件系统GFS 68
- 4.2.1 系统架构 69
- 4.2.2 容错机制 71
- 4.2.3 系统管理技术 72
- 4.3 并行数据处理MapReduce 73
- 4.3.1 产生背景 73
- 4.3.2 编程模型 73
- 4.3.3 实现机制 74
- 4.4 分布式锁服务Chubby 78
- 4.4.1 Paxos算法 78
- 4.4.2 Chubby系统设计 79
- 4.4.3 Chubby文件系统 80
- 4.4.4 通信协议 82
- 4.4.5 正确性与性能 83
- 4.5 分布式结构化数据表BigTable 84
- 4.5.1 设计动机与目标 85
- 4.5.2 数据模型 85
- 4.5.3 系统架构 87
- 4.5.4 主服务器 88
- 4.5.5 子表服务器 89
- 4.5.6 性能优化 92
- 第5章 Google云计算的开源版本——Hadoop 94
- 5.1 Hadoop简介 94
- 5.1.1 Hadoop发展史 94
- 5.1.2 Apache Hadoop项目及体系结构 96
- 5.2 Hadoop产生的原因 97
- 5.2.1 海量的数据 97
- 5.2.2 数据的存储和分析 98
- 5.3 Hadoop和其他系统的比较 99
- 5.3.1 和关系型数据库管理系统(RDBMS)的比较 99
- 5.3.2 和网格计算的比较 100
- 5.4 HDFS的架构设计 101
- 5.4.1 前提和设计目标 102
- 5.4.2 Namenode和Datanode 102
- 5.4.3 文件系统的Namespace 103
- 5.4.4 数据复制 103
- 5.4.5 文件系统元数据的持久化 104
- 5.4.6 通讯协议 105
- 5.4.7 健壮性 105
- 5.4.8 数据组织 106
- 5.4.9 可访问性 107
- 5.4.10 空间的回收 107
- 5.5 安装Hadoop 108
- 5.5.1 安装JDK 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计算模型 119
- 5.7.2 Hadoop中的Hello World程序 120
- 5.7.3 运行MapReduce程序 124
- 5.7.4 Hadoop中的Hello World程序——新的API 125
- 5.7.5 MapReduce的数据流和控制流 127
- 5.8 Zookeeper 129
- 5.8.1 Zookeeper配置安装 129
- 5.8.2 Zookeeper的数据模型 130
- 5.8.3 Zookeeper的基本使用 131
- 5.8.4 ZooKeeper 典型的应用场景 133
- 5.8.5 统一命名服务(Name Service) 133
- 5.8.6 共享锁(Locks) 136
- 5.8.7 队列管理 137
- 5.8.8 Zookeeper总结 139
- 5.9 HBase 139
- 5.9.1 简介 139
- 5.9.2 逻辑视图 139
- 5.9.3 物理存储 141
- 5.9.4 系统架构 144
- 5.9.5 关键算法/流程 146
- 5.10 HBase的安装和配置 149
- 5.11 HBase使用例子 151
- 第3篇 Key/Value NoSQL系统
- 第6章 Dynamo:Amazon的高可用键值对存储 156
- 6.1 简介 156
- 6.2 背景 157
- 6.2.1 系统假设和要求 158
- 6.2.2 服务水平协议(SLA) 158
- 6.2.3 设计考虑 160
- 6.3 系统架构 161
- 6.3.1 系统接口 162
- 6.3.2 划分算法 162
- 6.3.3 复制 163
- 6.3.4 版本的数据 163
- 6.3.5 执行get()和put()操作 165
- 6.3.6 故障处理:暗示移交(Hinted Handoff) 166
- 6.3.7 处理永久性故障:副本同步 167
- 6.3.8 会员和故障检测 167
- 6.3.9 添加/删除存储节点 169
- 6.4 实现 169
- 6.5 Amazon使用的经验与教训 170
- 6.5.1 平衡性能和耐久性 171
- 6.5.2 确保均匀的负载分布 172
- 6.5.3 不同版本:何时以及有多少 175
- 6.5.4 客户端驱动或服务器驱动协调 176
- 6.5.5 权衡后台和前台任务 177
- 6.5.6 讨论 177
- 6.6 结论 178
- 第7章 LevelDb——出自Google的 Key-Value数据库 179
- 7.1 LevelDb简介 179
- 7.2 LevelDb的静态部分 180
- 7.2.1 整体架构 180
- 7.2.2 log文件 182
- 7.2.3 SSTable文件 183
- 7.2.4 MemTable详解 186
- 7.3 LevelDb的动态部分 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实战 195
- 8.1 Redis安装与准备 195
- 8.1.1 下载与安装 195
- 8.1.2 配置文件修改 196
- 8.1.3 启动Redis 197
- 8.1.4 停止Redis 198
- 8.2 Redis所支持的数据结构 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 相关命令 223
- 8.4.3 命令示例 224
- 8.4.4 WATCH命令和基于CAS的乐观锁 225
- 8.5 Redis的主从复制 226
- 8.5.1 Redis的Replication 226
- 8.5.2 Replication的工作原理 227
- 8.5.3 如何配置Replication 227
- 8.5.4 应用示例 228
- 8.6 Redis的持久化 228
- 8.6.1 持久化机制 228
- 8.6.2 RDB机制的优势和劣势 229
- 8.6.3 AOF机制的优势和劣势 229
- 8.6.4 其他 230
- 8.7 Redis的虚拟内存 231
- 8.7.1 简介 231
- 8.7.2 应用场景 231
- 8.7.3 配置 231
- 8.8 pipeline/管线 233
- 8.8.1 请求应答协议和RTT 233
- 8.8.2 管线(pipelining) 233
- 8.8.3 Benchmark 234
- 8.9 实例 234
- 第4篇 文档型NoSQL系统
- 第9章 面向文档的数据库CouchDB 240
- 9.1 CouchDB介绍 240
- 9.1.1 基本概念 240
- 9.1.2 扩展概念 241
- 9.2 CouchDB安装与配置 241
- 9.3 REST API 242
- 9.3.1 数据库REST API 243
- 9.3.2 文档REST API 243
- 9.3.3 视图 REST API 243
- 9.3.4 附件 REST API 244
- 9.4 为应用建模 244
- 9.4.1 描述实体 244
- 9.4.2 描述一对一和一对多关系 245
- 9.4.3 描述多对多关系 246
- 9.5 实战开发 247
- 9.5.1 开发Web应用 247
- 9.5.2 使用CouchDB jQuery插件 248
- 9.5.3 示例应用建模 249
- 9.5.4 管理文档 250
- 9.5.5 视图 253
- 9.6 高级话题 259
- 9.6.1 权限控制与安全 259
- 9.6.2 文档更新校验 259
- 9.6.3 分组 259
- 9.6.4 键的排序 260
- 第10章 MongoDB实战 261
- 10.1 为什么要使用MongoDB 261
- 10.1.1 不能确定的表结构信息 261
- 10.1.2 序列化可以解决一切问题吗 261
- 10.1.3 无需定义表结构的数据库 262
- 10.2 MongoDB的优势和不足 262
- 10.2.1 无表结构 262
- 10.2.2 容易扩展 263
- 10.2.3 丰富的功能 263
- 10.2.4 性能卓越 264
- 10.2.5 简便的管理 264
- 10.2.6 MongoDB的不足 264
- 10.3 基本概念 264
- 10.4 Linux下MongoDB的安装和配置、启动和停止 265
- 10.4.1 下载 265
- 10.4.2 安装 266
- 10.4.3 启动数据库 267
- 10.4.4 停止数据库 269
- 10.5 创建、更新及删除文档 270
- 10.5.1 连接数据库 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()语法 274
- 10.6.4 通过limit限制结果集数量 274
- 10.7 高级查询 275
- 10.7.1 条件操作符 275
- 10.7.2 $all匹配所有 275
- 10.7.3 $exists判断字段是否存在 276
- 10.7.4 Null值处理 276
- 10.7.5 $mod取模运算 276
- 10.7.6 $ne不等于 277
- 10.7.7 $in包含 277
- 10.7.8 $nin不包含 278
- 10.7.9 $size数组元素个数 278
- 10.7.10 正则表达式匹配 278
- 10.7.11 JavaScript查询和$where查询 279
- 10.7.12 count查询记录条数 279
- 10.7.13 skip限制返回记录的起点 279
- 10.7.14 sort排序 280
- 10.7.15 游标 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 基础索引 284
- 10.9.2 文档索引 285
- 10.9.3 组合索引 285
- 10.9.4 唯一索引 285
- 10.9.5 强制使用索引 286
- 10.9.6 删除索引 287
- 10.10 性能优化 287
- 10.10.1 explain执行计划 287
- 10.10.2 优化器Profile 288
- 10.10.3 性能优化举例 289
- 10.11 性能监控 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复制集 294
- 10.12.1 部署Replica Sets 295
- 10.12.2 主从操作日志oplog 297
- 10.12.3 主从配置信息 298
- 10.12.4 管理维护Replica Sets 299
- 10.12.5 增减节点 301
- 10.13 Sharding分片 305
- 10.13.1 建立Sharding Cluster 306
- 10.13.2 管理维护Sharding 308
- 10.14 Replica Sets和Sharding的结合 313
- 10.14.1 创建数据目录 314
- 10.14.2 配置Replica Sets 314
- 10.14.3 配置3台Route Process 316
- 10.14.4 配置Shard Cluster 316
- 10.14.5 验证Sharding正常工作 317
- 第5篇 MySQL基础与性能优化
- 第11章 MySQL基础 320
- 11.1 CentOS 6.5下MySQL的安装 320
- 11.2 MySQL基本命令 322
- 11.3 MySQL数据类型 325
- 11.3.1 整型 325
- 11.3.2 浮点型 326
- 11.3.3 定点数 326
- 11.3.4 字符串(char,varchar,xxxtext) 326
- 11.3.5 二进制数据 327
- 11.3.6 日期时间类型 327
- 11.3.7 数据类型的属性 327
- 11.4 创建数据库和表 328
- 11.5 检索表中的数据 331
- 11.6 多个表的操作 334
- 第12章 MySQL高级特性与性能优化 338
- 12.1 MySQL Server系统架构 338
- 12.1.1 逻辑模块组成 338
- 12.1.2 各模块工作配合 341
- 12.2 存储引擎 343
- 12.2.1 MySQL存储引擎概述 343
- 12.2.2 MyISAM存储引擎简介 344
- 12.2.3 Innodb 存储引擎简介 346
- 12.3 MySQL中的锁定机制 347
- 12.3.1 MySQL中锁定机制概述 347
- 12.3.2 合理利用锁机制优化MySQL 349
- 12.4 索引与优化 350
- 12.4.1 选择索引的数据类型 351
- 12.4.2 索引入门 351
- 12.4.3 索引的类型 352
- 12.4.4 高性能的索引策略 353
- 12.4.5 索引与加锁 358
- 12.5 MySQL的MyISAM和Innodb的Cache优化 359
- 12.5.1 MyISAM存储引擎的Cache优化 359
- 12.5.2 Innodb缓存相关优化 362
- 12.6 MySQL的复制 364
- 12.6.1 复制对于可扩展性的意义 364
- 12.6.2 复制的原理 365
- 12.6.3 体验MySQL复制 366
- 12.6.4 复制的常用拓扑结构 370
- 12.7 可扩展性设计之数据切分 375
- 12.7.1 何谓数据切分 375
- 12.7.2 数据的垂直切分 375
- 12.7.3 数据的水平切分 377
- 12.7.4 垂直与水平联合切分的使用 379
- 12.7.5 数据切分及整合方案 381
- 12.7.6 数据切分与整合中可能存在的问题 386
- 12.8 小结 388