读写分离实践简单记录

原创
2016/07/22 14:23
阅读数 60

[TOC]

分析哪些sql 是查询sql

* 不是存储过程
* 没有update, insert , exec, 里面没有proc(存储过程)
* 有select

分析上一条语句是否不是更新插入, 如果是则从读写库中查询

主要是为了方式更新后马上查询的情况,防止数据库主从同步的延迟

还是上代码比较实惠

      private static string GetReadConnectstring(string sql, string connectstring)
        {
            var isquery = IsSelect(sql);
            var result = connectstring;
            if (isquery && !preIsNotSelect)
            {
                result = SqlConnectionString.GetReadonlyConnectionstring(connectstring);
            }
            preIsNotSelect = !isquery;
            return result;
        }
        [ThreadStatic]
        private static bool preIsNotSelect = false; // 上一条执行语句是否是select
        private static bool IsSelect(string sql)
        {
             var sqlTmp = sql.ToLower();
            if (sqlTmp.IndexOf("insert") > -1 || sqlTmp.IndexOf("update") > -1 || sqlTmp.IndexOf("exec") > -1 || sqlTmp.IndexOf("proc") > -1)
            {
                return false;
            }
            return sqlTmp.IndexOf("select") > -1;
        }

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部