本期配套视频

https://www.bilibili.com/video/BV1BJ411B7mn?p=6

(点击阅读原文,可看,如果没有,最晚下午可看)

继上周增加【任务调度】以后,继续对项目进行2.0版本升级,其实改动的地方并不多,主要的功能上,更丰富了,之前其实项目已经实现了多库的更新:

多库操作2:终于实现多个数据库操作

单单多库操作还不够完美,所以这几天就把读写分离给加上了,你可能会好奇,多库不就是读写分离么?主库和从库相互不影响的操作,满足xxxx的需求等等,其实不是的,至少在我这里两者不是一回事,下面我就简单的文字说一下,如果读不懂,或者不想读,可以直接看视频。

Github:相关代码目前在Is4分支。

1、多库操作与读写分离

单库模式就不说了,我们所有的项目都必须至少要支持这个,不然如何持久化?

多库操作,我理解的是,可以任意操作指定的任意数据库,只要允许访问,我们配置好连接字符串,并做一定的处理后,就可以CURD了,我这里可以简化称之为——C和Q,也就是命令和查询模式,命令就是指的写入、编辑、删除的操作。这里多个数据库是平等的,举个例子,我们可以在资源服务器Blog.Core中,来操作认证中心的role角色表,不仅可以读取,如果有必要,还可以修改,当然,这里业务上是不允许修改的。

读写分离,顾名思义,就是读(Q)和写(C)的动作是分开的,虽然也是多个数据库,虽然也是分主库和从库,但是读只能读取从库,写只能写在主库,这就是和普通的多库操作最大的也是最本质的不同之处。

简单解释过后,那我就说一下,Blog.Core项目中,如果实现单库模式、多库模式以及读写分离模式。

2、单库操作模式

这个很简单,当你第一次下载的时候,默认的就是单库模式:

MutiDBEnabled和CQRSEnabled都为false,所以如果你就只想连接一个数据库,那就把MainDB配置成下边对应的ConnId,然后把他对应Enabled设置为true就行了,其他的不用管,其他的就算设置为true,也不会影响。

举个例子,我只想配置一个SqlServer,连接字符串为xxxxxx:

  "MainDB": "WMBLOG_MSSQL_1", //当前项目的主库,所对应的连接字符串的Enabled必须为true"MutiDBEnabled": false, //是否开启多库模式"CQRSEnabled": false, //是否开启读写分离模式,必须是单库模式,且数据库类型一致,比如都是SqlServer"DBS": [{"ConnId": "WMBLOG_SQLITE","DBType": 2,"Enabled": false,"HitRate": 50, // 值越大,优先级越高"Connection": "WMBlog.db" //只写数据库名就行,我会拼接字符串},// ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓{"ConnId": "WMBLOG_MSSQL_1","DBType": 1,"Enabled": true,"HitRate": 40,"Connection": "xxxxxx","ProviderName": "System.Data.SqlClient"},// ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑{"ConnId": "WMBLOG_MSSQL_2","DBType": 1,"Enabled": true,"HitRate": 30,"Connection": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=WMBLOG_MSSQ","ProviderName": "System.Data.SqlClient"},{"ConnId": "WMBLOG_MYSQL","DBType": 0,"Enabled": false,"HitRate": 20,"Connection": "Server=localhost; Port=3306;Stmt=; Database=wmblogdb; Uid=root; Pwd=456;"},{"ConnId": "WMBLOG_ORACLE","DBType": 3,"Enabled": false,"HitRate": 10,"Connection": "Provider=OraOLEDB.Oracle; Data Source=WMBlogDB; User Id=sss; Password=789;","OracleConnection_other1": "User ID=sss;Password=789;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.8.65)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME = orcl)))"}],

就是这么简单,那下边简单说一下,如何配置多库。

3、多库操作模式

这个可能稍微麻烦一丢丢,我就直接写步骤了:

1、配置MainDB —— 主库Id;

2、配置MutiDBEnabled —— true,开启多库模式;

3、配置DBS —— 将需要用到的数据库节点,Enabled=true;

4、在指定的实体类上边增加特性,指定对应的从库的连接Id;

