.NET/C#大型项目研发必备(4)--数据库的读写分离

.NET/C#大型项目研发必备(3)--数据库的负载均衡 本文技术点思路梳理: 创建用来实施负载均衡的一组数据库。 通过DeveloperSharp.xml来配置负载均衡策略。 在App.config/Web.config中添加链接DeveloperSharp.xml的appSettings节点。 创建基于DeveloperSharp.dll组件的“负载均衡器”类(本篇为:StudentLB类)。 通过“负载均衡器”产生的ConnectionString链接数据库。 为了演示数据库的负载均衡(Load Balance),我们先创建三个数据库,它们的名字分别为Y 阅读详情

前言:本系列文章适合有初/中级.NET知识的同学阅读。
(1)本系列文章,旨在讲述研发一个中大型项目所需要了解的一系列“基本构件”,并提供这些“基本构件”的【最简单】、【最快速】使用方法!!(并不深究技术原理)
(2)通过阅读本系列文章,能让你在正规“项目研发”方面快速入门+进阶,并能达成“小团队构建大网站”的目的。
(3)本系列文章采用的技术,已成功应用到人工智能、产业互联网、社区电商、游戏、金融风控、智慧医疗、等项目上。

本文讲述的数据库读写分离的实现方式,是基于前述“数据库的负载均衡”这篇文章的内容发展而来,请先对其阅读参考。

在某些大型应用系统中,往往需要把数据库的“读操作”与“写操作”分为两个数据库(甚至两组数据库)分开操作,以达到读写分离的目的。
要实现数据库的读写分离,只需在前述“数据库的负载均衡“这篇文章的内容上做两点修改即可实现:
一是在DeveloperSharp.json/xml配置文件中设置两个DatabaseCluster节点分别对应“读数据库”与“写数据库”。
二是建立两个“负载均衡器”类分别对应“读的DatabaseCluster节点”与“写的DatabaseCluster节点”。

举例如下,我们在数据库服务器中创建一个BaseRead数据库专门用作读操作,然后再创建一个BaseWrite数据库专门用作写操作。随后,我们的DeveloperSharp.json/xml配置文件则做相应修改。

若是在.Net Core环境下,DeveloperSharp.json修改如下:

{
  "DeveloperSharp":
  {
     "DatabaseClusterList":
     [
        {
           "Id":"BRead",
           "DatabaseCluster":
           [
                 {
                     "Id":"A1",
                     "Enable":"true",
                     "Weight":"100",
                     "DatabaseType":"SqlServer",
                     "ConnectionString":"Server=localhost;Database=BaseRead;Uid=sa;Pwd=123"
                 }
           ]
        },
        {
           "Id":"BWrite",
           "DatabaseCluster":
           [
                 {
                     "Id":"B1",
                     "Enable":"true",
                     "Weight":"100",
                     "DatabaseType":"SqlServer",
                     "ConnectionString":"Server=localhost;Database=BaseWrite;Uid=sa;Pwd=123"
                 }
           ]
        }
     ]
  }
}

若是在.Net Framework环境下,DeveloperSharp.xml修改如下:

<?xml version="1.0" encoding="utf-8" ?>
<DeveloperSharp>
    <DatabaseClusterList>
        <DatabaseCluster Id="BRead">
            <Database Id="A1" Enable="true" Weight="100" DatabaseType="SqlServer" ConnectionString="Server=localhost;Database=BaseRead;Uid=sa;Pwd=123"/>
        </DatabaseCluster>
        <DatabaseCluster Id="BWrite">
            <Database Id="B1" Enable="true" Weight="100" DatabaseType="SqlServer" ConnectionString="Server=localhost;Database=BaseWrite;Uid=sa;Pwd=123"/>
        </DatabaseCluster>
    </DatabaseClusterList> 
</DeveloperSharp>

注意,其中两个DatabaseCluster节点的Id属性值分别为BRead与BWrite。

接着,我们再创建两个“负载均衡器”类(Base4Read与Base4Write)分别对应BRead与BWrite。如下所示:

    [DeveloperSharp.Structure.Model.LoadBalance.DataSourceCluster("BRead")]
    public class Base4Read : DeveloperSharp.Structure.Model.DataLayer
    {
        //类中没有任何代码
    }

    [DeveloperSharp.Structure.Model.LoadBalance.DataSourceCluster("BWrite")]
    public class Base4Write : DeveloperSharp.Structure.Model.DataLayer
    {
        //类中没有任何代码
    }

