不做大哥好多年 不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核

逍遥子

不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核
  • MySQL

  • Redis

  • Elasticsearch

    • 01.ES安装
    • 02.ES介绍
      • 01.ES功能与特点
        • 1、ES是什么
        • 2、ES主要功能
      • 02.ES主要特点
        • 2.1 分片与集群
        • 2.2 自动索引
        • 2.3 搜索是近实时的
        • 2.4 ES优缺点
      • 03.ES核心概念
        • 3.1 索引(index)库
        • 3.2 类型(type)表
        • 3.3 文档(document)行
        • 3.4 Lucene Index
        • 3.5 段(Segment)
        • 3.6 提交点(commit point)
        • 3.7 映射
        • 3.8 Shard 分片
        • 3.9 Replica 副本
        • 3.10 Cluster集群
        • 3.11 Node节点
      • 04.ES使用
        • 1、分片的设定
        • 2、ES数据近实时问题
    • 03.倒排索引 ✅
    • 04.ES原理 ✅
    • 05.ES集群原理 ✅
    • 06.ES集群部署
    • 07.ES优化
    • 21.ES基本使用
    • 22.中文分词检索
    • 23.python使用ES
    • 24.ES复杂类型
    • 100.制作一些数据
    • 101.ES同步
  • Kafka

  • Etcd

  • MongoDB

  • TiDB

  • RabbitMQ

  • 数据库
  • Elasticsearch
xiaonaiqiang
2021-02-12
目录

02.ES介绍

# 01.ES功能与特点

# 1、ES是什么

特点: 非关系型、搜索引擎、近实时搜索与分析、高可用、天然分布式、横向可扩展

  • ES是一个分布式、可扩展、实时的搜索与数据分析引擎

  • ES不仅仅只是全文搜索,还支持结构化搜索、数据分析、复杂的语言处理、地理位置和对象间关联关系等

  • ES的底层依赖Lucene,Lucene可以说是当下最先进、高性能、全功能的搜索引擎库

为什么不直接使用Lucene?

  • 但是Lucene仅仅只是一个库,你需要使用Java并将Lucene直接集成到应用程序中

  • 您可能需要获得信息检索学位才能了解其工作原理,因为Lucene非常复杂

  • ES也是使用Java编写的,它的内部使用Lucene做索引与搜索

  • 它的目的是隐藏Lucene的复杂性,取而代之的提供一套简单一致的RESTful API

# 2、ES主要功能

  • 分布式实时文件存储,处理的结构化和非结构数据
  • 实时分析的分布式搜索引擎,为用户提供关键字查询的全文检索功能
  • 是实现企业级PB级海量数据处理分析的大数据解决方案(ELK)

ES主要致力于结构化和非结构化数据的分布式实时全文搜索及分析,使用场景

  • 日志管理与分析(ELK)
  • 系统指标分析
  • 安全分析
  • 企业搜索(OA、CRM、ERP)
  • 网站搜索(电商、招聘、门户)
  • 应用搜索
  • 应用性能管理APM

# 02.ES主要特点

# 2.1 分片与集群

  • ES默认把数据分成多个片,多个片可以组成一个完整的数据,这些片可以分布在集群中的各个机器节点中
  • 随着后期数据的越来越大,ES集群可以增加多个分片,把多个分片分散到更多的主机节点上
  • ES集群可以增加多个分片,把多个分片分散到更多的机器主机节点上,负责负载均衡,横向扩展
  • 而每个查询任务提交到某一个节点,该节点必须负责将数据进行整理汇聚,再返回给客户端

# 2.2 自动索引

  • ES所有数据默认都是索引的
  • ES只有不加索引才需要额外处理

# 2.3 搜索是近实时的

  • 你往 es 里写的数据,实际上都写到磁盘文件里去了
  • 查询的时候,操作系统会将磁盘文件里的数据自动缓存到 filesystem cache 里面去。
  • es 的搜索引擎严重依赖于底层的 filesystem cache,你如果给 filesystem cache 更多的内存
  • 尽量让内存可以容纳所有的idx segment file索引数据文件,那么你搜索的时候就基本都是走内存的,性能会非常高。

  • 性能差距究竟可以有多大?我们之前很多的测试和压测:
    • 如果走磁盘一般肯定上秒,搜索性能绝对是秒级别的,1秒、5秒、10秒。
    • 但如果是走 filesystem cache,是走纯内存的,那么一般来说性能比走磁盘要高一个数量级,基本上就是毫秒级的,从几毫秒到几百毫秒不等。

# 2.4 ES优缺点

# 03.ES核心概念