举例说明,我想配置一个多库操作,主库是Sqlite,从库是Sqlserver:

  "MainDB": "WMBLOG_SQLITE", //当前项目的主库,所对应的连接字符串的Enabled必须为true"MutiDBEnabled": true, //是否开启多库模式"CQRSEnabled": false, //是否开启读写分离模式,必须是单库模式,且数据库类型一致,比如都是SqlServer"DBS": [// ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓{"ConnId": "WMBLOG_SQLITE","DBType": 2,"Enabled": true,// 主库"HitRate": 50, // 值越大,优先级越高"Connection": "WMBlog.db" //只写数据库名就行,我会拼接字符串},{"ConnId": "WMBLOG_MSSQL_1","DBType": 1,"Enabled": true,// 从库"HitRate": 40,"Connection": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=WMBLOG_MSSQL_1;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False","ProviderName": "System.Data.SqlClient"},// ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑{"ConnId": "WMBLOG_MYSQL","DBType": 0,"Enabled": false,// 不开启"HitRate": 20,"Connection": "Server=localhost; Port=3306;Stmt=; Database=wmblogdb; Uid=root; Pwd=456;"},{"ConnId": "WMBLOG_ORACLE","DBType": 3,"Enabled": false,// 不开启"HitRate": 10,"Connection": "Provider=OraOLEDB.Oracle; Data Source=WMBlogDB; User Id=sss; Password=789;","OracleConnection_other1": "User ID=sss;Password=789;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.8.65)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME = orcl)))"}],

这样配置好后,我们的主库就是WMBLOG_SQLITE,一个从库是WMBLOG_MSSQL_1

然后配置下对应的实体类特性,指定这个表是从库的表:

然后我们可以看看,系统启动后,是怎么样的:

从启动日志上,我们可以看出来,已经实现了我们的目的。

4、读写分离模式

这个读写分离模式,其实和多库模式差不多,只不过更简单了:

1、配置MainDB —— 主库Id;

2、配置CQRSEnabled —— true,开启读写分离模式,必须是单库

3、配置DBS —— 将需要用到的数据库节点,Enabled=true;

举个例子,我想开启主库为WMBLOG_MSSQL_1,从库为WMBLOG_MSSQL_2:

  "MainDB": "WMBLOG_MSSQL_1", //当前项目的主库,所对应的连接字符串的Enabled必须为true"MutiDBEnabled": false, //是否开启多库模式"CQRSEnabled": true, //是否开启读写分离模式,必须是单库模式,且数据库类型一致,比如都是SqlServer"DBS": [{"ConnId": "WMBLOG_SQLITE","DBType": 2,"Enabled": false,"HitRate": 50, // 值越大,优先级越高"Connection": "WMBlog.db" //只写数据库名就行,我会拼接字符串},// ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓{"ConnId": "WMBLOG_MSSQL_1","DBType": 1,"Enabled": true,"HitRate": 40,"Connection": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=WMBLOG_MSSQL_1;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False","ProviderName": "System.Data.SqlClient"},{"ConnId": "WMBLOG_MSSQL_2","DBType": 1,"Enabled": true,"HitRate": 30,"Connection": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=WMBLOG_MSSQL_2;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False","ProviderName": "System.Data.SqlClient"},// ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑{"ConnId": "WMBLOG_MYSQL","DBType": 0,"Enabled": false,"HitRate": 20,"Connection": "Server=localhost; Port=3306;Stmt=; Database=wmblogdb; Uid=root; Pwd=456;"},{"ConnId": "WMBLOG_ORACLE","DBType": 3,"Enabled": false,"HitRate": 10,"Connection": "Provider=OraOLEDB.Oracle; Data Source=WMBlogDB; User Id=sss; Password=789;","OracleConnection_other1": "User ID=sss;Password=789;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.8.65)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME = orcl)))"}],

这里要注意一下:

1、开启读写分离模式的话,就必须要是单库模式,把MutiDBEnabled关掉,其实不关也行,只不过后期你可能会绕不过来,干脆禁掉。

2、不用再配置实体类了。

我们来看看系统启动日志:

目前是按照完美的设想进行的,那到底数据是不是成功呢,我们做下测试。

我们执行博客数据查询,总数是41条,这是读操作,走的是从库

然后,我们添加一条数据,这是写命令,走的是主库

可以看到,我们新建了一个Id是54的博客,但是我们能查询出来么?

答案是否定的,因为我们的查询是从库,这也就是证明了我们的读写分离已经生效了。

好啦,今天的内容暂时就写到这里吧,详细的说明和操作都在视频里,感兴趣的可以去看看。

