iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Elasticsearch的原理是什么
  • 400
分享到

Elasticsearch的原理是什么

2023-06-16 05:06:33 400人浏览 独家记忆
摘要

本篇内容主要讲解“elasticsearch的原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Elasticsearch的原理是什么”吧!Lucene 和 ESLuceneLucene

本篇内容主要讲解“elasticsearch的原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Elasticsearch的原理是什么”吧!

Lucene 和 ES

Lucene

Lucene 是 Elasticsearch所基于的 Java 库,它引入了按段搜索的概念:

  • Segment:也叫段,类似于倒排索引,相当于一个数据集。

  • Commit point:提交点,记录着所有已知的段。

  • Lucene index:“a collection of segments plus a commit point”。由一堆 Segment  的集合加上一个提交点组成。

对于一个 Lucene index 的组成,如下图所示:

Elasticsearch的原理是什么

ES

一个 Elasticsearch Index 由一个或者多个 shard(分片)组成。

Elasticsearch的原理是什么

而 Lucene 中的 Lucene index 相当于 ES 的一个 shard。

Elasticsearch的原理是什么

写入过程

写入过程 1.0(不完善)

写入过程 1.0 如下:

  • 不断将 Document 写入到 In-memory buffer(内存缓冲区)。

  • 当满足一定条件后内存缓冲区中的 Documents 刷新到磁盘。

  • 生成新的 segment 以及一个 Commit point 提交点。

  • 这个 segment 就可以像其他 segment 一样被读取了。

画图如下:

Elasticsearch的原理是什么

将文件刷新到磁盘是非常耗费资源的,而且在内存缓冲区和磁盘中间存在一个高速缓存(cache),一旦文件进入到 cache 就可以像磁盘上的 segment  一样被读取了。

写入过程 2.0

写入过程 2.0 如下:

  • 不断将 Document 写入到 In-memory buffer(内存缓冲区)。

  • 当满足一定条件后内存缓冲区中的 Documents 刷新到高速缓存(cache)。

  • 生成新的 segment,这个 segment 还在 cache 中。

  • 这时候还没有 commit,但是已经可以被读取了。

画图如下:

Elasticsearch的原理是什么

数据从 buffer 到 cache 的过程是定期每秒刷新一次。所以新写入的 Document 最慢 1 秒就可以在 cache 中被搜索到。

而 Document 从 buffer 到 cache 的过程叫做 ?refresh。一般是 1 秒刷新一次,不需要进行额外修改。

当然,如果有修改的需要,可以参考文末的相关资料。这也就是为什么说 Elasticsearch 是准实时的。

使文档立即可见:

PUT /test/_doc/1?refresh {"test": "test"}  // 或者 PUT /test/_doc/2?refresh=true {"test": "test"}

Translog 事务日志

此处可以联想 MySQL 的 binlog,ES 中也存在一个 translog 用来失败恢复:

  • Document 不断写入到 In-memory buffer,此时也会追加 translog。

  • 当 buffer 中的数据每秒 refresh 到 cache 中时,translog 并没有进入到刷新到磁盘,是持续追加的。

  • translog 每隔 5s 会 fsync 到磁盘。

  • translog 会继续累加变得越来越大,当 translog 大到一定程度或者每隔一段时间,会执行 flush。

Elasticsearch的原理是什么

flush 操作会分为以下几步执行:

  • buffer 被清空。

  • 记录 commit point。

  • cache 内的 segment 被 fsync 刷新到磁盘。

  • translog 被删除。

Elasticsearch的原理是什么

值得注意的是:

  • translog 每 5s 刷新一次磁盘,所以故障重启,可能会丢失 5s 的数据。

  • translog 执行 flush 操作,默认 30 分钟一次,或者 translog 太大也会执行。

手动执行 flush:

POST /my-index-000001/_flush

删除和更新

segment 不可改变,所以 docment 并不能从之前的 segment 中移除或更新。

所以每次 commit, 生成 commit point 时,会有一个 .del 文件,里面会列出被删除的 document(逻辑删除)。

而查询时,获取到的结果在返回前会经过 .del 过滤。更新时,也会标记旧的 docment 被删除,写入到 .del  文件,同时会写入一个新的文件。

此时查询会查询到两个版本的数据,但在返回前会被移除掉一个。

Elasticsearch的原理是什么

segment 合并

每 1s 执行一次 refresh 都会将内存中的数据创建一个 segment。

segment 数目太多会带来较大的麻烦。每一个 segment 都会消耗文件句柄、内存和 cpu 运行周期。

更重要的是,每个搜索请求都必须轮流检查每个 segment ;所以 segment 越多,搜索也就越慢。

在 ES 后台会有一个线程进行 segment 合并:

  • refresh 操作会创建新的 segment 并打开以供搜索使用。

  • 合并进程选择一小部分大小相似的 segment,并且在后台将它们合并到更大的 segment 中。这并不会中断索引和搜索。

  • 当合并结束,老的 segment 被删。

