分片和一致性哈希

news2024/11/16 9:30:55

在设计大规模分布式系统时,你可能会遇到两个概念——分片(sharding)和一致性哈希(consistent hashing)。虽然我在网上找到了很多关于这些术语的解释,但它们让我感到有些困惑。我觉得分片和一致性哈希本质上是在讨论同一件事——将数据分布在一组服务器上。

我想—这两个概念是不是相同的,还是有所不同?如果你也有类似的困惑,让我们简要地来解释一下。

分片

想象一下我们有一个数据库,其中数据以行和列的形式存储(就像关系型数据库,尽管分片也适用于NoSQL数据库)。当我们的数据集变得非常庞大时(比如1百万条记录),对庞大数据集进行任何类型的操作(读取、更新、删除、连接等)都会变得非常缓慢。而且随着数据量的增长,由于服务器可能具有的物理空间(HDD/SSD)的限制,将所有数据存储在一个数据库服务器上几乎是不可能的。为了解决这些问题,最合理的方法是将数据集划分为较小的数据集。

想象一下,我们将整个数据集(100万行)划分为10个较小的子集(每个子集有10万行)。这个将数据集水平(或沿着行)划分的过程被称为对数据集进行分片。

除了提高性能外,分片数据集的另一个非常重要的好处是将这些数据分片存储在较小且更便宜的数据库服务器上,而不是将整个百万行存储在一个庞大且非常昂贵的数据库服务器上。

一致性哈希

一致性哈希是一种将庞大的数据集(例如100万行)分割成多个较小的数据子集(存储在一组数据库服务器上)的技术,以确保在集群中的服务器数量发生变化(即添加或删除服务器)时,数据的迁移量最小。在大规模分布式系统设计中,这非常重要,因为服务器故障在数据中心中相当常见。

对于一致性哈希,我们选择两个值M和N,即哈希键空间(根据应用程序需求选择的M)和数据库服务器数量(用N表示)。通常情况下,M >> N。
在这里插入图片描述

算法本身是一个简单的三步过程。

创建一个循环数字线(从0到M-1)。 对数据库服务器ID进行哈希运算,对M取模,并在循环数字线上分配一个位置。 对每个数据行进行哈希(基于其唯一键),对M取模,并在循环数字线上找到其位置。顺时针方向移动,直到找到第一个数据库服务器。将这些数据存储在该服务器上。

好了…那么它们之间有什么真正的区别吗? 尽管分片和一致性哈希看起来都可以将巨大的数据集分割成较小的数据集,但它们之间存在微妙的区别。分片是所有水平数据分区方案的统称。从本质上讲,分片只是将数据集沿着行进行划分的一个花哨的名字。

如果你觉得水平分割(或分片)数据集可能有许多不同的方式,那么你是对的。在许多不同的分片数据集的方式/算法中,一致性哈希是最高效的算法之一。所以,这是一个相当简单但微妙的区别。分片是一个通用术语,而一致性哈希是一种特定类型的算法,用于实现数据分片。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Web网页制作-知识点(2)——常用文本标签、列表标签、表格标签、Form表单、块元素与行内元素(内联元素)

目录 常用文本标签 列表标签 有序列表 无序列表 定义列表 表格标签 表格组成与特点 表格标签 表格属性 ​​​合并表格单元格 Form表单 属性说明 表单元素 文本框 密码框 提交按钮 块元素与行内元素(内联元素) 内联元素和块级元素…

Flink JdbcSink.sink源码解析及常见问题

文章目录 源码入口我们看下flush方法干了什么flush方法至此走完了,但是什么时机写入的数据呐?补充总结: 常见问题1. 为什么会出现JdbcSink.sink方法插入Mysql无数据的情况?2. JdbcSink.sink写Phoenix无数据问题 参考 基于Flink 1.…

设计模式之组合模式笔记

设计模式之组合模式笔记 说明Composite(组合)目录组合模式示例类图菜单组件抽象类菜单类菜单项类测试类 说明 记录下学习设计模式-组合模式的写法。JDK使用版本为1.8版本。 Composite(组合) 意图:将对象组合成树型结构以表示“部分-整体”的层次结构。Composite使得用户对单…

Linux网络-网络层IP协议

目录 IP协议 计算机网络分层 IP协议头格式 IP数据报 - 数据分片 数据报为什么要分片? 数据报分片是什么? 如何做到IP数据报分片? 分片demo示例 并不推荐分片,能不分片则不分片。 网段划分 前置了解 网络号和主机号 为…

如何监测和优化阿里云服务器的性能?有哪些性能分析工具和指标?

如何监测和优化阿里云服务器的性能?有哪些性能分析工具和指标?   阿里云服务器性能监测与优化是云计算服务中一个非常重要的环节。为了确保服务器稳定、高效地运行,我们需要对其性能进行监测,并在监测的基础上进行优化。本文将为…

Packet Tracer - 综合技能练习(配置 VLAN、中继、DHCP 服务器、DHCP 中继代理,并将路由器配置为 DHCP 客户端)