【项目升级】单库、多库、读写分离 · 任你选相关推荐

  1. 瑞吉外卖项目学习笔记-P25-项目优化-读写分离

    P25-项目优化-读写分离 1. 读写分离问题说明 1.1单台数据库 1.2 多台数据库 2.MySQL主从复制(二进制日志) 2.1介绍 2.2配置 2.2.1配置-主库maser(CentOS 数 ...

  2. Django项目配置mysql主从数据库实现读写分离

    1.在配置文件中添加slave数据库的配置 DATABASES = {     'default': {         'ENGINE': 'django.db.backends.mysql',   ...

  3. 【MySQL】Spring Boot项目基于Sharding-JDBC和MySQL主从复制实现读写分离(8千字详细教程)

    目录 前言 一. 介绍 二. 主从复制 1. 原理 2. 克隆从机 3. 克隆从机大坑 4. 远程登陆 5. 主机配置 6. 从机配置 7. 主机:建立账户并授权 8. 从机:配置需要复制的主机 9. ...

  4. 手把手教你实现mysql读写分离+故障转移

    前言 上一篇发了手动搭建Redis集群和MySQL主从同步(非Docker)之后,很多同学对文中主从结构提到的读写分离感兴趣,本打算在双十一期间直接把读写分离分享给大家,奈何工作一直没停下,所以这周抽 ...

  5. 读写分离原来这么简单,一个小注解就够了

    目录 前言 环境部署 开始项目 目录结构 建表 主从数据源配置 设置路由 数据源的注解 aop切换数据源 最后 前言 相信有经验的同学都清楚,当db的读写量过高时,我们会备份一份或多份的从库用于做数据 ...

  6. 你还在代码里做读写分离么,试试这个中间件吧!

    传统的MySql读写分离方案是通过在代码中根据SQL语句的类型动态切换数据源来实现的,那么有没有什么中间件可以自动实现读写分离呢?小米开源的数据库中间件Gaea就可以实现,接下来我们将详细讲解如何使用 ...

  7. 数据库的“读写分离”

    有一些技术同学可能对于"读写分离"了解不多,认为数据库的负载问题都可以使用"读写分离"来解决. 这其实是一个非常大的误区,我们要用"读写分离" ...

  8. Spring - 数据库读写分离

    文章目录 Spring - 数据库读写分离 1.读写分离解决方案 1.1 应用层解决 1.2 中间件解决 2.Mysql主从配置 2.1 Mysql主从复制原理 2.2 Master主库配置 2.3 ...

  9. 什么是mysql的读写分离_什么是数据库读写分离?

    原文:https://baijiahao.baidu.com/s?id=1614304400276051465&wfr=spider&for=pc 想用数据库"读写分离&qu ...

最新文章

  1. python format 格式化函数的用法 格式化字符串(保留小数{:.2f}、数字补零)
  2. 淘宝网登陆时密码输不进去??
  3. 数据仓库--基本概念
  4. python大小写转换if_python代码实例大小写转换,首字母大写,去除特殊字符
  5. 求矩阵中各列数字的和 Exercise08_01
  6. 马化腾最崇拜的作家吴晓波《历代经济变革得失》读书笔记
  7. 使用sax解析xml
  8. 基于 HTML5 WebGL 的 3D 渲染引擎构建工厂运作系统
  9. 最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(C/C++)
  10. kotlin之高阶函数
  11. Matrix Cookbook 公式推导
  12. 爆料喽!!!开源日志库Logger的剖析分析
  13. 基于buck电路的小型永磁同步电机最大功率跟踪控制
  14. psftp 上传和下载
  15. 每月自评之一:2013年1月
  16. stm32 火灾自动报警及联动控制源码_火灾自动报警系统设计规范 :联动控制
  17. autojs获取手机背景图片,抓取壁纸
  18. 前端入门视频笔记 CSS3(一) P61-92
  19. this.$nextTick
  20. 关联规则与购物篮分析实战

热门文章

  1. tcp/ip ---数据封装过程
  2. Sharepoint学习笔记---如何在Sharepoint2010网站中整合Crystal Report水晶报表(显示数据 二)...
  3. 在Ubuntu服务器上打开第二个控制台会话
  4. 如何在Firefox 3中重新启用about:config警告消息
  5. 使用增量备份修复DG中的GAP
  6. 99. Recover Binary Search Tree
  7. Python_list部分功能介绍
  8. 使用xUnit为.net core程序进行单元测试(3)
  9. gitlab永久设置密码
  10. yum安装最新的 LNMP