LSM存储和定位
LSM存储
主要思想是直接修改树结构,而不是分几层修改。当第一关完成后,反馈就完成了,剩下的就交给后台处理了。
流程是先写入内存表,然后合并到低级sstable,最后合并到高级sstable。
以下是Hbase的总体结构:
2、定位
Trailer——这部分是固定长度的。保存每个段的偏移量。读取HFile时,会先读取Trailer。 Trailer保存每个片段的起始位置(片段的Magic Number用于安全检查)。然后,DataBlock 索引x 将被读取。获取到内存中,这样在检索某个key时,不需要扫描整个HFile,而只需要从内存中找到key所在的block,通过磁盘将整个block读入内存IO,然后找到需要的key。使用LRU机制消除DataBlock Index。
首先,可以快速找到该行所在的区域(分区)。假设该表有10亿条记录,占用1TB空间。分为500个区域,1个区域占用2G。最大读取取2G记录即可找到对应的记录;
其次是按列存储,其实就是列族。假设分为3个列族,每个列族666M。如果要查询的事物都在其中一个列族上,并且一个列族包含一个或多个HStoreFile。假设1个HStoreFile为128M,列族在磁盘上包含5个HStoreFile。其余的都是e 在内存中。
再次排序。您想要的记录可能位于前面或末尾。假设是中间,我们只需要遍历2.5个HStoreFile共300M
最终每个HStoreFile(HFile的封装)都以键值对的形式存储。只需要遍历每个数据块中的关键位置,判断是否满足条件即可。就是这样。一般情况下,key的长度是有限的,假设它和value是1:19(突然省略HFile上的其他块),只需要15M就可以获得对应的记录。按照100M/S的磁盘访问速度计算,仅需0.15秒。加上块缓存机制(LRU原理),将会获得更高的效率。
感谢您的阅读。以上就是《LSM存储与定位》的内容。经过文章的学习,相信大家对LSM存储和定位的问题有了更进一步的了解。深刻的理解和专业具体用法还有待大家验证。在此,小编将为大家推送更多相关知识点的文章,欢迎关注!