云数据仓库ADB在一主5从架构下,如用户 b在其中一个只读节点查询了一条数据为1缓存在了计算节点内存中,此时用户a在主节点修改了该条数据,随后用户b在去查询该条数据发现缓存中有该数据命中返回给前端,此时由于该数据已经被更新过,返回的则是旧数据,polardb怎么解决该问题的?如何保证用户每次访问的都是最新数据?
在PolarDB(包括PolarDB for MySQL,虽然问题中提及的是Polardb,但根据上下文应理解为PolarDB MySQL系列)中,解决结果集缓存与数据一致性问题的机制涉及到数据更新的同步延迟及其对缓存的影响。根据阿里云文档的描述:
由于PolarDB采用多主架构设计,数据更新后的同步到接入层以及接入层内部节点间的同步存在最多10秒的延迟。这意味着,在数据被更新后,相关缓存可能在短时间内仍保持旧值,从而导致查询结果不是实时最新的。PolarDB无法保证强一致性,但能保证最终一致性。换句话说,数据更新后大约10秒,相关的旧缓存将被自动淘汰,后续查询会重新缓存最新的数据。
为了尽量减少这种情况下返回旧数据的风险,PolarDB推荐在以下场景使用结果集缓存:
数据写入时段固定或集中。
大部分时间数据保持不变,无更新或写入很少。
查询存在较高重复率,即短时间内有多次相同的查询请求。
因此,对于用户b查询到旧数据的情况,PolarDB通过确保数据更新后的最终一致性来缓解,即用户b在初次查询后不久再次查询相同数据时,应该能够获取到更新后的结果。然而,如果应用对数据的即时一致性要求极高,建议直接访问主节点进行查询,或者在业务逻辑层面增加处理机制,比如强制刷新缓存或设置适当的缓存失效策略。此回答整理自钉群“云数据仓库ADB-开发者群”
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云自主研发的云原生数据仓库,具有高并发读写、低峰谷读写、弹性扩展、安全可靠等特性,可支持PB级别数据存储,可广泛应用于BI、机器学习、实时分析、数据挖掘等场景。包含AnalyticDB MySQL版、AnalyticDB PostgreSQL 版。