Apache Lucene 10 已发布!Lucene 硬件效率改进及其他改进

作者:来自 Elastic Adrien Grand

Apache Lucene 10 刚刚发布,重点关注硬件效率!查看主要版本亮点。

Apache Lucene 10 终于发布了!自 Lucene 9.0(于 2021 年 12 月发布,距今已有近 3 年)以来,已有 185 位独立贡献者提交了 2,000 多次提交,发生了很多事情。公平地说,这些更改中的大多数都是在 9.x 次要版本中提供的。但是,最雄心勃勃的更改通常需要一个主要版本,例如在 Lucene 6.0 中引入多维点(multi-dimensional points)、在 8.0 中引入动态修剪(dynamic pruning )或在 9.0 中引入向量搜索(vector search )。在 10.0 中,Lucene 的重点领域一直是硬件效率,即让 Lucene 更好地利用现代硬件。让我带你了解主要的版本亮点:

更多的搜索并行性

多年以来,Lucene 一直能够并行化搜索执行,方法是创建段组,在不同的线程中搜索每个组,最后合并结果。这种方法的一个缺点是它将索引几何结构(索引如何组织成段)与搜索并行性结合在一起。例如,强制合并(force-merged)为单个段的索引不再能够利用多个执行线程进行搜索。现代 CPU 通常有数十个核心,这非常令人失望!

为了克服这一限制,Lucene 的查询评估逻辑现在允许将索引拆分为逻辑分区,这些分区不再需要与段对齐。例如,强制合并为单个段的索引仍然可以被切分为 10 个逻辑分区,每个分区包含该段文档的十分之一。

这一变化将有助于提高搜索并行性,尤其是在具有许多核心的机器上和/或最高层上只有少数段的索引上。此更改不适用于创建 Scorer 成本较高的查询 - 例如范围查询和前缀查询,但我们希望在即将发布的次要版本中解除此限制。

更好的 I/O 并行性

到目前为止,Lucene 将使用同步 I/O,并且每个搜索线程一次最多执行一个 I/O 操作。对于大大超过页面缓存大小的索引,这可能导致查询受限于 I/O 延迟,而主机仍远未达到 IOPS 的最大值。令人沮丧!

为了解决这个问题,Lucene 的 Directory 抽象引入了一个新的 IndexInput#prefetch API,让操作系统知道它即将读取的文件区域。然后,操作系统可以在单个 OS 线程内并行检索与这些区域相交的页面。例如,带有 TermQuery 子句的 BooleanQuery 现在将在单个执行线程内并行执行术语字典查找的 I/O,然后并行检索每个帖子列表的前几页。MMapDirectory 是 Lucene 的默认 Directory 实现,它使用 Linux 和 Mac OS 上的 madvise 的 MADV_WILLNEED 建议实现此 prefetch API。

我们对这一变化感到非常兴奋,它已经被证明有助于快速本地 NVMe 磁盘,并且将进一步帮助具有更差延迟同时保持良好并行性的存储系统,例如网络附加磁盘(GCP 持久存储、Amazon EBS、Azure 托管磁盘)甚至对象存储(GCP 云存储、Amazon S3、Azure blob 存储)。

通过稀疏索引提高 CPU 效率和存储效率

Lucene 10 引入了对稀疏索引的支持,在其他数据存储中有时称为主键索引(primary-key indexing)或区域索引(zone indexing)。这个想法很简单:如果你的数据按排序顺序存储在磁盘上,那么你可以将其组织成块,记录每个块的最小值和最大值,你的查询将能够利用这些信息跳过与查询不相交的块,或完全匹配查询包含的块。只有与查询部分相交的块才需要进一步检查,挑战在于选择最佳索引排序以最小化此类块的数量。

Lucene 的稀疏索引目前通过 4 个级别的块实现,每个级别分别具有 4k、32k、256k 和 2M 文档。

如果做得正确,这种索引形式非常节省空间(每个块只有几个字节)和 CPU 效率(只需几个 CPU 指令就可以决定数千个文档是否匹配)。缺点是索引只能以单一顺序存储在磁盘上,因此并非所有字段都能从中受益。通常,索引会根据数据的主要维度进行排序。例如,对于包含产品的电子商务目录,这些维度可能是产品的类别和品牌。

稀疏索引


数据库中的稀疏索引是一个文件,其中包含数据文件中每个块的键和指针对。此文件中的每个键都与指向排序数据文件中块的特定指针相关联。在具有重复键的聚类索引中,稀疏索引指向每个块中的最低搜索键。

结论

请注意,9.x 次要版本中还发布了一些与硬件效率相关的更改。特别值得强调的是:

  • Lucene 现在在比较向量和解码帖子时利用显式向量化,
  • Lucene 的并发搜索执行逻辑 performs work stealing 以减少分支任务的开销。,
  • Lucene 的帖子格式已更新为具有更连续的访问模式,
  • Lucene 现在在打开具有随机访问模式的文件时传递 MADV_RANDOM 建议。

我们对这个新的 Lucene 版本和硬件效率重点感到非常兴奋。如果你想了解有关这些改进的更多信息,我们将在未来几周内撰写有关它们的更详细的博客。敬请期待。

准备好自己尝试一下了吗?开始免费试用。

Elasticsearch 和 Lucene 提供强大的向量数据库和搜索功能。深入了解我们的示例笔记本以了解更多信息

原文:Apache Lucene 10 release highlights - hardware efficiency & more — Search Labs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/894478.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Faster RCNN

经过R-CNN和Fast RCNN的积淀,Ross B. Girshick在2016年提出了新的Faster RCNN,在结构上,Faster RCNN已经将特征抽取(feature extraction),proposal提取,bounding box regression(rect refine),classificati…

医疗领域的RAG技术:如何通过知识图谱提升准确性

在医学领域,准确的信息检索和处理至关重要。随着大型语言模型(LLMs)的兴起,检索增强生成(RAG)技术在医学信息处理中的应用越来越受到关注。本文将探讨RAG技术在医学领域的应用,特别是如何利用知…

【wpf】07 后端验证及令牌码获取步骤

由于在用wpf开发应用程序时,从后端获取数据需要用到 Authorization 授权的Bearer令牌,而这个令牌的获取需要登录后台进行获取,这里登录时还涉及到的验证码的操作,所以在获取过程中,需要对后台系统进行登录并拿到这个Be…

潮流头像社 1.1 | 打造个性化专属头像的设计工具。

潮流头像社提供了丰富多样的头像制作工具和素材,让用户可以尽情地展示自己的独特魅力。无论是想要换脸特效、滤镜、贴纸、文字还是配饰,用户都可以在这里找到自己喜欢的元素,并且将其融合到自己的头像设计中,创造出一个独一无二的…

87. 多边形轮廓Shape(圆弧)

先掌握上节课关于Shape内容,再继续学习本节课关于Shape圆弧的介绍。 圆弧方法.arc() 圆弧方法.arc()使用方式和原来学习过的圆弧曲线ArcCurve整体相似,区别在于圆心定位方式有差异。 圆弧.arc()参数的圆心坐标是相对当前.currentPoint而言,而不是坐标原…

MFC工控项目实例二十五多媒体定时计时器

承接专栏《MFC工控项目实例二十四模拟量校正值输入》 用多媒体定时器实现0.1秒计时器 1、在SEAL_PRESSUREDlg.h文件中添加代码 #include<MMSystem.h> #pragma comment(lib,"winmm.lib")class CSEAL_PRESSUREDlg : public CDialog { public:CSEAL_PRESSUREDlg(…

【动态规划】【斐波那契数列模型】三步问题、第N个泰波那契数、使用最小花费爬楼梯

模板 算法原理 做动态规划的题目&#xff0c;一般会先创建一个一维数组 dp&#xff0c;称之为 dp表我们想办法填满这个 dp表&#xff0c;里面的某个值就是最终结果 采用动态规划&#xff0c;一般分五步&#xff1a; 状态表示 是什么&#xff1f; dp 表中每一个值所表示的含义…

王爽汇编语言第三版实验3

实验任务 将下面的程序保存为t1.asm&#xff0c;将其生成可执行文件t1.exe 用Vscode编写源程序t1.asm 用脚本一键生成可执行文件t1.exe 成功运行 查看资源管理器&#xff0c;成功生成T1.obj与t1.exe文件‘ 用debug跟踪t1.exe的执行过程&#xff0c;写出每一步执行后&#xff…

基于SSM的大学校医院信息管理系统

