iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >如何进行Elasticsearch数据写入的分析
  • 468
分享到

如何进行Elasticsearch数据写入的分析

2024-04-02 19:04:59 468人浏览 泡泡鱼
摘要

这期内容当中小编将会给大家带来有关如何进行elasticsearch数据写入的分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。前言主要讲 ES -> Lucene

这期内容当中小编将会给大家带来有关如何进行elasticsearch数据写入的分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

前言
主要讲 ES -> Lucene的底层结构,然后详细描述新数据写入 ES 和 Lucene 的流程和原理。这是基础理论知识,整理了一下。

一、Elasticsearch & Lucene 是什么?

如何进行Elasticsearch数据写入的分析
什么是 Elasticsearch ?
Elasticsearch 是一个基于 Apache Lucene(TM) 的开源索引擎。
那 Lucene 是什么?
无论在开源还是专有领域,Lucene 可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库,并通过简单的 RESTful api 来隐藏 Lucene 的复杂性,从而让全文搜索变得简单。
Elasticsearch 不仅仅是 Lucene 和全文搜索,我们还能这样去描述它:
  • 分布式的实时文件存储,每个字段都被索引并可被搜索

  • 分布式的实时分析搜索引擎

  • 可以扩展到上百台服务器,处理 PB 级结构化或非结构化数据

二、Elasticsearch & Lucene 的关系

如何进行Elasticsearch数据写入的分析
就像很多业务系统是基于 spring 实现一样,Elasticsearch 和 Lucene 的关系很简单:Elasticsearch 是基于 Lucene 实现的。ES 基于底层这些包,然后进行了扩展,提供了更多的更丰富的查询语句,并且通过 RESTful API 可以更方便地与底层交互。类似 ES 还有 Solr 也是基于 Lucene 实现的。
在应用开发中,用 Elasticsearch 会很简单。但是如果你直接用 Lucene,会有大量的集成工作。

因此,入门 ES 的同学,稍微了解下 Lucene 即可。如果往高级走,还是需要学习 Lucene 底层的原理。因为倒排索引、打分机制、全文检索原理、分词原理等等,这些都是不会过时的技术。

三、新文档写入流程

3.1 数据模型

如何进行Elasticsearch数据写入的分析

如图

  • 一个 ES Index (索引,比如商品搜索索引、订单搜索索引)集群下,有多个 Node (节点)组成。每个节点就是 ES 的实例。

  • 每个节点上会有多个 shard (分片), P1 P2 是主分片 R1 R2 是副本分片

  • 每个分片上对应着就是一个 Lucene Index(底层索引文件)

  • Lucene Index 是一个统称。由多个 Segment (段文件,就是倒排索引)组成。每个段文件存储着就是 Doc 文档。

3.2 Lucene Index

如何进行Elasticsearch数据写入的分析

lucene 中,单个倒排索引文件称为 segment。其中有一个文件,记录了所有 segments 的信息,称为 commit point:

  • 文档 create 新写入时,会生成新的 segment。同样会记录到 commit point 里面

  • 文档查询,会查询所有的 segments

  • 当一个段存在文档被删除,会维护该信息在 .liv 文件里面

3.3 新文档写入流程

新文档创建或者更新时,进行如下流程:
更新不会修改原来的 segment,更新和创建操作都会生成新的一个 segment。数据哪里来呢?先会存在内存的 bugger 中,然后持久化到 segment 。

数据持久化步骤如下:write -> refresh -> flush -> merge

3.3.1 write 过程

如何进行Elasticsearch数据写入的分析

一个新文档过来,会存储在 in-memory buffer 内存缓存区中,顺便会记录 Translog。

