当前位置:   article > 正文

SQLSugar 基本语法+数据库读写分离

sqlsugar

面向对象的操作数据库,相比EFCore、Dapper等其他ORM框架性能支持性能轻便快捷,

数据库的读写分离能大大减轻数据库的压力

一、NuGet下载安装 SqlSugarCore

二、实例化SqlSugarCore---包含数据库链接---指定数据库类型---增删改查,上代码

这里演示使用控制台程序

  1. using SqlSugar;
  2. //实例化数据库链接
  3. var db = new SqlSugarClient(new ConnectionConfig()
  4. {
  5. DbType = DbType.SqlServer,//指定数据库类型
  6. ConnectionString = "server=.;Database=TESTDB;Uid=sa;Pwd=198;",//数据库链接字符串
  7. IsAutoCloseConnection = true,//链接使用完后是否自动释放
  8. InitKeyType = InitKeyType.Attribute//从实体特性中读取主键自增列信息
  9. });
  10. //相应的增删改查(Test是对应数据库表的实体类)
  11. //向指定表添加一行数据
  12. db.Insertable<Test>(new Test()
  13. {
  14. UserId = "zhangsan",
  15. Name = "张三",
  16. Phone = "123456",
  17. }).ExecuteCommand();
  18. //获取列表数据
  19. List<Test> list = db.Queryable<Test>().ToList();
  20. //获取首行数据
  21. Test t = db.Queryable<Test>().First();
  22. //更新数据
  23. t.Name = "张三丰";
  24. db.Updateable<Test>(t).ExecuteCommand();
  25. //删除数据
  26. 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、链接字符串

  1. using SqlSugar;
  2. //实例化数据库链接
  3. var db = new SqlSugarClient(new ConnectionConfig()
  4. {
  5. ConnectionString = "server=.;Database=TESTDB;Uid=sa;Pwd=198;",//数据库链接字符串
  6. DbType = DbType.SqlServer,//指定数据库类型
  7. IsAutoCloseConnection = true,//链接使用完后是否自动释放
  8. InitKeyType = InitKeyType.Attribute,//从实体特性中读取主键自增列信息
  9. //从库链接
  10. SlaveConnectionConfigs = new List<SlaveConnectionConfig>() {
  11. new SlaveConnectionConfig(){
  12. HitRate =10,
  13. ConnectionString ="server=.;Database=SQLSugarDB_001;Uid=sa;Pwd=198;"
  14. },new SlaveConnectionConfig(){
  15. HitRate =10,
  16. ConnectionString ="server=.;Database=SQLSugarDB_002;Uid=sa;Pwd=198;"
  17. },new SlaveConnectionConfig(){
  18. HitRate =10,
  19. ConnectionString ="server=.;Database=SQLSugarDB_003;Uid=sa;Pwd=198;"
  20. }
  21. }
  22. });

 2、我们向主库中新增两条测试数据

  1. //向指定表添加一行数据
  2. db.Insertable<Test>(new Test()
  3. {
  4. UserId = "zhangsan",
  5. Name = "张三001",
  6. Phone = "123456",
  7. IsDeleted = false,
  8. CreateTime = DateTime.Now,
  9. CreateUserId = "000",
  10. DeleteTime = DateTime.Now,
  11. DeleteUserId = "",
  12. }).ExecuteCommand();
  13. db.Insertable<Test>(new Test()
  14. {
  15. UserId = "zhangsan",
  16. Name = "张三002",
  17. Phone = "123456",
  18. IsDeleted = false,
  19. CreateTime = DateTime.Now,
  20. CreateUserId = "000",
  21. DeleteTime = DateTime.Now,
  22. DeleteUserId = "",
  23. }).ExecuteCommand();

3、运行,然后去数据库查看,如下图,实现了主次同步写入

 4、其实现在已经实现了读写分离,上面写入已经确认了,怎么验证读取呢?

如下图,我去次数据库修改了他们的UserId值 

5、 我们循环几次读取test表并监听SQL语句和打印UserId值,代码如下

  1. using SqlSugar;
  2. //实例化数据库链接
  3. var db = new SqlSugarClient(new ConnectionConfig()
  4. {
  5. ConnectionString = "server=.;Database=TESTDB;Uid=sa;Pwd=198;",//数据库链接字符串
  6. DbType = DbType.SqlServer,//指定数据库类型
  7. IsAutoCloseConnection = true,//链接使用完后是否自动释放
  8. InitKeyType = InitKeyType.Attribute,//从实体特性中读取主键自增列信息
  9. //从库链接
  10. SlaveConnectionConfigs = new List<SlaveConnectionConfig>() {
  11. new SlaveConnectionConfig(){
  12. HitRate =10,
  13. ConnectionString ="server=.;Database=SQLSugarDB_001;Uid=sa;Pwd=198;"
  14. },new SlaveConnectionConfig(){
  15. HitRate =10,
  16. ConnectionString ="server=.;Database=SQLSugarDB_002;Uid=sa;Pwd=198;"
  17. },new SlaveConnectionConfig(){
  18. HitRate =10,
  19. ConnectionString ="server=.;Database=SQLSugarDB_003;Uid=sa;Pwd=198;"
  20. }
  21. }
  22. });
  23. //监听SQL语句
  24. db.Aop.OnLogExecuting = (sql, pra) =>
  25. {
  26. Console.WriteLine($"-------------------------------------------------------------");
  27. Console.WriteLine($"sql语句:{sql}");
  28. };
  29. //获取首行数据
  30. for (int i = 0; i < 5; i++)
  31. {
  32. Test t = db.Queryable<Test>().First();
  33. Console.WriteLine("----------------------------------------------------------------");
  34. Console.WriteLine(t.UserId);
  35. }

结果如下图,可知语句都是从test获取,但实际都是从库中读取,验证成功,读写分离实现

五、同步过程中会存在延迟,导致写入数据可能短时间内(通常就1s或不到1s)无法从次库读取到最新数据,可以添加以下代码,从主库读取

  1. //设置查询可以通过主库查询
  2. db.Ado.IsDisableMasterSlaveSeparation = true;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/950656
推荐阅读
相关标签
  

闽ICP备14008679号