ES(ElasticSearch)技术栈简介

ElasticSearch简介

Elaticsearch,简称为es, es是一个基于apache开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。es也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

ElasticSearch应用方向

  • 1- 信息检索
  • 2- 企业内部系统搜索
  • 3- 数据分析引擎:Elasticsearch 聚合可以对数十亿行日志数据进行聚合分析,探索数据的趋势和规律

ElasticSearch特点

1- 海量数据存储和处理:
大型分布式集群(数百台规模服务器)
处理PB级数据
也可以进行单机部署
2- 开箱即用:
简单易用, 操作非常简单
快速部署生产环境
3- 作为传统数据库的补充:
传统关系型数据库不擅长全文检索(MySQL自带的全文索引,与ES性能差距非常大)
传统关系型数据库无法支持搜索排名、海量数据存储、分析等功能
Elasticsearch可以作为传统关系数据库的补充,提供RDBMS无法提供的功能

ElasticSearch架构及其基本概念

ES相关角色:

Master: 主节点
	作用:  
		负责管理从节点, 负责从节点的监控状态监控
		负责接收客户端的请求, 负责将请求转发给datanode处理
		维护元数据信息: 索引 索引类型 属性 属性类型 分词器 分片 副本等
	注意:
		1- 集群架构可以分成分布式和单机版。单机版的时候,该节点既是主节点也是从节点
		2- 当是分布式的时候,主节点是一个轻量级的节点,尽可能不会去存储数据,即使存储也只存放从副本,只负责数据的读

DataNode: 从节点
	作用:
		负责具体处理客户端请求操作的节点, CURD(插入数据、更新数据、删除数据)索引数据
		当数据有分片和副本的情况, 写入数据到从节点时, 负责把数据同步到其他的节点
	注意: 数据写入请求,会被发送到从节点,先写入到从节点中的主副本,再从主副本同步到其他从副本。也就是从节点上可能有主副本,也可能有从副本。

在这里插入图片描述
ES与传统关系型数据库结构对比:

Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices   -> Types  -> Documents -> Fields

ES中相关的专有名词:

index :  索引 表示索引库, 一个es下可以有多个索引库
settings : 主要对索引库分片 和副本的设置 , 默认 有  5分片  2副本
type : 在一个索引库下, 可以有多个type类型, 类似于在一个数据库中可以有多个表
	注意: 目前新的版本中, 已经只允许创建一个type(_doc)
filed:  字段, 从一个type下可以有个字段, 类似于 在一个表中可以有一个列
mapping:  映射关系, 主要是对字段进行相关的设置的
	比如: 字段类型 字段是否需要进行分词  字段的原始数据是否保存...
document: 文档, 表示的每一行的数据
cluster: 集群, es的集群
node:   es的节点
shards :   分片  默认 一个索引库有 5个
replicas:  副本 默认 每一个分片 都有一个副本加上本身 为 2个
Index索引创建完成以后,可以任意时间动态修改副本的数量;但是不能修改分片的数量
	如果后续数量增大了,分片数量不够了如何解决?
	1- 先创建一个具有更多分片的新Index索引库
	2- 后续的新数据写入到这个新的Index索引库
	3- 旧的Index索引库数据导入到新的Index索引库

ElasticSearch的安装

需要注意的是ES不支持root用户安装, 必须使用普通用户

问题: 解决单节点告警问题

由于当前ES为单节点, 在构建一个新的索引库的时候, 依然会产生多个分片和副本的情况(默认), 但是只有一个节点, 多余的副本就无法放置, ES会变为告警状态(黄色)

解决思路: 修改副本数量为1即可

curl -XPUT http://192.168.88.166:9200/_settings?pretty -d '{ "index": { "number_of_replicas": 0 } }' -H "Content-Type: application/json"

ES的基本使用

