系列目录

内存吞金兽(Elasticsearch)的那些事儿 -- 认识一下

内存吞金兽(Elasticsearch)的那些事儿 -- 数据结构及巧妙算法

内存吞金兽(Elasticsearch)的那些事儿 -- 架构&三高保证

内存吞金兽(Elasticsearch)的那些事儿 -- 写入&检索原理

内存吞金兽(Elasticsearch)的那些事儿 -- 常见问题痛点及解决方案

架构图

Gateway

代表ElasticSearch索引的持久化存储方式。

在Gateway中,ElasticSearch默认先把索引存储在内存中,然后当内存满的时候,再持久化到Gateway里。当ES集群关闭或重启的时候,它就会从Gateway里去读取索引数据。比如LocalFileSystem和HDFS、AS3等。

DistributedLucene Directory

是Lucene里的一些列索引文件组成的目录。它负责管理这些索引文件。包括数据的读取、写入,以及索引的添加和合并等。

River

代表是数据源。是以插件的形式存在于ElasticSearch中。 

Mapping

映射的意思,非常类似于静态语言中的数据类型。比如我们声明一个int类型的变量,那以后这个变量只能存储int类型的数据。

eg:比如我们声明一个double类型的mapping字段,则只能存储double类型的数据。

Mapping不仅是告诉ElasticSearch,哪个字段是哪种类型。还能告诉ElasticSearch如何来索引数据,以及数据是否被索引到等。

Search Moudle

搜索模块

Index Moudle

索引模块

Disvcovery

主要是负责集群的master节点发现。比如某个节点突然离开或进来的情况,进行一个分片重新分片等。

  (Zen)发现机制默认的实现方式是单播和多播的形式,同时也支持点对点的实现。以插件的形式存在EC2。

一个基于p2p的系统,它先通过广播寻找存在的节点,再通过多播协议来进行节点之间的通信,同时也支持点对点的交互。

Scripting

脚本语言。包括很多。如mvel、js、python等。   

定制化功能非常便捷,但有性能问题

Transport

代表ElasticSearch内部节点,代表跟集群的客户端交互。包括 Thrift、Memcached、Http等协议

 

RESTful Style API

通过RESTful方式来实现API编程。

3rd plugins

第三方插件,(想象一下idea或vscode的插件

Java(Netty)

开发框架。其内部使用netty实现

JMX

监控

部署节点

  • master
  • index node(也是coordinating node
  • coordinating node

三高保证

  1. 一个es集群会有多个es节点
  2. 在众多的节点中,其中会有一个Master Node,主要负责维护索引元数据、负责切换主分片和副本分片身份等工作,如果主节点挂了,会选举出一个新的主节点
    1. 如果某个节点挂了,Master Node就会把对应的副本分片提拔为主分片,这样即便节点挂了,数据就不会丢。
  3. es最外层的是Index(相当于数据库 表的概念);一个Index的数据我们可以分发到不同的Node上进行存储,这个操作就叫做分片
    1. 比如现在我集群里边有4个节点,我现在有一个Index,想将这个Index在4个节点上存储,那我们可以设置为4个分片。这4个分片的数据合起来就是Index的数据
    2. 分片会有主分片和副本分片之分(防止某个节点宕机,保证高可用)
    3. Index需要分为多少个分片和副本分片都是可以通过配置设置的

为什么需要分片?
    • 如果一个Index的数据量太大,只有一个分片,那只会在一个节点上存储,随着数据量的增长,一个节点未必能把一个Index存储下来。
    • 多个分片,在写入或查询的时候就可以并行操作(从各个节点中读写数据,提高吞吐量)

分词器:

在分词前我们要先明确字段是否需要分词,不需要分词的字段将type设置为keyword,可以节省空间和提高写性能。

1)es的内置分词器

常用的三种分词:Standard AnalyzerSimple Analyzerwhitespace Analyzer

standard 是默认的分析器,英文会按照空格切分,同时大写转小写,中文会按照每个词切分

simple 先按照空格分词,英文大写转小写,不是英文不再分词

Whitespace Analyzer  先按照空格分词,不是英文不再分词,英文不再转小写

2)第三方分词器

es内置很多分词器,但是对中文分词并不友好,例如使用standard分词器对一句中文话进行分词,会分成一个字一个字的。这时可以使用第三方的Analyzer插件,分别是HanLP,IK,Pinyin分词器三种;

  • HanLP-面向生产环境的自然语言处理工具包,支持有多重分词配置

两个官网分词例子测试效果,分词效果较内置的分词有很大明显,可以支持中文的词语分词;

  • IK分词器:

可以根据粒度拆分

    ik_smart: 会做最粗粒度的拆分

    ik_max_word: 会将文本做最细粒度的拆分

如果是最细粒度,我是中国人,会被分词为我,是,中国人,中国,国人,相对于Hanlp的分词更加准确和多样;

  • PinYin

会对特定的信息进行分词,对用户搜索有更好的体验,该分词会对汉字的首字母进行分词,例如刘德华,会被分词为ldh,张学友,会被分词为zxy,用户根据拼音首字母就可以搜索出对应的特定信息。

