六、SQLSugar 基本语法+数据库读写分离
官网地址:SqlSugar ORM 5.X 官网 、文档、教程 - SqlSugar 5x - .NET果糖网https://www.donet5.com/Home/Dochttps://www.donet5.com/Home/Doc
面向对象的操作数据库,相比EFCore、Dapper等其他ORM框架性能支持性能轻便快捷,
数据库的读写分离能大大减轻数据库的压力
一、NuGet下载安装 SqlSugarCore
二、实例化SqlSugarCore---包含数据库链接---指定数据库类型---增删改查,上代码
这里演示使用控制台程序
using SqlSugar;//实例化数据库链接
var db = new SqlSugarClient(new ConnectionConfig()
{DbType = DbType.SqlServer,//指定数据库类型ConnectionString = "server=.;Database=TESTDB;Uid=sa;Pwd=198;",//数据库链接字符串IsAutoCloseConnection = true,//链接使用完后是否自动释放InitKeyType = InitKeyType.Attribute//从实体特性中读取主键自增列信息
});//相应的增删改查(Test是对应数据库表的实体类)
//向指定表添加一行数据
db.Insertable<Test>(new Test()
{UserId = "zhangsan",Name = "张三",Phone = "123456",}).ExecuteCommand();//获取列表数据
List<Test> list = db.Queryable<Test>().ToList();//获取首行数据
Test t = db.Queryable<Test>().First();//更新数据
t.Name = "张三丰";
db.Updateable<Test>(t).ExecuteCommand();//删除数据
db.Deleteable<Test>(t).ExecuteCommand();
三、SqlSugar-支持数据库主从复制、这里使用的是SqlServer2008R2
1、开始之前先创建一个指定的文件夹,确保该文件夹为共享
2、配置分发
选中“复制”--右键--配置分发
点击下一步
选中“******”将充当自己的分发服务器 ;SQL Server将创建分发数据库和日志,点击下一步
选中-是,将SQL Server代理服务配置为自动启动,点击下一步
将开始创建的共享文件夹的路径输入文本框、点击下一步
后面一直下一步到完成即可
3、 本地分发
右键-新建发布
选中你要发布的数据库(主库),点击下一步
选中事务发布,点击下一步
选中所有表,点击下一步
不筛选表行,点击下一步
选中立即创建快照并使快照保持可用状态,以初始化订阅,点击下一步
代理安全性,点击安全设置
我们这里发布和订阅都是使用本地数据库,所以选中在SQLServer代理服务账户下运行
连接到发布服务器使用以下SQLServer登录名,如下图,填写好本地账户账号密码,点击确定
创建发布、下一步
填写好发布名称,点击完成
创建成功
这时可以在最开始选中的文件夹内看到多出了这个文件夹,代表创建成功了
4、本地订阅-邮件新建订阅
选中之前发布的代理,点击下一步
分发代理位置选择在发布服务器****上运行所有代理。。。。。点击下一步
选择新建数据库,新建就不做阐述
点击如下图 ... 进入配置
选中在SQL Server代理服务账户下运行,使用SQL Server登录名,点击确定
下一步
剩下的一直点击下一步,直到创建完成
这时可以去数据库列表可以看见多出了自己刚才创建的数据库(从库,包含数据)
5、我们可以多创建几个订阅数据库,这是对主库(TESTDB)进行增删改查会发现会直接影响SQLSugarDB_001.002.003(次库),实现数据同步
四、数据库读写分离
1、链接字符串
using SqlSugar;//实例化数据库链接
var db = new SqlSugarClient(new ConnectionConfig()
{ConnectionString = "server=.;Database=TESTDB;Uid=sa;Pwd=198;",//数据库链接字符串DbType = DbType.SqlServer,//指定数据库类型IsAutoCloseConnection = true,//链接使用完后是否自动释放InitKeyType = InitKeyType.Attribute,//从实体特性中读取主键自增列信息//从库链接SlaveConnectionConfigs = new List<SlaveConnectionConfig>() {new SlaveConnectionConfig(){HitRate =10,ConnectionString ="server=.;Database=SQLSugarDB_001;Uid=sa;Pwd=198;"},new SlaveConnectionConfig(){HitRate =10,ConnectionString ="server=.;Database=SQLSugarDB_002;Uid=sa;Pwd=198;"},new SlaveConnectionConfig(){HitRate =10,ConnectionString ="server=.;Database=SQLSugarDB_003;Uid=sa;Pwd=198;"}}
});
2、我们向主库中新增两条测试数据
//向指定表添加一行数据
db.Insertable<Test>(new Test()
{UserId = "zhangsan",Name = "张三001",Phone = "123456",IsDeleted = false,CreateTime = DateTime.Now,CreateUserId = "000",DeleteTime = DateTime.Now,DeleteUserId = "",
}).ExecuteCommand();db.Insertable<Test>(new Test()
{UserId = "zhangsan",Name = "张三002",Phone = "123456",IsDeleted = false,CreateTime = DateTime.Now,CreateUserId = "000",DeleteTime = DateTime.Now,DeleteUserId = "",
}).ExecuteCommand();
3、运行,然后去数据库查看,如下图,实现了主次同步写入
4、其实现在已经实现了读写分离,上面写入已经确认了,怎么验证读取呢?
如下图,我去次数据库修改了他们的UserId值
5、 我们循环几次读取test表并监听SQL语句和打印UserId值,代码如下
using SqlSugar;//实例化数据库链接
var db = new SqlSugarClient(new ConnectionConfig()
{ConnectionString = "server=.;Database=TESTDB;Uid=sa;Pwd=198;",//数据库链接字符串DbType = DbType.SqlServer,//指定数据库类型IsAutoCloseConnection = true,//链接使用完后是否自动释放InitKeyType = InitKeyType.Attribute,//从实体特性中读取主键自增列信息//从库链接SlaveConnectionConfigs = new List<SlaveConnectionConfig>() {new SlaveConnectionConfig(){HitRate =10,ConnectionString ="server=.;Database=SQLSugarDB_001;Uid=sa;Pwd=198;"},new SlaveConnectionConfig(){HitRate =10,ConnectionString ="server=.;Database=SQLSugarDB_002;Uid=sa;Pwd=198;"},new SlaveConnectionConfig(){HitRate =10,ConnectionString ="server=.;Database=SQLSugarDB_003;Uid=sa;Pwd=198;"}}
});//监听SQL语句
db.Aop.OnLogExecuting = (sql, pra) =>
{Console.WriteLine($"-------------------------------------------------------------");Console.WriteLine($"sql语句:{sql}");
};//获取首行数据
for (int i = 0; i < 5; i++)
{Test t = db.Queryable<Test>().First();Console.WriteLine("----------------------------------------------------------------");Console.WriteLine(t.UserId);
}
结果如下图,可知语句都是从test获取,但实际都是从库中读取,验证成功,读写分离实现
五、同步过程中会存在延迟,导致写入数据可能短时间内(通常就1s或不到1s)无法从次库读取到最新数据,可以添加以下代码,从主库读取
//设置查询可以通过主库查询
db.Ado.IsDisableMasterSlaveSeparation = true;
六、SQLSugar 基本语法+数据库读写分离相关推荐
- 学会数据库读写分离、分表分库
https://www.cnblogs.com/joylee/p/7513038.html 系统开发中,数据库是非常重要的一个点.除了程序的本身的优化,如:SQL语句优化.代码优化,数据库的处理本身优 ...
- asp.net mysql 读写分离_[ASP.net教程]SqlSugar ORM已经支持读写分离
[ASP.net教程]SqlSugar ORM已经支持读写分离 0 2016-11-26 23:00:12 目前只有MYSQL版 3.5.2.9 支持,其库版本12月3号更新该功能 用例讲解using ...
- 17.sql server数据库使用规则、二八原则、数据库查询集群--数据库读写分离多种实现、数据库配置读写分离(by-朝夕)
Database 课程目标 环境准备: 一.二八原则 二.数据库读写分离 好处: 绝大部分的企业内部应用,可能不需要上图那么庞大的架构,一台主数据库服务器和一台查询服务器通常能满足读写分离的要求.而且 ...
- 一文详解高性能数据库:读写分离
虽然近十年来各种存储技术飞速发展,但关系数据库由于其 ACID 的特性和功能强大的 SQL 查询,目前还是各种业务系统中关键和核心的存储系统,很多场景下高性能的设计最核心的部分就是关系数据库的设计. ...
- 跟我学Springboot开发后端管理系统5:数据库读写分离
在Matrix-web后台管理系统中,使用到了数据库的读写分离技术.采用的开源的Sharding-JDBC作为数据库读写分离的框架.Matrix-Web后台数据库这一块采用的技术栈如下: 使用Myba ...
- 解决数据库读写分离(转)
如何配置mysql数据库的主从? 单机配置mysql主从:http://my.oschina.net/god/blog/496 常见的解决数据库读写分离有两种方案 1.应用层 http://neore ...
- .net core发布 正在发现数据上下文_使用EF Core实现数据库读写分离
以下文章来源于朝夕Net社区 ,作者Eleven 朝夕Net社区 朝气.丰富.活跃的.Net社区,朝夕教育携百万粉丝共同打造!有技术,有感悟,有新闻,有照片,有故事,还有梦想! [精选转载]| 作者/ ...
- 简单好用!利用Spring AOP技术10分钟实现一个数据库读写分离方案
前言 最近我们的APP在线用户越来越多,接口的响应速度也是越来越慢,经过运维排查发现是由于并发查询太多导致的数据库压力比较大,架构师经过调研给出了数据库读写分离的解决方案,为了快速解决问题,我们最终采 ...
- PG SQL数据库读写分离的思路
PGSQL可以设置一台主多个SLAVE,这样我们需要一个办法能在程序里做到读写分离,查询了互联网,找到了下面的解决思路,请周枫在后继开发中测试下面的思路方案: 在应用层通过spring特性解决数据库读 ...
最新文章
- 进阶之初探nodeJS
- CISCO-CCNA课程介绍
- UNIX下C语言的图形编程-curses.h函数库
- 【知识总结】Java类初始化顺序说明
- C# 子类实例化基类 基类使用不了子类的方法_C#学习笔记09--构造方法/析构方法/继承/多态/封装...
- InnoDB与MyISAM的六大区别(转)
- AdBoost算法详解
- VS 2010 开发 ActiveX 开始篇
- POJ 2967 (水题,考察putchar()按位输入)
- SpringMVC项目中,jsp文件无法显示从Controller中传递过来的ModelAndView的模型数据
- 爬虫app信息抓取之apk反编译抓取
- Ubuntu(Debian)apt-get
- html 分割字符串,详解js常用分割取字符串的方法
- 计算机网络应用层1练习题
- 手把手教你在 Vue 中使用 JSX,不怕学不会!【建议收藏】
- unity暂停和继续按钮
- 手机的1G,2G,3G和4G区别识记
- 【Gsutil】使用手册
- [HAOI2006]聪明的猴子 题解
- 【Io开发笔记】机智云智能浇花器实战(3)-自动生成代码移植
热门文章
- python小乌龟绘制迷宫_参照课本案例4.8.3,请用python实现小乌龟走迷宫的过程;...
- 数字电源专用IC,国产C2000, QX320F280049
- 推荐一款非Win7下专用的“任务栏图标收纳”工具——TrayApp(转自:http://www.ibobosky.com/my-quick-start-tool-trayapp.htm)...
- 电脑经常显示交互式服务器,win10系统打印机出现交互式服务检测的解决办法
- Android Stomp客户端
- Python爬虫实战——爬取RUNOOB.COM的Python3教程
- java runoob
- 手游的世界观和方法论
- 光谱共焦位移传感器相比激光位移传感器有哪些优点
- MySQL #格式unicode转汉字