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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 在前面已经介绍了 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

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
4月前
|
存储 监控 分布式数据库
百亿级存储架构: ElasticSearch+HBase 海量存储架构与实现
本文介绍了百亿级数据存储架构的设计与实现,重点探讨了ElasticSearch和HBase的结合使用。通过ElasticSearch实现快速检索,HBase实现海量数据存储,解决了大规模数据的高效存储与查询问题。文章详细讲解了数据统一接入、元数据管理、数据一致性及平台监控等关键模块的设计思路和技术细节,帮助读者理解和掌握构建高性能数据存储系统的方法。
百亿级存储架构: ElasticSearch+HBase 海量存储架构与实现
|
4月前
|
Web App开发 JavaScript Java
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
这篇文章是关于如何使用Spring Boot整合Elasticsearch,并通过REST客户端操作Elasticsearch,实现一个简单的搜索前后端,以及如何爬取京东数据到Elasticsearch的案例教程。
311 0
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
|
4月前
|
消息中间件 监控 关系型数据库
MySQL数据实时同步到Elasticsearch:技术深度解析与实践分享
在当今的数据驱动时代,实时数据同步成为许多应用系统的核心需求之一。MySQL作为关系型数据库的代表,以其强大的事务处理能力和数据完整性保障,广泛应用于各种业务场景中。然而,随着数据量的增长和查询复杂度的提升,单一依赖MySQL进行高效的数据检索和分析变得日益困难。这时,Elasticsearch(简称ES)以其卓越的搜索性能、灵活的数据模式以及强大的可扩展性,成为处理复杂查询需求的理想选择。本文将深入探讨MySQL数据实时同步到Elasticsearch的技术实现与最佳实践。
303 0
|
6月前
|
存储 缓存 监控
|
6月前
|
存储 人工智能 数据处理
Elasticsearch 8 RAG 技术分享
本文介绍了Elasticsearch 8 在RAG场景方面的发展历程、技术演进、未来发展方向和产品能力。
489 8
|
6月前
|
自然语言处理 索引
ElasticSearch 实现分词全文检索 - 测试数据准备
ElasticSearch 实现分词全文检索 - 测试数据准备
72 1
|
6月前
|
数据采集 人工智能 自然语言处理
阿里云Elasticsearch AI语义搜索:解锁未来搜索新纪元,精准洞察数据背后的故事!
【8月更文挑战第2天】阿里云Elasticsearch AI场景语义搜索最佳实践
288 5
|
7月前
|
Java
Java 实现 Elasticsearch 查询全部数据
【7月更文挑战第7天】Java 实现 Elasticsearch 查询全部数据
|
3月前
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
107 5
|
4月前
|
存储 JSON Java
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
这篇文章是关于Elasticsearch的学习指南,包括了解Elasticsearch、版本对应、安装运行Elasticsearch和Kibana、安装head插件和elasticsearch-ik分词器的步骤。
412 0
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。

热门文章

最新文章