数据库的扩展策略

news2025/3/10 20:15:30

了解不同的数据库扩展技术可以帮助我们选择适合我们需求和目的的合适策略。

因此,在本文中,我们将展示不同的解决方案和技术,用于扩展数据库服务器。它们分为读取和写入策略。


读取/加载 

有时我们的应用程序承受着巨大的负载。为了解决这个问题,我们展示了三种可以实施的不同技术。

缓存 

缓存技术将经常请求的数据或昂贵的计算操作的响应存储在临时内存中。缓存中存储的数据根据应用程序的性质需要进行更改,可以使用缓存失效和淘汰技术来更新数据的一致性。这可以通过缓存过期时间(TTL)方法或其他依赖于使用的缓存模式来实现。

不同的缓存模式可以作为实施缓存解决方案的策略。Caching Aside支持大量的读取操作,即使缓存失效也能正常工作。Read-through和Write-through模式通常一起使用,它们是处理读取密集型工作负载的良好选择,但如果缓存故障,系统也会发生故障。Write-back模式适用于写入密集型工作负载,并且被许多数据库管理系统实现所使用。

 数据库缓存

根据需求,例如大量读取、大量写入或二者的混合,我们可以决定使用哪种模式,以便在可以容忍缓存或数据库故障的情况下进行选择。 

复制 

复制是通过将一个数据库称为主数据库,所有写入请求都流向该主数据库来实现的。此外,我们制作主数据库的精确副本作为新的节点副本,即次要节点,仅负责处理读取请求。主数据库不断向从节点提供更新的数据,保持集群中所有节点之间的信息一致性。

复制是处理容错性和维护CAP定理以及系统可伸缩性的优秀策略。假设其中一个节点故障,我们仍然可以提供服务,因为我们在其他节点上复制了相同的数据。此外,在集群中,如果主节点发生故障,其他节点可以接管并成为主数据库。复制还有助于减少应用程序的延迟,因为我们可以将数据库部署并将数据复制到不同的地区,如CDN,本地用户可以轻松访问这些数据。

数据库复制

同步和异步 

除了这些优点之外,随着节点数量的增加,维护副本节点的一致性变得更加复杂。根据需求,可以使用同步或异步复制策略来解决这个问题。

同步策略的优点是延迟为零,数据始终保持一致,但缺点是性能受到影响,因为必须等待所有副本更新并由发出者确认。另一方面,在异步策略中,写入速度更快,因为主节点不需要等待确认,但如果副本未能更新值,就会出现不一致的状态问题。

请记住,没有银弹,最佳策略取决于我们的需求。必须在一致性、可用性或分区(CAP定理)之间进行权衡。CAP定理指出,我们一次只能保证其中两个。

索引 

索引用于定位和快速访问数据,提高数据库活动的性能。数据库表可以与一个或多个索引相关联。

索引通过更快的数据检索提高查询性能,增强数据访问效率,减少检索数据的I/O次数。它优化数据排序,因为数据库无需对整个表进行排序,而只需对相关行进行排序。索引即使在数据量增加的情况下也可以保持数据一致性。此外,索引确保数据库完整性,避免存储重复数据。

作为缺点,索引需要更多的存储空间,增加了数据库的大小。它还增加了表中添加、删除和修改的维护开销。索引可能会降低插入和更新的性能。为特定查询或应用程序选择索引可能是困难的。


写入

对于需要频繁向数据库写入新数据的应用程序,我们有分片和NoSQL作为策略。

分片 

分片或数据分区允许将大型数据库数据分割成更小、更快、更易管理的部分,将数据库分成多个主数据库。分片有两种类型,垂直分片和水平分片。

数据分区具有查询优化的优点,提供更好的性能和降低延迟。它使得用户数据可以分布在不同的位置,以便特定地区的用户可以更快地访问。此外,它还避免了单点故障。

分片的缺点之一是分区过载,如果我们没有正确地在分区之间分配数据,就会导致某些分区数据过多,某些分区数据较少,这可能导致大分区的查询变慢。另一个缺点是在实施分片策略后,回退并恢复到无分片策略的先前状态,以及在不同数据库之间拆分数据。

分区可以是逻辑的或物理的。逻辑分片是指在同一物理机器上具有不同数据子集,而物理分片可以在一台物理机器上具有多个分区子集。

对于数据分片,我们可以选择算法分片或动态分片。存在不同的算法和动态分片技术,例如基于键、基于范围和基于目录的分片。

垂直分片 

