三人行必有我师

Lucene里面关于存储压缩的疑问

Lucene | 作者 Charele | 发布于2024年05月19日 | 阅读数:2391

1111.PNG

网上截个图来说明这个问题,缺省ES会用_source这个字段来存原始内容。
有两种方法,缺省的lz4和deflate。
deflate方式用的是Java类来处理的,干涉不了。
lz4是手工代码,也就是我们可以完全理解它。
 
如果你想理解这块代码,可以直接关注LZ4WithPresetDictCompressor类,
在这里开始压缩数据,写数据文件。
 
另外:DeflateWithPresetDictCompressor是deflate方式的实现。
  
这里面有一个问题这些天一真没有想明白。
已邀请:

Charele - Cisco4321

赞同来自:

2222.png

(如果内容很大,分先分片)
一个分片,它会先取一段作为字典,然后把余下的分为10个块,
然后对字典和10个块,进行LZ4压缩,存入fdt文件。
 
关于这里lz4处理细节,可以看大神博客:
https://amazingkoala.com.cn/Lu ... /LZ4/
 
 我的疑问是:这里的字典,其实它就是要压缩的内容一部分,
并不是什么一般意义上那种字典。它在这里有什么作用???

Charele - Cisco4321

赞同来自:

代码上实在找不到答案了,我验证了一下想法“这个字典没什么用”
4444.PNG

3个框里的,分别是内容总长度,字典长度,和块长度。
 
缺省时,字典长度是总长度是1 / 20。
我在这里把字典长度强制设为0,不让它生成字典。
结果一切正常,文档可以正常读出来。
那这个字典的作用究意何在?我感觉还有我没有理解的地方,,,
 

Charele - Cisco4321

赞同来自:

关于ES中这块内容,除了上面的博客,
百度上找不到什么有价值的东西了。
 
 https://zhuanlan.zhihu.com/p/649989843
这里说的是替换压缩算法的事,
 
算法有现成的jar包,换一下也不能什么难事,
所以算不上什么powerful的事

Charele - Cisco4321

赞同来自:

1111.PNG

 
ES里有一个LZ4压缩工具jar包,只不过这个和本主题无关。
它是用来对节点间传输的网络数据进行压缩的。

Charele - Cisco4321

赞同来自:

1111.PNG

 
新版ES里,ZStandard成了标准,另外两种估计没人用了

要回复问题请先登录注册