数据库的扩展策略

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

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


读取/加载 

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

缓存 

缓存技术将经常请求的数据或昂贵的计算操作的响应存储在临时内存中。缓存中存储的数据根据应用程序的性质需要进行更改,可以使用缓存失效和淘汰技术来更新数据的一致性。这可以通过缓存过期时间(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.hqwc.cn/news/26517.html

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

相关文章

【VSCode | 使用技巧集锦】中文插件突然失效、配置单个工程(工作区)编码

目录 ✨技巧一:中文插件失效的解决办法✨技巧二:配置单个工程(工作区)编码 ✨技巧一:中文插件失效的解决办法 问题描述:VSCode之前安装了中文插件,可以正常汉化,用了一段时间都没问题,今天打开v…

51单片机的智能交通控制系统【含仿真+程序+演示视频带原理讲解】

51单片机的智能交通控制系统【含仿真程序演示视频带原理讲解】 1、系统概述2、核心功能3、仿真运行及功能演示4、程序代码 1、系统概述 该系统由AT89C51单片机、LED灯组、数码管组成。通过Protues对十字路口红绿灯控制逻辑进行了仿真。 每个路口包含了左转、右转、直行三条车道…

【UE4 塔防游戏系列】08-敌人到达终点对玩家造成伤害

目录 效果 步骤 一、敌人到终点时扣除玩家生命值 二、显示玩家生命值 效果 可以看到敌人进入终点后,左上角的玩家生命值会减少。 步骤 一、敌人到终点时扣除玩家生命值 新建一个Actor蓝图类,命名为“BP_EnemyEndPlace”,用来表示终点…

Pytest测试框架搭建需求及实现方案

目录 框架需求及实现方案 框架需求 实现方案 支持接口自动化、Web UI自动化及App自动化# 可以批量运行用例并生成测试报告 测试完成发送邮件 提供灵活的运行方式,如按功能模块运行、按脚本运行、按用例等级运行等等 提供运行日志方便定位问题 支持切换环境 …

三季度上市,比亚迪海豹DM-i内饰官图发布,延续海洋风格

据报道,比亚迪海洋网旗下全新车型海豹 DM-i今日发布了内饰官方图片。新车内部采用了独特的“海洋美学”设计理念,并体现了海洋网最新一代内饰风格。消息称,这款车型将于第三季度上市,定位为中大型混合动力轿车。 值得注意的是&…

MSA【1】:Segment Anything Model for Medical Image Analysis: an Experimental Study

文章目录 前言1. Abstraction & Introduction1.1. Abstraction1.2. Introduction1.2.1. What is SAM?1.2.2. How to segment medical images with SAM? 2. Methodology2.1. SAM is used in the process of segmentation of medical images2.1.1. Semi-automated annotati…

3.Cesium中实体Entity创建(超详细)

前言 在学习 Cesium 的过程中,我发现官方文档冗长且阅读困难,为此我结合官方文档与自己的学习笔记,对其进行归类总结;本文中,我将介绍 Cesium 中创建实体的方法,并对其进行分类,帮助读者快速理解…

集成VCO-Cadence ADE相位噪声分析

集成VCO-Cadence ADE相位噪声分析 简介环境软件工艺 参考振荡器原理图相位噪声说明pss设置1234 pnoise设置12345 结果 简介 本文主要是使用Cadence ADE仿真1GHz交叉耦合振荡器,得到相位噪声曲线,主要记录仿真设置过程,仅供参考,如…

数据结构01-线性结构-链表栈队列-队列篇

文章目录 参考:总结大纲要求线性结构-队列QQ号码解密 参考: 总结 本系列为C数据结构系列,会介绍 线性结构,简单树,特殊树,简单图等。本文为线性结构部分。 大纲要求 线性结构 【 3 】链表:单…

【socket编程】TCP服务器、UDP服务器、本地套接字【C语言代码实现】

目录 0. 准备知识 0.1 大小端概念 0.2 网络字节序和主机字节序的转换 0.3 点分十进制串转换(IP地址转换函数) 0.4 IPV4结构体:(man 7 ip) 0.5 IPV6套接字结构体:(man 7 ipv6) …

安卓和苹果页面和逻辑是否有必要追求百分之百统一

安卓和苹果存在操作系统系统差异,所以有些不一样。如:安卓的启动页面是根页面,并且可以设置显示时间;而苹果的启动页面是一个类似图片的容器(Launch Screen.storyboard),不像其它页面可以控制页…

手搓一台简单的网络损伤仪——弱网测试

1、介绍 支持对链路带宽、传输时延、丢包率和无码率的手动设置; 1.1、网络损伤仪在使用时,网络拓扑连接 1.2、网络损伤仪管理页面展示 2、使用的设备及相关技术栈 一台Intel 赛扬 J1900的迷你主机【拥有4个千兆网口】;ubuntu-18.04.5-live…