MySQL elasticsearch
数据库(Datebase) 索引(Index)
表(Table) 类型(Type)
行(Row)每一条 文档(Document)每一条
字段 属性
对象(Schema) 映射(Mapping)
索引(Index) 万物皆索引(不管什么数据都默认索引)
SQL语言(Select、update) Query DSL(GET、PUT)

# 3.1 索引(index)库

  • ES将他的数据存储在一个或多个索引中,可以向索引读写文档
  • 索引相当于关系型数据库中的一个数据库

# 3.2 类型(type)表

  • 类型(type)是用来规定文档的各个字段内容的数据类型和其他的一些约束
  • 一个索引(index)可以有多个文档类型(type)
  • 文档类型(type)相当于关系型数据库中的表

# 3.3 文档(document)行

  • 在ES中,文档(document)是存储数据库的载体,包含一个或多个字段
  • ES中的最小的,整体的数据单位
  • 文档(document)相当于关系型数据库中的一行数据
  • 一个document里面有多个field,每个field就是一个数据字段

# 3.4 Lucene Index

  • 注意和ES Index区别,Lucene Index是由若干段和提交点文件组成

# 3.5 段(Segment)

  • Luncene里面的一个数据集概念,因为ES底层是基于Lucene
  • 最核心的概念就是Segment,每个段本身就是一个倒排索引

# 3.6 提交点(commit point)

  • 有一个列表存放着所有已知的所有段

# 3.7 映射

  • 映射是定义ES对索引中字段的存储类型,分词方式和是否存储等信息
  • 就像数据库中的Schema,描述了文档可能具有的字段或属性,每个字段的数据类型
  • Es对字段类型可以不指定,然后动态对字段类型猜测
  • 也可以在创建索引时具体指定字段的类型(关系型数据库才需要手动指定)

# 3.8 Shard 分片

  • 单台机器无法存储大量数据,es可以将一个索引中的数据切分为多个shard,分布在多台服务器上存储
  • 有了shard就可以横向扩展,存储更多数据,让搜索和分析等操作分布到多台服务器上去执行,提升吞吐量和性能
  • 每个shard都是一个lucene index

# 3.9 Replica 副本

  • 任何一个服务器随时可能故障或宕机,此时shard可能就会丢失,因此可以为每个shard创建多个replica副本
  • replica可以在shard故障时提供备用服务,保证数据不丢失,多个replica还可以提升搜索操作的吞吐量和性能
  • primary shard(建立索引时一次设置,不能修改,默认5个),replica shard(随时修改数量,默认1个)
  • 默认每个索引10个shard,5个primary shard,5个replica shard,最小的高可用配置,是2台服务器

# 3.10 Cluster集群

  • 包含多个节点,每个节点属于哪个集群是通过一个配置(集群名称,默认是elasticsearch)来决定的
  • 对于中小型应用来说,刚开始一个集群就一个节点很正常

# 3.11 Node节点

  • 集群的一个节点,节点也有一个名称(默认是随机分配的),节点名称很重要(在执行运维管理操作的时候)
  • 默认节点会去加入一个名称为“elasticsearch”的集群,如果直接启动一堆节点,那么它们会自动组成一个elasticsearch集群
  • 当然一个节点也可以组成一个elasticsearch集群

# 04.ES使用

# 1、分片的设定

  • 分片数过小,数据写入形成瓶颈,无法水平拓展

  • 分片数过多,每个分片都是一个lucene的索引,分片过多将会占用过多资源

  • 如何计算分片数

    • 分片数量最好设置为节点数的整数倍,保证每一个主机的负载是差不多一样的

    • 否则可能遇到其他主机负载正常,就某个主机负载特别高的情况

    • 一般我们根据每天的数据量来计算分片,保持每个分片的大小在 50G 以下比较合理

    • 如果还不能满足要求,那么可能需要在索引层面通过拆分更多的索引或者通过别名 + 按小时 创建索引

# 2、ES数据近实时问题

  • ES数据写入之后,要经过一个refresh操作之后,才能够创建索引,进行查询

  • 但是get查询很特殊,数据实时可查

    • get查询的实时性,通过每次get查询的时候
    • 如果发现该id还在内存中没有创建索引,那么首先会触发refresh操作,来让id可查
  • ES5.0之前translog可以提供实时的CRUD

    • get查询会首先检查translog中有没有最新的修改,然后再尝试去segment中对id进行查找

    • 5.0之后,为了减少translog设计的复杂性以便于再其他更重要的方面对translog进行优化

    • 所以取消了translog的实时查询功能

01.ES安装
03.倒排索引 ✅

← 01.ES安装 03.倒排索引 ✅→

最近更新
01
04.数组双指针排序_子数组
03-25
02
08.动态规划
03-25
03
06.回溯算法
03-25
更多文章>
Theme by Vdoing | Copyright © 2019-2025 逍遥子 技术博客 京ICP备2021005373号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式