此后,我们只需在相关程序代码中区分使用Base4Read与Base4Write这两个类,即可灵活实现数据库的读写分离。

推荐阅读


如果文章对你有帮助,请点赞、收藏、关注(原创内容,欢迎转载,转载请注明出处)
出处:https://developersharp.blog.csdn.net/
【技术支持+获取更多宝贵资源,点击下方名片,备注“进群”】

如何在C#中实现读写分离功能 C#中实现分离功能通常指的是将不同的逻辑或责任分配到不同的类或组件中,以增强代码的可读性、可维护性和可扩展性。利用现有的库和框架(如ASP.NET Core、Entity Framework等)可以帮助你更快地实现分离功能,因为它们已经为你处理了很多底层的细节。将不同的关注点(如UI逻辑、业务逻辑、数据访问逻辑等)分离到不同的类或组件中。在实际的项目中,你可能会结合使用上述多种方法来实现代码的分离和模块化。记住,良好的分离和模块化是提高代码质量和可维护性的关键。// 内存中的数据访问逻辑。 阅读详情

相关推荐

.NET集成DeveloperSharp实现数据库操作

int affectedRows2 = IDA.SqlExecute("insert into t_Student(Name,Age)values(@N,@A)", new { N = "孙悟空", A = 200 });IDA.SpExecute("Test5", new { N = "杨小伟", B = "1999-02-28 12:03:45", h = 11.023, Id = 2 }, op1, op2, op3);

.Net技术、软件架构、人工智能、数字化转型、DeveloperSharp、微服务、工业互联网、智能制造 1706

EntityFramework Core进行读写分离最佳实践方式,了解一下(一)?

前言 本来打算写ASP.NET Core MVC基础系列内容,看到有园友提出如何实现读写分离,这个问题提的好,大多数情况下,对于园友在评论中提出的问题,如果是值得深究或者大多数同行比较关注的问题我都会私下去看看,然后进行对应解答,若有叙述不当之处,还请海涵。我们稍微过一下事务,本文略长,请耐心阅读。 事务 什么是事务呢?有关事务详解可参看我写的SQL Server基础系列,我们可归结为一句话...

weixin_33670713的博客 743

.NET Core实现分表分库、读写分离的通用 Repository功能