字段类型

  • es的类型
    • 基本数据类型:text | keywords => string
      text是可以进行分词字符串类型
      keywords是不能进行分词,
      long,
      float,
      date,
      binary
    • 地址位置相关的类型
      geo_point,geo_shape
    • 分词器
      分词器是针对一段文本,进行词的拆分方式
    • 分词类型
      standard analyse:英文分词器,标准分词器
      IK analyse:一种中文分词器
      JieBa:另外一种分词器
  • 完整数据类型
    • https://www.elastic.co/guide/en/elasticsearch/reference/7.10/mapping-types.html

ES-SQL

ES SQL特点:

  • 本地集成
    • Elasticsearch SQL是专门为Elasticsearch构建的。每个SQL查询都根据底层存储对相关节点有效执行。
  • 没有额外的要求
    • 不依赖其他的硬件、进程、运行时库,Elasticsearch SQL可以直接运行在Elasticsearch集群上
  • 轻量且高效
    • 像SQL那样简洁、高效地完成查询
  • 目前支持单表查询
SELECT select_expr [, ...]
[ FROM table_name ]
[ WHERE condition ]
[ GROUP BY grouping_element [, ...] ]
[ HAVING condition]
[ ORDER BY expression [ ASC | DESC ] [, ...] ]
[ LIMIT [ count ] ]
[ PIVOT ( aggregation_expr FOR column IN ( value [ [ AS ] alias ] [, ...] ) ) ]
  • es cli的官方指导文档:

    • https://www.elastic.co/guide/en/elasticsearch/reference/7.10/sql-cli.html
      • https://www.elastic.co/guide/en/elasticsearch/reference/7.10/sql-cli.html
        • https://www.elastic.co/guide/en/elasticsearch/reference/7.10/sql-syntax-show-tables.html
  • es sql简单操作

    • es-sql不适合做表关联查询
    • es-sql开源版支持的功能有限
    • 官方网站:https://www.elastic.co/guide/en/elasticsearch/reference/7.10/sql-syntax-select.html
  • es只适合单表,大宽表存储,类似于hbase、mongo
    ElasticSearch目前不支持对多表关联查询。
    在这里插入图片描述

ES的Python代码编程

from elasticsearch import Elasticsearch

if __name__ == '__main__':
    # 1- 创建ES连接
    es = Elasticsearch(hosts=["192.168.88.166:9200"])

    # 2- CRUD操作
    # 新增数据
    res = es.index(index="job_idx",id=1000001,body={"salary":"1000001"})
    print(res)

    # 更新数据
    res = es.update(index="job_idx",id=1000001,body={"doc":{"salary":"1000002"}})
    print(res)

    # 查询
    res = es.search(index="job_idx",body={"query": {"ids": {"values": ["1000001"]}}})
    print(res)

    # 删除
    res = es.delete(index="job_idx",id=1000000)
    print(res)

    # 3- 释放资源
    es.close()

ES的相关原理

ES的写入数据的流程

在这里插入图片描述

1- 客户端进行数据写入操作,随机连接一台节点。连接上谁,那么谁就成为了协调节点(coordinating node),并且也是该次请求的管理者

2- 协调节点计算当前写入的数据应该存放到哪个分片的主副本上,底层是基于文档ID的Hash取模方案

3- 判断成功以后,找到对应分片的主副本。如果该主副本就在当前协调节点,直接写入即可;如果不在当前节点,需要将请求转发给到对应的分片的主副本所在的节点

4- 对应的主副本节点接收到数据写入请求后,执行数据写入操作。写入成功以后并且将数据同步到其他从副本中

5- 当主副本和从副本都对数据同步完成以后,最终将写入成功的请求由协调节点返回给到客户端

ES的读取数据的流程

在这里插入图片描述

1- 客户端发送数据查询的请求,连接任意一台ES节点。连接上谁,谁就是协调节点(coordinating node),并且也是该次请求的管理者

2- 根据查询的方案: 
	2.1- 如果是基于文档ID的查询,此时会计算当前这个ID对应的数据存放在哪个分片上,接着将请求转发给到对应的分片的副本
	2.2- 如果不是基于文档ID的查询,例如通过文本内容关键字查询,此时需要将该查询需求广播给到所有的节点,由各个节点查询自己服务器上的数据,并且将查询到的结果数据汇聚到协调节点
	
