CYQ.Data V5 數據庫讀寫分離功能介紹


前言

好多年沒寫關於此框架的新功能的介紹了,這些年一直在默默地更新,從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使用的消息,喜歡就贊一個!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM