应对数据库不断膨胀的数据:缓存和队列中间件

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 【6月更文挑战第5天】该文探讨了优化数据库使用以提升应用系统性能的策略。文中建议利用Redis缓存和MQ消息队列作为辅助工具,以进一步优化性能和减少资源消耗。

1 简介

大厂的应用,服务器和数据库的压力基本持平,中小型软件,服务器压力没有数据库压力大。

将一部分推拉数据功能模块转化为通过服务器缓存或计算去完成,从而将数据库压力转移到服务器。

本文讨论的主要内容包括:

   1)通过服务器缓存和计算转移部分数据库压力;
   2)创建索引提高检索效率,但注意避免影响更新速度; 
   3)减少不必要的数据库交互,利用缓存和计算来减轻数据库负载;
   4)采用数据库分库分表和主从读写分离架构来提升数据库性能,应对高并发;
   5)使用集中式协调器处理分布式事务。 

以上方案也无法降低数据库压力时,还可以凭借分布式数据库,主从读写分离数据库支持横向扩展能力,提升数据库性能,理论上横向扩展数据库性能可以无上限提高数据库承压能力。

创世卵CosmicEgg1.png

因此从代码层,中间层,分布式三个分析分析如何优化数据库使用,提升应用系统性能。

2 在代码层面消化数据库压力

  • 索引

索引是MySQL和Oracle等数据库本身提供的功能,合理创建索引可以提高数据的检索效率,降低数据库服务器IO和CPU的消耗。

但由于索引也会降低更新表的速度,经常增删改的表或字段不适合创建索引.

所以在开发初期,我们就应该根据数据库模型表和字段的作用来决定是否为该表建立索引,为数据记录较多的表中,频繁作为查询条件的字段建立索引。

        class Article(models.Model):
            "article model"
            title = models.CharField('title',max_length=200,)
            class Meta:
                indexes = [models.Index(fields=['title']),]

3 转移压力

在代码层把数据库压力转移到服务器上,要求我们在编写代码的时候,时刻留意代码中是否有过多与数据库进行交互的行为,是否可以通过缓存或计算,来减少与数据库交互的次数。

如一个功能模块的代码写下来,发现多次连接数据库,可以调整为一次性取出所有需要的数据,减少对数据库的查询次数。

又如模块中的某一个值,既可以通过逻辑运算得出,也可以通过数据库读取,在为减轻数据库压力的场景下,我们会选择前者。

4 数据库分库分表

上面几种方法是在应用系统的软实力上做文章,达到为数据库减压的目的,但面对真正庞大的流量袭来时,还是得下硬功夫——提升数据库自身的读写性能。

纵向提高数据库配置,加CPU、加内存,对性能的提升是有限的,幸运的是,目前大部分数据库都支持分布式架构,或主从读写分离架构。

分布式架构数据库由多个计算机系统设备共同组成一个数据库,提供完整的数据库服务,

例如Oracle、MongoDB、TDSQL等,增加计算机系统的数量,就能提升整体数据库性能,理论上分布式架构数据库的性能可以无限提高,这就是为什么大型电商能承受几十亿并发压力的原因之一。

5 主从读写分离架构

主从读写分离架构是专门一个主数据库用来写入数据,另外搭建几个从数据库用于读取数据.

主数据库会把数据的变更同步给几个从数据库,这样就能将数据库的读取压力分散到多台从数据库中,从而实现数据库的减压。

相比于前面几种方案,横向提高数据库性能的成本高昂,并且主库的能力到位了,分库才更能体现价值,产品优化到位了,分布式架构横向扩展的性价比才高,“软实力”和“硬功夫”两者需要有机结合。

6 集中协调器

分布式事务访问一个或多个分区中的数据,这需要昂贵的协调。

集中式协调器充当协调所有行为的全局“警察”。

  • 中间件
    集中式协调器可用作中间件,接受查询请求并将查询路由到正确的分区。

  • 权力下放协调员

在去中心化方法中,节点自行组织。客户端直接将查询发送到其中一个分区。

此主分区会将结果发送回客户端。具体分区负责与其他分区通信并相应地提交。

集中式方法让位于多个客户端尝试获取锁的瓶颈在相同的分区上。

对于分布式 2PL 来说可能更好,因为它具有锁的中央视图并且可以处理死锁更快。
对于分散的方法来说,这并非易事。

7 使用辅助工具

