数据存储之HBase数据读写流程
HBase写数据流程
写数据流程:
- client访问zookeeper,获取元数据表位于哪个regionserver
- 前往目标regionserver,拿到元数据表并根据rowkey等信息查询出数据应该位于哪个regionserver的哪一个region中,并将这个表的region信息以及meta表的位置信息缓存在客户端的meta cache,以便下次访问
- 与目标regionserver通信
- 将写入操作顺序写入(追加)到WAL
- 将数据写入对应的memstore,数据会在memstore中进行排序
- 向客户端发送ack,告知写入成功
- 等待到了memstore的刷写时机后,将数据刷写到storeFile中
HBase读数据流程
读数据流程:
- client先访问zookeeper,获取元数据表位于哪个regionserver
- 前往目标regionserver,拿到元数据表并根据rowkey等信息查询出数据应该位于哪个regionserver的哪一个region中,并将这个表的region信息以及meta表的位置信息缓存在客户端的meta cache,以便下次访问
- 与目标regionserver通信
- 按顺序去Block Cache(读缓存)、memstore和HFile中查询目标数据,并且将查到的所有数据进行合并。此处所有数据指的是同一条数据的不同版本(timestamp)或者不同操作类型
- 将从文件中查询到的数据块(Block:HFile数据存储单元,默认大小为64kb)缓存到Block cache
- 将合并后的结果返回给客户端