Cassandra 数据读取过程
2015-08-10 15:00
369 查看
讲解
橘黄色的部分都是位于JVM heap中的组件(位于内存中 on heap)。蓝色的部分也位于内存之中但不是出于JVM heap中(off heap)。
Coordinator是接受到由client发来的读请求的节点。
Memtable 是位于JVM heap中的表。它会周期性地flush到硬盘上成为SSTable。
SSTable 是位于硬盘上的表,无法修改。它会周期性地与其他的SSTable合并,该过程成为compaction。
Partition Index 是对于SSTable 文件的索引。内容是每个key的偏移量。它是位于硬盘上的文件。
Partition Summary 是对于 Partition Index 的二级索引。类似于一个简化版的 Partition Index。用于加速 Partition Index 的查找。它是位于内存中(off heap)的结构。Partition Summary 相当于是 Partition Index 的一个抽样。可以设置成每128个 Partition Index 中的记录就放入 Partition Summary中一个。
BloomFilter 是用于确定SSTable是否包含指定key的概率数据结构。它位于内存中,同样是 off heap。
Key Cache 是一个缓存。用于确定查找的 key 的位于SSTable的偏移地址是否之前已经被缓存。
Row Cache 是一个缓存。用于加速查找的 key 的整列value。
读请求的过程
1. 接收到读请求 Read <pk7>。
2. 在 Row Cache 中查找 pk7 的value 是否已经被缓存。若在缓存中找到 pk7 的 value,返回。
3. 若缓存中没有找到 pk7,查找每个 SSTable 的 BloomFilter,看是否在该 SSTable 中。如果 BloomFilter 表示该 SSTable 不存在 pk7,则不需要查看该 SSTable 的 Partition Summary 和 Partition Index。
4. 查找 SSTable 的 Partition Summary。确定 pk7 在 Partition Index 中的大概位置。再查找 Partition Index 中 pk7 位于 SSTable 中的偏移量。并且在查找完成之后将 pk7 位于 SSTable 中的偏移量放入 Key Cache 中,并且每个 SSTable 的偏移量都要放进去。
5. 在各个 SSTable 中找到 pk7 的所有 value,再在 Memtable 中找到 pk7 的 value。 对所有的 value 进行合并操作,原则是取时间戳最新的数据作为正确地数据。
6. 将合并后的数据返回给 Coordinator 并且将 pk7 及其 value 放入 Row Cache 缓存中。
相关文章推荐
- was7.0 IHS 安装配置
- 15个最受欢迎的Python开源框架
- POJ 2976-Dropping tests(01分数规划_二分||Dinkelbach算法)
- poj 2836 子集 状态压缩dp
- 文章标题
- 控件学习---UILabel--摘自培训资料
- BASH练习第三课
- Android典型界面设计(5)——使用SlidingMenu和DrawerLayout分别实现左右侧边栏
- 15个最受欢迎的Python开源框架
- Northwind数据库下载地址
- 一款带百分比渐变的js网页Loading进度条效果
- HDU 1160
- Hibernate缓存机制
- signal()
- CPU占用率100%解决方法
- thinkphp操作数据库
- Team Foundation Server (TFS) 2015 安装指导
- 结构体用于STL容器
- 【转】深入理解 Session 与 Cookie
- iOS代码实现 excel文件导出