首页 > 编程知识 正文

mysql的事务是怎么实现的,mysql读写分离中间件对比

时间:2023-05-03 10:07:57 阅读:45421 作者:4904

基本原理是在主数据库中处理事务查询,然后从数据库中处理SELECT查询。 数据库复制用于将事务查询所做的更改同步到群集中的从数据库。

Jan Kneschke在《MySQL Proxy learns R/W Splitting》中详细介绍了该技术和连接池问题:

为了实现读写分离,需要连接池。 只有在到后端的经过验证的连接打开时才切换到后端。 MySQL协议首先进行握手。 进入返回查询/结果阶段后认证新连接太晚了。 为了正常工作,必须确保足够的连接。

用于读写分离的LUA脚本:

-读写分离

--

-将所有非事务Select发送到一个从数据库

if is_in_transaction==0 and

packet : byte (==proxy.com _ query and

packet : sub (2,7 )=='SELECT' then

local max_conns=-1

local max_conns_ndx=0

for i=1,#proxy.servers do

local s=proxy.servers[i]

-必须选择具有空闲连接的从数据库

ifs.type==proxy.back end _ type _ roand

s.idling_connections 0 then

if max_conns==-1 or

s.connected _ clients max _ conns then

max_conns=s.connected_clients

max_conns_ndx=i

结束

结束

结束

-现在,您找到了具有空闲连接的从数据库

if max_conns_ndx 0 then

proxy.connection.back end _ ndx=max _ conns _ ndx

结束

else

-发送到主数据库

结束

return proxy.PROXY_SEND_QUERY

注释:此技术还可以用于实现其他数据分布策略,如切片(Sharding )。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。