架构模式:分片

什么是分片?

分片是一种数据库架构模式,涉及将数据库划分为更小、更快、更易于管理的部分,称为分片。每个分片都是一个不同的数据库,这些分片共同构成了整个数据库。分片对于管理大型数据库特别有用,可以显着提高性能、可维护性和可扩展性。

主要特点

  • ​数据分布: 分片可以分布在多个服务器上,从而减少任何单个服务器上的负载并缩短响应时间。

  • 水平分区:分片通常涉及水平分区,其中数据库表的行单独保存,而不是划分表本身(垂直分区)。

  • 独立性: 每个分片独立运行。因此,对一个分片的查询不会影响另一个分片的性能。

分片类型

水平分片

描述:水平分片,也称为数据分片,涉及将数据库表划分到多个数据库或数据库实例。每个分片包含相同的表模式,但保存不同的数据子集,通常根据分片键进行分割。这种划分使得表的每一行仅存储在一个分片中。

使用案例: 非常适合具有大型数据集的应用程序,其中数据行可以轻松分段,例如按地理区域或用户 ID 拆分客户数据。这种方法在平衡负载和提高查询性能方面非常有效,因为它减少了每个查询中搜索的行数。

垂直分片

描述: 涉及将数据库拆分为更小的子集,其中每个分片保存数据库表的子集。此方法通常用于将数据库分成更小、更易于管理的部分,每个分片专用于与应用程序的特定方面相关的特定表或表组。

使用案例:适用于某些表比其他表访问更频繁的数据库,从而减少大量查询表的负载。例如,在 Web 应用程序中,用户身份验证数据可以存储在一个分片中,而用户活动日志存储在另一个分片中,从而优化频繁访问的表的性能。

分片策略

基于哈希的分片

描述: 涉及使用哈希函数来确定每个数据记录的分片。哈希函数采用分片键(通常是数据集中的特定属性或列),并返回一个哈希值,然后使用该值将记录分配给分片。

使用案例: 非常适合数据均匀分布至关重要的应用程序,例如 Web 应用程序中的用户会话存储。

基于范围的分片

描述:该方法涉及根据分片键的范围将数据划分为分片。每个分片保存特定范围值的数据。

用例: 适用于时间序列数据或顺序数据,例如带时间戳的日志或事件。

基于目录的分片

描述: 使用查找服务或目录来跟踪哪个分片保存哪些数据。该目录将分片键映射到分片位置。

使用案例: 在数据分布不均匀的场景或处理复杂的数据分区标准时有效。

地理分片

描述:数据根据地理位置进行分片。每个分片负责来自特定地理区域的数据。

使用案例:非常适合需要数据局部性的服务,例如内容交付网络或移动应用程序中基于位置的服务。

好处

  • 可扩展性: 通过将数据分布在多台机器上,分片允许水平扩展,这比垂直扩展(升级现有硬件)更具成本效益且易于管理。

  • 性能改进: 分片可以显着提高性能。通过划分数据库,确保工作负载被分担,减少各个服务器的负载。

  • 高可用性: 分片增强可用性。如果一个分片发生故障,不会导致整个数据库崩溃。只有一部分数据变得不可用。

权衡

  • 实施复杂性: 分片显着增加了数据库架构和应用程序逻辑的复杂性,需要仔细的设计和执行。

  • 数据分发挑战: 需要一种数据分发的战略方法。糟糕的策略可能会导致服务器不平衡,某些分片比其他分片处理更多的负载。

  • 连接操作和事务: 跨分片的连接操作可能具有挑战性,并且可能会降低性能。管理跨多个分片的交易非常复杂。

  • 回到标准架构复杂性: 将分片数据库恢复为非分片架构可能非常具有挑战性并且需要占用大量资源。此过程涉及重大的重组和数据迁移工作。

结论

分片是管理大规模数据库的有效架构模式。它提供了可扩展性、改进的性能和高可用性。然而,这些好处是以复杂性增加为代价的,特别是在实施和管理方面。有效的分片需要采用深思熟虑的数据分发方法以及对应用程序的数据访问模式的深入了解。尽管面临挑战,分片仍然是数据库架构师的重要工具,特别是在大数据和高流量应用程序领域。随着数据量和重要性的不断增长,分片将继续成为高效和有效的数据库管理的重要策略。


作者:Pier-Jean MALANDRINO

更多技术干货请关注公号【云原生数据库

squids.cn,云数据库RDS,迁移工具DBMotion,云备份DBTwin等数据库生态工具。

irds.cn,多数据库管理平台(私有云)。

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

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

相关文章

部署上传漏洞的靶场环境upload-labs

1、工具介绍 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。 upload-labs靶场开源地址::https://…

代码随想录day60:贪心算法|84.柱状图中最大的矩形

84. Largest Rectangle in Histogram 进行优化,如果我们想获得left就给他left即可,我们只需要在求宽度的时候用到left,而没必要修改原数组。 所以给栈插入一个虚拟索引-1 思考过程: left应该为多少呢? 首先确定left是什么&#…

HCIA-Datacom题库(自己整理分类的)_11_其他网络协议单选【9道题】

1.DNS协议的主要作用是? 文件传输 远程接入 域名解析 邮件传输 2.下列属于链路状态协议的是? Direct static FTP OSPF 解析: FTP:文件传输协议 OSPF:链路状态路由协议 3.如下图所示的网络主机A通过Telnet登录到路由…

力扣labuladong一刷day54天前缀树

力扣labuladong一刷day54天前缀树 文章目录 力扣labuladong一刷day54天前缀树一、208. 实现 Trie (前缀树)二、648. 单词替换三、211. 添加与搜索单词 - 数据结构设计四、1804. 实现 Trie (前缀树) II五、677. 键值映射 一、208. 实现 Trie (前缀树) 题…