系统展示 用户前台界面 管理员后台界面 系统背景 随着高校规模的不断扩大和师生健康意识的增强&#xff0c;大学校医院面临着日益增长的医疗服务需求。传统的纸质病历、手工预约和药品管理方式已难以满足高效、准确和便捷的服务要求。因此&#xff0c;开发一套基于SSM&#xff…

021_Thermal_Transient_in_Matlab统一偏微分框架之热传导问题

Matlab求解有限元专题系列 固体热传导方程 固体热传导的方程为&#xff1a; ρ C p ( ∂ T ∂ t u t r a n s ⋅ ∇ T ) ∇ ⋅ ( q q r ) − α T d S d t Q \rho C_p \left( \frac{\partial T}{\partial t} \mathbf{u}_{\mathtt{trans}} \cdot \nabla T \right) \nab…

[计算机网络]第一周

TCP/IP 与OSI TCP/IP TCP/IP 四层模型是一个分层网络通信模型&#xff0c;它将网络通信过程分为四个层次&#xff0c;这四层分别是&#xff1a;网络接口层、互联网层、传输层和应用层。 网络接口层负责在计算机和网络硬件之间传输数据&#xff0c;负责在物理网络上发送和接收…

Cesium 影像加载的TileReplacementQueue技术

本文以分析QuadtreePrimitive及相关影像内容&#xff0c;讨论一些流程和方法。影像和地形是Cesium的基础内容&#xff0c;但是有时候感觉这部分的加载和渲染效率并不高。 TileReplacementQueue是一个非常神奇的类&#xff0c;我自己研究了小半天。虽然结构简单&#xff0c;但是…

鸿蒙HarmonyOS开发:应用权限的基本概念及如何申请应用权限详细介绍

文章目录 一、访问控制二、应用权限1、应用权限管控2、权限使用的基本原则3、授权方式4、权限等级 三、申请应用权限1、选择申请权限的方式2、声明权限3、声明样例4、二次向用户申请授权5、具体实现示例6、效果展示 四、应用权限列表1、system_grant&#xff08;系统授权&#…

【开源免费】基于SpringBoot+Vue.JS社区团购系统(JAVA毕业设计)

本文项目编号 T 024 &#xff0c;文末自助获取源码 \color{red}{T024&#xff0c;文末自助获取源码} T024&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析5.4 用例设计 六、核…

亿发工单,拯救制造企业的时间:工单也能这样高效

在制造企业的日常生产中&#xff0c;工单管理是一项至关重要的任务。它不仅直接关系到生产效率&#xff0c;还影响到整个生产链的运作。然而&#xff0c;许多制造企业在工单处理过程中面临效率低下、沟通不畅、任务分配混乱等诸多问题&#xff0c;这不仅拖慢了生产进度&#xf…

2024年软件设计师中级(软考中级)详细笔记【7】面向对象技术(下)23种设计模式(分值10+)

目录 前言阅读前必看 第七章 面向对象技术&#xff08;下&#xff09;7.3 设计模式&#xff08;固定4分&#xff09;7.3.1 设计模式的要素7.3.2 创建型设计模式7.3.2.1 Abstract Factory&#xff08;抽象工厂&#xff09;7.3.2.2 Builder&#xff08;生成器&#xff09;7.3.2.3…

软件工程的学习之详细绪论

软件的定义 软件是程序和所有使程序正确运行所需要的相关文档和配置信息。 Software Program Data Document 一、软件危机&#xff1a; 软件开发和维护过程中遇到的一系列严重问题。 二、具体表现&#xff1a; 1、产品不符合用户的实际需要&#xff1b; 2、软件开发生产率…

安装好的 Nginx 增加 nginx-module-vts 模块

目录 1. nginx-module-vts 准备 2.查看已安装的的 nginx 编译参数 3. 重新编译 nginx 添加 nginx-module-vts 模块 4. 验证 1. nginx-module-vts 准备 # 解压 unzip nginx-module-vts-master.zip # 将解压包移动到/usr/local/目录 mv nginx-module-vts-master /usr/local/ …

基于微信小程序的购物系统【附源码、文档】

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

Java生死簿管理小系统(简单实现)

学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把手教你开发炫酷的vbs脚本制作(完善中……&#xff09; 4、牛逼哄哄的 IDEA编程利器技巧(编写中……&#xff09; 5、面经吐血整理的 面试技…