前言
好多年没写关于此框架的新功能的介绍了,这些年一直在默默地更新,从Nuget上的记录就可以看出来:
这几天在看Java的一些东西,除了觉的Java和.NET的相似度实在太高之外,就是Java太原始,急需被拯救。
之后又回到.NET的思维来,想着怎么在框架里实现读写分离控制请求切换。
之前几个月一直都有在思考,想及对框架现有的代码改动可能较大,所以迟迟没怎么下手。
最近终于在厕所蹲下的一瞬间,灵光一闪,感觉思绪来了,然后一鼓作气,就把它给作了。
数据库读写分离的三步曲
1:实现主(读)从(写)同步的功能
A:MSSQL的复制订阅;
B:MySql的Master-Slave配置ini。
C:Oracle自身组件或第三方软件。
具体怎么实现,请以读写分离为关键字自行Google。
2:读写分离控制请求的3种方式
A:通过代码控制链接的切换(常用)。
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_Slave1、XXXX_Slave2、XXXX_Slave3.....XXXX_SlaveN
搞定收功,使用就是这么简单,只要配数据库链接,就一切就OK了。
界面运行后截图
1:Chorme浏览器,登陆后编辑用户信息(此时操作的主数据库):
2:保存后跳转到列表页面:此时还是操作的主数据库:
3:在FireFox浏览器里立即刷新查看:读的是从数据库,此时主从还没同步好,所以还是旧数据。
隐藏技能:
通过配置XXXX_Bak,当主数据库挂了时,会自动切换到备份数据库。
于是架构就变成1主+1备+N从的方式。
总结
用了此框架,你会发现1行业务代码都无需要改,只需config文件配上N个从数据的链接,数据库读写分离这种传说中的东西,马上就属于你了。
不要问我这几年为啥这么低调没怎么推广此框架,只是看淡了,不争,最好用的框架只属于少数的有缘人。
补充一条好消息:框架从V5.5.6.1版本开始,MSSQL数据库可以免费使用,不再需要授权。
对于免费开放MSSQL使用的消息,喜欢就赞一个!
版权声明:本文原创发表于 博客园,作者为 路过秋天 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。 |
个人微信公众号![]() |
Donation(扫码支持作者):支付宝:![]() |
Donation(扫码支持作者):微信:![]() |
![]() |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
2011-06-27 CYQ.Data 数据框架 V3.0 版本 开放源码下载有[CYQ.Blog(秋色园QBlog) 完全开放所有源码]