Packet Tracer - 综合技能练习 地址分配表 设备 接口 IP 地址 子网掩码 默认网关 R1 G0/0.10 172.31.10.1 255.255.255.224 不适用 G0/0.20 172.31.20.1 255.255.255.240 不适用 G0/0.30 172.31.30.1 255.255.255.128 不适用 G0/0.40 172.31.40.1 255.255…

MySQL权限控制及日志管理

MySQL权限控制及日志管理 用户权限管理 创建用户 CREATE USER 用户名IP地址 [ IDENTIFIED BY 密码 ];GRANT SELECT ON *.* TO 用户名’IP地址’ IDENTIFIED BY "密码";--创建一个用户名为Usr1 密码为 Usr1.mysql的用户 并授权 CREATE USER…

无忧行:突破网络封锁、跨境访问国外的网站和应用程序(安装注册及使用教程详解)

文章目录 步骤一:注册微软账号步骤二:修改账号的国家/地区步骤三:在Edge Dev浏览器中安装无忧行插件步骤四:创建 无忧行 账户步骤五:无忧行使用教程 包括注册微软账号、在Edge Dev浏览器中安装无忧行插件、创建 无忧行…

Python基础篇(六):组织管理代码—模块和包

组织管理代码—模块和包 前言模块(Module)创建模块使用模块 包(Package)创建包使用包 前言 在Python中,模块和包是组织和管理代码的重要概念。模块是一个包含 Python 定义和语句的文件,而包则是一组相关模块的目录。它们是组织和管理代码的强大工具&…

【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念

系列文章目录 【跟小嘉学 Rust 编程】一、Rust 编程基础 【跟小嘉学 Rust 编程】二、Rust 包管理工具使用 【跟小嘉学 Rust 编程】三、Rust 的基本程序概念 【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念 文章目录 系列文章目录前言一、所有权(Ownership)1.1.、所有权(Ow…

【unity每日一记】 Camera相机+ Screen屏幕+动画机

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

Flutter开发——图片加载与缓存源码解析

在Flutter中有个图片组件:Image,通常会使用它的Image.network(src)、Image.file(src)、Image.asset(src)来加载图片。 下面是Image的普通构造方法: const Image({super.key,required this.image,this.frameBuilder,this.loadingBuilder,this.errorBuilde…

第四章 机器学习

文章目录 第四章 决策树4.1基本流程4.2划分选择4.2.1信息增益4.2.2增益率4.2.3基尼指数 4.3剪枝处理4.3.1预剪枝4.3.2后剪枝 4.4连续与缺失值4.4.1连续值处理4.4.2缺失值处理 4.5多变量决策树 第四章 决策树 4.1基本流程 决策过程: 基本算法: 4.2划…

git——使用ssh连接远程仓库

文章目录 前言一. 获取邮箱和密码1. 本地配置你的名字和邮箱2. 使用命令获取你本地的邮箱和密码 二、生成ssh公钥1.任意一个文件夹路径打开Git Bash Here并输入以下命令连按三次回车2. 根据上面红框部分的地址打开文件夹3. 打开并查看id_rsa.pub 文件 三、在GitHub上连接ssh1. …

电商API知识点整理(一)商品采集接口获取商品详情数据API

商品采集接口背景 电商商品采集接口是一种机器人软件接口,用于从电子商务网站上爬取商品信息。它的主要作用是将电商网站上的商品信息采集和整合,方便用户使用。传统的商品采集需要人工收集和整理,工作量大、效率低;而电商商品采…

Flutter的文本、图片和按钮使用

像视图数据流转机制、底层渲染方案、视图更新策略等知识,都是构成一个UI框架的根本,看似枯燥,却往往具有最长久的生命力。 因此, 只有把这些最基础的知识弄明白,修好内功,才能触类旁通,由点及面…

输入阻抗、输出阻抗和阻抗匹配

读者问了一个问题:“集总参数电路中,阻抗匹配(内阻外阻)可以使负载得到最大的功率输出”这句话怎么理解? 这里涉及到几个概念:输入阻抗、输出阻抗、阻抗匹配,今天简单的聊一聊。 先了解一下阻…

用Visual Studio 2022写出你第一个Windows程序(程序保证能正常运行)

我是荔园微风,作为一名在IT界整整25年的老兵,今天来看看如何用Visual C写出你第一个Windows程序。 与其看很多Windows的书,不如先自己动手写一个Windows程序。由于Windows程序的特有机制,不建议去写那种简单的HELLO WORLD&#x…

【计算机网络详解】——网络层(学习笔记)

📖 前言:网络层它承担着网络间的数据传输和路由选择等核心任务,通过在传输层协议的基础上添加了路由和转发等功能,使得数据能够在全球范围内的互联网中自由流动。在这篇博客中,我们将深入探讨网络层的工作原理和具体实…

D. Binary String Sorting(枚举位置)

Problem - 1809D - Codeforces 给定一个仅由字符0和/或1组成的二进制字符串s。 您可以对此字符串执行几个操作(可能为零)。有两种类型的操作: 选择两个相邻的元素并交换它们。为了执行此操作,您需要支付1012硬币; 选…