第1章 认识NoSQL 1
1.1 NoSQL的起源和发展现状 2
1.2为什么要使用NoSQL 2
1.3开源NoSQL产品介绍 3
1.3.1 KeyValue的NoSQL数据库 3
1.3.2面向文档的NoSQL数据库 4
1.3.3面向列的NoSQL数据库 5
1.3.4面向图的NoSQL数据库 6
1.4本章小结 7
第2章Cassandra快速入门 9
2.1在Windows环境运行单机版Cassandra 10
2.1.1配置JRE 10
2.1.2配置运行Cassandra 0.6x 11
2.1.3配置运行Cassandra 0.7 x 12
2.2在Linux环境运行单机版Cassandra 14
2.2.1配置JRE 14
2.2.2配置运行Cassandra 0.6 x 15
2.2.3配置运行Cassandra 0.7 x 16
2.3 Cassandra的数据模型 18
2.3.1 Column 18
2.3.2 SuperColumn 18
2.3.3 ColumnFamily 19
2.3.4 Keyspace 20
2.4 Cassandra的数据排序规则 20
2.5配置数据类型 22
2.6使用命令行工具与Cassandra交互 23
2.6.1与Cassandra 0.6 x进行交互 23
2.6.2与Cassandra 0.7 x进行交互 24
2.7本章小结 26
第3章 理解Cassandra编程接口 27
3.1多语言服务开发框架Thrift 28
3.2 Cassandra的数据类型 28
3.2.1 Column 28
3.2.2 SuperColumn 29
3.2.3 ColumnOrSuperColumn 29
3.2.4 ColumnParent 29
3.2.5 ColumnPath 30
3.2.6 SliceRange 30
3.2.7 SlicePredicate 30
3.2.8 Deletion 31
3.2.9 Mutation 31
3.2.10 KeyRange 31
3.2.11 KeySlice 32
3.2.12 TokenRange 32
3.2.13 AuthenticationRequest 32
3.2.14 ConsistencyLevel 33
3.2.15 NotFoundException 33
3.2.16 InvalidRequestException 34
3.2.17 UnavailableException 34
3.2.18 TimedOutException 34
3.2.19 AuthenticationException 34
3.2.20 AuthorizationException 35
3.3 Cassandra的编程接口 35
3.3.1 get 35
3.3.2 get_slice 36
3.3.3 multiget_slice 36
3.3.4 get_count 37
3.3.5 get_range_slices 37
3.5.6 insert 38
3.3.7 remove 38
3.3.8 batch_mutate 39
3.3.9 describe_keyspaces 39
3.3.10 describe_keyspace 39
3.3.11 describe_cluster_name 40
3.3.12 describe_version 40
3.3.13 describe_ring 40
3.4 Cassandra0.7 x版本新增功能 40
3.4.1二级索引 40
3.4.2动态修改Schema 44
3.4.3自动清除过期数据 46
3.5本章小结 47
第4章 基于Cassandra的在线交易系统 49
4.1需求分析 50
4.2数据模型设计 50
4.2.1 Seller 50
4.2.2 Buyer 51
4.2.3 Product 51
4.2.4 ProductCategory 52
4.2.5 Comment 53
4.3编码实现 54
4.3.1修改Keyspace设置 54
4.3.2建立Eclipse项目 54
4.3.3实体对象实现 55
4.3.4 Cassandra数据操作接口实现 56
4.4系统功能验证 60
4.4.1 BuyerDao功能验证 60
4.4.2 SellerDao功能验证 61
4.4.3 ProductDao功能验证 62
4.5迁移到Cassandra0.7x 65
4.5.1建立Eclipse项目 65
4.5.2修改编译错误代码 65
4.5.3新增Schema在线定义功能 69
4.5.4功能验证 70
4.6本章小结 71
第5章Cassandra的集群机制 73
5.1一致性哈希 74
5.1.1理解一致性哈希 74
5.1.2一致性哈希在Cassandra中的应用 77
5.2 Gossip:集群节点之间的通信协议 81
5.2.1 FailureDetector 82
5.2.2 Gossiper 83
5.3集群的数据备份机制 88
5.3.1 EndpointSnitch 88
5.3.2 ReplicationStrategy 91
5.4集群状态变化的处理机制 96
5.4.1 StorageLoadBalancer 96
5.4.2 StorageService 97
5.4.3 MigrationManager 98
5.5本章小结 99
第6章Cassandra的内部数据存储结构 101
6.1 Cassandra中的数据存放规则 102
6.2 Commilog 102
6.3 Memtable 103
6.4 SSTable 105
6.4.1 Filter文件 105
6.4.2 Index文件 107
6.4.3 Data文件 109
6.4.4 Statistics文件 113
6.5系统表空间 113
6.6本章小结 114
第7章Cassandra的数据更新机制 115
7.1数据更新流程 116
7.2集群数据更新策略 116
7.2.1 ANY 120
7.2.2 ONE 121
7.2.3 QUORUM 121
7.2.4 LOCAL_QUORUM 121
7.2.5 EACH_QUORUM 121
7.2.6 ALL 121
7.3二级索引 122
7.3.1为什么需要二级索引 122
7.3.2 Cassandra二级索引更新过程 123
7.4本章小结 124
第8章Cassandra的数据读取机制 125
8.1数据读取流程 126
8.1.1弱读取 126
8.1.2强读取 128
8.2集群数据读取策略 131
8.2.1 ONE 132
8.2.2 QUORUM 132
8.2.3 LOCAL_QUORUM 132
8.2.4 EACH_QUORUM 132
8.2.5 ALL 133
8.3读修复 133
8.4数据缓存 134
8.4.1 RowCache 134
8.4.2 KeyCache 134
8.5二级索引 135
8.6本章小结 135
第9章Cassandra的数据压缩机制 137
9.1为什么要进行数据压缩 138
9.2如何控制数据压缩 138
9.3数据压缩流程 139
9.4维护Cassandra中的数据 143
9.4.1数据清理压缩 143
9.4.2数据一致性校验压缩 144
9.5本章小结 144
第10章Cassandra的启动流程 145
10.1 Cassandra启动脚本 146
10.2 Cassandra启动流程 149
10.2.1配置log4j 150
10.2.2读取校验配置文件信息 150
10.2.3加载所有的数据文件 152
10.2.4修复数据 154
10.2.5启动Gossiper服务 155
10.2.6判断是否需要进行Bootstrap操作 156
10.2.7监听Thrift端口,提供Thrift服务 157
10.3本章小结 157
第11章 在分布式环境中使用的Cassandra 159
11.1在Linux环境中搭建与使用Cassandra集群 160
11.1.1配置JRE 160
11.1.2部署Cassandra可执行文件 161
11.1.3修改Cassandra配置文件 162
11.1.4启动Cassandra 163
11.2 Cassandra运行配置项详解 166
11.3 Cassandra集群的运行和维护 175
11.3.1查看集群的运行情况 176
11.3.2添加节点 179
11.3.3删除节点 181
11.3.4移动节点 183
11.3.5数据维护 185
11.4本章小结 187
第12章Cassandra与Hadoop的整合 189
12.1 Hadoop快速入门 190
12.1.1 Hadoop简介 190
12.1.2 HDFS 190
12.1.3 MapReduce 192
12.1.4配置单机版Hadoop 194
12.1.5编写MapReduce程序 195
12.2为什么要整合Cassandra与Hadoop 200
12.3使用MapReduce导入数据到Cassandra中 200
12.4将Cassandra中的数据作为MapReduce输入 205
12.5本章小结 209
第13章Cassandra最佳实践 211
13.1避免Cassandra自身的限制 212
13.1.1不要盲目使用Super Column 212
13.1.2硬盘的容量大小限制 212
13.1.3注意系统大小限制 212
13.2数据压缩策略 213
13.3使用高级的客户端 213
13.3.1 Pycassa 213
13.3.2 Hector 215
13.3.3 FluentCassandra 218
13.3.4 Cassandra 220
13.3.5 phpcassa 221
13.4负载均衡 222
13.4.1随机选取 222
13.4.2缓存集群信息 222
13.5谨慎使用二级索引 223
13.6通过JMX监测Cassandra 223
13.7调整JVM启动参数 229
13.8使用适合的系统配置参数 231
13.9本章小结 232
附录A在Eclipse中修改Cassandra源代码 233
附录B CassSeller代码 243
附录C CassSeller-0.7代码 273