对于垂直分片,我们将每个表放在不同的机器上。例如,将用户表、日志表或评论表分别放在不同的机器上。当查询只返回数据的一个子集时,垂直分片非常有效。例如,如果某些查询仅请求姓名,而其他查询仅请求地址,则可以将姓名和地址分片到单独的服务器上。

垂直分片 

水平分片 

如果我们有一张变得非常大的单个表,我们可以应用水平分片。我们将相关数据的一部分拆分到多台机器上。当查询经常返回一组子集行时,水平分片非常有效。例如,根据短日期范围筛选数据的查询非常适合水平分片,因为日期范围必然会将查询限制在服务器的子集上。

水平分片


NoSQL 

NoSQL不是关系型数据库,本质上是一种键值对。键值对模型天生具备跨多个不同机器的易于扩展性。NoSQL被分为四个主要类别:列式存储将数据存储为列族,图存储将数据存储为节点和边,键值存储将数据存储为键值对,文档存储将数据存储为半结构化文档。

NoSQL 数据库类别

它允许动态模式,可以在不更改模式的情况下进行更改。此外,它提供水平扩展性,通过向数据库群集添加更多节点来扩展。它还专为高可用性而设计,可以自动处理节点故障,并在集群中的多个节点之间进行数据复制。 

这种非关系型数据库相对于关系型数据库提供了几个优点,如可扩展性、灵活性和成本效益。然而,它们也有一些缺点,例如缺乏标准化、缺乏ACID兼容性以及对复杂查询的支持不足


结论 

在本文中,我们演示了处理数据库可扩展性时要实施的策略。

我们将其分为读取和写入策略。对于读取,我们可以应用不同的缓存机制,使用主数据库和次要数据库进行复制,还可以实施索引以定位和快速访问数据。对于写入的可扩展性,可以采用分片或NoSQL策略,两者都有各自的优点和缺点。

最后,请记住,没有完美的解决方案,我们需要了解自己的需求,并进行权衡,选择最适合我们应用程序的策略。

作者:Jailson Evora

更多内容请关注公号“云原生数据库”

squids.cn,提供免费的数据库迁移工具,云数据库RDS,数据库备份工具,SQL开发工具等。

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

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

相关文章

1.1基于stc89c51系例单片机的空气温湿度检测报警系统

基于STC89C51系列单片机的空气温湿度检测报警系统 文章目录 基于STC89C51系列单片机的空气温湿度检测报警系统概述项目背景硬件设计1. STC89C51单片机2. DHT11温湿度模块3. LCD1602显示模块4. 人机交互模块5. 电源模块 软件设计1. 硬件初始化2. DHT11数据读取3. 数据显示4. 报警…

浅读-《深入浅出Nodejs》

这次算是重读 深入浅出Nodejs,了解到很多之前忽略的细节,收获蛮多,这次顺便将其记录分享,对学习和了解Nodejs有及其大的帮助。 1.Nodejs 事件驱动、非阻塞IO,一个开源和跨平台的 JavaScript 运行时环境;异…

手机直播app源码部署搭建:带货潮流,商城功能!

随着互联网时代的迅猛发展,手机直播app源码平台早已成为了人们获取资讯、娱乐放松等方式的主要载体,手机直播app源码平台的日益火爆,也让商人们有了一个新兴的想法出现:直播app平台如此火爆,平台的用户也如此庞大&…

perl输出中文乱码【win10】

perl输出中文乱码 运行的时候输出的内容变成了中文乱码,原因首先来查找一下自己的perl的模块里面是否有Encode-CN。请运行打开你的cmd并输入perldoc -l Encode::CN 如果出现了地址 则就是有,如果没有需要进行该模块的安装。 安装方式有很多种&#xff0…

Three.js——十二、MeshPhysicalMaterial清漆层、粗糙度、物理材质透光率以及折射率(结尾附代码)

环境贴图作用测试 MeshPhysicalMaterial清漆层 MeshPhysicalMaterial和MeshStandarMaterial都是拥有金属度metalness、粗糙度roughness属性的PBR材质,MeshPhysicalMaterial是MeshStandarMaterial的子集,除了继承了他的这些属性以外,还新增了…

NDK OpenGL实现美颜功能

NDK​系列之OpenGL实现美颜特效,本节主要是在上一节大眼萌的特效视上增加美颜特效。 OpenGL视频特效系列: NDK OpenGL渲染画面效果 NDK OpenGL离屏渲染与工程代码整合 NDK OpenGL仿抖音极快极慢录制特效视频 NDK OpenGL与OpenCV实现大眼萌特效 NDK…

java并发编程 11:JUC之ReentrantLock使用与原理

