KV数据分片和分布

news2024/11/17 7:33:24

KV数据分片和分布

KV存储数据组织方式

  1. Hash:对于Hash方式,键值对数据的存储位置由预定义的Hash函数确定,因此所有键值对数据不是有序排列。Hash方式的优点是通过Hash函数计算存储位置的效率高,因此处理插入、删除、更新、单点查询操作的速度都比较快,但主要确定是由于无序存储,无法处理范围查询
  2. 有序排列:可以支持所有的键值对数据访问接口,包括范围查询,一般采用树形结构组织数据(如B树),因此在进行插入、删除、更新、单点查询操作时的速度比Hash方式略低。

KV分片

对于一个 KV 系统,将数据分散在多台机器上有两种比较典型的方案:

  • Hash:按照 Key 做 Hash,根据 Hash 值选择对应的存储节点。
  • Range:按照 Key 分 Range,某一段连续的 Key 都保存在一个存储节点上

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-azeZqlMB-1672623809846)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/16a9487e-94ec-4b68-a12c-4a06b3d03ede/Untitled.png)]

当分布式系统采用分片方式进行负载均衡时,相关的问题是,分片会放置在分布式系统中的哪个节点上,即数据分布问题;以及用户访问数据时,如何知道目标分片在哪个节点中。

多数系统首先根据各节点的存储容量进行负载均衡,在相近存储容量时,一般采用随机放置的策略。一旦系统中出现了负载不均衡比较严重的情况,可以在系统负载比较低时进行一定程度的数据迁移,提升负载均衡程度。

元数据:分片在节点上的分布信息,以及范围分片模式下每个分片负责的Key范围

元数据的维护方式:

一是由专门的元数据服务器来维护,用户访问时需要先联系元数据服务器,然后定位到具体的数据服务器进行访问;并且为了减少元数据访问带来的网络通信,用户端一般都会有元数据的缓存。典型的系统是TiDB,系统中包含一个重要的子系统Placement Driver (PD)专门用来维护元数据,而且PD本身也是一个分布式系统,来保障系统的可靠性。

二是每个节点都存储着元数据,方便访问时定位,各个节点之间不断同步更新的元数据。例如CockroachDB中每个数据节点都维护所有分片的元数据,并且各个节点之间通过Gossip协议来同步元数据。

TiKV

参考自 https://book.tidb.io/session1/chapter2/tidb-storage.html

TiKV 选择了第二种方式,将整个 Key-Value 空间分成很多段,每一段是一系列连续的 Key,将每一段叫做一个 Region,并且会尽量保持每个 Region 中保存的数据不超过一定的大小,目前在 TiKV 中默认是 96MB。每一个 Region 都可以用 [StartKey,EndKey) 这样一个左闭右开区间来描述。

将数据划分成 Region 后,TiKV 将会做两件重要的事情:

  • 以 Region 为单位做 Raft 的复制和成员管理
  • 以 Region 为单位,将数据分散在集群中所有的节点上,并且尽量保证每个节点上服务的 Region 数量差不多

第一点,数据按照 Key 切分成很多 Region,每个 Region 的数据只会保存在一个节点上面(暂不考虑多副本)。TiDB 系统会有一个组件(PD)来负责将 Region 尽可能均匀的散布在集群中所有的节点上,这样实现了存储容量的水平扩展、负载均衡。为了保证上层客户端能够访问所需要的数据,系统中也会有一个组件(PD)记录 Region 在节点上面的分布情况,也就是通过任意一个 Key 就能查询到这个 Key 在哪个 Region 中,以及这个 Region 目前在哪个节点上(即 Key 的位置路由信息)。

第二点,TiKV 是以 Region 为单位做数据的复制,也就是一个 Region 的数据会保存多个副本,TiKV 将每一个副本叫做一个 Replica。Replica 之间是通过 Raft 来保持数据的一致,一个 Region 的多个 Replica 会保存在不同的节点上,构成一个 Raft Group。其中一个 Replica 会作为这个 Group 的 Leader,其他的 Replica 作为 Follower。所有的读和写都是通过 Leader 进行,读操作在 Leader 上即可完成,而写操作再由 Leader 复制给 Follower。
在这里插入图片描述

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

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

相关文章

MySQL之事务

引入事务: 一个事务其实就是一个完整的业务逻辑,它是一个最小的工作单元,是不可再分的。 那么什么是一个完整的业务逻辑呢? 拿现实生活中的银行业务举例,假设转账,从A账户向B账户中转账10000&#xff0c…

Redis:一、简介

Redis 1. redis的简介 1.1 NoSQL的介绍 在介绍redis之前,我们先来了解一下NoSQL(Not only SQL),不仅仅是SQL。 NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系型数据库在应付web2.0网站,特别…

Cache(缓存)基本概念

cache的概念在计算机中被广泛应用,包括TLB等都使用了它的理念,因此对其进行总结。Cache——位于CPU上,处于寄存器和内存之间的存储单元。 Cache Hit & Miss在写入cache的时候,有hit(命中)和miss&#x…

基于ros1的 apollo 7.0.0规划控制算法

apollo.ros-7.0.0 上次给大家带来了之前学习apollo时开发的内容apollo.ros-1.0.0和apollo.ros-3.0.0,主要是针对apollo 1.0.0和3.0.0版本进行了ros1下的移植和规划控制算法的学习。本次在之前工作的基础上,针对apollo 7.0.0版本,进行了ros1下…

