数据库主从延迟导致查询不准确的解决思路

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
RDS PostgreSQL Serverless,0.5-4RCU 50GB 3个月
推荐场景:
对影评进行热评分析
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: 实现固然重要,但更为重要的是思路;很多底层的原理与思想是通用的

强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan


【前言】

      当数据达到一定量的时候,数据库会成为整个系统的瓶颈,一般采取的优化策略为读写分离,数据库通过分主库从库从而实现读写分离(写请求操作主库,读请求操作从库);


【解决数据延迟思路】

        一、主从同步原理(在此以目前最普及的MySQL为例)


               以下是一张经典的MySQL通过binlog实现主从数据同步的原理图:

dc.png

        二、问题是如何产生?


               1、从上面原理图中不难发现,主从同步是有一定的延迟,影响延迟大小因素:

                   (1)延迟的大小取决于从上次同步到现在产生数据量

                   (2)当前服务器间网络情况

                   (3)主从服务器本身压力(CPU,内存,IO等)


               2、由于数据库服务一般都是在内网当中,而且服务器在购置时都会高一些配置(比实际需要)所以基本上同步都很快,一般为毫秒级;


               3、一般的业务场景中毫秒级延迟是可以忽略;

gh.png

               4、有一般就有特殊,有一些特殊情况需要实时毫秒级的时间差也不允许;以下是针对这些特殊情况给出常见的解决方案。


        三、数据延迟解决方案:


               1、方案一:写程序双写(写主库同时写读库)

az.png

               2、方案二:读程序查主库

za.png

               3、方案三:写程序写主库且写缓存(设置一定的失效时间,一般略大于数据库同步最大时延即可),读程序读缓存读从库    

ml.png



        四、三种方案优缺点:


               1、方案一:双写会消耗一定的性能,实现起来比较简单,高并发写的场景不适用;


               2、方案二:读程序会影响主库的性能,实现起来比较简单,高并发读的场景不适用;


               3、方案三:大部分情况下读写均多消耗写性能,实现较为复杂,高并发读写都适用(缓存读写非常快);


【总结】

        1、实现固然重要,但更为重要的是思路;

        2、很多底层的原理与思想是通用的。

目录
打赏
0
1
5
0
3755
分享
相关文章
如何优化SQL查询以提高数据库性能?
这篇文章以生动的比喻介绍了优化SQL查询的重要性及方法。它首先将未优化的SQL查询比作在自助餐厅贪多嚼不烂的行为,强调了只获取必要数据的必要性。接着,文章详细讲解了四种优化策略:**精简选择**(避免使用`SELECT *`)、**专业筛选**(利用`WHERE`缩小范围)、**高效联接**(索引和限制数据量)以及**使用索引**(加速搜索)。此外,还探讨了如何避免N+1查询问题、使用分页限制结果、理解执行计划以及定期维护数据库健康。通过这些技巧,可以显著提升数据库性能,让查询更高效流畅。
【YashanDB知识库】python驱动查询gbk字符集崖山数据库CLOB字段,数据被驱动截断
【YashanDB知识库】python驱动查询gbk字符集崖山数据库CLOB字段,数据被驱动截断
【YashanDB知识库】数据库用户所拥有的权限查询
【YashanDB知识库】数据库用户所拥有的权限查询
|
11天前
|
百万指标,秒级查询,零宕机——时序数据库 TDengine 在 AIOps 中的硬核实战
本篇文章详细讲述了七云团队在运维平台中如何利用 TDengine 解决海量时序数据存储与查询的实际业务需求。内容涵盖了从数据库选型、方案落地到业务挑战及解决办法的完整过程,特别是分享了升级 TDengine 3.x 时的实战经验,给到有需要的小伙伴参考阅读。
32 1
WordPress数据库查询缓存插件
这款插件通过将MySQL查询结果缓存至文件、Redis或Memcached,加速页面加载。它专为未登录用户优化,支持跨页面缓存,不影响其他功能,且可与其他缓存插件兼容。相比传统页面缓存,它仅缓存数据库查询结果,保留动态功能如阅读量更新。提供三种缓存方式选择,有效提升网站性能。
26 1
时序数据库 TDengine 化工新签约:存储降本一半,查询提速十倍
化工行业在数字化转型过程中面临数据接入复杂、实时性要求高、系统集成难度大等诸多挑战。福州力川数码科技有限公司科技依托深厚的行业积累,精准聚焦行业痛点,并携手 TDengine 提供高效解决方案。
50 0
【潜意识Java】MyBatis中的动态SQL灵活、高效的数据库查询以及深度总结
本文详细介绍了MyBatis中的动态SQL功能,涵盖其背景、应用场景及实现方式。
214 6
【深入了解MySQL】优化查询性能与数据库设计的深度总结
本文详细介绍了MySQL查询优化和数据库设计技巧,涵盖基础优化、高级技巧及性能监控。
624 0
数据库执行查询请求的过程?
客户端发起TCP连接请求,服务端通过连接器验证主机信息、用户名及密码,验证通过后创建专用进程处理交互。服务端进程缓存以减少创建和销毁线程的开销。后续步骤包括缓存查询(8.0版后移除)、语法解析、查询优化及存储引擎调用,最终返回查询结果。
60 6
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等