cassandra随机获取数据_Cassandra源码阅读(6)-数据读取流程

本文详细介绍了Cassandra的数据读取过程,包括节点选择、读取策略、Memtable和SSTable的数据检索。首先,根据snitch选择副本节点,然后进行摘要请求,对比数据一致性。如果摘要匹配则返回数据,否则启动ReadRepair。接着,文章深入探讨了查询Memtable和SSTable的步骤,涉及Memtable的查询、SSTable的选择和排序,以及如何构建迭代器进行数据合并。
摘要由CSDN通过智能技术生成

本文主要描述Cassandra的数据读取流程,包括节点的选定以及选定以后如何从Memtable和SSTable读取数据的过程.

节点的选定流程

主入口在SelectStatmemt.execute(NormalPager…)这里,最终调用到storageProxy.read上面。这里只讨论ConsistencyLevel不为serial的情况,且指定partitionKey没有aggressive的读取过程,在CQL中查询多个partitionKey的话,Cassandra会按照单个key逐个异步向对应机器查询,然后同步等待并返回结果。

整体思路

整体读过程的思路如下:

按照响应时间的快慢从snitch中获取副本节点的位置,snitch是cassandra中负责节点位置的组件。

按照partitionKey发送请求到最近的副本,在下列情况中,同时发送摘要请求到:

2.1 如果打开了readrepair,发送到所有副本

2.2 最近的R-1个副本,R是ConsistencyLevel指定的个数

等待从R个副本的返回

如果摘要与读取数据的摘要一致就返回,不一致就从所有副本中读数据并开始ReadRepair

代码细节按照查询的key获取对应的所有副本节点

生成一个随机数,如果大于配置的readRepairChance就为此次查询开启一个全局的readrepair(readRepairDecision.GLOBAL),否则就不开启(readRepairDecision.NONE)

根据2的readRepairDecision来决定查询的副本,如果是NONE的话就只要ConsistencyLevel中指定的个数,如果是GLOBAL就对应该key的全部副本节点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值