首先声明这篇文章不是标题党,我说的这个类库是 FreeSql.Repository,它作为扩展库现实了通用仓储层功能,接口规范参考 abp vnext 定义,实现了基础的仓储层(CURD)。 安装 dotnet add package FreeSql.Repository 可用于:.net framework 4.6+、.net core 2.1+ 定义 var fsql = new FreeSql.FreeSqlBuilder() .UseConnectionString(FreeSql.DataType.Sqlite, @Data Source=|DataDirectory|\d

c#mysql+读取_C#简单构架之EF进行读写分离+多数据库(Mysql/SqlService)

最近因为项目需要,研究了下EF的读写分离,所以做了一个demo进行测试,下面是项目的结构表现层view主要提供Web、WebApi等表现层的解决方案公共层public主要提供项目公共类库,数据缓存基础方法等实体层model主要提供数据库映射模型,还有就是DDD领域操作模型数据层Db主要封装EF操作基础类数据服务层Service主要提供数据库操作服务、缓存操作服务数据接口服务层inface主要提供数...

weixin_39604276的博客 327

.NET/C#大型项目研发必备(11)--使用Redis缓存

Redis作为一款主流的缓存工具在业内已广受欢迎。本文将会介绍操作Redis的一种最简单的方法步骤。 本文假定你身边已有安装好的Redis应用,该应用的网络地址为(ip+port):132.294.52.135:6379,访问密码为:Admin123

首席架构师 ◆ 顶尖领航员 ◆ 研发金字塔 ◆ 互联网基础架构 2149

.NET/C#大型项目研发必备(2)--跨域访问

CORS跨域访问问题往往出现在“浏览器客户端”通过ajax调用“服务端API”的时候。而且若是深究原理,还会发现跨域问题其实还分为【简单跨域】与【复杂跨域】这两种情况。 网上对解决跨域限制有很多说明文章,但绝大多数要么解决的不完善(比如,没有区分【简单跨域】与【复杂跨域】),要么就是解决方案过于复杂化,代码量巨大。 本文提供一种极度简单且十分完善的跨域访问限制解决方案,只需一行代码。即在服务端开发工程中添加Global.asax文件,并让类继承自DeveloperSharp.Structure.Base.G

首席架构师 ◆ 顶尖领航员 ◆ 研发金字塔 ◆ 互联网基础架构 825

.NET/C#大型项目研发必备(1)--分布式唯一Id

UUID全球通用唯一识别码,顾名思义,是指在全世界任何一台计算机上都不会重复的唯一Id。 在单机/单服务器/单数据库的小型应用中,不需要用到这类东西。但在高并发、海量数据、大型分布式应用中,UUID/GUID这类却是构建整个系统的最核心一环。 设想一下如下场景: 在某个大型电商系统A中,“订单”这类大数据(比如,每天产生1500万条订单)必定不会存储在1台数据库服务器中,而是分布式的存储在多台数据库服务器组成的一个集群中(比如,1000台数据库服务器组成一个集群)。由于海量数据+高并发等特性时常会伴随“订单

首席架构师 ◆ 顶尖领航员 ◆ 研发金字塔 ◆ 互联网基础架构 1960

C#.NET期末必备复习资料

文章目录.NET Framework概述1、.NET 框架什么是.NET框架?.NET框架核心2、框架类库3、CLR4、名称空间面向对象1、面向对象三大特性2、类和对象3、访问修饰符4、静态方法与实例方法区别5、重载6、构造函数7、枚举8、结构体9、类和结构的异同点10、继承11、base关键字12、接口13、抽象类14、密封类15、虚方法和抽象方法的异同点16、接口与抽象类的异同点17、out 和 ref关键字18、值类型与引用类型细分集合与泛型1、常见集合类2、ArrayList2、HashTable3

weixin_44736475的博客 7679

.NET/C#大型项目研发必备(13)--DataAccess数据库访问技术()

常见的ORM技术(比如:Entity Framework,Dapper,SqlSugar,NHibernate,等…),它们不是在做Sql语句的程序化变种,就是在做Sql语句的面向对象化。缺点显而易见:把简单的Sql语句复杂化、不伦不类、非标的各家自定义语法、难以大规模统一应用… 而ADO.NET也存在操作复杂、不同类型数据库SqlServer、MySql、Oracle、等)操作代码需要重构等缺点。 本文要介绍的主角-DeveloperSharp框架中的ORM数据库访问技术(),则巧妙的规避了上述各种

首席架构师 ◆ 顶尖领航员 ◆ 研发金字塔 ◆ 互联网基础架构 1607

.NET/C#大型项目研发必备(7)--DataAccess数据库访问技术

常见的ORM技术(比如:Entity Framework,Dapper,SqlSugar,NHibernate,等…),它们不是在做Sql语句的程序化变种,就是在做Sql语句的面向对象化。缺点显而易见:把简单的Sql语句复杂化、不伦不类、不符合标准的各家自定义语法格式、无统一标准难以大规模推广应用… 而ADO.NET也存在操作复杂、不同类型数据库SqlServer、MySql、Oracle、等)操作代码需要重构等缺点。 本文要介绍的主角DeveloperSharp框架中的ORM数据库访问技术,则巧妙的规

首席架构师 ◆ 顶尖领航员 ◆ 研发金字塔 ◆ 互联网基础架构 1787

4.1k Star!全面的C#/.NET/.NET Core学习、工作、面试指南

现如今网上关于 Java、前端、Android、Golang...等相关技术的学习资料、工作心得、面试指南一搜都是一大把,但是咱们 C#/.NET 的相关学习资料、工作心得、面试指南都是寥寥无几。我在微信群和知乎里面经常会看到这样的提问:有没有好的 C#/.NET 相关的学习书籍、视频教程、项目框架和常见面试题推荐的?。并不是没有人写,而是因为网上的资料和文章太零散了,缺少一个这方面汇总的知识库。

专注于C#/.NET/.NET Core学习、工作、面试干货和实战教程分享。这里聚焦了大量的C#/.NET/.NET Core优质文章、开源项目、实用工具和学习、工作、面试心得。 2001

.NET/C#大型项目研发必备(8)--高效分页