3- 由协调节点负责汇总数据,并且对数据进行排序操作,是全局降序排序

4- 最后将结果返回给到客户端

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/359270.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习系列-2 线性回归训练损失

机器学习系列-2 线性回归&训练损失 学习内容来自:谷歌ai学习 https://developers.google.cn/machine-learning/crash-course/framing/check-your-understanding?hlzh-cn 本文作为学习记录1 线性回归: 举例:蝉(昆虫物种&…

深度学习(7)--卷积神经网络项目详解

一.项目介绍: 用Keras工具包搭建训练自己的一个卷积神经网络(Simple_VGGNet,简单版VGGNet),用来识别猫/狗/羊三种图片。 数据集: 二.卷积神经网络构造 查看API文档 Convolution layers (keras.io)https://keras.io/api/layers/…

氢气传感器报警值:守护实验室安全的隐形卫士

随着科技的发展,我们的生活变得越来越便捷,但是与此同时,安全问题也日益凸显。其中,氢气作为一种清洁能源,被广泛应用于各个领域,但是如果不加以控制,氢气泄漏也可能带来严重的安全隐患。因此&a…

burp靶场--xss上篇【1-15】

burp靶场–xss https://portswigger.net/web-security/cross-site-scripting 1. 什么是xss: 跨站脚本 (XSS) 是一种通常出现在 Web 应用程序中的计算机安全漏洞。XSS 允许攻击者将恶意代码注入网站,然后在访问该网站的任何人的浏览器中执行该代码。这可能允许攻击…

计算机设计大赛 深度学习 opencv python 实现中国交通标志识别

文章目录 0 前言1 yolov5实现中国交通标志检测2.算法原理2.1 算法简介2.2网络架构2.3 关键代码 3 数据集处理3.1 VOC格式介绍3.2 将中国交通标志检测数据集CCTSDB数据转换成VOC数据格式3.3 手动标注数据集 4 模型训练5 实现效果5.1 视频效果 6 最后 0 前言 🔥 优质…

如何将rmvb视频转换成mp4格式?如何播放rmvb视频?

RMVB文件格式的特性及使用场景 RMVB以其独特的可变比特率压缩方式而著称。这一特性使其能够根据视频内容自动调整比特率,不仅保证了视频质量,同时高效减小了文件大小。这种优势使得RMVB常见于在线视频、电视剧以及一些高清电影资源中。 RMVB文件格式的…

exec函数族和守护进程

exec函数族 进程调用exec函数族执行某个程序 进程当前内容被指定程序替换 实现让父子进程实现不同的程序: 父进程创建子进程 子进程调用exec函数族 父进程不受影响 execl和execlp #include <stdio.h> int execl (const char * path, const char * arg , ...); i…

微信小程序(二十六)列表渲染基础核心

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.列表渲染基础写法 2.外部索引和自身索引 源码&#xff1a; index.wxml <view class"students"><view class"item"><text>序号</text><text>姓名</text…

大数据 - Hadoop系列《四》- MapReduce(分布式计算引擎)的核心思想

上一篇&#xff1a; 大数据 - Hadoop系列《三》- MapReduce&#xff08;分布式计算引擎&#xff09;概述-CSDN博客 目录 13.1 MapReduce实例进程 13.2 阶段组成 13.4 概述 13.4.1 &#x1f959;Map阶段&#xff08;映射&#xff09; 13.4.2 &#x1f959;Reduce阶段执行过…

机器学习复习(3)——分类神经网络与drop out

完整的神经网络 以分类任务为例&#xff0c;神经网络一般包括backbone和head&#xff08;计算机视觉领域&#xff09; 下面的BasicBlock不是一个标准的backbone,标准的应该是复杂的CNNs构成的 Classfier是一个标准的head,其中output_dim表示分类类别&#xff0c;一般写作num…

