ElasticSearch 5.3源码学习 —— Segments_N 文件详解
概览
- Lucene当前活跃的Segment都会存在一个Segment Info文件里,也就是
segments_N
。如果有多个segments_N
,那么序号最大的就是最新的。 - segments_N用SegmentInfos进行操作
- segments_N由
Header, LuceneVersion, Version, NameCounter, SegCount, MinSegmentLuceneVersion, <SegName, HasSegID, SegID, SegCodec, DelGen, DeletionCount, FieldInfosGen, DocValuesGen, UpdatesFiles>SegCount, CommitUserData, Footer
这19个变量组成。
变量 | 类型 |
---|---|
Header | 一个魔数(int),"segments"字符串和一个大版本(int)组成 |
LuceneVersion,MinSegmentLuceneVersion | 3个vint组成 |
NameCounter, SegCount, DeletionCount | int32 |
Generation, Version, DelGen, Checksum, FieldInfosGen, DocValuesGen 为 | long(int64) |
HasSegID | int8 |
SegID | 16位byte |
SegName, SegCodec | String |
CommitUserData | Map<String,String> |
UpdatesFiles | Map<Int32,Set> |
Footer | 魔数(int),algorithmID(int),CRC(long) |
文件实例(SegmentInfos#readCommit读取)
序号 | 含义 |
---|---|
1 |
Magic Number 硬编码在lucene中,一直为0x3fd76c17
|
2 | "segments"字符串,用于校验文件 |
3 | version为6 |
4 | Commit ID, 16位byte |
5 | 表示generation的string,这边是1e |
6 | lucene具体版本,6.4.1 |
7 | index version: 622,表示index修改了622次了 |
8 |
counter为0xf4 ,表示下一个segment序号为244
|
9 | numSegments为8,表示一共有8个active segment |
10 | segment里最小的lucene版本,为6.4.1 |
11 | 第一个segment name:_3d |
12 | 第一个byte表示有没有segID,如果为1,那么后面16位就是segID |
13 | 表示Codec,这里是Lucene62,用来找到对应segment的编码器,用于打开segment |
14 |
DelGen,删除文件序号,为-1代表还没有删除,对应文件{segname}_{delgen}.liv ,这里就是_3d_1.liv
|
15 | 删除的doc数目 |
16 |
fieldInfosGen,为-1代表没有,对应文件{segname}_{delgen}.fnm
|
17 | docValuesGen |
18 | 读取一个String Set,第一个vint为长度,此处为0。然后读取一个int代表DocValuesUpdatesFiles的长度,此处为0,如果不为0,则是一个Map<Int32,Set> |
19 | 第二个segment的开头,因为一共有8个segment所以后面就重复上面的7遍 |
20 | CommitUserData的长度,此处为3,表示后面有6个string,依次读取作为kv |
21 | 结尾魔数,是开头魔数的反码 |
22 | algorithmID 此处为0 |
23 | CRC校验码 |
附录
- vint: 用1-5bit表示int,符号位表示是否结束(为0代表结束),后7位表示数值。低位在前高位在后
- generation在文件名中都是转成36进制
- SegmentInfos在readCommit时除了读取Segment_N,还会读取各segment的元文件获得maxID,在lucene62中为
.si
文件,下图标红处即为docNum,MaxDoc为63023 (Lucene62SegmentInfoFormat#read读取) - 其实Segment的这些数据在Rest API中均有展示,不过在5.3中不在一个api
// 获得当前Segments信息
GET /{index}/_segments
//获得CommitUserData
GET /{index}/_stats?filter_path=**.commit&level=shards
复制代码
版权声明
- 自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
- 本文首发于: http://czjxy881.coding.me/
ElasticSearch 5.3源码学习 —— Segments_N 文件详解相关推荐
- nginx源码学习----内存池详解
最近在进行监控平台的设计,之前一直觉得C/C++中最棘手的部分是内存的管理上,远不止new/delete.malloc/free这么简单.随着代码量的递增,程序结构复杂度的提高.各种内存方面的问题悄然 ...
- mysql data文件夹恢复_【专注】Zabbix源码安装教程—步骤详解(2)安装并配置mysql...
四.安装并配置mysql(1) 解压mysql-5.7.26.tar.gz与boost_1_59_0.tar.gz #tar -xvf mysql-5.7.26.tar.gz #tar -xvf bo ...
- Xposed源码剖析——app_process作用详解
Xposed源码剖析--app_process作用详解 首先吐槽一下CSDN的改版吧,发表这篇文章之前其实我已经将此篇文章写过了两三次了.就是发表不成功.而且CSDN将我的文章草稿也一带>删除掉 ...
- php+mysql案例含源码_【专注】Zabbix源码安装教程—步骤详解(1)安装前准备
一.实验环境准备 Rhel 7.6 x86_64(server) 192.168.163.72 Rhel 6.5 x86_64(agent) 192.168.163.61 均已配置操作安装光盘为YUM ...
- React 源码系列 | React Context 详解
目前来看 Context 是一个非常强大但是很多时候不会直接使用的 api.大多数项目不会直接使用 createContext 然后向下面传递数据,而是采用第三方库(react-redux). 想想项 ...
- 【功能超全】基于OpenCV车牌识别停车场管理系统软件开发【含python源码+PyqtUI界面+功能详解】-车牌识别python 深度学习实战项目
车牌识别基础功能演示 摘要:车牌识别系统(Vehicle License Plate Recognition,VLPR) 是指能够检测到受监控路面的车辆并自动提取车辆牌照信息(含汉字字符.英文字母.阿 ...
- 活体检测眨眼、张嘴、点头、摇头动作一网打尽:人脸面部活体检测系统【含Python源码+PyqtUI界面+原理详解】
基本功能演示 摘要:活体检测是用于判断捕捉到的人脸是真实人脸,还是伪造的人脸攻击的一种技术手段.本文详细介绍了其实现的技术原理,同时给出完整的Python实现代码,并且通过PyQT实现了UI界面,更方 ...
- dockerfile源码安装mysql_docker容器详解五: dockerfile实现tomcat环境以及源码安装mysql...
tomcat 上一节讲到了dockerfile的基础,这一次咱们来作一个小的练习 首先要了解tomcat安装的整个过程 首先搭建 jdk环境: 下载jdk包,解压以后添加环境变量 而后搭建tomcat ...
- 未能找到元数据文件_Flink 源码:Checkpoint 元数据详解
本文是 Flink 源码解析系列,通过阅读本文你能 get 到以下点: Flink 任务从 Checkpoint 处恢复流程概述 Checkpoint 元数据详解 从源码层分析:JM 该如何合理地给每 ...
最新文章
- 清华天机AI芯片登Nature封面:全球首款异构融合类脑芯片,实现自行车无人驾驶...
- Ubuntu中安装docker-compose
- 深度解析Cocoa异步请求和libxml2.dylib教程(1)
- Spark Relational Cache实现亚秒级响应的交互式分析
- Django(九)admin相关知识
- java中修改密码_java中用户密码加密时增加和修改的代码
- web开发excel文件上传及解析(上)
- u盘 固态硬盘 读写速度测试软件,超级U盘/SSD读写可靠性(扩容)测试工具urwtest v1.8...
- html页面截取,HTML 网页截图
- 弧长积分公式的证明_20160414
- 打地鼠游戏(使用Qt)
- reentrantlock与synch区别优点
- ubuntu下安装fcitx五笔输入法
- 华中科技大学省[you]选[ji]
- python-计算机视觉-OpenCV-调色板
- 传输层 TCP 拥塞控制(3):快速重传与快速恢复
- io多线程 性能 扯犊子
- ios14文件链接服务器教程,ios14app资源库怎么用_app资源库使用教程_3DM手游
- 江西建材杂志江西建材杂志社江西建材编辑部2022年第11期目录
- iPhone iPad高级编程
热门文章
- jsp usebean_JSP动作标签– jsp useBean,包含,转发
- supercsv_SuperCSV – CsvBeanReader,CellProcessor,CsvBeanWriter
- 如何运用接口中的变量?接口可以扩展吗?
- Python装饰器之一
- 重拾Java Network Programming(一)IO流
- 学习笔记TF065:TensorFlowOnSpark 1
- CIO思考:混合云为行业注入了哪些活力?
- Linux I2C设备驱动编写(二)
- MongoDB聚合(二)
- Ubuntu12.04 apt-get 安装mysql