Elasticsearch 中的数据分片问题

Elasticsearch 分片机制

Elasticsearch 在存储数据时采用 分片(Shard)机制,以提高性能和可扩展性。它索引中的数据被划分成多个 主分片(Primary Shard)副本分片(Replica Shard),这些分片会分布在不同的节点上,实现 分布式存储和高可用性

1. 主分片(Primary Shard)

  • 每个文档 只能存储在一个主分片上(索引写入时会根据 _id 通过哈希计算决定存入哪个主分片)。
  • 主分片数量在索引创建时确定后续无法更改
  • 默认情况下,Elasticsearch 会自动管理 数据在不同主分片之间的均衡分布。

2. 副本分片(Replica Shard)

  • 副本分片是主分片的拷贝,用于数据冗余和负载均衡。
  • 副本分片可以提高查询性能,因为搜索请求可以同时查询主分片和副本分片。
  • 副本分片不会与对应的主分片存放在同一节点,确保主节点宕机时数据仍然可用。

3. 分片数量配置

  • 创建索引时,可以通过 number_of_shardsnumber_of_replicas 进行配置:
    PUT /my_index
    {"settings": {"index": {"number_of_shards": 3,  // 3个主分片"number_of_replicas": 1  // 每个主分片有1个副本}}
    }
    
    以上配置:
    • 共有 3 个主分片,数据会均匀存储在 3 个主分片上。
    • 每个主分片有 1 个副本,即总共会有 3 个副本分片。
    • 总共的分片数 = 主分片数 + 副本分片数 = 3 + 3 = 6

4. 为什么 Elasticsearch 采用分片机制?

提高写入性能:数据分散存储到多个分片,多个节点可并行写入数据。
提高查询性能:搜索请求可以同时在多个分片上执行,提高吞吐量。
提高可扩展性:新节点加入集群后,可以重新分配分片,实现负载均衡。
提供高可用性:副本分片可以在主分片宕机时提供数据冗余,保证数据安全。

5. 分片的动态扩展

  • 主分片数量不可更改,但可以 使用 reindex API 迁移到新的索引
  • 副本分片数量可以动态调整,在集群扩容后可增加副本来提高查询能力:
    PUT /my_index/_settings
    {"index": {"number_of_replicas": 2}
    }
    
    这样,每个主分片有 2 个副本,提高查询能力和容灾能力。

Elasticsearch 基于分片机制 进行分布式存储和查询,主分片决定数据如何存储,副本分片保证数据冗余和查询性能。合理配置分片数能提高 数据存储、查询效率和集群可用性

Elasticsearch中的分片MySQL分库分表中的分片不是完全相同的概念,尽管它们都涉及到将数据分割存储以提高性能和可扩展性,但在实现和管理上有很大的区别。

Elasticsearch 中的分片

  • 自动化:Elasticsearch 中的分片是由系统自动管理的,用户在创建索引时可以指定主分片(primary shards)的数量和副本分片(replica shards)的数量,具体的数据如何分配到不同的分片是由 Elasticsearch 根据哈希算法自动决定的。用户不需要自己设计如何将数据分散到不同的节点上。
  • 分片方式:Elasticsearch 的分片是基于文档级别的,每个文档被分配到某个主分片,主分片再被复制成副本分片。每个分片是一个完整的数据集,可以独立存储和查询。
  • 透明性:对于应用程序和查询用户来说,分片的存在是透明的,所有的查询和操作都由 Elasticsearch 自动处理,用户无需关心数据存储在具体哪个分片上。

MySQL分库分表中的分片

  • 手动设计:MySQL 的分库分表需要开发者手动设计和实现,开发者需要根据业务需求决定如何将数据分割成多个库和表。通常,这包括选择合适的分片键(例如按用户ID、时间戳、地理位置等)来决定数据如何分布到不同的数据库和表中。
  • 分片方式:MySQL 分库分表的方式更加灵活,开发者可以选择 水平分割(Sharding)垂直分割(Vertical Partitioning)
    • 水平分割:将数据根据某个字段(如用户ID)分割到不同的表或数据库中。
    • 垂直分割:将数据按业务逻辑拆分到不同的表中(例如,用户表和订单表放在不同的数据库中)。
  • 手动管理:开发者需要设计并实现跨库、跨表的查询逻辑,处理数据的路由和聚合。对于大规模的分库分表,通常会涉及到中间件(如 ShardingSphere)来管理这些分片。

主要区别

  • 自动化 vs 手动设计:Elasticsearch 的分片机制是自动的,由系统根据数据哈希进行分配;而 MySQL 的分库分表需要开发者手动设计数据如何分布,并实现路由和查询逻辑。
  • 管理方式:Elasticsearch 的分片通过集群自动管理,系统会处理节点间的负载均衡和副本分配;而 MySQL 的分片需要开发者手动管理,尤其是当需要扩展时,可能需要更复杂的操作,比如数据迁移、分片规则调整等。
  • 透明性:在 Elasticsearch 中,分片对用户和查询是透明的,用户无需关心分片的细节;而 MySQL 中,开发者需要明确知道数据存储在哪些库表,并根据分片规则编写查询和处理代码。

因此,Elasticsearch 的分片是基于索引层面的自动化分配,而 MySQL 的分片更多是业务层面的手动管理

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【操作系统安全】任务3:Linux 网络安全实战命令手册

目录 一、基础网络信息获取 1. 网络接口配置 2. 路由表管理 3. 服务端口监控 二、网络监控与分析 1. 实时流量监控 2. 数据包捕获 3. 网络协议分析 三、渗透测试工具集 1. 端口扫描 2. 漏洞利用 3. 密码破解 四、日志审计与分析 1. 系统日志处理 2. 入侵检测 3…

2024年MathorCup数学建模A题移动通信网络中PCI规划问题解题全过程文档加程序

2024年第十四届MathorCup高校数学建模挑战赛 A题 移动通信网络中PCI规划问题 原题再现: 物理小区识别码(PCI)规划是移动通信网络中下行链路层上,对各覆盖小区编号进行合理配置,以避免PCI冲突、PCI混淆以及PCI模3干扰等现象。PCI规划对于减少…

Spring安装和使用(Eclipse环境)

一、Spring框架概述 1、 什么是Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复…

【Android Studio开发】生命周期、Activity和组件通信(上)

零、前期配置 1.【Android】模式 2.点击【运行】,弹出模拟器 右侧是模拟机,显示Hello World 3. 打开【activity_main.xml】文件,点击【Design】,然后点击【Component Tree】 在弹出的Component Tree中右键【main】,选择【Conver…

bug:uni-file-picker上传图片报错,文件选择器对话框只能在由用户激活时显示,跨域cors

uni-file-picker上传图片报错,文件选择器对话框只能在由用户激活时显示,跨域has been blocked by CORS policy 参考文档 解决方案:在云服务空间配置localhost跨域

Python学习笔记(6)

Python学习笔记(6) 第13节课 函数基础1.函数定义与调用2.函数的返回值3.局部变量与全局变量 第13节课 函数基础 对于任何一个知识点,必须讨论的三个问题: (1)它是啥 (2)为啥有它 …

RISC-V AIA学习2---IMSIC

我在学习文档这章时,对技术术语不太理解,所以用比较恰当的比喻来让自己更好的理解。 比较通俗的理解: 将 RISC-V 系统比作一个工厂: hart → 工厂的一条独立生产线IMSIC → 每条生产线配备的「订单接收员」MSI 中断 → 客户通过…

目标检测20年(一)

今天看的文献是《Object Detection in 20 Years: A Survey》,非常经典的一篇目标检测文献,希望通过这篇文章学习到目标检测的基础方法并提供一些创新思想。 论文链接:1905.05055 目录 一、摘要 1.1 原文 1.2 翻译 二、介绍 三、目标检测…

AI Agent开发大全第八课-Stable Diffusion 3的本地安装全步骤

前言 就像我们前面几课所述,本系列是一门体系化的教学,它不像网上很多个别存在的单篇博客走“吃快餐”模式,而是从扎实的基础来带领大家一步步迈向AI开发高手。所以我们的AI课程设置是相当全面的,除了有牢固的基础知识外还有外面互联网上也搜不到的生产级实战。 前面讲过…

Hadoop集群搭建(hdfs、yarn)

Hadoop 是 Apache 软件基金会旗下的一个开源项目,是用于处理大数据的分布式系统基础架构,被广泛应用于大数据存储、处理和分析等场景。 一、核心组件 1、Hadoop 分布式文件系统(HDFS) 具有高容错性,能在低成本硬件上…

数据结构——顺序栈seq_stack

前言:大家好😍,本文主要介绍了数据结构——顺序栈 目录 一、概念 1.1 顺序栈的基本概念 1.2 顺序栈的存储结构 二、基本操作 2.1 结构体定义 2.2 初始化 2.3 判空 2.4 判满 2.5 扩容 2.6 插入 入栈 2.7 删除 出栈 2.8 获取栈顶元…

数据结构初阶-二叉树的应用

1.单值二叉树 题目链接:https://leetcode.cn/problems/univalued-binary-tree/description/ 题目思路:我们把根结点与左孩子和右孩子进行比较,只有左右子树都是单值二叉树的时候才为单值二叉树。但是我们需要先返回的是false,最…

【网络层协议】NAT技术内网穿透

IP地址数量限制 我们知道,IP地址(IPv4)是一个4字节32位的整数,那么一共只有2^32也就是接近43亿个IP地址,而TCP/IP协议栈规定,每台主机只能有一个IP地址,这就意味着,一共只有不到43亿…

快速入手-基于Django的mysql配置(三)

Django开发操作数据库更简单,内部提供了ORM框架。比如mysql,旧版本用pymysql对比较多,新的版本采用mysqlclient。 1、安装mysql模块 pip install mysqlclient 2、Django的ORM主要做了两件事 (1)CRUD数据库中的表&am…

ETL:数据清洗、规范化和聚合的重要性

在当今这个数据呈爆炸式增长的时代,数据已成为企业最为宝贵的资产之一。然而,数据的海量增长也伴随着诸多问题,如数据来源多样、结构复杂以及质量问题等,这些问题严重阻碍了数据的有效处理与深度分析。在此背景下,ETL&…

【leetcode hot 100 208】实现Trie(前缀树)

解法一:字典树 Trie,又称前缀树或字典树,是一棵有根树,其每个节点包含以下字段: 指向子节点的指针数组 children。对于本题而言,数组长度为 26,即小写英文字母的数量。此时 children[0] 对应小…

PyTorch生成式人工智能实战:从零打造创意引擎

PyTorch生成式人工智能实战:从零打造创意引擎 0. 前言1. 生成式人工智能1.1 生成式人工智能简介1.2 生成式人工智能技术 2. Python 与 PyTorch2.1 Python 编程语言2.2 PyTorch 深度学习库 3. 生成对抗网络3.1 生成对抗网络概述3.2 生成对抗网络应用 4. Transformer4…

vue中上传接口file表单提交二进制文件流

1.使用elementui上传组件 要做一个选择文件后&#xff0c;先不上传&#xff0c;等最后点击确定后&#xff0c;把file二进制流及附加参数一起提交上去。 首先使用elementui中的上传组件&#xff0c;设置auto-uploadfalse&#xff0c;也就是选择文件后不立刻上传。 <el-uplo…

深入解析 Java Stream API:筛选根节点的优雅实现!!!

&#x1f680; 深入解析 Java Stream API&#xff1a;筛选根节点的优雅实现 &#x1f527; 大家好&#xff01;&#x1f44b; 今天我们来聊聊 Java 8 中一个非常常见的操作&#xff1a;使用 Stream API 从 List 中筛选出特定条件的元素。&#x1f389; 具体来说&#xff0c;我…

推荐1款简洁、小巧的实用收音机软件,支持手机和电脑

聊一聊 没想到现在还有人喜欢听广播。 我一直以为听广播必须要用那种小广播机才可以。 原来手机或电脑上也是可以的。 今天给大家分享一款可以在电脑和手机上听广播的软件。 软件介绍 龙卷风收音机 电台广播收音机分电脑和手机两个版本。 电脑端无需安装&#xff0c;下载…