iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Elasticsearch入门知识点总结
  • 326
分享到

Elasticsearch入门知识点总结

2024-04-02 19:04:59 326人浏览 安东尼
摘要

这篇文章主要介绍“elasticsearch入门知识点总结”,在日常操作中,相信很多人在Elasticsearch入门知识点总结问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”

这篇文章主要介绍“elasticsearch入门知识点总结”,在日常操作中,相信很多人在Elasticsearch入门知识点总结问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Elasticsearch入门知识点总结”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

正文

我先介绍一下目前主流的几种数据库存储方式 :

行存储:同一行的数据被物理的存储在一起

常见的行式数据库系统有:Mysql、Postgres和MS SQL Server

存储结构:

Elasticsearch入门知识点总结

某些场景下行存储数据库的查询效率:

Elasticsearch入门知识点总结

列存储 :来自不同列的值被单独存储,来自同一列的数据被存储在一起

常见的列式数据库有:Vertica、 Paraccel (Actian Matrix,Amazon Redshift)、 Sybase IQ、  Exasol、 Infobright、 InfiniDB、 MonetDB (VectorWise, Actian Vector)、 LucidDB、 SAP  HANA、 Google Dremel、 Google PowerDrill、 Druid、 kdb+、HBase、clickhouse。

Elasticsearch入门知识点总结

某些场景下列存储数据库的查询效率:

Elasticsearch入门知识点总结

最近我在接触Clickhouse他就是列式存储,他之所以这么快,主要是以下三点原因:

  • 输入/输出

  • 针对分析类查询,通常只需要读取表的一小部分列。在列式数据库中你可以只读取你需要的数据。例如,如果只需要读取100列中的5列,这将帮助你最少减少20倍的I/O消耗。

  • 由于数据总是打包成批量读取的,所以压缩是非常容易的。同时数据按列分别存储这也更容易压缩。这进一步降低了I/O的体积。

  • 由于I/O的降低,这将帮助更多的数据被系统缓存

:这里列出这两个只是对比一些特殊场景的效率差,也是为后面es的快和数据结构做铺垫而已,事实上Clickhouse这样的数据库也只适合某些场景,大部分场景还得行式数据库。

大家感兴趣我后面可以来点Clickhouse的分享(虽然我也还在看)

接下来就说另外一种存储结构了:

文档

实际上 es在某种程度上是和列式文档有一定的相似之处的,大家往后面看就知道了

