Atlas源码剖析(十一)

本文详细介绍了Atlas如何实现读写分离和负载均衡,包括对GET_LOCK、AUTOCOMMIT、SQL_CALC_FOUND_ROWS语句的处理策略,以及在不同情况下的后台选择逻辑,特别是对只读和可写后台的权重分配和选择算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

读写分离和负载均衡

在分析完语句后,做好分表的准备工作之后,Atlas会调用check_flags函数检查传过来的语句是否为GET_LOCKAUTOCOMMITSQL_CALC_FOUND_ROWS语句;

 

注解:

aGET_LOCK

get_lock(str,timeout)

设法使用字符串str给定的名字得到一个锁,超时为timeout秒。若成功得到锁,则返回1,若操作超时则返回0(例如,由于另一个客户端已提前封锁了这个名字),若发生错误则返回null (诸如缺乏记忆或线程mysqladmin kill被断开)。假如你有一个用get_lock()得到的锁,当你执行release_lock()或你的连接断开(正常或非正常)时,这个锁就会解除。

这个函数可用于执行应用程序锁或模拟记录锁定。名称被锁定在服务器范围内。假如一个名字已经被一个客户端封锁,get_lock()会封锁来自另一个客户端申请封锁同一个名字的任何请求。这使对一个封锁名达成协议的客户端使用这个名字合作执行建议锁。然而要知道它也允许不在一组合作客户端中的一个客户端封锁名字,不论是服役的还是非故意的,这样阻止任何合作中的客户端封锁这个名字。一个减少这种情况发生的办法就是使用数据库特定的或应用程序特定的封锁名。例如,使用db_name.strapp_name.str形式的封锁名。

 

bAUTOCOMMIT

set autocommit=0,指事务非自动提交,也就是不自动提交,自此句执行以后,每个SQL语句或者语句块所在的事务都需要显示"commit"才能提交事务。mysql

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值