植物大战僵尸:分析植物的攻击速度

植物大战僵尸中,植物是有攻击速度的,比如每隔一段时间会吐出一些子弹,那么由此可判断吐出子弹应该是由一个计数器控制的,也就是说只要我们能够找到控制植物攻击的时钟并改写它,也就可以实现植物的无限吐子弹。 吐出子…

数据结构---二叉树

坚持看完,结尾有思维导图总结 这里写目录标题什么是二叉树?二叉树的定义二叉树的性质二叉树的基石在哪里?总结什么是二叉树? 二叉树的定义 二叉树,就是从一个根开始,按照两边分支的方式向下生长的树,就能…

python虚拟环境的概念,用法(pycharm)

1.在PyCharm中创建python项目时,需要配置python的运行环境,除了使用系统现有环境以外,还可以创建虚拟环境。 2.虚拟环境的创建是因为在实际开发中需要同期用到不同版本的python解释器,不同的第三方库以及同一个第三方库的不同版本…

Qt音视频开发08-ffmpeg内核优化(极速打开/超时回调/实时响应)

一、前言 最初编写这套视频解析组件的时候,面对的场景是视频监控行业,对应设备都是网络监控摄像机,传过来的都是rtsp这种视频流,做过这一块的人都知道,打开某个视频流默认耗时比较大,基本上在2s左右&#…

高级前端二面手写面试题(边面边更)

解析 URL Params 为对象 let url http://www.domain.com/?useranonymous&id123&id456&city%E5%8C%97%E4%BA%AC&enabled; parseParam(url) /* 结果 { user: anonymous,id: [ 123, 456 ], // 重复出现的 key 要组装成数组,能被转成数字的就转成数字…

四【Servlet基础】文件配置及环境搭建(重要)

文章目录4.1 Servlet概念4.2 Servlet作用4.3 Servlet开发步骤4.3.1 搭建开发环境4.3.2 创建项目4.3.3 部署Servlet4.3.4 配置Servlet4.3.5 测试运行4.1 Servlet概念 (1)Servlet:Server Applet的简称,是运行在Web服务器端的Java程…

GDB无法debug的错误

GDB无法debug的错误 一、输出错误信息描述 Warning: opening /proc/PID/mem file for lwp 707.707 failed: No such file or directory (2) Warning: Cannot insert breakpoint 1. Cannot access memory at address 0x806950 二、解决方法 方法:修改 GDB 的二进…

spring之IoC注解(三)负责注入的注解

文章目录前言一、Value注解Product类spring配置文件测试程序运行结果二、Autowired与Qualifier注解1.创建OrderDao接口2.创建OrderDao接口实现类3.创建OrderService类4.配置文件5.测试程序6.运行结果三、Resource注解(重要)1、创建StudentDao接口2、创建…

皮带断裂识别检测系统 opencv

皮带断裂识别检测系统通过opencv深度学习yolo计算机视觉识别技术对皮带运行状态进行全天候实时监测,当识别到皮带断裂撕裂时立即抓拍告警存档。OpenCV-Python是一个Python绑定库,旨在解决计算机视觉问题。OpenCV-Python使用Numpy,这是一个高度…

LeetCode刷题复盘笔记—一文搞懂动态规划之392. 判断子序列问题(动态规划系列第三十八篇)

今日主要总结一下动态规划的一道题目,392. 判断子序列 题目:392. 判断子序列 Leetcode题目地址 题目描述: 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除&a…

08 LIN

基础知识 LIN的全称为Local Interconnect Network。LIN主要功能是为CAN总线网络提供辅助功能,应用场合有智能传感节点、自动车窗节点等。 硬件 特点 1.采用单主多从的组网方式,无CAN总线那样的仲裁机制,最多可连接16个节点(1主…

大数据技术——HBase安装配置DDLDML操作

HBase文章目录1. HBase 安装1.1 HBase下载1.2 HBase安装1.3 HBase 初始配置2. 配置高可用并且群起集群2.1 HBase高可用2.2 群起集群2.3 进入HBase客户端3. DDL&DML操作3.1 DDL操作3.2 DML操作1. HBase 安装 1.1 HBase下载 HBase下载官方网站直达 选择自己需要的版本&…

Allegro孔和线被做到器件里面如何解锁操作指导

Allegro孔和线被做到器件里面如何解锁操作指导 在做PCB设计的时候,会遇到孔和线被做到器件的情况,当需要移动器件的时候,孔和线也会跟着移动。如下图 具体操作如下 选择Route选择Convert Fanout

Acwing 796子矩阵的和

Acwing 796子矩阵的和 前缀和 更新 (前缀和数组):s[i][j]s[i-1][j]s[i][j-1]-s[i-1][j-1]a[i][j] 查询(x1,y1)-------(x2,y2)矩阵的元素和 Ss[x2][y2]-s[x-1][y2]-s[x2][y1-1]s[x1-1][y1-1] 输入一个 n 行 m 列的整数矩阵,再输入 q 个询问,每…

QML教程(二)视觉对象

目录 一、矩形类型:Rectangle 二、图像类型:Image 三、基类类型:Item 一、矩形类型:Rectangle 矩形是最基本的视觉效果,Qt Quick提供了一个矩形类型来绘制矩形。这些矩形可以用颜色或垂直渐变着色。矩形类型还可以在…

【Linux】进程程序替换及shell的模拟实现

​🌠 作者:阿亮joy. 🎆专栏:《学会Linux》 🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 目录👉进程程序替…