能否合理使用中间件和辅助工具,是考量一个技术经理能力的标准之一,选择和利用各种合适中间件的优势,可以有效提高产品性能,减少资源消耗。在数据读取压力较大的场景中,往往会引入Redis和MQ中间件。

  • 缓存redis

    Redis缓存数据库是将数据以键值对的形式缓存在内存中的高效数据库。

    在开发中,我们可以将一些频繁读取的数据临时存放到Redis,例如中签公告、人员名单、产品清单等,用户在访问这些数据的时候,如果发现缓存中有数据,则无需调用数据库,直接从Redis获取。

    同时,由于内存的读写速率是普通机械硬盘的几百倍,使用Redis作为数据缓存不仅减轻了数据库的压力,数据的存取速度还特别快,可以有效提高数据的调取速率。

    • 队列MQ的使用

    MQ消息队列中间件常用于流量消峰和消息分发。

    利用MQ将同一时刻的大量请求分散成一段时间来处理,可以有效减轻数据库负担;

    另外把消息发布到MQ中供多个客户端监听,也能达到减少数据查询次数的效果。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
1月前
|
机器学习/深度学习 人工智能 缓存
MHA2MLA:0.3%数据微调!复旦团队开源推理加速神器,KV缓存狂降96.87%
MHA2MLA是复旦大学、华东师范大学、上海AI Lab等机构联合推出的数据高效微调方法,通过引入多头潜在注意力机制(MLA),显著优化基于Transformer的LLM推理效率,降低推理成本。
90 1
MHA2MLA:0.3%数据微调!复旦团队开源推理加速神器,KV缓存狂降96.87%
|
1月前
|
缓存 NoSQL 关系型数据库
WordPress数据库查询缓存插件
这款插件通过将MySQL查询结果缓存至文件、Redis或Memcached,加速页面加载。它专为未登录用户优化,支持跨页面缓存,不影响其他功能,且可与其他缓存插件兼容。相比传统页面缓存,它仅缓存数据库查询结果,保留动态功能如阅读量更新。提供三种缓存方式选择,有效提升网站性能。
52 1
|
1月前
|
消息中间件 缓存 NoSQL
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
|
2月前
|
中间件 关系型数据库 数据库
docker快速部署OS web中间件 数据库 编程应用
通过Docker,可以轻松地部署操作系统、Web中间件、数据库和编程应用。本文详细介绍了使用Docker部署这些组件的基本步骤和命令,展示了如何通过Docker Compose编排多容器应用。希望本文能帮助开发者更高效地使用Docker进行应用部署和管理。
84 19
|
3月前
|
存储 缓存 NoSQL
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
|
3月前
|
缓存 NoSQL 关系型数据库
云端问道21期实操教学-应对高并发,利用云数据库 Tair(兼容 Redis®)缓存实现极速响应
本文介绍了如何通过云端问道21期实操教学,利用云数据库 Tair(兼容 Redis®)缓存实现高并发场景下的极速响应。主要内容分为四部分:方案概览、部署准备、一键部署和完成及清理。方案概览中,展示了如何使用 Redis 提升业务性能,降低响应时间;部署准备介绍了账号注册与充值步骤;一键部署详细讲解了创建 ECS、RDS 和 Redis 实例的过程;最后,通过对比测试验证了 Redis 缓存的有效性,并指导用户清理资源以避免额外费用。
|
4月前
|
缓存 NoSQL Serverless
云数据库Tair:从稳定低延时缓存到 Serverless KV
本次分享聚焦云数据库Tair的使用,涵盖三部分内容:1) Tair概览,介绍其作为稳定低延时缓存及KV数据库服务的特点和优势;2) 稳定低延迟缓存技术,探讨如何通过多线程处理、优化内核等手段提升性能与稳定性;3) 从缓存到Serverless KV的演进,特别是在AI大模型时代,Tair如何助力在线服务和推理缓存加速。Tair在兼容性、性能优化、扩缩容及AI推理加速方面表现出色,满足不同场景需求。
|
4月前
|
缓存 物联网 数据库
InfluxDB vs TDengine :2025 年了,谁家用的数据库还不能高效读缓存?
在工业互联网和物联网的大数据应用场景中,实时数据的写入和查询性能至关重要。如何快速获取最新设备状态并实时处理数据,直接影响到业务的高效运转。本文将深入分析 TDengine 和 InfluxDB 在缓存机制上的差异,帮助读者更好地理解这两款主流时序数据库在性能优化方面的优劣。
418 1
|
5月前
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
108 5
|
5月前
|
缓存 NoSQL 数据库
运用云数据库 Tair 构建缓存为应用提速,完成任务得苹果音响、充电套装等好礼!
本活动将带大家了解云数据库 Tair(兼容 Redis),通过体验构建缓存以提速应用,完成任务,即可领取罗马仕安卓充电套装,限量1000个,先到先得。邀请好友共同参与活动,还可赢取苹果 HomePod mini、小米蓝牙耳机等精美好礼!
下一篇
oss创建bucket