StoreFile是实际数据的物理文件,以HFile的形式存储在HDFS上。每个Store可能包含一个或多个StoreFile(HFile),并且每个StoreFile中的数据都是有序的。
MemStore是写缓存。由于HFile要求数据必须有序,因此数据首先存储在MemStore中,待满足一定的刷写条件后,再写入HFile。每次刷写都会创建一个新的HFile。
为了防止数据因保存在内存中而丢失,数据会先被写入一个名为Write-Ahead Log(WAL)的日志文件,然后再写入MemStore。这样,在系统出现故障时,可以通过日志文件恢复数据。
BlockCache是读缓存。查询出的数据会被缓存在这里,以便下次查询时能够更快地获取。
当某个MemStore的大小达到默认值128MB时,其所在Region的所有MemStore都会被刷写。
当Region Server中所有MemStore的总大小达到Java堆大小的40%乘以0.95时,Region会按照MemStore的大小从大到小的顺序依次刷写,直到总大小低于设定值。
到达自动刷写的时间间隔(默认为1小时),也会触发MemStore刷写。
当WAL文件的数量超过32个时,Region会按时间顺序依次刷写,直到WAL文件数量减少到32个以下。
希望这些信息对你有所帮助!如果你有任何其他问题或需要进一步的信息,请随时联系我。