通过将字段存储为字节而不是数十亿文档的字符串,将在 Lucene 索引中优化多少空间和处理

Posted

技术标签:

【中文标题】通过将字段存储为字节而不是数十亿文档的字符串,将在 Lucene 索引中优化多少空间和处理【英文标题】:How much space and processing will be optimized in Lucene index by storing a field as Byte instead of String for billions of documents 【发布时间】:2018-09-20 17:38:22 【问题描述】:

我了解倒排索引的概念以及字典存储优化如何帮助将整个字典加载到主内存中以加快查询速度。

我正在尝试了解 Lucene 索引的工作原理。

假设我有一个 String 类型的字段,它对于 Lucene 中索引的 2000 亿个文档只有四个不同的值。该字段是存储字段。

如果我将字段更改为 Byte 或 Int 类型以表示所有 4 个不同的值并重新索引并存储所有 2000 亿个文档。

对于这种数据类型更改,存储和查询优化是什么?如果有的话。

请建议我是否可以在我的笔记本电脑上进行一些测试以了解一下。

【问题讨论】:

【参考方案1】:

据我所知,Lucene 中的文档由一个简单的字段值对列表组成。一个字段必须至少有一个值,但任何字段都可以包含多个值。类似地,分析过程可能会将单个字符串值转换为多个值。

Lucene 不关心值是字符串、数字还是日期。全部 值仅被视为不透明字节。

更多信息请见this document。

【讨论】:

以上是关于通过将字段存储为字节而不是数十亿文档的字符串,将在 Lucene 索引中优化多少空间和处理的主要内容,如果未能解决你的问题,请参考以下文章

Java 处理数十亿字节

通过 PostgreSQL 数据库聚合大型(数十亿行)数据集

SeaweedFS —— 可存储数十亿文件的分布式文件系统

西部世界分析Filecoin主网体系是怎么达到数十亿美元计的存储量

如何存储数十亿 JSON 文件并进行查询

将大量有序时间序列数据存储在大型衍生品中