数据库架构设计优化-读写分离|学习笔记

简介: 快速学习数据库架构设计优化-读写分离

开发者学堂课程【企业级互联网分布式系统应用架构学习:数据库架构设计优化-读写分离】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/369/detail/4394


数据库架构设计优化-读写分离


内容介绍:

一、读写分离

二、读写分离目的


一、读写分离

1、在之前章节介绍了提高应用并发度的几个方式,比如说应用层横向扩展、使用应用层缓存,还有就是把大量的同步的操作,或者一些请求访问转成异步的处理。本章节主要介绍数据库层的一些处理能力,在相同资源的情况下如何提高数据库的处理能力,还有提高 IO 的能力。整个应用架构或者互联网应用架构里面最难进行横向扩展的就是数据库。主要是因为在数据库层,所有的数据库实例为了保证数据的 ACID 这几个原则,一定要进行统一的数据存储。最终数据存储会成为数据库的并发的一个平面,所以现在很多数据库技术都会通过其他的方式来降低数据库的访问压力,其中一个手段就是进行读写分离。

2、下面对读写分离这个词进行一个详细的阐述,对数据库的操作主要分为两类,一类是读,读就是 select,可能只是判断条件不一样,最终都是通过 select 这样的命令 sql 语句获取应用所需要的一些数据。另外一类就是和数据库写相关的操作,比如说 insert,比如 delete,或者是 update 这样一系列的操作,都把它归结到写操作上。

3、在数据库的整体设计中,写操作一般并发度都比较低,因为为了数据的一致性,或者叫隔离性考虑,写操作的过程中要对数据进行严格的加锁操作,这样避免应用读到脏数据。一旦锁的级别比较高的时候,就会影响到读的一些操作,甚至可能把数据库读的一些操作悬挂或者阻塞在一边,只有写操作完成以后,读的操作才能进行下去。比如说以一个银行的取款交易或者库存扣减的交易举例,应用对库存表进行更新的时候,比如说某一个商品的库存现在是100,当把他扣减成95的时候,在这个过程中,这条记录是被严格加锁的,其他应用要来读这个库存,就需要等待库存更新的语句执行完。

4、如果读操作和写操作在同一个数据库上执行,他们之间相互是有影响的,写操作会影响到读操作的效率,这样当一个主库有大量的写操作的情况下,读操作的效率就无法提升上去,那整个用户或者应用的整个性能会有严重的问题。所以在大型的互联网应用架构设计中,会通过一系列的技术,将读操作和写操作分离。从下图中可以看到

image.png

可以通过数据库的复制技术,将主库的数据复制到只读库,或者备库。通过应用的分解,只要涉及到读操作的一些应用逻辑,或者一些 sql 请求,都把他转到只读库上去。而只要涉及到写操作的,比如说更新、插入、删除这些数据,应用会把他转发到主库上进行操作。

5、解决只读库和主库之间的数据复制也是需要一些技术的配合,主要是要保证数据的延迟一定要很低,否则在主库上做的一些写入操作,比如更新,如果没有及时的返回到只读库,应用取过去可能就会导致应用逻辑上的错误。现在一些数据库,比如说 mysql,包括阿里云上的rds 数据库,都有很成熟的技术来保障主库可以很快地将变化的数据复制到只读库上去。主要是通过数据库的重做日志,来同步到只读库上。同时,在有些访问并发量特别大的应用场景上,只读库也会有多个,这样主库只需要将变化的数据复制到多个从库上。


二、读写分离目的

1、通过数据库读写分离,可以达到以下目的。第一个就是降低主库压力,提升应用处理速度,因为大量的并发查询访问都被转发到了只读库上,所以主库的压力就会降低很多,因为主库的压力降低带来的好处,就是整个应用的处理速度会加快。过去一个更新操作可能需要500毫秒,由于查询被转移到其他只读库上,他的更新速度可能就会降低到100毫秒。

2、第二,通过只读库可以提升应用的查询速度,以往没有只读库的状况下,所有的请求都要在主库上和更新操作进行符合的或混合的一些操作,会严重影响到查询速度,但有了只读库,只读库的目的就是为查询使用,所以可以大大提升应用的响应速度,尤其是针对查询的,比如说查询库存,这样的操作都会有大大的提升,甚至可以在只读库上进行一些比较复杂的查询,因为它不会影响到主的业务的操作。

