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使用的消息,喜歡就贊一個!

相關文章
相關標籤/搜索