博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lucene LZ4 会将doc存储在一个chunk里进行Lz4压缩 ES的_source便如此
阅读量:5921 次
发布时间:2019-06-19

本文共 1730 字,大约阅读时间需要 5 分钟。

默认情况下,Elasticsearch 用 JSON 字符串来表示文档主体保存在 _source 字段中。像其他保存的字段一样,_source 字段也会在写入硬盘前压缩。The _source is stored as a binary blob (which is compressed by Lucene with deflate or LZ4) 其实就是多个_source合并到一个chunk里进行LZ4压缩!

 对于Solr来说:Solr4.8.0里面使用的fdt和fdx的格式是lucene4.1的。为了提升压缩比,StoredFieldsFormat以16KB为单位对文档进行压缩,使用的压缩算法是LZ4,由于它更着眼于速度而不是压缩比,所以它能快速压缩以及解压。

 

fdx/fdt文件的格式。

  具体参考Lucene41StoredFieldsFormat.html (见Lucene4.2.0的docs)

 

fdt文件结构:

 

 

 

上图理解起来也不难,<Header>和PackedIntsVersion略过,我们重点关注<Chunk>,Chunk的中文意思是”大块”,我们可以理解为数据的存储区域。在内存中表现为缓存。一个Chunk由5个部分组成:DocBase表示当前的Chunk块的起始DocId;ChunkDocs表示当前Chunk中的doc个数;DocFieldCounts是一个数组,表示每个doc中Field的个数;DocLengths也是一个数组,表示每个doc占用byte的个数,即doc的长度;<CompressedDocs>即doc的内容,用LZ4算法压缩存储。FieldNumAndType是把FieldNumber和FieldType合并到一个VLong字段里面,整个<CompressedDocs>就是FieldNumAndType和Value的交替序列。

   fdx文件结构:

 

fdx文件重点关注的是<Block>,一个Block由三个部分组成:BlockChunks表示当前Block中Chunk的个数;<DocBases>表示当前Block中每个Chunk的doc个数,可以看作一个数组;<StartPointers>表示当前Block中每个Chunk在fdt文件中的起始位置,其结构与<DocBases>相同。

尽管fdx/fdt文件只是Lucene的正向文件,并不是Lucene的核心。但是还是有干货的。在Lucene4中引入了LZ4算法对fdt的doc进行了实时压缩/解压。而且用SPI(Service Provider Interface)技术对架构进行了重构。

1.3    fdx/fdt文件的写入。

fdx/fdt文件的写入操作非常清晰。逻辑上都在CompressingStoredFieldsWriter类中完成,而CompressingStoredFieldsIndexWriter则作为其成员变量。其写入的顺序与上面的格式一致,只是有些名字不一样。在写入docs的过程中,用GrowableByteArrayDataOutput作为缓存,直到缓存满了,才flush到硬盘上去。用LZ4算法压缩就是在flush时处理的。(关于LZ4算法会在另外的博文中描述)

fdt文件的写入:

       fdt文件的基本单位是Chunk,这一点需要牢记。一个Chunk写入到文件中的代码如下:

       通过观察flush函数,我们会发现fdt文件的写入非常简单,就两句代码:

 

 

前面一句代码记录整个chunk中的docBase(最小docID),numBufferedDocs(doc数量),numStoredFields(每个doc的Field个数),lengths(每个doc的长度),一共四种信息.在记录numStoredFields和lengths时,用PackedInts及其它的方式对内容进行了压缩。后面一句代码记录整个chunk中的doc的完整内容(用LZ4算法进行压缩).

本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/bonelee/p/7724285.html,如需转载请自行联系原作者

你可能感兴趣的文章
华中数交所开启“大数据高校行”活动
查看>>
简单有趣的 NLP 教程:手把手教你用 PyTorch 辨别自然语言(附代码)
查看>>
上半年新增装机规模同比增三倍 “十三五”光伏发电装机目标或下调
查看>>
GSMA宣布了首批2017世界移动大会-上海主题演讲嘉宾名单
查看>>
深圳成为国内首批国家新型智慧城市标杆市试点
查看>>
Windows Store应用更新: 应用通知添加启动和钉选到开始菜单
查看>>
补贴下行压力引发我国光伏产业结构调整
查看>>
金雅拓助AT&T扩展物联网产品
查看>>
数据中心监控工具概述
查看>>
全球股市总市值创新高 中国IT企业存在感渐强
查看>>
媒体披露安防市场数据也不能随心所欲
查看>>
惠普企业发布第二财季财报:净亏损为6.12美元, 同比转亏
查看>>
大数据时代的商业银行数字化转型
查看>>
MapXtreme 2005 GIS开发入门系列 索引
查看>>
光伏答疑解惑part1:安装篇
查看>>
视频应用多元化 以视频为核心的运营服务兴起
查看>>
C#中的 ref 传进出的到底是什么 解惑篇
查看>>
普林斯顿大学:物联网设备安全性堪忧
查看>>
CloudCC CRM观点:SaaS模式CRM产品步入成熟期
查看>>
智能家居渐成趋势 如何正确理解它
查看>>