ElasticSearch(分布式搜索引擎)介绍

ElasticSearch路由哈希算法的实现 当收到一个建立索引请求时,ElasticSearch首先要做的事就是决定在哪一个shard上对其进行索引。ElasticSearch使用djb2哈希算法对指定或者默认的key进行哈希,然后mod索引中shard数量 n        hash(key) mod n hash(key)modn  djb2并不复杂, 但是这样的哈希算法有啥好处呢??????     unsigned 阅读详情

ElasticSearch

ES是目前很流行的分布式搜索引擎,基于Lucene.

架构设计

主体设计:和一般的分布式思想一致,大的来说即在多个机器或容器上启动多个ElasticSearch进程,进而组成cluster。
主要功能:存储数据。
基本方式:使用索引作为基本单位存储数据,和Mysql类似,将索引与数据表关联,但也有一点不一样,这里的索引只是差不多相当于一张表,实际的情况index下还可以继续分类,一般按照以下层级分类。
index->type->mapping->document->field
具体展开: 一个index代表一个类别,而一个index里面有多个type,type真正相当于mysql设计上的一个表,表示一个类别下具体的实体。每个type下有一个mapping,相当于这个type的表结构,就是数据库设计中的字段、字段类型。document则相当于数据库里的数据,即对应某个表中的一行,而field则相当于一行中的某个字段具体的值。
分布式存储的基本实现:和一般分布式设计类似,将索引拆分成多个shard分片,让数据存储在这些shard上,一方面提高了性能,因为可以分布式的进行操作,提高了吞吐量和性能,另一方面是便于分表拓展,当数据量增加的时候,只需要将索引对应的shard增加即可。
容错与高可用保证:和Kafka类似的方式,每个shard都会有多个备份,也会选举出一个领导primary_shard,专门负责写入,并将数据同步到各个副本上replica_shard。
选举切换方式:主要由集群选出一个master节点用来维护索引切换shard。比方说如果有一个节点挂了,就会由master节点把挂的节点对应的primary shard撤销,并将别的节点设置成primary shard,当节点重启后再将丢失的数据同步过去,此使这个节点是个普通节点。

写入数据

  1. 由客户端选择一个节点作为coordinating_node来发送请求。
  2. 由coordinating_node对document进行路由选择转发给primary_shard所在的节点。
  3. 由primary_shard处理请求并将数据同步到replica_node上
  4. 由coordinating_node接受操作完成的相应,再返回写入结果给客户端。

读取数据

  1. 由客户端选择一个节点作为coordinate_node,发送所需要的doc_id
  2. coordinate_node根据doc_id进行哈希,判断出这个id对应的shard,从而将查询请求转发给对应的node,并且使用round-robin负载均衡算法,随机选择一个shard。
  3. 这个node将document查询出来返回给coordinate_node。
  4. 最终由coordinate_node响应客户端。

全文搜索过程

  1. 由客户端选择一个节点作为coordinate_node,并发送查询请求。
  2. coordinate_node将请求转发到所有的shard。
  3. 每个shard将自己的搜索结果doc_id返回给coordinate_node节点,再在coordinate_node节点进行数据的合并与排序。
  4. 根据所有的doc_id再去按读取过程查询所有的document,最终返回给客户端。

准实时性

写入的数据只有过了1s才能被看到。因为1s才会refresh一次,也可以手动通过restful api或java api,手动执行一次refresh操作,将buffer中的数据刷入cache中,使结果立刻显示出来。

丢失数据

因为存在五秒的数据停留在buffer、cache、segment file中,即内存中而不在磁盘上,会导致有5s的数据丢失。

删除/更新数据

删除主要通过将doc标识成deleted状态进行软删除。
更新主要通过原来的doc删除,再重新写入数据。

lucene

主要是一个封装了各种建立倒排索引的算法代码。可以将已有数据建立索引。

倒排索引

简单说就是关键词到文档id的映射,每个关键词对应出现了所有关键词的文件id。
其中所有词项对应一个或多个文档,根据字典顺序升序排列。

ElasticSearch的性能优化

