这两天了解了下倒排索引底层的一些数据处理机制,看到lucene的实现中,会真多字符串或数字做压缩,从而减小磁盘内存占用空间,同时提升检索效率。
例如delta encoding,他是将顺序的数值进行压缩,只保存一个增量数字,1000,1001,1002,1003保存成 1000,1,2,3 压缩数值大小,结合变长压缩等讲小数字占用位数降下来,达到减小占用空间的效果。
但是这种数据要怎么查询呢,比如索引 teerm index部分的数据对数字创建索引,数据插入的时候进行编码,会导致很多数据不再是原来的数值,如果插入过程中出现类似平衡树那样的旋转或者b+树的分裂等等,要怎么找到这个数字本身的值呢?
例如delta encoding,他是将顺序的数值进行压缩,只保存一个增量数字,1000,1001,1002,1003保存成 1000,1,2,3 压缩数值大小,结合变长压缩等讲小数字占用位数降下来,达到减小占用空间的效果。
但是这种数据要怎么查询呢,比如索引 teerm index部分的数据对数字创建索引,数据插入的时候进行编码,会导致很多数据不再是原来的数值,如果插入过程中出现类似平衡树那样的旋转或者b+树的分裂等等,要怎么找到这个数字本身的值呢?
3 个回复
ghnjk
赞同来自: 王庆焕
一个猜想:磁盘读写不会只操作几个字节。 是不是根据block选择压缩算法进行压缩block的数据。读取的时候,反正需要读取一块区域的数据。读取过程中进行解压。
王庆焕 - https://discuss.elastic.co/u/wangqinghuan/
赞同来自: ghnjk
zqc0512 - andy zhou
赞同来自:
我用这么久好像还没有发现修改值的情况。
在kibana上面 search的时候,你发现有变化的话,看json内容。这是没有修改的。