写操作流程
- client通过zookeeper的调度,向相应的RegionServer发出写请求,在相应的region中写数据。
- 数据先写入hlog,然后写入memstore,知道memstore到达一定的阈值。
- memstore到达阈值后,会创建一个新的memstore,并将老的添加到flush队列,由单独的线程flush到磁盘上,成为一个storeFile。与此同时,zookeeper会记录一个checkpoint点,表示这个时间之前的数据已经持久化了,到系统故障导致memstore丢失的时候,可以通过hlog进行数据的恢复。
- 随着storeFile的不断增多,当其数量达到一定的阈值之后,会触发Compact操作,将多个StoreFile合并成一个,对同一个key的修改合并到一起,同时对版本进行合并删除。
- 通过不断合并,当StoreFile到达一定大小的时候,会触发Split操作,把当前Region的文件,分成两个文件,放到相应的Region,此时父Region会下线。这样使得原先1个Region的压力得以分流到2个Region上。
读操作流程
- client访问zookeeper,通过读取meta表,读取region信息。
- 根据namespace、表名和rowkey在meta表中找到对应的region信息。
- 通过region信息找到相应的RegionServer。
- 通过RegionServer找到相应的数据存放的Region,并读取数据。
- Regionserver的内存分为MemStore和BlockCache两部分,MemStore主要用于写数据,BlockCache主要用于读数据。读请求先到MemStore中查数据,查不到就到BlockCache中查,再查不到就会到StoreFile上读,并把读的结果放入BlockCache。