众所周知,读取内存中的数据比读取磁盘上的数据快很多,因为磁盘有寻址等方面的时间消耗。所以要让ElasticSearch的性能提升就是让数据的读取尽可能多的从内存中读。
因此,一方面可以规范存入的数据,将用于搜索的数据存入ElasticSearch中,将完整的数据存入其他数据库中,比如mysql或hbase这种列数据库。另一方面的话当数据还是足够多,内存远远不够存,可以做下面的进一步优化。

数据预热

顾名思义,就是让Hotspot的数据自己手动提前预热,存入内存。一般的做法是做一个子服务,将热点数据每隔一定时间存入内存中去。

冷热分离

数据预热的过程中还要防止被冷数据重新占据内存,这时可以像mysql一样做一个水平拆分,将数据冷热分离。由于二八原则,热数据一般占据总数据的少部分,但能保证大多数人的搜索性能要求。

不使用联表查询

联表查询在elasticsearch中性能较差,因此对于联表的数据,应在写入前处理好,即dto的时候操作好,并且新建一个表写入。

分页性能优化

一方面可以限定分页的数量,比如之允许访问前XXX条数据,来限制页数。
另一方面类似于淘宝,抖音,微博,使用实时下拉查询分页,使用scroll api一次性给所有数据一个快照,通过游标去分页查询,但是要限制查询时间。也可以通过上一页查下一页的方法,当然这个时候不允许跳页。

集群部署

主要还是在不同集器上的一些配置并选择适当数量的shard分片。

分布式搜索引擎之elasticsearch基本使用3 因为我们还需要部署kibana容器,因此需要让es和kibana容器互联。 阅读详情

相关推荐

分布式搜索引擎之elasticsearch基本使用1

什么是elasticsearch?一个开源的分布式搜索引擎,可以用来实现搜索、日志统计、分析、系统监控等功能什么是elastic stack(ELK)?是以elasticsearch为核心的技术栈,包括beats、Logstash、kibana、elasticsearch什么是Lucene?是Apache的开源搜索引擎类库,提供了搜索引擎的核心API分词器的作用是什么?创建倒排索引时对文档分词用户搜索时,对输入的内容分词IK分词器有几种模式?ik_smart:智能切分,粗粒度。

weixin_43956070的博客 1273

ElasticSearch 常用字段类型

一、数据类型 1.1 核心数据类型 字符串型:text(分词)、keyword(不分词) 数值型:long、integer、short、byte、double、float、half_float、scaled_float 日期类型:date 布尔类型:boolean 二进制类型:binary 范围类型:integer_range、float_range、long_range、double_range、date_range 1.2 复杂数据类型 数组类型:array 对象类型:object

wr_java的博客 5158

海波龙(Oracle Hyperion)单点登陆问题记录

Oracle海波龙套件已经多年未更新,按Oracle官方文档实施单点登陆启用之后,SmartView工具通过专用链接方式无法登陆系统。 在抓包逆向分析之后 定位到HspSmartViewServlet类在执行以下代码时获得的ssotoken无效导致,在某大厂工作的时候曾通过在filter中截获请求的方式植入Attribute,保留账号密码并在单点程序中处理实现登陆。 但在完美世界的环境中...

cainiaoEzu的专栏 1970

Elasticsearch 7 如何解决ES5/6中的type映射问题

