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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: 实现固然重要,但更为重要的是思路;很多底层的原理与思想是通用的

强烈推荐一个大神的人工智能的教程: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、很多底层的原理与思想是通用的。

相关文章
|
9月前
|
人工智能 安全 机器人
无代码革命:10分钟打造企业专属数据库查询AI机器人
随着数字化转型加速,企业对高效智能交互解决方案的需求日益增长。阿里云AppFlow推出的AI助手产品,借助创新网页集成技术,助力企业打造专业数据库查询助手。本文详细介绍通过三步流程将AI助手转化为数据库交互工具的核心优势与操作指南,包括全场景适配、智能渲染引擎及零代码配置等三大技术突破。同时提供Web集成与企业微信集成方案,帮助企业实现便捷部署与安全管理,提升内外部用户体验。
832 12
无代码革命:10分钟打造企业专属数据库查询AI机器人
|
11月前
|
Cloud Native 关系型数据库 分布式数据库
|
11月前
|
并行计算 关系型数据库 MySQL
如何用 esProc 将数据库表转储提速查询
当数据库查询因数据量大或繁忙变慢时,可借助 esProc 将数据导出为文件进行计算,大幅提升性能。以 MySQL 的 3000 万行订单数据为例,两个典型查询分别耗时 17.69s 和 63.22s。使用 esProc 转储为二进制行存文件 (btx) 或列存文件 (ctx),结合游标过滤与并行计算,性能显著提升。例如,ctx 并行计算将原查询时间缩短至 0.566s,TopN 运算提速达 30 倍。esProc 的简洁语法和高效文件格式,特别适合历史数据的复杂分析场景。
|
12月前
|
SQL 关系型数据库 MySQL
如何优化SQL查询以提高数据库性能?
这篇文章以生动的比喻介绍了优化SQL查询的重要性及方法。它首先将未优化的SQL查询比作在自助餐厅贪多嚼不烂的行为,强调了只获取必要数据的必要性。接着,文章详细讲解了四种优化策略:**精简选择**(避免使用`SELECT *`)、**专业筛选**(利用`WHERE`缩小范围)、**高效联接**(索引和限制数据量)以及**使用索引**(加速搜索)。此外,还探讨了如何避免N+1查询问题、使用分页限制结果、理解执行计划以及定期维护数据库健康。通过这些技巧,可以显著提升数据库性能,让查询更高效流畅。
|
12月前
|
数据库 Python
【YashanDB知识库】python驱动查询gbk字符集崖山数据库CLOB字段,数据被驱动截断
【YashanDB知识库】python驱动查询gbk字符集崖山数据库CLOB字段,数据被驱动截断
|
12月前
|
数据库
【YashanDB知识库】数据库用户所拥有的权限查询
【YashanDB知识库】数据库用户所拥有的权限查询
|
12月前
|
存储 运维 监控
百万指标,秒级查询,零宕机——时序数据库 TDengine 在 AIOps 中的硬核实战
本篇文章详细讲述了七云团队在运维平台中如何利用 TDengine 解决海量时序数据存储与查询的实际业务需求。内容涵盖了从数据库选型、方案落地到业务挑战及解决办法的完整过程,特别是分享了升级 TDengine 3.x 时的实战经验,给到有需要的小伙伴参考阅读。
534 1
|
12月前
|
缓存 NoSQL 关系型数据库
WordPress数据库查询缓存插件
这款插件通过将MySQL查询结果缓存至文件、Redis或Memcached,加速页面加载。它专为未登录用户优化,支持跨页面缓存,不影响其他功能,且可与其他缓存插件兼容。相比传统页面缓存,它仅缓存数据库查询结果,保留动态功能如阅读量更新。提供三种缓存方式选择,有效提升网站性能。
252 1
|
SQL Java 数据库连接
【潜意识Java】MyBatis中的动态SQL灵活、高效的数据库查询以及深度总结
本文详细介绍了MyBatis中的动态SQL功能,涵盖其背景、应用场景及实现方式。
1668 6