3、读写分离,在有些场景下也为业务分析人员或者业务分析的一些应用,提供一些帮助。这个架构也有一些限制,他主要是用于能够接受数据同步有一定延迟的应用。比如说查库存场景,如果一定限制的库存不能超卖,所谓超卖就是库存里面有100个商品,就只能卖100个。这样的一些场景可能在一定程度下就不能使用读写分离,但如果他允许超卖,读写分离是最佳的一个场景,或是最佳的一个应用架构设计思路。从阿里云产品视角可以将只读库和主库的分离技术配置工作降到最低,在阿里云的控制界面上,rds 数据库有一个界面,如果需要一个只读实例,可以直接点击一个按钮来进行只读实例的购买。

image.png

后续的只读库和主库数据同步的工作都在底层完成,这对应用非常简单,也降低了运维的一些工作。

4、本章节学习到通过只读库来降低数据库的压力,同时提升并发度,使得应用的访问速度大大提升,而且为一些业务分析的场景提供帮助。

相关文章
|
2月前
|
存储 人工智能 NoSQL
AI大模型应用实践 八:如何通过RAG数据库实现大模型的私有化定制与优化
RAG技术通过融合外部知识库与大模型,实现知识动态更新与私有化定制,解决大模型知识固化、幻觉及数据安全难题。本文详解RAG原理、数据库选型(向量库、图库、知识图谱、混合架构)及应用场景,助力企业高效构建安全、可解释的智能系统。
|
5月前
|
人工智能 自然语言处理 开发工具
统一多模态 Transformer 架构在跨模态表示学习中的应用与优化
本文介绍统一多模态 Transformer(UMT)在跨模态表示学习中的应用与优化,涵盖模型架构、实现细节与实验效果,探讨其在图文检索、图像生成等任务中的卓越性能。
统一多模态 Transformer 架构在跨模态表示学习中的应用与优化
|
5月前
|
算法 物联网 定位技术
蓝牙室内定位技术解决方案:核心技术架构与优化实践
本文探讨了蓝牙iBeacon与Lora结合的室内定位技术,分析其在复杂室内环境中的优势与挑战。通过三层架构实现高精度定位,并提出硬件、算法与部署优化方向,助力智慧仓储、医疗等场景智能化升级。
318 0
蓝牙室内定位技术解决方案:核心技术架构与优化实践
|
6月前
|
关系型数据库 MySQL 数据库连接
Django数据库配置避坑指南:从初始化到生产环境的实战优化
本文介绍了Django数据库配置与初始化实战,涵盖MySQL等主流数据库的配置方法及常见问题处理。内容包括数据库连接设置、驱动安装、配置检查、数据表生成、初始数据导入导出,并提供真实项目部署场景的操作步骤与示例代码,适用于开发、测试及生产环境搭建。
285 1
|
2月前
|
机器学习/深度学习 数据可视化 网络架构
PINN训练新思路:把初始条件和边界约束嵌入网络架构,解决多目标优化难题
PINNs训练难因多目标优化易失衡。通过设计硬约束网络架构,将初始与边界条件内嵌于模型输出,可自动满足约束,仅需优化方程残差,简化训练过程,提升稳定性与精度,适用于气候、生物医学等高要求仿真场景。
348 4
PINN训练新思路:把初始条件和边界约束嵌入网络架构,解决多目标优化难题
|
2月前
|
运维 Prometheus 监控
别再“亡羊补牢”了!——聊聊如何优化企业的IT运维监控架构
别再“亡羊补牢”了!——聊聊如何优化企业的IT运维监控架构
140 8
|
2月前
|
SQL 存储 监控
SQL日志优化策略:提升数据库日志记录效率
通过以上方法结合起来运行调整方案, 可以显著地提升SQL环境下面向各种搜索引擎服务平台所需要满足标准条件下之数据库登记作业流程综合表现; 同时还能确保系统稳健运行并满越用户体验预期目标.
215 6
|
2月前
|
缓存 运维 监控
Redis 7.0 高性能缓存架构设计与优化
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Redis 7.0高性能缓存架构,探索函数化编程、多层缓存、集群优化与分片消息系统,用代码在二进制星河中谱写极客诗篇。
|
4月前
|
机器学习/深度学习 存储 人工智能
RAG系统文本检索优化:Cross-Encoder与Bi-Encoder架构技术对比与选择指南
本文将深入分析这两种编码架构的技术原理、数学基础、实现流程以及各自的优势与局限性,并探讨混合架构的应用策略。
326 10
RAG系统文本检索优化:Cross-Encoder与Bi-Encoder架构技术对比与选择指南

热门文章

最新文章