前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于elasticsearch segment的理解

关于elasticsearch segment的理解

原创
作者头像
周银辉
修改2024-08-28 20:26:28
1130
修改2024-08-28 20:26:28
举报
文章被收录于专栏:ElasticSearch

elasticsearch作为开源的搜索存储引擎,依赖的一个重要数据结构就是inverted index,内容相当宠大,而且建立过程耗时。

一、如何存储inverted index?

1、inverted 必须保存在磁盘中,以便可以重复使用。

2、elastic是基于lucene来构建的,在lucene的世界里,inverted index 就是存放于disk的一块不可变更的segment。

二、如何高效的存放inverted index?

1、使用memory来做缓存数据,然后批量写入disk file,所以引入了index memory buffer 来暂存doc的inverted index。

2、当这些doc inverted index累积到一定量后,就可以写到disk了。

三、索引的创建和可搜索

1、索引的创建和索引的可搜索之间的时间间隔我们称之为gap time,如何尽量缩短这个时间?。

2、一个可以被优化的地方就是disk page cache ,disk page cache也是os为了优化disk io而做的努力。

3、已经写入到disk page cache的inverted index是可以被搜索的。

4、由index memory buffer到disk page cache的时间要远远少于index memory buffer到 disk segment的时间。

5、引入disk page cache之后,对应的引入了2个api,refresh api ,flush api。

6、index memory buffer----默认每秒refresh--->disk page cache--->默认30min flush--->disk segment。

四、写入到disk page cache中的数据,发生power off时,数据会丢吗?

会丢

1、写入translog就是为inverted index作backup,但是translog同时需要经历disk page cache到disk translog的过程。

2、默认disk page cache到disk translog是5秒刷新一次,也即默认为有5秒数据的丢失。

3、当inverted index 完成flush后,对应的disk translog就可以被清除掉了。

五、如何避免数据不丢?

1、通过replica node从其它节点将数据取回来,这进一步降低了数据丢失的概率。

六、整个机制的目的就是围绕如何高效地存储disk segment来展开。

1、为了降低disk I/O的overhead,引入了in memory index buffer.

2、为了降低创建索引和索引可搜索的time gap,引入了disk page cache。

3、为了对disk page cache做临时备份,引入了translog。

七、segment到底是放在disk上,还是在memory中?

1、segment作为存放inverted index的data structure,是要被持久化到disk的,所以他本质上是disk file。

2、但是segment使用非常频繁,如何一直做disk io来读取inverted inex将会是低效的,所以es使用mmap来将

inverted index映射到memory中,以加速对inverted index的访问。

3、所以ES建议设置sysctl -w vm.max_map_count=262144的原因在这里。

4、同时为了减少mmap中的内容被swap off到 disk ,通常要求disable swap on,以减少 disk io的影响。

代码语言:txt
复制
PUT my_logs_index/_settings
{
  "translog.durability": "REQUEST",
  "translog.flush_threshold_age": "1m",
  "translog.flush_threshold_size": "512M",
  "translog.generation_threshold_size": "64mb",
  "translog.sync_interval": "5s"
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、如何存储inverted index?
  • 二、如何高效的存放inverted index?
  • 三、索引的创建和可搜索
  • 四、写入到disk page cache中的数据,发生power off时,数据会丢吗?
  • 五、如何避免数据不丢?
  • 六、整个机制的目的就是围绕如何高效地存储disk segment来展开。
  • 七、segment到底是放在disk上,还是在memory中?
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档