六、SQLSugar 基本语法+数据库读写分离
官网地址:SqlSugar ORM 5.X 官网 、文档、教程 - SqlSugar 5x - .NET果糖网https://www.donet5.com/Home/Doc面向对象的操作数据库,相比EFCore、Dapper等其他ORM框架性能支持性能轻便快捷,数据库的读写分离能大大减轻数据库的压力一、NuGet下载安装 SqlSugarCore二、实例化SqlSugarCore---包含数据库链
面向对象的操作数据库,相比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;
更多推荐
所有评论(0)