mysql 读写分离 事务_mysql 读写分离(基础篇)

mysql 读写分离 事务_mysql 读写分离(基础篇)基本的原理是让主数据库处理事务性查询,而从数据库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库。JanKneschke在《MySQLProxylearnsR/WSplitting》中详细的介绍了这种技巧以及连接池问题:为了实现读写分离我们需要连接池。我们仅在已打开了到一个后端的一条经过认证的连接的情况下,才切换到该后端。MySQL协议首先进行握手。当…

大家好,又见面了,我是你们的朋友全栈君。

基本的原理是让主数据库处理事务性查询,而从数据库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库。

20090413111030727.jpeg

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]

— 需要选择一个拥有空闲连接的从数据库

if s.type == proxy.BACKEND_TYPE_RO and

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

end

end

end

— 至此,我们找到了一个拥有空闲连接的从数据库

if max_conns_ndx > 0 then

proxy.connection.backend_ndx = max_conns_ndx

end

else

— 发送到主数据库

end

return proxy.PROXY_SEND_QUERY

注释:此技巧还可以用来实现其他的数据分布策略,例如分片(Sharding)。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/134635.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • sqlserver2016安装步骤产品密钥_kepserver使用教程

    sqlserver2016安装步骤产品密钥_kepserver使用教程1.进入安装中心:可以参考硬件和软件要求、可以看到一些说明文档2.选择全新安装模式继续安装3.输入产品秘钥:这里使用演示秘钥进行4.在协议中,点击同意,并点击下一步按钮,继续安装5.进入全局规

    2022年8月3日
    4
  • async和await

    async和awaitasync和await概念先从字面意思来理解。async是“异步”的简写,而await可以认为是asyncwait的简写。所以应该很好理解async用于申明一个function是异步的,而await用于等待一个异步方法执行完成。另外还有一个很有意思的语法规定,await只能出现在async函数中。然后细心的朋友会产生一个疑问,如果await只能出现在async函数中,那这个async函数应该怎么调用?如果需要通过await…

    2022年7月14日
    20
  • python中griddata的外插值_利用griddata进行二维插值

    python中griddata的外插值_利用griddata进行二维插值有时候会碰到这种情况:实际问题可以抽象为\(z=f(x,y)\)的形式,而你只知道有限的点\((x_i,y_i,z_i)\),你又需要局部的全数据,这时你就需要插值,一维的插值方法网上很多,不再赘述,这里仅介绍二维的插值法这里主要利用scipy.interpolate包里griddata函数griddata(points,values,xi,method=’linear’…

    2022年5月26日
    43
  • python读取文件如何去除空格_python读取txt文件时怎么去掉空格

    python读取文件如何去除空格_python读取txt文件时怎么去掉空格python属于什么型语言python通过什么实现映射Python读取TXT文件可以通过replace()函数来去除TXT文件中的空格,基本结构:replace(to_replace,value)前面是需要替换的值,后面是替换后的值。代码如下:importosimportsys#os.chdir(‘E:\\’)#跳到D盘#ifnotos.path.exists(‘1.txt’):…

    2022年5月8日
    406
  • 利用PySpark统计相邻字符串对出现的次数

    利用PySpark统计相邻字符串对出现的次数

    2021年11月23日
    65
  • 三种T检验的详细区分

    三种T检验的详细区分关于T检验的方法区分及使用场景介绍如下:01.概念T检验是通过比较不同数据的均值,研究两组数据之间是否存在显著差异。02.分类不同的T检验方法适用于不同的分析场景,具体的分类如下:03.t检验的前提条件无论是单样本T检验、独立样本T检验还是配对样本T检验,都有几个基本前提:(1)T检验属于参数检验,用于检验定量数据(数字有比较意义的),若…

    2022年6月19日
    30

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号