数据分页,几乎是任何应用系统的必备功能。但当数据量较大时,分页操作的效率就会变得很低。大数据量分页时,一个操作耗时5秒、10秒、甚至更长时间都是有可能的,但这在用户使用的角度是不可接受的…… 数据分页往往有三种常用方案。 第一种,把数据库中存放的相关数据,全部读入代码/内存,再由代码对其进行分页操作。 第二种,直接在数据库中对相关数据进行分页操作,再把分页后的数据输出给代码程序。 第三种,先把数据库中的相关数据全

首席架构师 ◆ 顶尖领航员 ◆ 研发金字塔 ◆ 互联网基础架构 1212

2021-05-17 C#.NET面试题 说说你对数据库读写分离的理解

说说你对数据库读写分离的理解 读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。 为什么要分库、分表、读写分? 单表的数据量限制,当单表数据量到一定条数之后数据库性能会显著下降。数据多了之后,对数据库的读、写就会很多。分库减少单台数据库的压力。接触过几个分库分表的系统,都是通过主键进行散列分裤分表的。这类数据比较特殊,主键就是唯一的获取该条信息的主要途径。比如

微软MVP Eleven 7万+

sqlserver-实现读写分离,主从复制的具体步骤

文章目录 sqlserver实现读写分离,主从复制的具体步骤 读写分离概述 读写分离的好处 适用读写分离场景 读写分离实现方式 主从复制 SQLserver读写分离方案对比 具体步骤 发布订阅的方式 sqlserver实现读写分离,主从复制的具体步骤 前期是简单的介绍,内容来源于其他作者的文章。后期更新具体步骤,一定特别的详细。 读写分离概述 读写...

cxu123321的博客 6338

C#.NET 权限管理系统组件 - 大数据读写分离实现的例子

   当web服务器的每天的访问量超过10万ip时对服务器主机的性能要求就非常高了,而且这些访问量又不是平均分布在24个小时里,往往有一个集中的访问高峰,晚上服务器的访问量又很低甚至是深夜连续好几个小时没访问量!    例如我们平时维护的网站的日平均访问量是30万ip、访问高峰时并发的用户量非常大,数据库主机的压力非常大,虽然我们采取了分库措施,但是有些大表、核心业务表的访问压力又非常大,例如有...

weixin_34396103的博客 279

读写分离

一、读写分离 1、什么是读写分离? 读写分离,基本的原理是让主数据库处理事务性增、改、删操作( INSERT、UPDATE、 DELETE) ,而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。 2、为什么要读写分离呢? 因为数据库的“写”(写10000条数据可能要3分钟)操作是比较耗时的。 但是数据库的“读”(读10000条数据可能只要5秒钟) 所以读写分离,解决的是,数据库的写入,影响了查询的效率。 3、什么时候要读写分离? 数据库不一定要读写

weixin_48872590的博客 9407

C# .NetCore了解读写分离

Vue_Elenent 表格相同数据列进行合并 作者:秋名 优点:使用多个数据库,主库(主负责写入数据),从库(负责每个后台的请求查询)可减少多用户请求同一个数据库的数据请求。 缺点:数据延迟 撰写时间:2020 年 11 月 29 日 文档:1.了解读写分离 链接:http://note.youdao.com/noteshare?id=0209151236904319c4c64a6cf7d30f6f&sub=9161099803EC42D5A13FFA5671B02C4C ...

Q_MingTao 805

树莓派无头安装与PyCharm远程开发配置全攻略

嵌入式开发与物联网项目中,远程设备管理和开发是核心技能。其原理是通过网络协议(如SSH)实现对无显示设备的控制,技术价值在于摆脱物理外设依赖,提升开发效率与部署灵活性。应用场景广泛覆盖智能家居、边缘计算、自动化运维等领域。本文聚焦于树莓派这一热门嵌入式平台,详细讲解如何为Raspberry Pi OS Lite系统进行无头安装,并配置Wi-Fi网络,最终实现通过PyCharm的SSH远程解释器功能进行无缝的远程Python开发与调试,涵盖从镜像写入、网络配置到开发环境集成的完整工作流。

weixin_30572613的博客 563
上一篇: .NET/C#大型项目研发必备(3)--数据库的负载均衡
下一篇: .NET/C#大型项目研发必备(5)--Web服务/WebApi的负载均衡
DeveloperSharp
博客等级 码龄7年 38粉丝 · 14原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值