• Elasticsearch-分片原理1



    Elasticsearch版本:6.0


        Elasticsearch基于Lucene,采用倒排索引写入磁盘,Lucene引入了按段搜索的概念,来动态更新索引。

        一个Lucene索引包含一个提交点和三个短,如图:

        image

    关于索引和分片

        一个Lucene索引在Elasticsearch成为分片,一个Elasticsearch索引是分片的集合。

        Elasticsearch在索引中搜索时,它发送查询到每一个属于索引的分片,然后合并每个分片的结果到一个全局的结果集。

    按段写入磁盘的流程如下:

        1、新文档的Lucene索引到达内存缓存

        image

         2、提交后新的段添加到提交点,并清空内存缓存

        image

        3、在从内存缓存提交到磁盘的过程中,文档会先被写入到文件系统缓存,这一步的代价比刷新到磁盘的代价低,而在文件缓存就可以像其他文件一样被打开读取。而Lucene在此时就可以对这个未完成提交的文档进行搜索。

        image

        Elasticsearch中,写入和打开一个新段的过程叫refresh,默认情况每个分片每秒自动刷新一次,所以称Elasticsearch是近实时搜索的。文档的变化并不是立即对搜索可见,但会在一秒之内变为可见。

    刷新时间可以手动指定

    POST /_refresh 刷新(Refresh)所有的索引。

    POST /blogs/_refresh 只刷新(Refresh) blogs 索引。

    关闭或者设置刷新时间

    PUT /my_logs/_settings
    { "refresh_interval": -1 } 
    PUT /my_logs/_settings
    { "refresh_interval": "1s" } 

        为了保证Elasticsearch的可靠性,增加了translog事务日志,每次Elasticsearch的操作均进行了日志记录。

        1.一个文档被索引之后,就会被添加到内存缓冲区,并且 追加到了 translog

        image

        2. 刷新(refresh)完成后, 缓存被清空但是事务日志不会

         image

        3.这个进程继续工作,更多的文档被添加到内存缓冲区和追加到事务日志

        image

        4. 每隔一段时间--例如 translog 变得越来越大--索引被刷新(flush);一个新的 translog 被创建,并且一个全量提交被执行,并且事务日志被清空

        image

        这个执行一个提交并且截断 translog 的行为在 Elasticsearch 被称作一次 flush 。 分片每30分钟被自动刷新(flush),或者在 translog 太大的时候也会刷新。


    段合并

        Elasticsearch通过后台进行段合并,合并时会将旧的已删除的文档从文件系统清除。

        1、两个提交了的段和一个未提交的段正在被合并到一个更大的段

        image

        2、一旦合并结束,老的段被删除

        image

  • 相关阅读:
    TextBox 只有下划线
    can't find web control library(web控件库)
    DropDownListSalesAC”有一个无效 SelectedValue,因为它不在项目列表中。
    IDE、SATA、SCSI、SAS、FC、SSD 硬盘类型
    如何打印1px表格
    CSS控制打印 分页
    Virtual Server could not open its emulated Ethernet switch driver. To fix this problem, reenable the Virtual Server Emulated Et
    Xml中SelectSingleNode方法中的xpath用法
    热带水果莫入冰箱?水果存放冰箱大法
    探索Asp.net的Postback机制
  • 原文地址:https://www.cnblogs.com/bigshark/p/7906530.html
Copyright © 2020-2023  润新知