第一部分 概念 3
第1章 为什么使用NoSQL 3
1.1 关系型数据库的价值 3
1.1.1 获取特久化数据 3
1.1.2 并发 4
1.1.3 集成 4
1.1.4 近乎标准的模型 4
1.2 阻抗失谐 5
1.3 “应用程序数据库”与“集成数据库” 6
1.4 蜂拥而来的集群 8
1.5 NoSQL登场 9
1.6 要点 12
第2章 聚合数据模型 13
2.1 聚合 14
2.1.1 关系模型与聚合模型示例 14
2.1.2 面向聚合的影响 19
2.2 键值数据模型与文档数据模型 20
2.3 列族存储 21
2.4 面向聚合数据库总结 23
2.5 延伸阅读 24
2.6 要点 24
第3章 数据模型详解 25
3.1 关系 25
3.2 图数据库 26
3.3 无模式数据库 28
3.4 物化视图 30
3.5 构建数据存取模型 31
3.6 要点 36
第4章 分布式模型 37
4.1 单一服务器 37
4.2 分片 38
4.3 主从复制 40
4.4 对等复制 42
4.5 结合“分片”与“复制”技术 43
4.6 要点 44
第5章 一致性 47
5.1 更新一致性 47
5.2 读取一致性 49
5.3 放宽“一致性”约束 52
5.4 放宽“持久性”约束 56
5.5 仲裁 57
5.6 延伸阅读 59
5.7 要点 59
第6章 版本戳 61
6.1 “商业事务”与“系统事务” 61
6.2 在多节点环境中生成版本戳 63
6.3 要点 65
第7章 映射-化简 67
7.1 基本“映射-化简” 68
7.2 分区与归并 69
7.3 组合“映射-化简”计算 72
7.3.1 举例说明两阶段“映射-化简” 73
7.3.2 增量式“映射-化简” 76
7.4 延伸阅读 77
7.5 要点 77
第二部分 实现 81
第8章 键值数据库 81
8.1 何谓“键值数据库” 81
8.2 键值数据库特性 83
8.2.1 一致性 83
8.2.2 事务 84
8.2.3 查询功能 84
8.2.4 数据结构 86
8.2.5 可扩展性 86
8.3 适用案例 87
8.3.1 存放会话信息 87
8.3.2 用户配置信息 87
8.3.3 购物车数据 87
8.4 不适用场合 87
8.4.1 数据间关系 87
8.4.2 含有多项操作的事务 88
8.4.3 查询数据 88
8.4.4 操作关键字集合 88
第9章 文档数据库 89
9.1 何谓文档数据库 90
9.2 特性 91
9.2.1 致性 91
9.2.2 事务 92
9.2.3 可用性 93
9.2.4 查询功能 94
9.2.5 可扩展性 95
9.3 适用案例 97
9.3.1 事件记录 97
9.3.2 内容管理系统及博客平台 98
9.3.3 网站分析与实时分析 98
9.3.4 电子商务应用程序 98
9.4 不适用场合 98
9.4.1 包含多项操作的复杂事务 98
9.4.2 查询持续变化的聚合结构 98
第10章 列族数据库 99
10.1 何谓列族数据库 99
10.2 特性 100
10.2.1 一致性 103
10.2.2 事务 104
10.2.3 可用性 104
10.2.4 查询功能 105
10.2.5 可扩展性 107
10.3 适用案例 107
10.3.1 事件记录 107
10.3.2 内容管理系统与博客平台 108
10.3.3 计数器 108
10.3.4 限期使用 108
10.4 不适用场合 109
第11章 图数据库 111
11.1 何谓图数据库 111
11.2 特性 113
11.2.1 一致性 114
11.2.2 事务 114
11.2.3 可用性 115
11.2.4 查询功能 115
11.2.5 可扩展性 119
11.3 适用案例 120
11.3.1 互联数据 120
11.3.2 安排运输路线、分派货物和基于位置的服务 120
11.3.3 推荐引擎 121
11.4 不适用场合 121
第12章 模式迁移 123
12.1 模式变更 123
12.2 变更关系型数据库的模式 123
12.2.1 迁移全新项目 124
12.2.2 迁移既有项目 126
12.3 变更NoSQL数据库的模式 128
12.3.1 增量迁移 130
12.3.2 迁移图数据库的模式 131
12.3.3 改变聚合结构 132
12.4 延伸阅读 132
12.5 要点 132
第13章 混合持久化 133
13.1 各异的数据存储需求 133
13.2 混用各类数据库 134
13.3 将直接数据库操作封装为服务 136
13.4 扩展数据库以增强其功能 136
13.5 选用合适的数据库技术 138
13.6 企业使用混合持久化技术时的考量 138
13.7 部署复杂度 139
13.8 要点 140
第14章 超越NoSQL 141
14.1 文件系统 141
14.2 事件溯源 142
14.3 内存映像 144
14.4 版本控制 145
14.5 XML数据库 145
14.6 对象数据库 146
14.7 要点 146
第15章 选择合适的数据库 147
15.1 程序员的工作效率 149
15.2 数据访问性能 150
15.3 继续沿用默认的关系型数据库 150
15.4 抽离数据库策略以降低风险 151
15.5 要点 152
15.6 结语 153