Cassandra权威指南——目录、译者序【将在七月下旬上市】
目录
第1 章 Cassandra 概况 1
1.1 关系型数据库有什么问题 1
1.2 关系型数据库简单回顾 5
1.2.1 RDBMS:出类拔萃与表现平平 6
1.2.2 互联网的规模 12
1.3 Cassandra 的电梯间演讲 13
1.3.1 50 个字介绍Cassandra 13
1.3.2 分布式与无中心 13
1.3.3 弹性可扩展 14
1.3.4 高可用与容错 15
1.3.5 可调节的一致性 15
1.3.6 Brewer 的CAP 理论 18
1.3.7 面向行 21
1.3.8 无Schema 22
1.3.9 高性能 22
1.4 Cassandra 来自何方 22
1.5 Cassandra 的应用场景 23
1.5.1 大规模部署 23
1.5.2 写密集、统计和分析型工作 24
1.5.3 地区分布 24
1.5.4 变化的应用 24
1.6 谁在使用Cassandra 24
1.7 小结 26
第2 章 安装Cassandra 27
2.1 安装二进制包 27
2.1.1 解压缩 27
2.1.2 里面有什么 27
2.2 从源码编译 28
2.2.1 其他编译目标 30
2.2.2 使用Maven 编译 30
2.3 运行Cassandra 30
2.3.1 在Windows 平台上运行Cassandra 31
2.3.2 在Linux 下运行Cassandra 31
2.3.3 启动服务器 32
2.4 使用命令行界面的客户端 33
2.5 基本命令行命令 34
2.5.1 帮助 34
2.5.2 连接服务器 35
2.5.3 描述环境 35
2.5.4 创建keyspace 和列族 36
2.5.5 读写数据 37
2.6 小结 38
第3 章 Cassandra 的数据模型 39
3.1 关系型数据模型 39
3.2 简介 40
3.3 集群 43
3.4 keyspaces 43
3.5 列族 44
3.6 列 46
3.6.1 宽行与窄行 48
3.6.2 列的排序 49
3.7 超级列 50
3.8 Cassandra 与RDBMS 的设计差别 53
3.8.1 没有查询语言 53
3.8.2 没有引用完整性 53
3.8.3 第二索引 53
3.8.4 排序成为一种设计决策 54
3.8.5 反范式化 54
3.9 设计模式 55
3.9.1 具体化视图 56
3.9.2 无值列 56
3.9.3 聚合键 56
3.10 需要记住的几件事 57
3.11 小结 57
第4 章 应用实例 59
4.1 数据模型设计 59
4.2 酒店应用的关系型数据库设计 60
4.3 酒店应用的Cassandra 设计 61
4.4 酒店应用代码 62
4.4.1 创建数据库 63
4.4.2 数据结构 64
4.4.3 进行连接 65
4.4.4 预装填数据库 66
4.4.5 搜索应用 78
4.5 Twissandra 82
4.6 小结 82
第5 章 Cassandra 的架构 83
5.1 system keyspace 83
5.2 对等结构(P2P) 84
5.3 gossip 与故障检测 84
5.4 逆熵与读修复 86
5.5 memtables、SSTable 和commit log 87
5.6 提示移交 89
5.7 压紧 89
5.8 Bloom filter 91
5.9 墓碑 91
5.10 分阶段事件驱动架构 92
5.11 管理器与服务 93
5.11.1 Cassandra 守护进程 93
5.11.2 存储服务 93
5.11.3 消息服务 93
5.11.4 提示移交管理器 94
5.12 小结 94
第6 章 配置Cassandra 95
6.1 keyspace 95
6.1.1 创建一个列族 98
6.1.2 从0.6 迁移到0.7 99
6.2 副本 99
6.3 副本放置策略 100
6.3.1 简单策略 101
6.3.2 旧网络拓扑策略 102
6.3.3 网络拓扑策略 103
6.4 副本因子 103
6.5 分区器 105
6.5.1 随机分区器 106
6.5.2 有序分区器 106
6.5.3 配页有序分区器 107
6.5.4 字节序分区器 107
6.6 Snitch 107
6.6.1 Simple Snitch 107
6.6.2 PropertyFileSnitch 107
6.7 创建集群 108
6.7.1 修改集群名称 109
6.7.2 给集群增加节点 109
6.7.3 多种子节点 111
6.8 动态加入环 113
6.9 安全 114
6.9.1 使用SimpleAuthenticator 114
6.9.2 编程鉴权 117
6.9.3 使用MD5 加密 118
6.9.4 提供你自己的鉴权算法 118
6.10 杂项设置 119
6.11 附加工具 120
6.11.1 查看键值 120
6.11.2 导入之前版本的配置 120
6.12 小结 122
第7 章 读写数据 123
7.1 Cassandra 与RDBMS 查询的不同 123
7.1.1 没有Update 查询 123
7.1.2 记录级的写原子性 123
7.1.3 不支持服务端事务 123
7.1.4 没有重复键值 124
7.2 写操作的基本属性 124
7.3 一致性级别 124
7.4 读操作的基本属性 126
7.5 API 126
7.6 设置与插入数据 128
7.7 使用简单的get 133
7.8 数据准备 135
7.9 切片谓词 135
7.9.1 使用get slice 读取特定列名 136
7.9.2 通过切片区间获取一组列 137
7.9.3 取出一行中的所有列 138
7.10 get range slices 138
7.11 multiget slice 140
7.12 删除 142
7.13 批量变更 144
7.13.1 批量删除 144
7.13.2 区间鬼影 145
7.14 编程定义keyspace 和列族 145
7.15 小结 146
第8 章 客户端 147
8.1 基本的客户端API 148
8.2 Thrift 148
8.2.1 Thrift 对Java 的支持 151
8.2.2 异常 151
8.2.3 Thrift 小结 152
8.3 Avro 152
8.3.1 Avro Ant 目标 154
8.3.2 Avro 规范155
8.3.3 Avro 小结156
8.4 Git 简介 156
8.5 连接客户端节点 157
8.5.1 客户端列表 157
8.5.2 循环DNS 157
8.5.3 负载均衡器 157
8.6 Cassandra Web 控制台 157
8.7 Hector (Java) 161
8.7.1 特性 161
8.7.2 Hector API 162
8.8 HectorSharp(C#) 162
8.9 Chirper 167
8.10 Chiton (Python) 167
8.11 Pelops (Java) 168
8.12 Kundera (Java ORM) 169
8.13 Fauna (Ruby) 169
8.14 小结 170
第9 章 监控 171
9.1 日志 171
9.1.1 跟踪查看 173
9.1.2 通用技巧 174
9.2 JMX 与MBean 概述 175
9.2.1 MBean 177
9.2.2 集成JMX 179
9.3 通过JMX 与Cassandra 交互 180
9.4 Cassandra 的MBean 181
9.4.1 org.apache.cassandra.concurrent 185
9.4.2 org.apache.cassandra.db185
9.4.3 org.apache.cassandra.gms 186
9.4.4 org.apache.cassandra.service 186
9.5 定制Cassandra 的MBean 188
9.6 运行时分析工具 190
9.6.1 使用JMX 和JHAT 进行堆分析 191
9.6.2 发现线程问题 194
9.7 健康检查 195
9.8 小结 196
第10 章 维护 197
10.1 获取环的信息 198
10.1.1 Info 198
10.1.2 Ring 198
10.2 获取统计信息 199
10.2.1 使用cfstats 199
10.2.2 使用tpstats 200
10.3 基本维护工作 201
10.3.1 修复 201
10.3.2 刷写 202
10.3.3 清理 203
10.4 快照 203
10.4.1 进行快照 203
10.4.2 清除快照 204
10.5 对集群进行负载均衡 205
10.6 退服节点 208
10.7 更新节点 210
10.7.1 删除令牌 210
10.7.2 压紧阈值 210
10.7.3 在一个工作的集群中改变列族 210
10.8 小结 211
第11 章 性能调优 213
11.1 数据存储 213
11.2 回复超时 215
11.3 Commit Log 215
11.4 Memtable 216
11.5 并发 216
11.6 缓存 217
11.7 缓冲区尺寸 218
11.8 使用Python 压力测试 218
11.8.1 生成Python Thrift 接口 218
11.8.2 运行Python 压力测试 220
11.9 启动和JVM 设置 222
11.10 小结 224
第12 章 集成Hadoop 225
12.1 何为Hadoop 225
12.2 使用MapReduce 226
12.3 运行字数统计例子 227
12.3.1 将数据输出到Cassandra 229
12.3.2 Hadoop 流 229
12.4 MapReduce 之上的工具 229
12.4.1 Pig 230
12.4.2 Hive 231
12.5 集群配置 231
12.6 案例 233
12.6.1 Raptr.com: Keith Thornhill233
12.6.2 Imagini: Dave Gardner 233
12.7 小结 234
附录 非关系型数据库大观 235
词汇表 261
关于封面 279
版权声明 280
译者序
对于一位分布式存储系统的开发者,Cassandra 无疑是非常引人注目的,它的无中心架构、高可用性、无缝扩展等继承自亚马逊Dynamo 的特质,相对于其他主从架构的NoSQL 系统更加简洁,也更具有美感。
我从2010 年初开始关注这个系统,并翻译过几篇Cassandra 相关的文章,还引起一些读者热烈的讨论。2010 年底,当刘江老师为本书寻找译者时,我按捺不住,毛遂自荐,并随后在2011 年1 月中下旬,开始了本书的翻译工作。我用了三个月的业余时间,终于在4 月份完成了译稿。因为Cassandra 仍在快速开发中,翻译时我也尽力争取快一些,以便能让中文版出版时不至于落伍。
本书对Cassandra 的概念、架构、配置、使用进行了全面的介绍,非常详尽,而且给出了很多参考信息。对于希望了解Cassandra、评估Cassandra 是否是适合自己的应用,以及开始着手在Cassandra 上进行应用开发的人都是不错的读物。当然,如果想参与Cassandra 的开发或做更深入的工作,还需要直接通过源代码来获取更详尽的信息。
在翻译中,我尽力使用已有的、被广泛接受的名词或是术语,对于一些译法没有被广泛接受的术语,在不产生歧义的前提下,我会选择一个自以为恰当的词,有时还会给出英文,以避免读者不能将代码和本书给出的名词对应上。还有一些名词尚没有贴切的中文译法,或是译出容易产生歧义,或是国内开发者已习惯使用英文,这时我在翻译中保留了英文原文。这些选择都以帮助理解、避免歧义为首要考虑。
本书的翻译工作得到了很多朋友和网友的关注,希望没有让他们久等。我的同事郭磊涛,作为数据库和HBase 的专家、Cassandra 用户,在本书的翻译过程中给予了很多有益的帮助。感谢现在CSDN 的刘江老师,给我这个机会把Cassandra 介绍给大家。当然,还要感谢图灵的编辑杨海玲、傅志红,还有李松峰在本书的翻译过程中做了大量的细心工作。
希望本书的翻译出版能对读者进入NoSQL 的世界、开始自己的Cassandra 应用有些许的帮助。
第1 章 Cassandra 概况 1
1.1 关系型数据库有什么问题 1
1.2 关系型数据库简单回顾 5
1.2.1 RDBMS:出类拔萃与表现平平 6
1.2.2 互联网的规模 12
1.3 Cassandra 的电梯间演讲 13
1.3.1 50 个字介绍Cassandra 13
1.3.2 分布式与无中心 13
1.3.3 弹性可扩展 14
1.3.4 高可用与容错 15
1.3.5 可调节的一致性 15
1.3.6 Brewer 的CAP 理论 18
1.3.7 面向行 21
1.3.8 无Schema 22
1.3.9 高性能 22
1.4 Cassandra 来自何方 22
1.5 Cassandra 的应用场景 23
1.5.1 大规模部署 23
1.5.2 写密集、统计和分析型工作 24
1.5.3 地区分布 24
1.5.4 变化的应用 24
1.6 谁在使用Cassandra 24
1.7 小结 26
第2 章 安装Cassandra 27
2.1 安装二进制包 27
2.1.1 解压缩 27
2.1.2 里面有什么 27
2.2 从源码编译 28
2.2.1 其他编译目标 30
2.2.2 使用Maven 编译 30
2.3 运行Cassandra 30
2.3.1 在Windows 平台上运行Cassandra 31
2.3.2 在Linux 下运行Cassandra 31
2.3.3 启动服务器 32
2.4 使用命令行界面的客户端 33
2.5 基本命令行命令 34
2.5.1 帮助 34
2.5.2 连接服务器 35
2.5.3 描述环境 35
2.5.4 创建keyspace 和列族 36
2.5.5 读写数据 37
2.6 小结 38
第3 章 Cassandra 的数据模型 39
3.1 关系型数据模型 39
3.2 简介 40
3.3 集群 43
3.4 keyspaces 43
3.5 列族 44
3.6 列 46
3.6.1 宽行与窄行 48
3.6.2 列的排序 49
3.7 超级列 50
3.8 Cassandra 与RDBMS 的设计差别 53
3.8.1 没有查询语言 53
3.8.2 没有引用完整性 53
3.8.3 第二索引 53
3.8.4 排序成为一种设计决策 54
3.8.5 反范式化 54
3.9 设计模式 55
3.9.1 具体化视图 56
3.9.2 无值列 56
3.9.3 聚合键 56
3.10 需要记住的几件事 57
3.11 小结 57
第4 章 应用实例 59
4.1 数据模型设计 59
4.2 酒店应用的关系型数据库设计 60
4.3 酒店应用的Cassandra 设计 61
4.4 酒店应用代码 62
4.4.1 创建数据库 63
4.4.2 数据结构 64
4.4.3 进行连接 65
4.4.4 预装填数据库 66
4.4.5 搜索应用 78
4.5 Twissandra 82
4.6 小结 82
第5 章 Cassandra 的架构 83
5.1 system keyspace 83
5.2 对等结构(P2P) 84
5.3 gossip 与故障检测 84
5.4 逆熵与读修复 86
5.5 memtables、SSTable 和commit log 87
5.6 提示移交 89
5.7 压紧 89
5.8 Bloom filter 91
5.9 墓碑 91
5.10 分阶段事件驱动架构 92
5.11 管理器与服务 93
5.11.1 Cassandra 守护进程 93
5.11.2 存储服务 93
5.11.3 消息服务 93
5.11.4 提示移交管理器 94
5.12 小结 94
第6 章 配置Cassandra 95
6.1 keyspace 95
6.1.1 创建一个列族 98
6.1.2 从0.6 迁移到0.7 99
6.2 副本 99
6.3 副本放置策略 100
6.3.1 简单策略 101
6.3.2 旧网络拓扑策略 102
6.3.3 网络拓扑策略 103
6.4 副本因子 103
6.5 分区器 105
6.5.1 随机分区器 106
6.5.2 有序分区器 106
6.5.3 配页有序分区器 107
6.5.4 字节序分区器 107
6.6 Snitch 107
6.6.1 Simple Snitch 107
6.6.2 PropertyFileSnitch 107
6.7 创建集群 108
6.7.1 修改集群名称 109
6.7.2 给集群增加节点 109
6.7.3 多种子节点 111
6.8 动态加入环 113
6.9 安全 114
6.9.1 使用SimpleAuthenticator 114
6.9.2 编程鉴权 117
6.9.3 使用MD5 加密 118
6.9.4 提供你自己的鉴权算法 118
6.10 杂项设置 119
6.11 附加工具 120
6.11.1 查看键值 120
6.11.2 导入之前版本的配置 120
6.12 小结 122
第7 章 读写数据 123
7.1 Cassandra 与RDBMS 查询的不同 123
7.1.1 没有Update 查询 123
7.1.2 记录级的写原子性 123
7.1.3 不支持服务端事务 123
7.1.4 没有重复键值 124
7.2 写操作的基本属性 124
7.3 一致性级别 124
7.4 读操作的基本属性 126
7.5 API 126
7.6 设置与插入数据 128
7.7 使用简单的get 133
7.8 数据准备 135
7.9 切片谓词 135
7.9.1 使用get slice 读取特定列名 136
7.9.2 通过切片区间获取一组列 137
7.9.3 取出一行中的所有列 138
7.10 get range slices 138
7.11 multiget slice 140
7.12 删除 142
7.13 批量变更 144
7.13.1 批量删除 144
7.13.2 区间鬼影 145
7.14 编程定义keyspace 和列族 145
7.15 小结 146
第8 章 客户端 147
8.1 基本的客户端API 148
8.2 Thrift 148
8.2.1 Thrift 对Java 的支持 151
8.2.2 异常 151
8.2.3 Thrift 小结 152
8.3 Avro 152
8.3.1 Avro Ant 目标 154
8.3.2 Avro 规范155
8.3.3 Avro 小结156
8.4 Git 简介 156
8.5 连接客户端节点 157
8.5.1 客户端列表 157
8.5.2 循环DNS 157
8.5.3 负载均衡器 157
8.6 Cassandra Web 控制台 157
8.7 Hector (Java) 161
8.7.1 特性 161
8.7.2 Hector API 162
8.8 HectorSharp(C#) 162
8.9 Chirper 167
8.10 Chiton (Python) 167
8.11 Pelops (Java) 168
8.12 Kundera (Java ORM) 169
8.13 Fauna (Ruby) 169
8.14 小结 170
第9 章 监控 171
9.1 日志 171
9.1.1 跟踪查看 173
9.1.2 通用技巧 174
9.2 JMX 与MBean 概述 175
9.2.1 MBean 177
9.2.2 集成JMX 179
9.3 通过JMX 与Cassandra 交互 180
9.4 Cassandra 的MBean 181
9.4.1 org.apache.cassandra.concurrent 185
9.4.2 org.apache.cassandra.db185
9.4.3 org.apache.cassandra.gms 186
9.4.4 org.apache.cassandra.service 186
9.5 定制Cassandra 的MBean 188
9.6 运行时分析工具 190
9.6.1 使用JMX 和JHAT 进行堆分析 191
9.6.2 发现线程问题 194
9.7 健康检查 195
9.8 小结 196
第10 章 维护 197
10.1 获取环的信息 198
10.1.1 Info 198
10.1.2 Ring 198
10.2 获取统计信息 199
10.2.1 使用cfstats 199
10.2.2 使用tpstats 200
10.3 基本维护工作 201
10.3.1 修复 201
10.3.2 刷写 202
10.3.3 清理 203
10.4 快照 203
10.4.1 进行快照 203
10.4.2 清除快照 204
10.5 对集群进行负载均衡 205
10.6 退服节点 208
10.7 更新节点 210
10.7.1 删除令牌 210
10.7.2 压紧阈值 210
10.7.3 在一个工作的集群中改变列族 210
10.8 小结 211
第11 章 性能调优 213
11.1 数据存储 213
11.2 回复超时 215
11.3 Commit Log 215
11.4 Memtable 216
11.5 并发 216
11.6 缓存 217
11.7 缓冲区尺寸 218
11.8 使用Python 压力测试 218
11.8.1 生成Python Thrift 接口 218
11.8.2 运行Python 压力测试 220
11.9 启动和JVM 设置 222
11.10 小结 224
第12 章 集成Hadoop 225
12.1 何为Hadoop 225
12.2 使用MapReduce 226
12.3 运行字数统计例子 227
12.3.1 将数据输出到Cassandra 229
12.3.2 Hadoop 流 229
12.4 MapReduce 之上的工具 229
12.4.1 Pig 230
12.4.2 Hive 231
12.5 集群配置 231
12.6 案例 233
12.6.1 Raptr.com: Keith Thornhill233
12.6.2 Imagini: Dave Gardner 233
12.7 小结 234
附录 非关系型数据库大观 235
词汇表 261
关于封面 279
版权声明 280
译者序
对于一位分布式存储系统的开发者,Cassandra 无疑是非常引人注目的,它的无中心架构、高可用性、无缝扩展等继承自亚马逊Dynamo 的特质,相对于其他主从架构的NoSQL 系统更加简洁,也更具有美感。
我从2010 年初开始关注这个系统,并翻译过几篇Cassandra 相关的文章,还引起一些读者热烈的讨论。2010 年底,当刘江老师为本书寻找译者时,我按捺不住,毛遂自荐,并随后在2011 年1 月中下旬,开始了本书的翻译工作。我用了三个月的业余时间,终于在4 月份完成了译稿。因为Cassandra 仍在快速开发中,翻译时我也尽力争取快一些,以便能让中文版出版时不至于落伍。
本书对Cassandra 的概念、架构、配置、使用进行了全面的介绍,非常详尽,而且给出了很多参考信息。对于希望了解Cassandra、评估Cassandra 是否是适合自己的应用,以及开始着手在Cassandra 上进行应用开发的人都是不错的读物。当然,如果想参与Cassandra 的开发或做更深入的工作,还需要直接通过源代码来获取更详尽的信息。
在翻译中,我尽力使用已有的、被广泛接受的名词或是术语,对于一些译法没有被广泛接受的术语,在不产生歧义的前提下,我会选择一个自以为恰当的词,有时还会给出英文,以避免读者不能将代码和本书给出的名词对应上。还有一些名词尚没有贴切的中文译法,或是译出容易产生歧义,或是国内开发者已习惯使用英文,这时我在翻译中保留了英文原文。这些选择都以帮助理解、避免歧义为首要考虑。
本书的翻译工作得到了很多朋友和网友的关注,希望没有让他们久等。我的同事郭磊涛,作为数据库和HBase 的专家、Cassandra 用户,在本书的翻译过程中给予了很多有益的帮助。感谢现在CSDN 的刘江老师,给我这个机会把Cassandra 介绍给大家。当然,还要感谢图灵的编辑杨海玲、傅志红,还有李松峰在本书的翻译过程中做了大量的细心工作。
希望本书的翻译出版能对读者进入NoSQL 的世界、开始自己的Cassandra 应用有些许的帮助。
![]() |