这时候数据还没到 segment ,是搜不到这个新文档的。数据只有被 refresh 后,才可以被搜索到。那么 讲下 refresh 过程3.3.2 refresh 过程
如何进行Elasticsearch数据写入的分析
refresh 默认 1 秒钟,执行一次上图流程。ES 是支持修改这个值的,通过 index.refresh_interval 设置 refresh (冲刷)间隔时间。refresh 流程大致如下:
  • in-memory buffer 中的文档写入到新的 segment 中,但 segment 是存储在文件系统的缓存中。此时文档可以被搜索到

  • 最后清空 in-memory buffer。注意: Translog 没有被清空,为了将 segment 数据写到磁盘

文档经过 refresh 后, segment 暂时写到文件系统缓存,这样避免了性能 io 操作,又可以使文档搜索到。refresh 默认 1 秒执行一次,性能损耗太大。一般建议稍微延长这个 refresh 时间间隔,比如 5 s。因此,ES 其实就是准实时,达不到真正的实时。

3.3.3 flush 过程

如何进行Elasticsearch数据写入的分析

上个过程中 segment 在文件系统缓存中,会有意外故障文档丢失。那么,为了保证文档不会丢失,需要将文档写入磁盘。那么文档从文件缓存写入磁盘的过程就是 flush。写入磁盘后,清空 translog。

translog 作用很大:
  • 保证文件缓存中的文档不丢失

  • 系统重启时,从 translog 中恢复

  • 新的 segment 收录到 commit point 中

具体可以看官方文档:https://www.elastic.co/guide/...

3.3.4 merge 过程

如何进行Elasticsearch数据写入的分析
如何进行Elasticsearch数据写入的分析

上面几个步骤,可见 segment 会越来越多,那么搜索会越来越慢?怎么处理呢?

通过 merge 过程解决:
  • 就是各个小段文件,合并成一个大段文件。段合并过程

  • 段合并结束,旧的小段文件会被删除

  • .liv 文件维护的删除文档,会通过这个过程进行清除

四、小结

如何进行Elasticsearch数据写入的分析

如这个图,ES 写入原理不难,记住关键点即可。

write -> refresh -> flush
  • write:文档数据到内存缓存,并存到 translog

  • refresh:内存缓存中的文档数据,到文件缓存中的 segment 。此时可以被搜到

  • flush 是缓存中的 segment 文档数据写入到磁盘

上述就是小编为大家分享的如何进行Elasticsearch数据写入的分析了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: 如何进行Elasticsearch数据写入的分析

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

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

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

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