{ "name": "name" "size": 24 "sex': "male" }

上面我介绍了几种常见的存储结构其实是为了说明一下es的场景,以及es的一些优势,我们都知道数据库是有索引的,而且也挺快的,那es又是怎么存储数据,他的索引又是咋样的呢?

倒排索引

倒排顾名思义就是通过Value去找key,跟我们传统意义的根据key找value还不太一样。

举个例子,还是上面的数据,我们可以看到es会建立以下的索引:

Name 倒排索引

Elasticsearch入门知识点总结

Size倒排索引

Elasticsearch入门知识点总结

Sex倒排索引

Elasticsearch入门知识点总结

大家可以看到所有的倒排所有都有Term和Posting List这两个概念,Posting  list就是一个int的数组,存储了所有符合某个term的文档id。

怎么根据value找key呢?就比如我要找所有性别是男生的人,Sex的倒排索引的Posting  list可以告诉我是id为1和3的人,那再通过Name的term我可以看到1的是人aobing,3的人是鸡蛋,依次类推找到所有信息。

Es的查询速度是非常快的,但是目前看来如果只是以Term的样子去查找并不快呀?是为什么呢?

这里就会引出接下来的两个概念,Term Dictionary和Term Index。

Term  Dictionary:这个很好理解,我上面说过都是各种Term组成的,那为了查找Term方便,es把所有的Term都排序了,是二分法查找的。

Elasticsearch入门知识点总结  

Trem Index:这是为了优化Term  Dictionary而存在的,大家想呀这么多Term光是排序了肯定也不行,想要快就得放到内存,但是es数据量级往往是很大的,那放在磁盘?磁盘的寻址又会很慢,那怎么去减少磁盘上的寻址开销呢?Term  Index

其实就是跟新华字典一样,每个字母开头的是哪些,再按照拼音去排序。

Elasticsearch入门知识点总结

这就是三者的关系,是一张很经典的图了,基本上所有学es的人都应该看到过。

Term Index就存了一些前缀和映射关系,这样可以大大减少磁盘的随机读次数了。

巧妙压缩

大家是不是发现这个设计是很巧妙的?而且es的检索速度比mysql是快很多的,大家在使用Mysql的时候可以发现其实索引跟Trem  Dictionary是一样的,但是es多了一个Index 多了一层筛选,少了一些随机次数。

还有一点我很想提一下,就是Term index 在磁盘的存储结构,这个在我历史文章有写过,而且当时我还踩过他的坑,今天鉴于篇幅,我就简单介绍一下。

FST大家可以理解为一种压缩技术,最简单化通过压缩字节的方式,上面我说了Term index放到内存都放不下,但是压缩一下呢?

Elasticsearch入门知识点总结

细节我就不展开了,下面这个文章解释的特别详细,因为这是一篇大概科普的,后面我会专门出文章介绍集群和他压缩的细节。

Elasticsearch入门知识点总结

链接:https://cs.nyu.edu/~mohri/pub/fla.pdf

接下来再介绍一些es里面我觉得很重要的概念吧:

接近实时(NRT)

ES写入的数据会先写到一个内存bufferr中去(在buffer里的时候数据是搜索不到的),然后每隔默认是一秒会刷到os  cache。

操作系统里面,磁盘文件其实都有一个东西,叫做os cache,操作系统缓存,就是说数据写入磁盘文件之前,会先进入os  cache,先进入操作系统级别的一个内存缓存中去。

只要buffer中的数据被refresh操作,刷入os  cache中,就代表这个数据就可以被搜索到了。默认是每隔1秒refresh一次的,所以es是准实时的,因为写入的数据1秒之后才能被看到。

为什么要这么设计呢?

简单我们看一下不这么设计会怎么样:

Elasticsearch入门知识点总结

如果写入缓存之后直接刷到硬盘,其实是十分消耗资源的,而且写了马上去硬盘读取,并发量很难上去,你可以想象上万QPS写入的时候,还去查询磁盘,是怎样一个灾难级别的现场。

那es怎么做的呢?

Elasticsearch入门知识点总结

数据写入到buffer,然后再每秒刷到cache,这个时候就可以被搜到了,所以说准实时,而不是实时就是这一秒的差距,这样设计可以让磁盘压力减少不说,写入和查询都不会受到影响,并发也就上去了。

分词文本分析(Analysis)是把全文本转换一系列单词(term/token)的过程,也称为分词。

当一个文档被索引时,每个Term都可能会创建一个倒排索引。倒排索引的过程就是将文档通过分词器(Analyzer)分成一个一个的Term,每一个Term都指向包含这个Term的文档集合

分词

是es比较核心的功能,但是他默认的分词其实对中文并不友好,比如我搜中国,那可能会把带中和带国的都搜出来,但是中国就是一个词汇不应该这样分。

现在都是可以采用机器学习算法来分词,还有一些中文分词插件,比如ik分词器。

他内置分词器的在英文场景是比较好用的。

脑裂

脑裂问题其实在集群部署的机器上都是会存在的,假设现在es集群有两个节点,节点1是主节点对外提供服务,节点2是副本分片节点。

Elasticsearch入门知识点总结

现在两个节点因为网络原因断联了,会发现什么?主节点发现自己是主节点继续对外提供服务,副本节点发现没有主节点了,选举自己是主节点,也对外提供服务了,因为主节点不可用他也是被迫当主节点的(狗头)。

Elasticsearch入门知识点总结

Elasticsearch入门知识点总结

对于调用者来说,这是很难发现差别的,除非去对比数据,而我之前在生产环境就发生过脑裂的情况,还是用户反馈的,因为搜索一个词汇他有时候能搜出那个商品,有时候不能,因为请求打在不同的节点上了。

那正常我们会怎么解决呢?elasticsearch.yml中有个配置:discovery.zen.minimum_master_nodes  这个参数决定了在选主过程中需要有多少个节点通信,默认是1,设置的原则就是设置为 集群节点数量/2+1个。

如果你的集群是三个节点,那这个参数就设置为3/2+1=2个,那挂了一个,另外两个可以通信,所以可以选出一个主的,如果你集群是三个节点,参数还是2,但是你发现挂了一个只有一个节点自己跟自己通信,就不会选主了。

但是这样也有弊端只有2个节点的时候,挂一个就相当于服务不可用了,所以大家要保证集群是三个以上是最好的。

  • Elasticsearch的选举算法基于 Bully 选举算法,简单的说,在 Bully 算法中,每个节点都有一个编号,只有编号最大的存活节点才能成为  master 节点。Bully算法的具体过程为:

  • 当任何一个进程P发现 master 不响应请求时,它发起一次选举,选举过程如下:

  • (1)P进程向所有编号比它大的进程发送一个 election 消息;

  • (2)如果无人响应,则P获胜,成为 master;

  • (3)如果编号比它大的进程响应,则由响应者接管选举工作,P的工作完成。

  • 任何一个时刻,一个进程只能从编号比它小的进程接受 election 消息,当消息到达时,接受者发送一个 OK  消息给发送者,表明它在运行,接管工作。

  • 最终除了一个进程外,其他进程都放弃,那个进程就是新的协调者,随后协调者将获胜消息发送给其他所有进程,通知它们新的协调者诞生了。

ELK

其实提到ES往往都是elk三兄弟一起提到的,最后在收尾的地方,我就说一下另外两个兄弟吧。

L是Logstash,Logstash是一个开源数据收集引擎,具有实时管道功能。Logstash可以动态地将来自不同数据源的数据统一起来,并将数据标准化到你所选择的目的地。

Logstash管道有两个必需的元素:输入和输出,以及一个可选元素:过滤器。输入插件从数据源那里消费数据,过滤器插件根据你的期望修改数据,输出插件将数据写入目的地。

K就是Kibana,Kibana是一个针对Elasticsearch的开源分析及可视化平台,用来搜索、查看交互存储在Elasticsearch索引中的数据。使用Kibana,可以通过各种图表进行高级数据分析及展示。

Kibana让海量数据更容易理解。它操作简单,基于浏览器的用户界面可以快速创建仪表板(dashboard)实时显示Elasticsearch查询动态。

设置Kibana非常简单,无需编码或者额外的基础架构,几分钟内就可以完成Kibana安装并启动Elasticsearch索引监测。

 Elasticsearch入门知识点总结

到此,关于“Elasticsearch入门知识点总结”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

您可能感兴趣的文档:

--结束END--

本文标题: Elasticsearch入门知识点总结

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

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

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

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

下载Word文档
猜你喜欢
  • Elasticsearch入门知识点总结
    这篇文章主要介绍“Elasticsearch入门知识点总结”,在日常操作中,相信很多人在Elasticsearch入门知识点总结问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2022-10-18
  • Python入门知识点汇总
    Python的设计目标之一是让代码具备高度的可阅读性。它设计时尽量使用其它语言经常使用的标点符号和英文单字,让代码看起来整洁美观。它不像其他的静态语言如C、Pascal那样需要重复书写声明语句,也不像它们的语法那样经常有特殊情况和意外。缩进...
    99+
    2023-01-31
    知识点 入门 Python
  • Python入门基础知识总结
    目录 一:简介: 二:Python基础语法 2.1.字面量 2.2.注释 2.3.数据类型转换 2.4.标识符 2.5.运算符 2.6.字符串 2.6.1.字符串的三种定义方式 2.6.2.字符串拼接 2.6.3.字符串格式化 2.6.4....
    99+
    2023-09-01
    python 开发语言
  • MongoDB知识点总结
    一:MongoDB 概述    一、NoSQL 简介        1. 概念:NoSQL(Not Only SQL的缩写),指的是非关系型数据库,是对不同于传统的关系型数据库的数据库管理系统的统称。用于超大规模数据的存储,数据存...
    99+
    2019-04-03
    MongoDB知识点总结
  • MySQL知识点总结
    MySQL知识点总结 一、      MySQL常用命令 启动MySQL服务:service mysqld start 或 systemctl start mysqld.service 停止MySQL服务:service mys...
    99+
    2019-07-01
    MySQL知识点总结
  • Python知识点总结
    本篇内容介绍了“Python知识点总结”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 为什么要使用描述符?假想你正在给学校写一个成绩管理...
    99+
    2023-06-16
  • 总结DOM的知识点
    这篇文章主要介绍“总结DOM的知识点”,在日常操作中,相信很多人在总结DOM的知识点问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”总结DOM的知识点”的疑惑有所帮助!接下来,...
    99+
    2022-10-19
  • 完美Python入门基础知识点总结,看完你的Python就完全入门了!
    Python标识符在 Python 里,标识符有字母、数字、下划线组成。在 Python 中,所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。Python 中的标识符是区分大小写的。以下划线开头的标识符是有特殊意义的。以单下...
    99+
    2023-06-02
  • Python入门学习之类的相关知识总结
    目录前言一、类的定义和使用二、类的方法三、类的属性四、类中常用特殊方法前言 Python是面向对象的程序设计(Object Oriented Programming)。 面向对象的程...
    99+
    2022-11-12
  • Python基础知识点总结
       学了一年多的Python,去年做了一段时间的爬虫项目,近来在做数据分析和机器学习的东西,抽空整理一下以前学的Python基础知识点,有借鉴与总结。具体知识点后续会分段展开深入。     1.到底什么是Python?你可以在回答中与...
    99+
    2023-01-31
    知识点 基础 Python
  • 数据库知识点总结 -
    目录数据库介绍SQLSQL定义SQL的分类:DDL(数据定义语言:操作数据库和表)DML(数据操纵语言:操作数据(增删改))DQL(查询表中的数据记录)(重点)视图事务 数据库介绍 数据库DataBase: 用于存储和管理数...
    99+
    2021-05-02
    数据库知识点总结 -
  • Oracle基础知识点总结
    这篇文章主要讲解了“Oracle基础知识点总结”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Oracle基础知识点总结”吧!首先上一张Oracle体系结构图...
    99+
    2022-10-18
  • mysql常用知识点总结
    本篇文章给大家主要讲的是关于mysql常用知识点总结的内容,感兴趣的话就一起来看看这篇文章吧,相信看完mysql常用知识点总结对大家多少有点参考价值吧。       ...
    99+
    2022-10-18
  • MySQL MVCC的知识点总结
    本篇内容介绍了“MySQL MVCC的知识点总结”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1).Mul...
    99+
    2022-10-18
  • mysql知识点简单总结
    1.操作数据库语句  1.1 显示所有的数据:show databases;  1.2 创建数据库:create database databasename;&nbs...
    99+
    2022-10-18
  • Python基本知识点总结
    Python注释 python中单行注释采用 # 开头。 python 中多行注释使用三个单引号(''')或三个双引号(""")...
    99+
    2022-11-10
  • java中Supplier知识点总结
    1、说明 这个接口是提供者的意思,只有一个抽象的get,没有默认的方法和静态的方法,导入一个泛T,get方法,返回一个泛T。 supplier也用于创建对象,但与传统的创建对象语法不...
    99+
    2022-11-12
  • HTML相关知识点总结
    目录简介HTML文档和网页的关系呢?HTML的标签样子?HTML基本概念标签元素属性注释编码规则HTML常用元素标题段落链接跳转页面:跳转锚点图片列表有序列表无序列表定义列表表格块表...
    99+
    2022-11-12
  • mysql知识点+面试总结
    目录 1 mysql介绍 2 数据库常见语法 3 数据库表的常见语法 4 其他常见语法(日期,查询表字段) 5 JDBC开发步骤 6 索引 6.1 索引常见语法 7 常见面试总结 8 java集成数据库监控页面 1 mysql介绍 ...
    99+
    2023-09-04
    mysql 面试 数据库
  • 前端知识点总结——HTML
    前端知识点总结——HTMLHTML:HTML4.01 指的就是网页技术HTML5:HTML4.01的升级版本1.web的基础知识web与Internet1.Internet:全球性的计算机互联网络,因特网,互联网,交互网。前端学习圈:767...
    99+
    2023-06-03
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作