上图中展示了一个4byte的列的索引在hyper中的PSMA怎么工作的。按照Hyper的索引方式,lookuptable的有4byte*2^8= 2^1024个entry。
其中,重要的的就是,如何将min和max之间的数据用这1024个entry表示。
那么entry的计算方式是:其中,r是byteofdelta中除开第一个非0 的byte后剩余的byte数量。
我们现在来验证可行性,假设这个列是4byte,min是0,max是2^32,那么如果我们探测2^32,得到的 i = 2 ^ 8 + 3 * 2^8 ,这个时候,依然会将index锁定在lookup table里面。
从上面的图片中可以看出来,对于数据小的部分,索引是更加精确的。所以,为了稍微平衡这种情况,Hyper中才会用数值与min之差作为delta,这样可以让更多的数据能够被映射到数据值小的对应的entry上面(数据值小的entry里面含有的数据量是更小的)。
不过这样带来的好处就是可以通过值找到相应的范围。而不需要遍历所有的元数据的范围信息再找到值在哪里(比如我们的系统)。
建立lookuptable过程,就是个scan列数据的过程