码迷,mamicode.com
首页 > 其他好文 > 详细

CYQ.Data(V5)读写分离使用方法 (如何配置与对应的效果)

时间:2017-11-17 23:25:56      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:取数   返回结果   分享   测试   client   base   关于   bak   数据库   

之前写过一篇关于CYQ.Data 关于读写分离的使用心得。但在测试时,出现过各种的意外表现,未能达到预期效果。然后经过"路过秋天"这几天的调优以后。各种使用环境均已达到预期效果。

今天在这里将如何配置,以及对应的配置在使用时的表现整理出来。分享给大家。大家可以在实际使用中对号入座(也欢迎大家自行测试)

一:主备从库结构一致时

 

1:配置和测试代码 

      <add name="Conn" connectionString="server=.;uid=sa;pwd=123456;database=Db;" providerName="System.Data.SqlClient"/>
      <add name="Conn_Bak" connectionString="server=.;uid=sa;pwd=123456;database=Db_Bak;" providerName="System.Data.SqlClient"/>
      <add name="Conn_Slave1" connectionString="server=.;uid=sa;pwd=123456;database=Db_Slave1;" providerName="System.Data.SqlClient"/>
      <add name="Conn_Slave2" connectionString="server=.;uid=sa;pwd=123456;database=Db_Slave2;" providerName="System.Data.SqlClient"/>
 //update
                using (MAction action = new MAction("table"))
                {


                    action.SetExpression("pid=‘" + id + "");
                    action.Update("id=1");
                    if (action.RecordsAffected == -2)
                    {
                        res = "update操作异常";
                    }
                }

                //Select
                using (MAction action = new MAction("table"))
                {
                    json = action.Select(1,1).ToJson(false,false);

                }

 2:测试条件和结果

  2.1:当所有配置的数据库连接正常时      
    结果:update和select均操作主库(如果是只有select操作时,仅从2个从库上获取数据(Conn_Slave1,Conn_Slave2),且按序切换)

  2.2:当主库Conn连接异常时     
    结果:update和select均操作备库(如果是只有select操作时,仅从2个从库上获取数据(Conn_Slave1,Conn_Slave2),且按序切换)

  2.3:当主库Conn和备库Conn_Bak均连接异常时     
    结果:update操作失败,select从2个从库上获取数据,不抛出异常,但可使用action.RecordsAffected == -2判断update操作结果;(如果是只有select操作时,仅从2个从库上获取数据(Conn_Slave1,Conn_Slave2),且按序切换)

  2.4:当主库Conn和备库Conn_Bak连接均异常,从库中任何一个连接异常时     
    结果:update操作失败,select从正常的从库上获取数据,不抛出异常,但可使用action.RecordsAffected == -2判断update操作结果;(如果是只有select操作时,仅从正常的从库上获取数据

  2.5:所有配置的数据库连接均异常时     
    结果:抛出异常;可使用try来捕捉,并按需返回结果

 

二:主从结构不一致(分库分表)

1:配置和测试代码

 

<add name="Conn" connectionString="server=.;uid=sa;pwd=123456;database=Db;" providerName="System.Data.SqlClient"/>
      <add name="Conn_Bak" connectionString="server=.;uid=sa;pwd=123456;database=Db_Bak;" providerName="System.Data.SqlClient"/>
      <add name="ReadConn_Slave1" connectionString="server=.;uid=sa;pwd=123456;database=Db_Read_Slave1;" providerName="System.Data.SqlClient"/>
      <add name="ReadConn_Slave2" connectionString="server=.;uid=sa;pwd=123456;database=Db_Read_Slave2;" providerName="System.Data.SqlClient"/>

测试代码(1):无try

 //update
                using (MAction action = new MAction("table"))
                {


                    action.SetExpression("pid=‘" + id + "");
                    action.Update("id=1");
                    if (action.RecordsAffected == -2)
                    {
                        res = "update操作异常";
                    }
                }

                //Select
                using (MAction action = new MAction("table", "ReadConn"))
                {
                    json = action.Select(1, 1).ToJson(false, false);

                }

测试代码(2):try

try
                {
                    //update
                    using (MAction action = new MAction("table"))
                    {


                        action.SetExpression("pid=‘" + id + "");
                        action.Update("id=1");
                        if (action.RecordsAffected == -2)
                        {
                            res = "update操作异常";
                        }
                    }
                }
                catch (Exception)
                {

                    res = "主/备数据库均无法正常连接";
                }
               

                //Select
                using (MAction action = new MAction("table", "ReadConn"))
                {
                    json = action.Select(1, 1).ToJson(false, false);

                }

 

2:测试条件和结果

  2.1:当主或备(Conn/Conn_Bak)任何一个连接正常时     
    结果:update在主或备之间正常的数据库上进行操作,select从2个从库上获取数据(ReadConn_Slave1,ReadConn_Slave2),且按序切换

  2.1:当主或备(Conn/Conn_Bak)均连接异常时     
    测试代码(1)结果:抛异常。因为在update时发生异常,后续的select无法正常执行     
    测试代码(2)
结果:       
      初次执行时:异常被捕捉到,res="主/备数据库均无法正常连接";Select从2个从库上获取数据(ReadConn_Slave1,ReadConn_Slave2),且按序切换       
      刷新页面时:主/备数据库连接已被认定为无效连接,此时会被判定为无异常,但是内部的异常返回机制会使 res = "update操作异常" 成立;Select依然从2个从库上获取数据(ReadConn_Slave1,ReadConn_Slave2),且按序切换

 

在以上测试中。数据库之间的切换均非常流畅,无额外的响应等待时间

CYQ.Data(V5)读写分离使用方法 (如何配置与对应的效果)

标签:取数   返回结果   分享   测试   client   base   关于   bak   数据库   

原文地址:http://www.cnblogs.com/xiaozc/p/7854061.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!