【科技素养题】少儿编程 蓝桥杯青少组科技素养题真题及解析第23套

少儿编程 蓝桥杯青少组科技素养题真题及解析第23套 1、英国计算机科学家艾伦图灵于 1950 年提出了著名的“图灵测试”,用于判断计算机是否具有智能。“图灵测试”是通过()的方法进行判断的 A、让两台计算机对话 B、让人类与计算机对话 C、给计算机出题 D、让计算机分辨图…

HarmonyOS使用Web组件加载页面

1、加载网络页面 在Web组件创建时&#xff0c;指定默认加载的网络页面 。在默认页面加载完成后&#xff0c;如果开发者需要变更此Web组件显示的网络页面&#xff0c;可以通过调用loadUrl()接口加载指定的网页。 默认在Web组件加载完“www.baidu.com”页面后&#xff0c;点击按…

云原生 k8s 可能使用到的端口整理【不定期更新】

k8s 因为涉及到的组件太多了&#xff0c;所以端口有很多&#xff0c;这里整理了日常所接触的接口&#xff0c;后续有新的再更新。 如果是通过公网 IP 进行安装的时候需要根据实际情况有选择的进行放开&#xff1b;一般只有云厂商会提供公网 IP 访问&#xff0c;自建的话不建议 …

APUE学习之进程间通信(IPC)(下篇)

目录 一、进程间通信&#xff08;IPC&#xff09; 二、信号量&#xff08;Semaphore&#xff09; 1、基本概念 2、同步关系与互斥关系 3、临界区与临界资源 4、信号量的工作原理 5、信号量编程 6、实战演练 三、共享内存&#xff08;Shared Memory&#xff09; 1、…

多线程c++

目录 1.join和detach区别 2.lock_guard和unique_lock 3.原子操作 4.条件变量condition_variable 5.future 和 promise 1.join和detach区别 ①不使用join和detach #include <iostream> #include <thread> #include <windows.h>using namespace std;v…

Linux文本三剑客-grep

1.grep简介&#xff1a; grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具&#xff0c;它能使用正则表达式搜索文本&#xff0c;并把匹配的行打印出来&#xff0c;都是按行处理的。 grep 最主要…

腾讯云云监控实践:使用云审计 CloudAudit SDK 精准管理腾讯云资源

文章目录 一、什么是腾讯云的操作审计 CloudAudit二、CloudAudit 有哪些优势三、CloudAudit 应用场景举例3.1 安全分析3.2 资源变更跟踪3.3 合规性审计 四、使用云审计 SDK 进行云监控4.1 安装环境包 PHP4.2 下载并解压云审计 PHP SDK4.3 创建的腾讯云持久证书&#xff08;如果…

解决:ModuleNotFoundError: No module named ‘selenium’

解决&#xff1a;ModuleNotFoundError: No module named ‘selenium’ 文章目录 解决&#xff1a;ModuleNotFoundError: No module named selenium背景报错问题报错翻译报错位置代码报错原因解决方法方法一&#xff0c;直接安装方法二&#xff0c;手动下载安装方法三&#xff0…

【Tomcat与网络2】一文理解Servlet是怎么工作的

在前面&#xff0c;我们研究了如何用idea来启动一个Servlet程序&#xff0c;今天我们就再来看一下Servlet是如何工作的。 目录 1.Servlet 介绍 2.Servlet 容器工作过程 3.Servlet的扩展 不管是电脑还是手机浏览器&#xff0c;发给服务端的就是一个 HTTP 格式的请求&#xf…

摄像头提示sd卡未格式化怎么回事?怎么解决

作为摄像头用户&#xff0c;往往会遇到或多或少的技术问题。而当摄像头显示"SD卡未格式化"的提示时&#xff0c;这可能令一些用户感到困惑和担忧。在本文中&#xff0c;我们将解释这个提示的原因&#xff0c;并提供一些建议来解决这一问题。我们相信本文会让您更加了…