数据域 java_谈谈lucene的数据域存储

lucene的数据域也就是存储document文档的区域,只能通过ID号来定位文档,定位后可根据指定的字段获取所需数据。粗略的说fdt文件存储数据,fdx文件用于通过ID号来定位文档。(注:以下列出的内容只包含关键数据结构的原理部分,因为lucene在设计的时候考虑到各个版本的兼容性问题和数据文件的完整性问题,而且也不是对源代码的完整解析,有兴趣的自己直接看源码吧)

lucene在写入数据的时候是按照(数量达到一定阈值或者占用空间达到一定阈值)后批量写入的,fdt文件内容如下:

分片大小---是预先设定的值

文件头部分

文档起始编号、文档数量、是否切片、每篇文档存储字段的个数、每篇文档的文件偏移量

文档起始编号是在数据块中的起始的文档编号,而且是全局的;

文档数量是该数据块中包含的文档数,因为在数据块划分的条件是(数量达到一定阈值或者占用空间达到一定阈值),因此块中包含的数量是个变量,需要记录下来;

是否切片是指如果数据块>=2倍的分片大小时就按每数据块大小进行分片压缩,目的在于如果只对文档的第一个字段感兴趣就不用等待整个文档解压完毕后进行访问,只需解压指定数据块的大小,提高效率;

每篇文档存储字段的个数是指lucene在存储文档的时候,每篇文档间的字段可以互不相同,所以个数也不同;

每篇文档的文件偏移量是指每个文档从文件中读取的起始地址,实际上lucene进行了进一步处理,除了第一篇文档其余的存储是差值,这样也可起到压缩效果;

数据域部分

按照分片大小切分,对数据块采用LZ4压缩算法

数据块具体包括:字段ID、字段类型、字段值,不同的字段类型采用不同的写入方式,尤其是整型值和浮点型的压缩在结合lucene谈谈日期的压缩问题和结合lucene谈谈浮点数的压缩问题中也已经提过,有兴趣的可以看看。

分片总个数

就是一共分了多少个数据块

fdx文件内容如下:

每个分片包含的文档数量、fdt的文件指针

由于文件指针是个long类型的值,并且当fdt文件每次flush一个数据块时就提交一次(极端情况下是一篇文档提交一次)一般较大,因此文件指针也是当达到一定数量后进行批量存储便于进一步压缩。

具体包括:分片个数、文档起始编号、每个分片中的文档数量、每个分片的起始文件指针

lucene在具体实现的时候对这些数据作了进一步的压缩处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值