SqlSugar学习笔记二——分库查询

本文介绍了数据库读写分离的配置,包括主从库的设置和CRUD操作。通过示例展示了如何在SqlSugar中进行读写分离,并进行了延迟测试。当插入数据后,通过查询发现可能存在数据同步延迟。为解决这一问题,提出了在插入后强制使用主库查询的方法,确保数据实时性。
摘要由CSDN通过智能技术生成

一、读写分离

  • 配置数据库链接

    注意:这里主从库需要在数据库中进行配置,使从库始终同步主库中的数据,保持数据一致性

//准备从库链接
var connetctionlist = new List<SlaveConnectionConfig>()
{
    //第一个从库
    new SlaveConnectionConfig(){
        HitRate=10,
        ConnectionString="Data Source=DESKTOP-T2D6ILD;Initial Catalog=SqlSugarCustomerDB_001;User ID=sa;Password=sa123"
    },
    //第二个从库
    new SlaveConnectionConfig(){
        HitRate=10,
        ConnectionString="Data Source=DESKTOP-T2D6ILD;Initial Catalog=SqlSugarCustomerDB_002;User ID=sa;Password=sa123"
    }
};

//配置数据库链接
ConnectionConfig connectionConfig1 = new ConnectionConfig()
{
    DbType = DbType.SqlServer,
    ConnectionString = "Data Source=DESKTOP-T2D6ILD;Initial Catalog=SqlSugarCustomerDB;User ID=sa;Password=sa123",
    InitKeyType = InitKeyType.Attribute,
    //IsAutoCloseConnection = true,
    //从库配置添加到数据库链接中
    SlaveConnectionConfigs = connetctionlist
};
  • 执行CRUD
using (SqlSugarClient sqlSugarClient = new SqlSugarClient(connectionConfig1))
{
    sqlSugarClient.Aop.OnLogExecuting = (sql, par) =>
    {
        Console.WriteLine($"sql语句:{sql}");
    };

    //准备实体对象实例
    var addmodel = new Commodity()
    {
        CategoryId = 123,
        ImageUrl = "ImageUrl",
        Price = 34567,
        ProductId = 2345,
        Title = "测试数据",
        Url = "Url"
    };
    //通过哪一个库进行CRUD,由SqlSugar内部实现,不需要我们进行额外关注,只需要配置好

    //增加
    sqlSugarClient.Insertable<Commodity>(addmodel).ExecuteCommand();
    //查询
    Commodity commodity = sqlSugarClient.Queryable<Commodity>().OrderBy(c => c.Id, OrderByType.Desc).First(); ;
    //修改
    commodity.ImageUrl += DateTime.Now.ToShortDateString();
    sqlSugarClient.Updateable<Commodity>(commodity).ExecuteCommand();
    //删除 
    sqlSugarClient.Deleteable<Commodity>(commodity).ExecuteCommand();
}
  • 判断查询来之哪一个库
    1. 执行插入语句后,主从库都会增加一条相同数据
    2. 在从库中修改Title字段值,使之分别与主库和其他从库的值不同
    3. 注意:修改从库的值,主库和其他从库值不会随之同步改变
    4. 执行查询修改的Title字段值
using (SqlSugarClient sqlSugarClient = new SqlSugarClient(connectionConfig1))
{
    // 测试查询的时候,数据究竟是来自于哪个数据库如何判断呢?
    while (true)
    {
        Commodity commodity = sqlSugarClient.Queryable<Commodity>().First();
        if (commodity != null)
        {
            Console.WriteLine("*********************************************");
            Console.WriteLine(commodity.Title);
        }
        Thread.Sleep(300);
    }
}

二、读写分离延迟测试

//准备实体实例
var addmodel = new Commodity()
{
    CategoryId = 123,
    ImageUrl = "ImageUrl",
    Price = 34567,
    ProductId = 2345,
    Title = "延迟测试",
    Url = "Url"
};
using (SqlSugarClient sqlSugarClient = new SqlSugarClient(connectionConfig1))
{
    //新增
    sqlSugarClient.Insertable<Commodity>(addmodel).ExecuteCommand();

    //创建一个计时器对象,计算延迟
    Stopwatch stopwatch = new Stopwatch();
    //开始计时
    stopwatch.Start();

    //主要是针对于及时性要求比较高的,在插入后直接基于主库去查询
    //sqlSugarClient.Ado.IsDisableMasterSlaveSeparation = true; 

    //循环查找,一直到找到就停止
    while (true)
    {
        var commodityList = sqlSugarClient.Queryable<Commodity>().Where(c => c.Title.Equals("延迟测试"));
        if (commodityList != null && commodityList.Count() > 0)
        {
            Console.WriteLine("*********************************************");
            Console.WriteLine($"已经找到数据:{commodityList.First().Title}");
            stopwatch.Stop();//停止计时
            Console.WriteLine($"同步延迟时间:{stopwatch.ElapsedMilliseconds}");//输出同步延迟时间
            break;
        }
        else
        {
            Console.WriteLine($"Sorry,尚且没有找到数据");
            Thread.Sleep(10);
        }

    }
}

三、延迟解决办法

最简单的办法,就是在执行插入后,强制指定走主库进行查询

//主要是针对于及时性要求比较高的,在插入后直接基于主库去查询
   sqlSugarClient.Ado.IsDisableMasterSlaveSeparation = true;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
cda备考学习学习笔记——基础知识篇()主要涉及了计算机科学与技术领域的基本概念和知识。 首先,它介绍了计算机网络的基础知识。网络是将多台计算机通过通信链路连接起来,使它们能够相互通信和共享资源的系统。笔记中详细介绍了网络的组成、拓扑结构和通信协议等重要内容。 其次,笔记还解释了计算机系统的基本组成。计算机系统由硬件和软件两部分组成,其中硬件包括中央处理器、存储器、输入输出设备等,而软件则分为系统软件和应用软件。笔记详细介绍了各种硬件和软件的功能和作用。 此外,笔记还对数据库管理系统进行了介绍。数据库管理系统是一种用于管理和组织数据的软件系统,它能够实现数据的存储、检索和更新等操作。笔记中详细介绍了数据库的概念、结构和操作等内容。 最后,笔记还包括了算法和数据结构的基础知识。算法是解决问题的一系列步骤和规则,而数据结构则是组织和存储数据的方式。笔记中介绍了常用的算法和数据结构,如排序算法、树和图等。 总之,通过学习CDA备考学习笔记中的基础知识篇(),我们能够更好地理解计算机网络、计算机系统、数据库管理系统以及算法和数据结构等相关概念和知识。这些基础知识对于我们深入研究计算机科学与技术领域是非常重要的,也为我们日后的学习和工作奠定了坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值