自定义类型字段 当然,一个集群中可以存在多少个主要分片是有限制的,因此您可能不希望浪费整个分片来仅收集几千个文档。在这种情况下,您可以实现自己的自定义type字段,该字段的工作方式与旧的类似_type。 让我们以上面的user/tweet为例。最初,工作流看起来像这样: PUT twitter { "mappings": { "user": { "proper...

h_sn9999的专栏 1163

深度学习之常用算子介绍

打开 onnx 模型图,可以看到它是一个有向无环图。除了 Input、Output ,其他都是算子(是操作,而不是节点)在ONNX(Open Neural Network Exchange)模型中,除了输入和输出,其他都是算子(Operations)。算子是表示神经网络模型中的不同操作或层的元素。一个ONNX模型由一系列算子组成,通过连接这些算子来定义模型的计算流程。

ueke1的博客 8459

app逆向分析案例-95分

先把justtrusmeplus打开设置好95分,开始抓包,得到结果为: https://www.95fenapp.com/api_goods/list/v3.0?is_all=1&keywords=%E7%A7%91%E6%AF%94& page=1&page_size=20 &publish_timestamp=0 &scene=2&scene_type=95fen_android_search_personal&sn=SearchList

weixin_41763171的博客 2742

Elasticsearch入门

Elasticsearch

LF991的博客 1285

传感器采集信息的频率(采样频率)

较高的采集频率通常能提供更详细的信息,但也会增加数据处理和存储的负担。在某些应用中,较高的采样频率可能是必要的,而在其他情况下,则可能会选择适当的低采样频率以降低功耗和数据处理压力。传感器采集信息的频率(采样频率)是指传感器在一定时间内对输入信号进行采样的次数。对于一些需要快速检测和响应的应用,如运动传感器、声音传感器等,高采样频率是至关重要的。高采样频率通常需要更多的功耗和更大的存储容量,因为产生的数据量更大。例如,对于快速运动的对象,较低的采样频率可能无法捕捉到运动的真实轨迹。

chen的博客 5341

分布式搜索分析引擎ES

ES基本功能原理

m0_60788247的博客 1769

机械臂学习:视觉引导——绪论

视觉引导 = 定位 + 引导定位:视觉系统定位到待引导的物体引导:视觉系统引导机械臂按需要的轨迹实现一定的工艺流程(过度点:人为指定机械臂的轨迹防止碰撞)(点云匹配:解决位姿估计姿态估计的问题)无序抓取的三个核心技术:3d识别(图中的点云匹配) 抓取方法路径规划(防止机械臂的碰撞,如自身碰撞等)如果只有同一高度的平移和旋转,其实并不需要点云,用单目就可以做,但是如果涉及到物体的倾斜以及高度的变换,那就是单目力所不能及,所以就是第三种情况:平移旋转加垫高。

2303_80018785的博客 4044

一步一步实现基于COMSOL的单模光纤波导仿真

一步一步实现基于COMSOL的单模光纤波导仿真,简单易懂,跟着博客就能实现

君莫笑lucky的博客 1万+

ES(ElasticSearch)分布式全文搜索引擎介绍及使用方式

什么是ES **ES** 全称 **ElasticSearch** 是一种分布式全文搜索引擎,基于Lucene(全文搜索框架)开发而来。 Lucene是公认的迄今为止的最好用的搜索引擎库,但是他所提供的API对于我们使用者来说,是非常苦恼的,常要花费大量时间去熟悉学习。ES的出现就很好的解决了这个问题,良好的封装,易用的API,链式书写方式,开瓶即饮。 ES的特点 **ES** 虽然是以Lucene核心库开发的,但是却不是以它作为核心,**ES** 的特点: *分布式实时文件存储,每个字...

喜欢猪猪 1240

基于LSTM算法实现交通流量预测(Pytorch版)

本研究采用PyTorch框架,设计并实现了一种基于LSTM(Long Short-Term Memory)网络的交通流量预测模型。针对时序性显著的交通流量数据,模型首先将多节点、多通道的时空信息整合为一维特征输入至多层LSTM单元,利用其捕捉长期依赖及短期波动的能力进行深度学习。全连接层随后调整时间步长以适应预测周期需求。模型结构灵活,能适应不同节点数、输入输出长度及通道配置,实现在给定历史流量数据基础上对未来交通流量的精准预测,为交通管理与规划提供数据驱动支持。

打酱油的葫芦娃 4637

ES 分布式搜索引擎【一】

分布式搜索引擎,elasticsearch、kibana、IK分词器的安装与使用。

m0_52861684的博客 1713

瑞芯微RK3588部署YOLOv8模型

写下这篇博客进行记录,以防后面忘了怎么部署。

weixin_45303602的博客 3654

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

ES基本介绍

简介 ES是一个基于RESTful web接口并且构建在Apache Lucene之上的开源分布式搜索引擎。 同时ES还是一个分布式文档数据库,其中每个字段均可被索引,而且每个字段的数据均可被搜索,能够横向扩展至数以百计的服务器存储以及处理PB级的数据。 可以在极短的时间内存储、搜索和分析大量的数据。通常作为具有复杂搜索场景情况下的核心发动机。 ES就是为高可用和可扩展而生的。一方面可以通...

NasubiZW 31万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

详解最热门搜索引擎——ES

一、产生背景 ​ 互联网发展早期的时候,对于一般的公司储存的数据量不是那么的大,所以很多公司更倾向于使用数据库去存储和查询数据,如:现在去MySQL中查询数据,大概的查询方式就是:select * from table where filed like “%XXX%”或者其他方式,但是,如果我们在查询的时候没有用到或命中数据库建立的索引话,则会扫描整张表,即便是MySQL做过单表查询能力优化,但是他的极限也只在400万左右,且还会经常出现超时现象,让后为了解决这些问题,。很多公司就开始对数据库进

会编程的小郑 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Elasticsearch(ES)简介及基本使用

ES 简介 ES是一个使用java语言编写的并且基于Lucene编写的搜索引擎, 他提供了分布式的全文搜索服务, 还提供了一个RESTful风格的web接口, 官方还对多种语言提供了相应的API Lucene? Lucene 本身就是一个搜索引擎的底层, ES特点 分布式: ES主要为了横向扩展能力 全文检索: 将一段词语进行分词, 并且将分出的单个词语统一的放入一个分词库中,在搜索时,根据关键字去分词库中搜索去找到想找到的内容,(倒排索引) RESTful风格web接口: 操作ES非常简单, 只需要

JAVA菜鸟 2万+

ES(一):ES基本概念和原理简单介绍

Elasticsearch概述: ES是基于Lucene的搜索服务器,它提供了一个分布式多用户能力的全问搜索引擎,且ES支持RestFulweb风格的url访问。ES是基于Java开发的开源搜索引擎,设计用于云计算,能够达到实时搜索,稳定、可靠、快速。此外,ES还提供了数据聚合分析功能,但在数据分析方面,es的时效性不是很理想,在企业应用中一般还是用于搜索。ES自2016年起已经超过Solr等,...

zhoushimiao1990的博客 3万+

微服务es+Kibana解析部署使用全流程

ElasticSearch是Java开发的一款开源的,分布式的搜索引擎。它的搜索采用内存中检索的方式,大大提高了检索的效率,es是基于REST API的方式对数据操作的,可以让存储、检索、索引效率更高。

m0_71240584的博客 2977

一、分布式搜索引擎ElasticSearch——基本介绍

分布式搜索引擎ElasticSearch 1.引入 1.1 为什么要使用ElasticSearch? ​ 场景再现:小张在做电商项目的商品搜索相关的事务时,原本使用的是MySQL数据库进行,但是最近出现了问题,商品越来越多,自然速度也越来越慢。 ​ 在测试时,数据仅仅上万条时,关键词查询就比较慢了,如果一旦企业级的数据。响应速度就更加不能接受了。原因在于在数据库做模糊查询时,如LIKE语句,...

LQM1528490339的博客 766

[C++][第三方库][Elasticsearch]详细讲解

[C++][第三方库][Elasticsearch]详细讲解

SnowK博客 5568

搜索引擎ElasticSearch分布式搜索和分析引擎学习,SpringBoot整合ES个人心得

ElasticSearch搜索和分析引擎学习笔记

HakerDONG的博客 2680

分布式搜索引擎Elasticsearch(一)

是一款非常强大的开源的分布式的搜索引擎,可以帮助我们从海量数据中快速找到需要的内容。elasticsearch结合kibana、Logstash、Beats,也就是elastic stack(ELK),换句话说 ELK 就是以 Elasticsearch 为核心的技术栈,包括了 kibana、Logsash、Beats。

菜鸟的博客 3216

ElasticSearch 认识和安装ES

es是一个分布式、高性能的搜索引擎,广泛应用于大数据检索、日志分析、实时搜索等场景。与传统数据库相比,ElasticSearch 对于大规模数据的处理具有显著优势,特别是模糊查询、分词分析、语义理解等复杂搜索任务。本章内容主要是介绍了 Elasticsearch 的基础知识、它的起源以及如何安装和配置 Elasticsearch 和 Kibana。安装过程中使用 Docker 是一种方便快捷的方式,可以轻松启动单机模式的 Elasticsearch 服务,并结合 Kibana 进行可视化操作。

2301_80093566的博客 1843
上一篇: 消息队列介绍
下一篇: 分库分表与读写分离
Tate_Brown
博客等级 码龄9年 39粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值