《NoSQL数据库技术实战》PDF下载

  • 购买积分:13 如何计算积分?
  • 作  者:皮雄军编著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2015
  • ISBN:9787302380399
  • 页数:388 页
图书介绍:本书全面的介绍的了NoSQL系统的各个方面,从产生原因到理论基础,然后讲述了三种NoSQL系统:列式、Key/Value和文档型,每一种系统既举例了一种理论模型,又介绍了一种实战系统,理论与实战并重。最后本书介绍了MySQL的高级特性、性能优化和水平扩展。

第1篇 NoSQL的兴起与理论基础 2

第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系统 60

第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 H-adoop中的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系统 156

第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 停止Re1is 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系统 240

第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 数据库RESTAPI 243

9.3.2 文档RESTAPI 243

9.3.3 视图RESTAPI 243

9.3.4 附件RESTAPI 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基础与性能优化 320

第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