下载Word文档
猜你喜欢
  • 如何进行Elasticsearch数据写入的分析
    这期内容当中小编将会给大家带来有关如何进行Elasticsearch数据写入的分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。前言主要讲 ES -> Lucene...
    99+
    2024-04-02
  • 如何进行Sqlserver数据写入表的测试
    如何进行Sqlserver数据写入表的测试,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 1、创...
    99+
    2024-04-02
  • PHP 中使用 Elasticsearch 进行数据分析与可视化
    引言:随着大数据时代的到来,数据分析和可视化成为了企业决策和数据洞察的重要手段。而 Elasticsearch 作为一种强大的分布式搜索和分析引擎,为开发人员提供了丰富的API接口,使得可以方便地将数据存储到 Elasticsearch 中...
    99+
    2023-10-21
    数据分析 PHP elasticsearch
  • 如何用python进行数据分析
    Python是一个非常强大的数据分析工具,它提供了丰富的库和函数来处理、分析、可视化数据,并在各个领域得到了广泛应用。本文将介绍如何使用Python进行数据分析。以下按照流程简述如下: 数据预处理 数据预处理通常是数据分析的第一步,这个过程...
    99+
    2023-09-08
    信息可视化
  • 如何进行dedecms注入的分析
    如何进行dedecms注入的分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。漏洞文件: plus\feedback.php。存在问题的代码:...if($comtype ...
    99+
    2023-06-17
  • 如何进行NewSQL数据库TiDB的分析
    本篇文章给大家分享的是有关如何进行NewSQL数据库TiDB的分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。下面要介绍的是数据库领域的后起...
    99+
    2024-04-02
  • 如何进行SAP数据中心的分析
    今天就跟大家聊聊有关如何进行SAP数据中心的分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Jerry的前一篇文章企业数字化转型与SAP云平台介绍了SAP云平台在企业数字化转型中的...
    99+
    2023-06-04
  • 如何进行.Net FrameWork SDK数据分析
    今天就跟大家聊聊有关如何进行.Net FrameWork SDK数据分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。.Net FrameWork SDK通过数据库来实现以DataS...
    99+
    2023-06-17
  • 如何使用pandas进行数据分析
    这篇文章主要介绍了如何使用pandas进行数据分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。(一)获取微信好友的数据为了获取微信好友的数据,需要使用一个工具,叫itcha...
    99+
    2023-06-19
  • 如何利用spark进行数据分析
    使用Spark进行数据分析可以遵循以下步骤: 准备数据:将数据加载到Spark中,可以使用Spark的DataFrame API...
    99+
    2024-04-02
  • 如何进行.NET Framework数据的简单分析
    如何进行.NET Framework数据的简单分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。进行数据库操作.NET Framework数据可能要会花费很长时...
    99+
    2023-06-17
  • Facebook是如何对大数据进行分析的
    这篇文章主要介绍“Facebook是如何对大数据进行分析的”,在日常操作中,相信很多人在Facebook是如何对大数据进行分析的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Facebook是如何对大数据进行...
    99+
    2023-06-10
  • 如何使用 PHP 函数进行数据分析?
    php 提供了广泛的函数,包括:数据聚合:计算数组元素总和(array_sum())数据排序:按升序/降序对数组进行排序(sort()/rsort())数据分组:根据键对数组进行分组(a...
    99+
    2024-05-04
    数据分析 php 数据排序
  • 如何使用Hive进行大数据分析
    使用Hive进行大数据分析通常涉及以下步骤: 安装和配置Hive:首先需要安装Hive,并配置与Hadoop集群的连接。Hive...
    99+
    2024-04-02
  • PHP中如何进行数据分析处理?
    PHP是一门广泛应用于Web开发的语言,通常被用来构建动态的Web应用程序。随着数据驱动型应用程序的兴起,PHP在数据分析和处理方面也变得越来越重要。本文将介绍如何使用PHP进行数据分析处理,从数据的获取、存储、分析和可视化展示等方面进行讲...
    99+
    2023-05-14
    数据处理 数据统计 PHP数据分析
  • 如何进行JavaScript数据扁平化分析
    如何进行JavaScript数据扁平化分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。什么是扁平化数组的扁平化,就是将一个嵌套多层的数组 array (嵌套可...
    99+
    2023-06-21
  • 如何利用Google Analytics进行数据分析
    利用Google Analytics进行数据分析涉及以下几个关键步骤:1、设置跟踪代码,2、定义目标和转化,3、监测流量来源,4、分析用户行为,5、创建自定义报告,6、设置事件跟踪。在开始使用Google Analytics之前,你需要在网...
    99+
    2023-10-29
    数据 Google Analytics
  • 如何使用python批量导入数据进Elasticsearch中
    本文小编为大家详细介绍“如何使用python批量导入数据进Elasticsearch中”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何使用python批量导入数据进Elasticsearch中”文章能帮助大家解决疑惑,下面跟着小编的思路...
    99+
    2023-06-05
  • 如何进行Python数据分析?正确的“入门之路”三部曲!
    Python是一种面向对象、直译式计算机程序设计语言,由于他简单、易学、免费开源、可移植性、可扩展性等特点,Python又被称之为胶水语言。下图为主要程序语言近年来的流行趋势,Python受欢迎程度扶摇直上。由于Python拥有非常丰富的库...
    99+
    2023-06-05
  • 如何进行数据库的架构整体分析
    这期内容当中小编将会给大家带来有关如何进行数据库的架构整体分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。  很少谈架构方面的事情,主要是因为这确实是个对知识面和知识深...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作