【Elasticsearch 技术分享】—— Elasticsearch 存储一条数据, put 过程是什么样子的?

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: 在前面已经介绍了 ES 中常用的一些名词,知道了数据是存储在 shard 中的,而 index 会映射一个或者多个 shard 。那这时候我要存储一条数据到某个索引下,这条数据是在哪个 index 下的呢?

网络异常,图片无法展示
|


前言


在前面已经介绍了 ES 中常用的一些名词,知道了数据是存储在 shard 中的,而 index 会映射一个或者多个 shard 。那这时候我要存储一条数据到某个索引下,这条数据是在哪个 index 下的呢?


ES 演示

一切按照官方教程使用 三条命令,在本机启动三个节点组装成伪集群。

~  % > ./elasticsearch
~  % > ./elasticsearch -Epath.data=data2 -Epath.logs=log2
~  % > ./elasticsearch -Epath.data=data3 -Epath.logs=log3
复制代码


创建索引

curl -X PUT "localhost:9200/my-index-000001?pretty" -H 'Content-Type: application/json' -d'
{
  "settings": {
    "index": {
      "number_of_shards": 3,  
      "number_of_replicas": 2 
    }
  }
}
'
复制代码

当前版本 7.9

文档地址:www.elastic.co/guide/en/el…


ES 默认 number_of_shards 为 1 默认 number_of_replicas 为 1,即一个分片只有一个副本

image.png

下面命令可以查看索引信息

curl -X GET "localhost:9200/_cat/indices/my-index-000001?v&s=index&pretty"
复制代码

image.png


存放数据

curl -X PUT "localhost:9200/my-index-000001/_doc/0825?pretty" -H 'Content-Type: application/json' -d'
{
  "name": "liuzhihang"
}
'
复制代码

image.png


查询数据

curl -X GET "localhost:9200/my-index-000001/_doc/0825?pretty"
复制代码

文档地址: www.elastic.co/guide/en/el…

image.png


一条数据该存放在哪个 shard

通过命令可以看出:在存放数据时并没有指定到哪个 shard,那数据是存在哪里的呢?

当一条数据进来,会默认会根据 id 做路由

shard = hash(routing) % number_of_primary_shards
复制代码

从而确定存放在哪个 shard。 routing 默认是 _id, 也可以设置其他。

这个 id 可以自己指定也可以系统给生成, 如果不指定则会系统自动生成。


put 一条数据的过程是什么样的?

image.png

写入过程主要分为三个阶段

  1. 协调阶段:Client 客户端选择一个 node 发送 put 请求,此时当前节点就是协调节点(coordinating node)。协调节点根据 document 的 id 进行路由,将请求转发给对应的 node。这个 node 上的是 primary shard 。
  2. 主要阶段:对应的 primary shard 处理请求,写入数据 ,然后将数据同步到 replica shard。
  1. primary shard 会验证传入的数据结构
  2. 本地执行相关操作
  3. 将操作转发给 replica shard
  4. 当数据写入 primary shard 和 replica shard 成功后,路由节点返回响应给 Client。
  1. 副本阶段:每个 replica shard 在转发后,会进行本地操作。


在写操作时,默认情况下,只需要 primary shard 处于活跃状态即可进行操作。

在索引设置时可以设置这个属性

index.write.wait_for_active_shards

默认是 1,即 primary shard 写入成功即可返回。


如果设置为 all 则相当于 number_of_replicas+1 就是 primary shard 数量 + replica shard 数量。 就是需要等待 primary shard 和 replica shard 都写入成功才算成功。

可以通过索引设置动态覆盖此默认设置。


总结


如何查看数据在哪个 shard 上呢?

curl -X GET "localhost:9200/my-index-000001/_search_shards?routing=0825&pretty"
复制代码

通过上面命令可以查到数据 0825 的所在 shard。

image.png

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
目录
相关文章
|
12月前
|
弹性计算 运维 Serverless
超值选择:阿里云Elasticsearch Serverless在企业数据检索与分析中的高性能与灵活性
本文介绍了阿里云Elasticsearch Serverless服务的高性价比与高度弹性灵活性。
493 8
|
存储 监控 分布式数据库
百亿级存储架构: ElasticSearch+HBase 海量存储架构与实现
本文介绍了百亿级数据存储架构的设计与实现,重点探讨了ElasticSearch和HBase的结合使用。通过ElasticSearch实现快速检索,HBase实现海量数据存储,解决了大规模数据的高效存储与查询问题。文章详细讲解了数据统一接入、元数据管理、数据一致性及平台监控等关键模块的设计思路和技术细节,帮助读者理解和掌握构建高性能数据存储系统的方法。
百亿级存储架构: ElasticSearch+HBase 海量存储架构与实现
|
Web App开发 JavaScript Java
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
这篇文章是关于如何使用Spring Boot整合Elasticsearch,并通过REST客户端操作Elasticsearch,实现一个简单的搜索前后端,以及如何爬取京东数据到Elasticsearch的案例教程。
854 0
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
|
存储 缓存 监控
|
存储 人工智能 数据处理
Elasticsearch 8 RAG 技术分享
本文介绍了Elasticsearch 8 在RAG场景方面的发展历程、技术演进、未来发展方向和产品能力。
978 8
|
消息中间件 监控 关系型数据库
MySQL数据实时同步到Elasticsearch:技术深度解析与实践分享
在当今的数据驱动时代,实时数据同步成为许多应用系统的核心需求之一。MySQL作为关系型数据库的代表,以其强大的事务处理能力和数据完整性保障,广泛应用于各种业务场景中。然而,随着数据量的增长和查询复杂度的提升,单一依赖MySQL进行高效的数据检索和分析变得日益困难。这时,Elasticsearch(简称ES)以其卓越的搜索性能、灵活的数据模式以及强大的可扩展性,成为处理复杂查询需求的理想选择。本文将深入探讨MySQL数据实时同步到Elasticsearch的技术实现与最佳实践。
635 0
|
自然语言处理 索引
ElasticSearch 实现分词全文检索 - 测试数据准备
ElasticSearch 实现分词全文检索 - 测试数据准备
202 1
|
数据采集 人工智能 自然语言处理
阿里云Elasticsearch AI语义搜索:解锁未来搜索新纪元,精准洞察数据背后的故事!
【8月更文挑战第2天】阿里云Elasticsearch AI场景语义搜索最佳实践
546 5
|
8月前
|
安全 Java Linux
Linux安装Elasticsearch详细教程
Linux安装Elasticsearch详细教程
1351 64
|
7月前
|
JSON 安全 数据可视化
Elasticsearch(es)在Windows系统上的安装与部署(含Kibana)
Kibana 是 Elastic Stack(原 ELK Stack)中的核心数据可视化工具,主要与 Elasticsearch 配合使用,提供强大的数据探索、分析和展示功能。elasticsearch安装在windows上一般是zip文件,解压到对应目录。文件,elasticsearch8.x以上版本是自动开启安全认证的。kibana安装在windows上一般是zip文件,解压到对应目录。elasticsearch的默认端口是9200,访问。默认用户是elastic,密码需要重置。
3330 0