内存吞金兽(Elasticsearch)的那些事儿 -- 架构&三高保证的更多相关文章

  1. 内存吞金兽(Elasticsearch)的那些事儿 -- 认识一下

    背景及常见术语 背景 Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene 基础之上. Lucene 可以说是当下最先进.高性能.全功能的搜索引擎库- ...

  2. 内存吞金兽(Elasticsearch)的那些事儿 -- 常见问题痛点及解决方案

    1.大数据量的查询效率如何保证: 查询的流程:往 ES 里写的数据,实际上都写到磁盘文件里去了,查询的时候,操作系统会将磁盘文件里的数据自动缓存到 Filesystem Cache 里面去 最佳的情况 ...

  3. Elasticsearch的几种架构(ELK,EL,EF)性能对比测试报告

    Elasticsearch的几种架构性能对比测试报告 1.前言 选定了Elasticsearch作为存储的数据库,但是还需要对Elasticsearch的基础架构做一定测试,所以,将研究测试报告输出如 ...

  4. PB级数据实时查询,滴滴Elasticsearch多集群架构实践

    PB级数据实时查询,滴滴Elasticsearch多集群架构实践  mp.weixin.qq.com 点击上方"IT牧场",选择"设为星标"技术干货每日送达 点 ...

  5. [从源码学设计]蚂蚁金服SOFARegistry之程序基本架构

    [从源码学设计]蚂蚁金服SOFARegistry之程序基本架构 0x00 摘要 之前我们通过三篇文章初步分析了 MetaServer 的基本架构,MetaServer 这三篇文章为我们接下来的工作做了 ...

  6. ElasticSearch——冷热(hot&warm)架构部署

    背景 最近在做订单数据存储到ElasticSearch,考虑到数据量比较大,采用冷热架构来存储,每月建立一个新索引,数据先写入到热索引,通过工具将3个月后的索引自动迁移到冷节点上. ElasticSe ...

  7. EFK教程 - ElasticSearch高性能高可用架构

    通过将elasticsearch的data.ingest.master角色进行分离,搭建起高性能+高可用的ES架构 作者:"发颠的小狼",欢迎转载与投稿 目录 ▪ 用途 ▪ 架构 ...

  8. EFK-2:ElasticSearch高性能高可用架构

    转载自:https://mp.weixin.qq.com/s?__biz=MzUyNzk0NTI4MQ==&mid=2247483811&idx=1&sn=a413dea65f ...

  9. elasticsearch从入门到出门-06-剖析Elasticsearch的基础分布式架构

    这个图来自中华石杉:

  10. Plan B

    王兴曾经说过: 2019 年是过去 10 年中最差的一年,也是未来 10 年中最好的一年. 之前我希望王兴预判错了,但现在我发现这位掌控着生活消费类数据的大佬应该不是扯淡. 今年的内部和外部环境真的很 ...

随机推荐

  1. vue项目整合echarts

    准备工作: 首先我们初始化一个vue项目,执行vue init webpack echart,接着我们进入初始化的项目下.安装echarts, npm install echarts -S //或   ...

  2. 鱼香ROS一键安装软件

    一行代码-解决人生烦恼 推荐语:一行代码搭建机器人开发环境(ROS/ROS2/ROSDEP) 开源地址:https://github.com/fishros/install 一键安装指令 wget h ...

  3. 多模型COE方法

    1.概述 在当前的人工智能发展中,单一模型的表现往往难以满足复杂任务的需求.为应对这些挑战,多模型协作的方法应运而生,"专家组合"(Mixture of Experts)便是其中一 ...

  4. markdown表格插入linux变量

    一.背景 看标题不难发现这是一个很"小众"的话题,其实本篇是对之前做的单元测试钉钉告警(此篇:https://www.cnblogs.com/ailiailan/p/1322203 ...

  5. QT Creator项目路径设置

    1.一些中间文件的生成路径的设置 MOC_DIR = temp/moc RCC_DIR = temp/rcc UI_DIR = temp/ui OBJECTS_DIR = temp/obj 这样设置之 ...

  6. register at least one qt version using“qt vs tools“->“qt options“问题描述及解决方法

    问题描述:在安装了Qt 5.9.8,vs 2022, QT VS Tool 2022并配置好环境变量之后创建Qt项目时无法创建,提示至少需要注册一个Qt版本到Qt VS Tools的Qt Option ...

  7. CF716B Complete the Word 题解

    CF716B Complete the Word 题解 分析 首先观察数据范围是 \(50000\),可以考虑 \(O(n)\) 暴力. 在字符串中枚举子串开始的位置 \(i\),然后再枚举 \(i\ ...

  8. 【昌哥IT课堂】MySQL8.0新特性之不可见主键

    一.概述作为 MySQL DBA ,相信大家都经历过在复制模式下,如果没有主键,遇到 load data ,大事务,ddl 等有大量表数据行扫描的行为时,会带来严重的主从延迟,给数据库稳定性和数据一致 ...

  9. 基于antlr的表达式解析器

    package formula; import java.util.HashMap; import java.util.List; import java.util.Map; import org.a ...

  10. 逆向WeChat(八)

    上一篇逆向WeChat(七)是逆向微信客户端本地数据库相关事宜. 本篇逆向微信客户端本地日志xlog相关的事宜. 本篇在博客园地址https://www.cnblogs.com/bbqzsl/p/18 ...