Lucene数据存储实现:LSQL行存&列存

Lucene作为最强大的开源的全文检索引擎,其倒排索引机制可以快速的根据term值找到docid,此外lucene也可以保存明细数据,通过docid将明细数据返回,并且有两种方式-行存、列存。

一次查询的流程

上图是lucene一次查询的流程,首先是从倒排索引中获取docid,之后再从行存或者列存中找到数据。只有建立索引的字段才会生成term和term对应的docid列表。当然,如果字段需要分词,就对分词器的切分后的每个分词单元建立term和对应的doclist。否则整个字段作为一个term,并建立doclist。从图中也可以看到两个关系:

1)索引与数据是独立存储的,两者之间是通过docid关联。

2)行存和列存是独立存储的,他们只和docid关联,彼此无关联。

数据存储文件结构

上图是lucene中的文件结构,其中fdx、fdt是行存数据文件,dvm、dvd是列存数据文件。

重编码

在数据存储系统中,对磁盘的占用是很敏感,因为相同的数据信息占用磁盘越多,意味着硬件成本越高,读取相同数据信息的io资源随之升高。如果按照已有的数据格式(比如java中的int、long)存储数据将会造成很大的数据浪费,可以见下图:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值