说明合并完成时的活动:

  • 新的 segment 被刷新(flush)到了磁盘。 写入一个包含新 segment 且排除旧的和较小的 segment的新 commit  point。

  • 新的 segment 被打开用来搜索。

  • 老的 segment 被删除。

Elasticsearch的原理是什么

物理删除:在 segment merge 这块,那些被逻辑删除的 document 才会被真正的物理删除。

到此,相信大家对“Elasticsearch的原理是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: Elasticsearch的原理是什么

本文链接: https://www.lsjlt.com/news/282543.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Elasticsearch的原理是什么
    本篇内容主要讲解“Elasticsearch的原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Elasticsearch的原理是什么”吧!Lucene 和 ESLuceneLucene ...
    99+
    2023-06-16
  • Elasticsearch的优化原理是什么
    Elasticsearch的优化原理主要包括以下几个方面: 倒排索引:Elasticsearch使用倒排索引来加速搜索。倒排索引...
    99+
    2023-10-24
    Elasticsearch
  • Elasticsearch SQL的用法是什么
    Elasticsearch SQL的用法是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。小编将介绍不同版本中Elasticsearch...
    99+
    2024-04-02
  • ShutdownHook的原理是什么
    这篇文章主要讲解了“ShutdownHook的原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ShutdownHook的原理是什么”吧!ShutdownHook介绍在java程序中,...
    99+
    2023-06-15
  • java.util.Random的原理是什么
    这篇文章给大家介绍java.util.Random的原理是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。java.util.Random可以产生int、long、float、double以及Goussian等类型的...
    99+
    2023-05-31
    java.util.random ava %util
  • webservice的原理是什么
    Web服务的原理是通过使用HTTP协议进行通信,提供一组标准化的接口和方法,使不同的应用程序能够相互交互和通信。以下是Web服务的基...
    99+
    2024-02-29
    webservice
  • AOP的原理是什么
    这篇文章主要讲解了“AOP的原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“AOP的原理是什么”吧!AOP的原理对哪些对象在什么位置拦截做什么 <=> <aop:b...
    99+
    2023-06-03
  • JSONP的原理是什么
    JSONP的原理是什么?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。什么是JSONP首先提一下JSON这个概念,JSON是一种轻量级的数据传输格式,被广泛应用于当前Web应用中...
    99+
    2023-06-14
  • CAS的原理是什么
    本篇内容介绍了“CAS的原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在并发编程中我们都知道i++操作是非线程安全的,这是因为 i...
    99+
    2023-06-15
  • Drupal的原理是什么
    小编今天带大家了解Drupal的原理是什么,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答案,下面跟着小编一起深入学习“Drupal的原理是什么”的知识吧。Drup...
    99+
    2023-06-04
  • redis的原理是什么
    redis 是一款内存数据库,使用单线程架构和复杂的数据结构,实现了高性能和可扩展性。它支持数据持久化和复制,以确保数据安全性和可用性。 Redis 的原理 Redis 是一款开源的高...
    99+
    2024-04-20
    redis 数据丢失 键值对
  • elasticsearch和hadoop的区别是什么
    Elasticsearch和Hadoop都是用于大数据处理的工具,但它们在功能和使用方式上有一些不同之处。 数据处理方式: H...
    99+
    2024-03-14
    hadoop elasticsearch
  • JavaScript原型链的原理是什么
    这篇文章主要讲解了“JavaScript原型链的原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript原型链的原理是什么”吧!解析原型...
    99+
    2024-04-02
  • HTTP代理的原理是什么
    这篇文章主要讲解了“HTTP代理的原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“HTTP代理的原理是什么”吧!这种情况在爬行动物的制作过程中经常发生。一开始,爬行动物正常工作,数据...
    99+
    2023-06-20
  • Golang原生rpc的原理是什么
    这篇文章主要讲解了“Golang原生rpc的原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Golang原生rpc的原理是什么”吧!创建rpc接口,需要几个条件方法的类型是可输出的方...
    99+
    2023-06-29
  • python中elasticsearch的作用是什么
    python中elasticsearch的作用是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。python主要应用领域有哪些1、云计算,典型应用OpenSt...
    99+
    2023-06-14
  • React Props的原理是什么
    本篇文章为大家展示了React Props的原理是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。props理解props 是 React 组件通信最重要的手段props:对于在 Rea...
    99+
    2023-06-26
  • Vue.$nextTick的原理是什么
    这篇文章主要介绍了Vue.$nextTick的原理是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue.$nextTick的原理是什么文章都会有所收获,下面我们一起来看看吧。Vue中DOM更新机制当你气势...
    99+
    2023-07-05
  • python gevent的原理是什么
    这篇“python gevent的原理是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python gevent的原理是...
    99+
    2023-06-30
  • Java的@Autowired原理是什么
    本篇内容主要讲解“Java的@Autowired原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java的@Autowired原理是什么”吧!@Autowired使用构造函数注入publ...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作