目录 序 .1 前言 .3 第1 章 超越关系型数据库 13 1.1 关系型数据库有什么问题? 13 1.2 关系型数据库速览 18 1.2.1 事务、ACID 性和两段提交 19 1.2.2 模式 21 1.2.3 分片和无共享架构 22 1.3 网络规模 25 1.4 NoSQL 的兴起 26 1.5 小结 29 第2 章 Cassandra 简介 30 2.1 Cassandra 电梯间演讲 30 2.1.1 50 字Cassandra 介绍 . 30 2.1.2 分布式与去**化 31 2.1.3 弹性可扩展 . 32 2.1.4 高可用性和容错性 33 2.1.5 可调一致性 . 33 2.1.6 Brewer 的CAP 理论 36 2.1.7 面向行 40 2.1.8 高性能 42 2.2 Cassandra 从哪里来? 42 2.3 Cassandra 适合我的项目吗? 44 2.3.1 大规模部署 . 44 2.3.2 大量写操作、统计和分析 44 2.3.3 多地分布 45 2.3.4 混合云和多云部署 45 2.4 参与其中 45 2.5 小结 48 第3 章 安装Cassandra 49 3.1 安装Apache 发布版本 49 3.1.1 解压缩下载包 50 3.1.2 里面有什么? . 50 3.2 从源码构建 . 51 3.3 运行Cassandra . 53 3.3.1 设置环境 54 3.3.2 启动服务器 . 55 3.3.3 停止Cassandra . 57 3.4 其他Cassandra 发布版本 . 58 3.5 运行CQL Shell . 59 3.6 基本cqlsh 命令 . 60 3.6.1 cqlsh 帮助 61 3.6.2 cqlsh 中描述环境 . 62 3.6.3 cqlsh 中创建键空间和表 . 62 3.6.4 cqlsh 中读写数据 . 66 3.7 Docker 中运行Cassandra . 69 3.8 小结 70 第4 章 Cassandra 查询语言 71 4.1 关系型数据模型 71 4.2 Cassandra 的数据模型 72 4.2.1 集群 75 4.2.2 键空间 76 4.2.3 表 . 76 4.2.4 列 . 80 4.3 CQL 类型 . 83 4.3.1 数值数据类型 83 4.3.2 文本数据类型 84 4.3.3 时间和标识数据类型 . 85 4.3.4 其他简单数据类型 87 4.3.5 集合 89 4.3.6 元组 93 4.3.7 用户自定义类型 93 4.4 小结 97 第5 章 数据建模 98 5.1 概念数据建模 98 5.2 RDBMS 设计 . 99 5.3 定义应用查询 . 103 5.4 逻辑数据建模 . 105 5.4.1 酒店逻辑数据模型 106 5.4.2 预订逻辑数据模型 109 5.5 物理数据建模 . 110 5.5.1 酒店物理数据模型 112 5.5.2 预订物理数据模型 113 5.6 评估和改进 114 5.6.1 计算分区大小 . 114 5.6.2 计算磁盘上的大小 115 5.6.3 划分大分区 117 5.7 定义数据库模式 118 5.8 小结 . 123 第6 章 Cassandra 架构 . 124 6.1 数据**和机架 124 6.2 Gossip 和故障检测 125 6.3 Snitch . 128 6.4 环和令牌 129 6.5 虚拟节点 130 6.6 分区器 131 6.7 复制策略 132 6.8 一致性级别 133 6.9 查询和协调器节点 134 6.10 提示移交 . 135 6.11 逆熵、修复和Merkle 树 . 137 6.12 轻量级事务和Paxos . 138 6.13 Memtable、SSTable 和提交日志 140 6.14 布隆过滤器 143 6.15 缓存 143 6.16 合并 144 6.17 删除和墓碑 146 6.18 管理器和服务 147 6.18.1 Cassandra 守护进程 147 6.18.2 存储引擎 . 147 6.18.3 存储服务 . 148 6.18.4 存储代理 . 149 6.18.5 消息传递服务 149 6.18.6 流管理器 . 149 6.18.7 CQL 原生传输服务器 150 6.19 系统键空间 150 6.20 小结 153 第7 章 设计使用Cassandra 的应用 . 154 7.1 酒店应用设计 . 154 7.1.1 Cassandra 和微服务架构 154 7.1.2 一个酒店应用的微服务架构 156 7.1.3 识别限界上下文 157 7.1.4 识别服务 157 7.1.5 设计微服务持久存储 159 7.2 扩展设计 162 7.2.1 二级索引 163 7.2.2 物化视图 167 7.3 预订服务:一个示例微服务 171 7.4 部署和集成问题 172 7.4.1 服务、键空间和集群 172 7.4.2 数据**和负载平衡 173 7.4.3 微服务间的交互 173 7.5 小结 . 175 第8 章 使用驱动程序开发应用 176 8.1 DataStax Java 驱动程序 . 177 8.1.1 开发环境配置 . 178 8.1.2 连接集群 179 8.1.3 语句 . 181 8.1.4 简单语句 181 8.1.5 准备语句 183 8.1.6 查询生成器 185 8.1.7 对象映射器 187 8.1.8 异步执行 191 8.1.9 驱动程序配置 . 193 8.1.10 元数据 . 200 8.1.11 调试和监控 202 8.2 DataStax Python 驱动程序 203 8.3 DataStax Node.js 驱动程序 204 8.4 DataStax C# 驱动程序 205 8.5 其他Cassandra 驱动程序 205 8.6 小结 . 207 第9 章 读写数据 208 9.1 写 208 9.1.1 写一致性级别 . 208 9.1.2 Cassandra 写路径 210 9.1.3 文件写入磁盘 . 212 9.1.4 轻量级事务 215 9.1.5 批处理 218 9.2 读 221 9.2.1 读一致性级别 . 221 9.2.2 Cassandra 读路径 223 9.2.3 读修复 225 9.2.4 区间查询、排序和过滤 . 228 9.2.5 分页 . 231 9.3 删除 . 233 9.4 小结 . 236 第10 章 配置和部署Cassandra . 237 10.1 Cassandra 集群管理器 . 237 10.1.1 创建集群 . 238 10.1.2 为集群增加节点 . 241 10.1.3 动态加入环 243 10.2 节点配置 . 244 10.2.1 种子节点 . 244 10.2.2 Snitch 245 10.2.3 分区器 . 247 10.2.4 令牌和虚拟节点 . 249 10.2.5 网络接口 . 250 10.2.6 数据存储 . 251 10.2.7 启动和JVM 设置 253 10.3 规划集群部署 254 10.3.1 集群拓扑和复制策略 255 10.3.2 确定集群规模 258 10.3.3 选择实例 . 259 10.3.4 存储 259 10.3.5 网络 260 10.4 云部署 . 261 10.4.1 Amazon Web 服务 262 10.4.2 Google 云平台 . 265 10.4.3 Microsoft Azure 266 10.5 小结 266 第11 章 监控 268 11.1 用JMX 监控Cassandra 268 11.2 Cassandra 的MBean . 271 11.2.1 数据库MBean . 272 11.2.2 集群相关MBean . 276 11.2.3 内部MBean 278 11.3 用nodetool 监控 . 279 11.3.1 获得集群信息 280 11.3.2 获得统计信息 283 11.4 虚拟表 285 11.4.1 系统虚拟模式 286 11.4.2 系统视图 . 287 11.5 指标 290 11.6 日志 292 11.6.1 检查日志文件 295 11.6.2 全量查询日志 296 11.7 小结 298 第12 章 维护 . 299 12.1 健康检查 . 299 12.2 常见维护任务 300 12.2.1 刷新输出 . 300 12.2.2 清理 301 12.2.3 修复 302 12.2.4 重建索引 . 307 12.2.5 移动令牌 . 308 12.3 增加节点 . 308 12.3.1 向已有的数据**增加节点 . 308 12.3.2 向集群增加数据** 309 12.4 处理节点故障 311 12.4.1 修复失败节点 311 12.4.2 替换节点 . 312 12.4.3 移除节点 . 313 12.5 升级Cassandra . 317 12.6 备份和恢复 319 12.6.1 建立快照 . 320 12.6.2 清除快照 . 321 12.6.3 启用增量备份 322 12.6.4 从快照恢复 322 12.7 SSTable 实用工具 323 12.8 维护工具 . 325 12.8.1 Netflix Priam 325 12.8.2 DataStax OpsCenter 325 12.8.3 Cassandra Sidecars . 325 12.8.4 Cassandra Kubernetes Operators . 327 12.9 小结 330 第13 章 性能调优 . 331 13.1 管理性能 . 331 13.1.1 设置性能目标 331 13.1.2 基准测试和压力测试 333 13.1.3 监控性能 . 338 13.1.4 分析性能问题 340 13.1.5 跟踪 340 13.1.6 调优方法 . 343 13.2 缓存 344 13.2.1 键缓存 . 344 13.2.2 行缓存 . 345 13.2.3 块缓存 . 346 13.2.4 计数器缓存 347 13.2.5 保存的缓存设置 . 347 13.3 Memtable 348 13.4 提交日志 . 349 13.5 SSTables . 350 13.6 提示移交 . 351 13.7 合并 352 13.8 并发和线程 356 13.9 网络和超时 357 13.10 JVM 设置 . 359 13.10.1 内存 360 13.10.2 垃圾回收 360 13.11 小结 364 第14 章 ** . 365 14.1 认证和授权 367 14.1.1 密码认证器 367 14.1.2 使用CassandraAuthorizer 371 14.1.3 基于角色的访问控制 373 14.2 加密 375 14.2.1 SSL、TLS 和证书 . 376 14.2.2 节点间加密 379 14.2.3 客户端- 节点间加密 . 381 14.3 JMX **性 382 14.3.1 保护JMX 访问** 383 14.3.2 **MBean 385 14.4 审计日志 . 386 14.5 小结 389 第15 章 迁移和集成 390 15.1 了解何时迁移 390 15.2 调整数据模型 391 15.2.1 转换实体 . 393 15.2.2 转换关系 . 394 15.3 调整应用 . 396 15.3.1 重构数据访问 397 15.3.2 维护一致性 398 15.3.3 迁移存储过程 400 15.4 规划部署 . 405 15.5 迁移数据 . 406 15.5.1 零停机迁移 406 15.5.2 批量加载 . 407 15.6 常见集成 . 409 15.6 1 使用Apache Kafka 管理数据流 409 15.6.2 用Apache Lucene、SOLR 和Elasticsearch 搜索 412 15.6.3 使用Apache Spark 分析数据 413 15.7 小结 421