第1章 绪论 1
1.1 数据库的相关概念 2
1.1.1 关系型数据库管理系统 2
1.1.2 关系型数据库的瓶颈 4
1.1.3 NoSQL的特点 4
1.1.4 NewSQL的概念 6
1.1.5 NoSQL的典型应用场景 7
1.2 大数据的技术体系 8
1.2.1 大数据的特征 9
1.2.2 大数据的采集 10
1.2.3 大数据的存储 11
1.2.4 大数据的管理和使用 13
1.2.5 数据可视化 13
1.2.6 大数据安全与治理 15
小结 15
思考题 16
第2章 NoSQL数据库的基本原理 17
2.1 关系型数据库的原理简述 18
2.1.1 关系模型 18
2.1.2 关系型数据库的完整性约束 19
2.1.3 关系型数据库的事务机制 19
2.1.4 关系型数据库的分布式部署 21
2.2 分布式数据管理的特点 23
2.2.1 数据分片 24
2.2.2 数据多副本 24
2.2.3 一次写入多次读取 26
2.2.4 分布式系统的可伸缩性 27
2.3 分布式系统的—致性问题 27
2.3.1 CAP原理 28
2.3.2 BASE和最终一致性 29
2.3.3 Paxos算法简介 30
2.4 NoSQL的常见模式 33
2.4.1 键值对存储模式 33
2.4.2 文档式存储模式 34
2.4.3 列存储模式 35
2.4.4 图存储模式 36
2.5 NoSQL系统的其他相关技术 37
2.5.1 分布式数据处理 37
2.5.2 时间同步服务 38
2.5.3 布隆过滤器 38
小结 40
思考题 40
第3章 HDFS的基本原理 41
3.1 Hadoop概述 42
3.1.1 Hadoop的由来 42
3.1.2 Hadoop的架构与扩展 43
3.1.3 Hadoop的部署需求 45
3.2 HDFS原理 46
3.2.1 HDFS架构 46
3.2.2 Namenode的数据结构 47
3.2.3 数据分块和多副本机制 48
3.2.4 数据读写原理 50
3.2.5 HDFS支持的序列化文件 51
3.3 部署和配置HDFS 52
3.3.1 部署HDFS 53
3.3.2 HDFS的基本配置 55
3.3.3 集群的启动和停止 57
3.4 使用和管理HDFS 58
3.4.1 管理和操作命令 58
3.4.2 格式化Namenode 59
3.4.3 Namenode的安全模式 60
3.4.4 元数据恢复 61
3.4.5 子节点添加与删除 61
3.4.6 HDFS文件系统操作 62
3.4.7 以Web方式查看文件系统 64
3.5 MapReduce原理简介 66
3.6 Hive分布式数据仓库 68
小结 69
思考题 69
第4章 HBase的基本原理与使用 70
4.1 HBase概述 71
4.2 HBase的数据模型 72
4.3 HBase的拓扑结构 74
4.4 HBase部署与配置 75
4.5 子节点伸缩性管理 78
4.6 HBase的基本操作 79
4.6.1 HBase Shell 79
4.6.2 表和列族操作 79
4.6.3 数据更新 82
4.6.4 数据查询 83
4.6.5 过滤查询 85
4.6.6 快照操作 89
4.7 批量导入导出 89
4.7.1 批量导入数据 89
4.7.2 备份和恢复 91
4.8 通过Java访问HBase 92
4.8.1 开发环境的配置 92
4.8.2 表的连接和操作 93
4.8.3 数据更新 94
4.8.4 数据查询 96
4.8.5 删除列和行 97
4.8.6 过滤器的使用 98
4.9 通过Python访问HBase 99
4.9.1 基于Thrift框架的多语言编程 99
4.9.2 环境准备 100
4.9.3 代码分析 101
小结 104
思考题 104
第5章 HBase的高级原理 105
5.1 水平分区原理 106
5.1.1 META表 106
5.1.2 数据写入和读取机制 108
5.1.3 预写日志 110
5.1.4 分区拆分 111
5.2 列族与Store 113
5.2.1 列族的属性 113
5.2.2 表在HDFS上的存储 115
5.2.3 HFile的结构 116
5.2.4 Storefile合并 119
5.3 数据表的基本设计原则 121
5.4 HBase集群的高可用性与伸缩性 121
5.4.1 Zookeeper的基本原理 122
5.4.2 基于Zookeeper的高可用性 124
5.4.3 独立安装Zookeeper 125
5.4.4 集群间同步复制 126
5.5 HBase的扩展 128
5.5.1 协处理器机制 128
5.5.2 基于HBase的分布式处理 129
5.5.3 扩展开源软件 131
5.5.4 FusionInsight HD简介 134
小结 135
思考题 136
第6章 Cassandra的原理和使用 137
6.1 Cassandra概述 138
6.2 Cassandra的技术原理 138
6.2.1 Amazon Dynamo 138
6.2.2 Cassandra的数据模型 143
6.2.3 Yaml格式 145
6.2.4 其他相关技术原理 146
6.3 Cassandra的部署与配置 147
6.3.1 单节点部署Cassandra 147
6.3.2 Cassandra的配置文件 148
6.3.3 Cassandra集群部署 150
6.3.4 集群启动 150
6.4 CQL语言与cqlsh环境 151
6.4.1 cqlsh环境简介 152
6.4.2 键空间管理 153
6.4.3 数据表管理 156
6.4.4 CQL的数据类型 158
6.5 CQL数据查询 161
6.5.1 基本数据查询 161
6.5.2 条件查询 162
6.5.3 索引机制 164
6.5.4 使用标量函数 166
6.6 CQL数据更新 166
6.6.1 插入、更新和删除 166
6.6.2 读写一致性 169
6.6.3 集合列操作 171
6.6.4 计数器列的操作 174
6.6.5 日期时间列的操作 175
6.6.6 批量导入/导出数据 176
6.7 基本集群维护方法 177
6.7.1 编程接口简介 177
6.7.2 多数据中心与机架感知策略 177
6.7.3 Nodetool工具 178
6.7.4 常见节点管理方法 180
6.8 编程访问Cassandra 181
6.8.1 通过Java访问Cassandra 181
6.8.2 通过Python访问Cassandra 182
小结 183
思考题 183
第7章 MongoDB的原理和使用 184
7.1 概述 185
7.2 MongoDB的技术原理 185
7.2.1 文档和集合 185
7.2.2 分片机制和集群架构 186
7.2.3 CouchDB简介 188
7.3 安装配置MongoDB 189
7.3.1 单机环境部署 189
7.3.2 MongoDB的配置文件 191
7.4 基本命令行操作 191
7.4.1 Shell环境 191
7.4.2 数据库和集合操作 193
7.4.3 基本增删改查操作 194
7.4.4 聚合和管道 196
7.4.5 索引操作 198
7.4.6 Gridfs的原理和操作 201
7.5 批量操作和数据备份 203
7.6 MongoDB集群化部署 204
7.6.1 单机多实例 204
7.6.2 部署复制集 205
7.6.3 部署分片集 209
7.7 通过Java访问MongoDB 213
7.7.1 表和数据操作 213
7.7.2 Gridfs操作 216
7.8 通过Python访问MongoDB 218
小结 220
思考题 220
第8章 其他NoSQL数据库简介 221
8.1 图数据库简介 222
8.2 Neo4j的安装与使用 223
8.2.1 在Windows中安装Neo4j 223
8.2.2 在CentOS 7中安装Neo4j 224
8.2.3 Neo4j的Web操作界面 225
8.2.4 Cypher语言简介 226
8.2.5 通过Java访问Neo4j 229
8.2.6 通过Python访问Neo4j 230
8.3 Redis和内存数据库 231
8.4 搜索引擎系统 232
小结 236
思考题 236
附录 237
附录1 在CentOS 7上实现SSH无密码访问 237
附录2 在CentOS 7上部署NTP服务端与客户端 239
附录3 在CentOS 7上安装Python 3 240
附录4 在CentOS 7上安装Thrift编译器 241
附录5 《NoSQL数据库原理》配套实验课程方案简介 242