写流程
这里主要考虑两件事:
- RegionServer保存不同范围的Region,那么我想读写数据的时候,我怎么知道Region和Server的映射关系,即我怎么知道我要的Region保存在哪个Server上呢?
- MemStore刷写回StoreFile的时机是?
回答第一问题,答案是,把映射关系保存在一张meta表中,meta表保存在其中一个节点。那问题又来了,meta表我怎么知道它存在哪里呢?答案是,meta表的meta表保存在zookeeper约定位置处~
所以,写流程是这样的。
- client访问zk,获取meta表保存位置
- 请求meta表
- 为了效率,meta表会保存在缓存中
- 写入
- 通过meta表找到目标region,发送数据,写入
- 首先写入wal,然后保存到MemStore,排序
- 向客户端返回ack
读流程
读流程
理解了写流程,读流程就简单了。
- 关于meta表和写流程的一致
要注意的是两点:
- 读的时候,为了查询速度,假如了缓存,存放在Block Cache
- 由于多个存储位置,所以读的时候是Block Cache - MemStore - StoreFile