好多年沒寫關於此框架的新功能的介紹了,這些年一直在默默地更新,從Nuget上的記錄就能夠看出來:html
這幾天在看Java的一些東西,除了覺的Java和.NET的類似度實在過高以外,就是Java太原始,急需被拯救。數據庫
以後又回到.NET的思惟來,想着怎麼在框架裏實現讀寫分離控制請求切換。瀏覽器
以前幾個月一直都有在思考,想及對框架現有的代碼改動可能較大,因此遲遲沒怎麼下手。緩存
最近終於在廁所蹲下的一瞬間,靈光一閃,感受思緒來了,而後一氣呵成,就把它給做了。架構
A:MSSQL的複製訂閱;框架
B:MySql的Master-Slave配置ini。spa
C:Oracle自身組件或第三方軟件。插件
具體怎麼實現,請以讀寫分離爲關鍵字自行Google。線程
A:經過代碼控制連接的切換(經常使用)。orm
B:經過中間第三方插件實現(須要放棄治療:數據一致性)。
C:經過數據庫驅動實現(沒怎麼見着)。
因爲主從數據庫的同步時間差,必然產生數據一致性這個問題,因此一般仍是會回到業務代碼上控制。
在底層:DbCommand的三個方法中:
分配讀:ExecuteScalar和ExecuteReader
分配寫:ExecuteNonQuery
A:事務時:全分配到主數據庫
B:非事務時:同一個連接,只要產生寫主數據庫,後續讀仍掛在主數據庫(初步解決數據一致性問題)。
示例場景如:用戶寫完博客後(寫),跳轉到查看文章頁面(讀)。
很明顯,若是主從庫還沒來得及同步,你要提示用戶:緩存正在同步,請等待N秒後刷新看看?
A:這場景,不是同一個連接,倒是同一我的。
B:須要把同一我的產生寫主數據庫操做後,必須在N秒內的操做都仍掛在主數據庫。
A:SessionID。
B:Cookie
C:線程ID
至此,讀寫分離的相關功能就算完成了。
下面演示讀寫分寫在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使用的消息,喜歡就贊一個!