CYQ.Data V5 数据库读写分离功能介绍

前言

好多年没写关于此框架的新功能的介绍了,这些年一直在默默地更新,从Nuget上的记录就能够看出来:html

这几天在看Java的一些东西,除了觉的Java和.NET的类似度实在过高以外,就是Java太原始,急需被拯救。数据库

以后又回到.NET的思惟来,想着怎么在框架里实现读写分离控制请求切换。浏览器

以前几个月一直都有在思考,想及对框架现有的代码改动可能较大,因此迟迟没怎么下手。缓存

最近终于在厕所蹲下的一瞬间,灵光一闪,感受思绪来了,而后一气呵成,就把它给做了。架构

数据库读写分离的三步曲

1:实现主(读)从(写)同步的功能

A:MSSQL的复制订阅;框架

B:MySql的Master-Slave配置ini。spa

C:Oracle自身组件或第三方软件。插件

具体怎么实现,请以读写分离为关键字自行Google。线程

2:读写分离控制请求的3种方式

A:经过代码控制连接的切换(经常使用)。orm

B:经过中间第三方插件实现(须要放弃治疗:数据一致性)。

C:经过数据库驱动实现(没怎么见着)。

3:数据的一致性问题

因为主从数据库的同步时间差,必然产生数据一致性这个问题,因此一般仍是会回到业务代码上控制。

代码解决主(写)从(读)请求分配与数据一致性

1:读写请求的分配原则

在底层:DbCommand的三个方法中:

分配读:ExecuteScalar和ExecuteReader

分配写:ExecuteNonQuery

2:读写请求的追加原则:

A:事务时:全分配到主数据库

B:非事务时:同一个连接,只要产生写主数据库,后续读仍挂在主数据库(初步解决数据一致性问题)。

3:处理数据一致性问题:

示例场景如:用户写完博客后(写),跳转到查看文章页面(读)。

很明显,若是主从库还没来得及同步,你要提示用户:缓存正在同步,请等待N秒后刷新看看?

A:这场景,不是同一个连接,倒是同一我的。

B:须要把同一我的产生写主数据库操做后,必须在N秒内的操做都仍挂在主数据库。

因此,我用了三个方式来判断是否同一我的:

A:SessionID。

B:Cookie

C:线程ID

至此,读写分离的相关功能就算完成了。

CYQ.Data读写分离的使用演示

下面演示读写分写在ASP.NET Aries 框架上的使用示例:

1:从SVN下载ASP.NET Aries 开源框架的源码。

具体看:http://www.cnblogs.com/cyq1162/p/5487796.html

2:确保packages下的CYQ.Data 版本为V5.6以上,若是版本不够新,上Nuget搜cyqdata更新。

3:在数据库中创建好主从库订阅复制功能(MSSQL),演示就在同一台电脑了,Copy的为从(读)数据库。

4:Web.config中添加一条数据库连接

PS说明:

若是主数据库name是XXXX,那么从库的配置为:XXXX_Slave一、XXXX_Slave二、XXXX_Slave3.....XXXX_SlaveN

搞定收功,使用就是这么简单,只要配数据库连接,就一切就OK了。

界面运行后截图

1:Chorme浏览器,登录后编辑用户信息(此时操做的主数据库):

2:保存后跳转到列表页面:此时仍是操做的主数据库:

3:在FireFox浏览器里当即刷新查看:读的是从数据库,此时主从还没同步好,因此仍是旧数据。

隐藏技能:

经过配置XXXX_Bak,当主数据库挂了时,会自动切换到备份数据库。

因而架构就变成1主+1备+N从的方式。

总结

用了此框架,你会发现1行业务代码都无须要改,只需config文件配上N个从数据的连接,数据库读写分离这种传说中的东西,立刻就属于你了。

不要问我这几年为啥这么低调没怎么推广此框架,只是看淡了,不争,最好用的框架只属于少数的有缘人。

补充一条好消息:框架从V5.5.6.1版本开始,MSSQL数据库能够无偿使用,再也不须要受权。

对于免费开放MSSQL使用的消息,喜欢就赞一个!

相关文章
相关标签/搜索