前面提到的SSTable是数据存储的一个文件,BigTable说到底还是一个由表组成的数据库,当我们查找数据时还是要告诉BigTable数据所在的表的名称,在BigTable中,数据表是由Tablet组成的,每个Tablet包含有多个SSTable,并且Tablet的存储是分布式的,意味着,同一个表中的不同Tablet可能会被存储到不同的Tablet服务器上。
当用户想通过表的名字获取表内的数据时,首先要通过表名得到这个表中所有Tablet的位置信息,Tablet的索引结构如下图:
在Chubby服务器中存有一个Root Tablet的信息,Root Tablet中存放的是所有Meta Tablet的位置信息,每一个Meta Tablet中存放的又是用户表的Tablet信息,这种结构类似于B+树,通过这种结构,可以很快地找到用户表的Tablet,下面查找数据的方法则可以结合SSTable中查找数据的方法。
为了快速地找到相应的Tablet,BigTable为Tablet的读取提供了缓存机制,在每次读取某个Tablet时,会多读出几条Tablet信息,供下次查询使用。这种缓存的思路可以借鉴应用到其他系统中。
关于Tablet的分配,这个涉及到BigTable关于服务器加入和退出的机制,下一篇进行讨论。
时间: 2024-10-25 08:25:29