目录 使用可重入可打断锁超时公平锁条件变量 原理非公平锁实现原理源码流程 锁重入原理可打断原理与不可打断原理公平锁原理条件变量原理await流程signal流程 使用 ReentrantLock是可冲入锁,与 synchronized 一样,都支持可重入。但是相对于 synchronize…

kafka第三课-可视化工具、生产环境问题总结以及性能优化

一、可视化工具 https://pan.baidu.com/s/1qYifoa4 密码:el4o 下载解压之后,编辑该文件,修改zookeeper地址,也就是kafka注册的zookeeper的地址,如果是zookeeper集群,以逗号分开 vi conf/application.conf 启…

如何刻录光盘

如何刻录光盘 1 、将光盘放入光驱,选择“用于CD/DVD播放机” ,该模式下,刻录在光盘的文件无法进行编辑和删除 2 、将需要刻录的文件拷贝至光盘内,则会在“准备好写入光盘中的文件”下显示拷贝进去的文件,此时文件还没…

EDI 工作流操作指南

一个完整的EDI工作流中,起始端为通常为文件传输端口:如AS2、OFTP等,末端为数据库端口。此前的文章中我们对AS2端口以及数据库端口已做了详细介绍,本文主要介绍 EDI 文件的格式转换以及映射。 如下图所示,工作流界面中…

安装blissOS重启后无法进入图形化界面

重启blissOS 重启时,按e键两下 进入 上图是一个可编辑页面,不要删除修改前面的内容,移动光标前往quiet,然后删除quiet输入“ nomodeset xforceseva ”,然后按下回车 然后按回车,按b键进入系统 在set-…

class组件constructor方法

class组件constructor方法 https://blog.csdn.net/m0_37557930/article/details/116228217 https://blog.csdn.net/qq_39207948/article/details/113143131 ​ 为何我们使用子类继承父类,就必须在 constructor( ) 方法中调用 super( ) 方法,否则新建实…

【C】文件操作详解

这里写目录标题 文件操作什么是文件文件名文件类型文本文件二进制文件 文件缓冲区文件指针文件的打开和关闭fopenfclose 文件的顺序读写fgetcfputcfgetsfputcfscanffprintffwritefread比较scanf/fscanf/sscanfsscanf 比较printf/fprintf/sprintfsprintf 文件的随机读写fseekfte…

周考一之重做

输入一个学生的成绩,如果学习成绩>90分的同学用A表示,60-89分之间用B表示,60分以下的用C表示(10) public static void main(String[] args){ Scanner scanner new Scanner(System.in); System.out.println(“请输入学生成绩:…

linux图形界面总结---X、Xorg、WM、QT、GTK、KDE、GNOME的区别与联系

文章目录 一、 linux图形界面二、X协议三、Xfree86 Xorg四、WM(window manager:窗口管理器)五、X协议的Client端实现六、KDE、GNOME、QT和GTK直接关系七、参考: 一、 linux图形界面 linux本身没有图形界面,linux现在的图形界面的实现只是linux下的应用程…

值类型与引用类型

常见的值类型:int,long, short, float, double, byte, char, enum, struct...... 常见的引用类型:字符串, 数组, 类...... 区别&…

附录10-3.JS正则常见案例

目录 1 某一个字符串重复出现两次 2 多行字符串转变为数组套对象 3 多个正则表达式匹配一个字符 4 在指定的字符前加一些什么东西 1 某一个字符串重复出现两次 match的方式如果你使用小括号分组,第一个结果是符合正则的结果,也就是我查出来了 l…

Excel表格怎么样转换成PDF?分享这3个方法免费转换!

在日常办公和学习中,我们常常需要将Excel表格转换为PDF格式以便分享、打印或存档。本文将介绍三种简便的免费方法。方法一介绍了记灵在线工具,方法二使用办公软件(WPS或Office),方法三则使用Adobe软件。 方法一&#…

大二毕设.2-自研Spring框架

目录 项目描述: 基本演示 提取标记类 IOC容器的装载 IOC容器的操作 DI依赖注入 Aspect排序 AOP MVC 功能实现讲解 项目描述: 为了更好地学习 Spring 的核心,参考 Spring 源码实现的一个简易框架当前已实现 IOC,DI依赖注…

交叉编译gRPC初实践

快速开始 一、创建android编译目录,在grpc源码根目录下运行: mkdir -p cmake/build_android && cd cmake/build_android 二、cmkae生成对应Makefile等编译所需的文件 cmake -DCMAKE_TOOLCHAIN_FILE/zhuyazhou/DDS/tools_dds/android-ndk-r25/b…