1.读数据流程
①zookeeper存放-ROOT-表的起始地址,先从zookeeper中获取-ROOT-表,然后从-ROOT-表中获取.META.的region信息。接着读取.META.的数据,获取用户表的region信息。
②根据namespace, 表名, rowkey在meta中找到对应的region信息。
③根据获取到的信息,找到该region所在的regionserver。
④在regionserver上找到对应的region。
⑤先从Memstore读取数据,若没有,再到StoreFile上读取。
2.写数据流程
①zookeeper存放-ROOT-表的起始地址,先从zookeeper中获取-ROOT-表,然后从-ROOT-表中获取.META.的region信息。接着读取.META.的数据,获取用户表的region信息。
②根据namespace, 表名, rowkey在meta中找到对应的region信息。
③根据获取到的信息,找到该region所在的regionserver。
④把数据写入到MemStore,并且数据操作写入到HLog(WAL)。
⑤MemStore达到一个阈值(相对上限,绝对上限)后,把MemStore中的数据flush成一个StoreFile。若数据有丢失,HLog可以恢复。
(到达绝对上限后进行flush易出现很多小的storefile)
⑥多个storefile对读性能有很大的影响,为了降低对读性能的影响,需要定期对storefile进行合并(compaction)。将对个storefile合并成一个storefile(major compaction和 minor compaction),同时进行版本的合并和数据删除。
⑦Compaction之后,storefile大于临界值时,将storefile利用split操作分成两个,相当于region的分裂。