【DevOps-05】Integrate工具

一、简要说明 持续集成、持续部署的工具很多,其中Jenkins是一个开源的持续集成平台。 Jenkins涉及到将编写完毕的代码发布到测试环境和生产环境的任务,并且还涉及到了构建项目等任务。 Jenkins需要大量的插件保证工作,安装成本较高,下面会基于Docker搭建Jenkins。 二、Jenk…

11.perror函数的使用

文章目录 perror函数介绍简介: 测试代码 perror函数介绍 函数原型:void perror(char const *message); 简介: perror函数,以一种简单、统一的方式报告错误。标准库函数在一个外部整型变量errno(在errno.h中定义&…

大模型实战营Day2 作业

基础作业 1 使用 InternLM-Chat-7B 模型生成 300 字的小故事 2 熟悉 hugging face 下载功能,使用 huggingface_hub python 包,下载 InternLM-20B 的 config.json 文件到本地 进阶作业 1 完成浦语灵笔的图文理解及创作部署 2 完成 Lagent 工具调用 Demo…

vue3 响应式api中特殊的api

系列文章目录 TypeScript 从入门到进阶专栏 文章目录 系列文章目录一、shallowRef()二、triggerRef()三、customRef()四、shallowReactive()五、shallowReadonly()六、toRaw()七、markRaw()八、effectScope()九、getCurrentScope() 一、shallowRef() shallowRef()是一个新的响…

多线程高级面试题

1. 什么是 ThreadLocal? 参考答案 ThreadLocal 叫做本地线程变量,意思是说,ThreadLocal 中填充的的是当前线程的变量,该变量对其他线程而言是封闭且隔离的,ThreadLocal 为变量在每个线程中创建了一个副本,…

【AI视野·今日Robot 机器人论文速览 第七十一期】Fri, 5 Jan 2024

AI视野今日CS.Robotics 机器人学论文速览 Fri, 5 Jan 2024 Totally 11 papers 👉上期速览✈更多精彩请移步主页 Daily Robotics Papers Machine Learning in Robotic Ultrasound Imaging: Challenges and Perspectives Authors Yuan Bi, Zhongliang Jiang, Felix D…

gradle安装

从gradle下载安装包。 安装环境变量以及仓库存储地址。 在path中添加bin路径 打开cmd命令, 输入 gradle -v 查看版本信息。

JVM工作原理与实战(九):类加载器-启动类加载器

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、启动类加载器 二、通过启动类加载器去加载用户jar包 1.放入jre/lib目录进行扩展 2.使用参数进行扩展 总结 前言 JVM作为Java程序的运行环境,其负责解释和执行字节码…

优化器(一)torch.optim.SGD-随机梯度下降法

torch.optim.SGD-随机梯度下降法 import torch import torchvision.datasets from torch import nn from torch.utils.data import DataLoaderdataset torchvision.datasets.CIFAR10(root./data, trainFalse, downloadTrue,transformtorchvision.transforms.ToTensor()) data…

RK3399平台入门到精通系列讲解(实验篇)自定义工作队列的使用

🚀返回总目录 文章目录 一、自定义工作队列介绍1.1、工作队列相关结构体1.2、工作队列相关接口函数二、自定义共享队列案例2.1、Makefile2.2、驱动案例共享队列是由内核管理的全局工作队列,自定义工作队列是由内核或驱动程序创建的特定工作队列,用于处理特定的任务。 一、…

华为mstp、vrrp、ospf、isis、bgp等综合一起排错

最终实现左边私网和右边私网全部ping通 SW1 vlan batch 12 34 stp region-configuration //mstp配置 region-name test instance 12 vlan 12 instance 34 vlan 34 active region-configuration interface GigabitEthernet0/0/3 port link-type trunk port trunk allow-pass …

求更新后的路由表

假定网络中的路由器B的路由表有如下的项目 (这三列分别表示“目的网络“距离”和“下一跳路由器”): 现在B收到从C发来的路由信息(这两列分别表示“目的网络”和“距离”): 试求出路由器B更新后的路由表(详细说明每一个步骤)。 (1)首先把收到的路由信息的"距离"1: …

[论文阅读] Revisiting Feature Propagation and Aggregation in Polyp Segmentation

[论文地址] [代码] [MICCAI 23] Abstract 息肉的准确分割是筛查过程中有效诊断结直肠癌的关键步骤。 由于能够有效捕获多尺度上下文信息,普遍采用类似UNet 的编码器-解码器框架。 然而,两个主要限制阻碍了网络实现有效的特征传播和聚合。 首先&#xff…

我的创作纪念日——redis的历史纪录

机缘 最开始只想存留点Redis的操作信息,后来写着写着也就写多了,虽然后面很长时间由于忙就没继续写,但是还是偶尔登录看一下,有好几篇文章的浏览量还是很多的呢。 收获 收获不多,粉丝也才三十多个,浏览量感…

Nacos 持久化及集群的搭建【微服务】

文章目录 一、统一配置管理二、微服务配置拉取三、配置热更新四、多环境共享配置五、Nacos 集群搭建1. 集群结构2. 初始化数据库3. 搭建集群 六、Nginx 反向代理七、启动项目测试 一、统一配置管理 案例练习的时候我们只有两个微服务,管理起来非常简单,但…

【100个Cocos实例】通过重写源码实现循环PageView

引言 Cocos中通过重写源码实现循环PageView 大家好,有小伙伴私信我: 有没有办法实现循环的PageView列表的方法呢 本文将介绍一下Cocos中通过重写源码实现循环PageView。 本文源工程可在文末阅读原文获取,小伙伴们自行前往。 1.什么是Page…