【项目升级】单库、多库、读写分离 · 任你选
本期配套視頻:
https://www.bilibili.com/video/BV1BJ411B7mn?p=6
(點擊閱讀原文,可看,如果沒有,最晚下午可看)
繼上周增加【任務調度】以后,繼續對項目進行2.0版本升級,其實改動的地方并不多,主要的功能上,更豐富了,之前其實項目已經實現了多庫的更新:
多庫操作2:終于實現多個數據庫操作
單單多庫操作還不夠完美,所以這幾天就把讀寫分離給加上了,你可能會好奇,多庫不就是讀寫分離么?主庫和從庫相互不影響的操作,滿足xxxx的需求等等,其實不是的,至少在我這里兩者不是一回事,下面我就簡單的文字說一下,如果讀不懂,或者不想讀,可以直接看視頻。
Github:相關代碼目前在Is4分支。
1、多庫操作與讀寫分離
單庫模式就不說了,我們所有的項目都必須至少要支持這個,不然如何持久化?
多庫操作,我理解的是,可以任意操作指定的任意數據庫,只要允許訪問,我們配置好連接字符串,并做一定的處理后,就可以CURD了,我這里可以簡化稱之為——C和Q,也就是命令和查詢模式,命令就是指的寫入、編輯、刪除的操作。這里多個數據庫是平等的,舉個例子,我們可以在資源服務器Blog.Core中,來操作認證中心的role角色表,不僅可以讀取,如果有必要,還可以修改,當然,這里業務上是不允許修改的。
讀寫分離,顧名思義,就是讀(Q)和寫(C)的動作是分開的,雖然也是多個數據庫,雖然也是分主庫和從庫,但是讀只能讀取從庫,寫只能寫在主庫,這就是和普通的多庫操作最大的也是最本質的不同之處。
簡單解釋過后,那我就說一下,Blog.Core項目中,如果實現單庫模式、多庫模式以及讀寫分離模式。
2、單庫操作模式
這個很簡單,當你第一次下載的時候,默認的就是單庫模式:
MutiDBEnabled和CQRSEnabled都為false,所以如果你就只想連接一個數據庫,那就把MainDB配置成下邊對應的ConnId,然后把他對應Enabled設置為true就行了,其他的不用管,其他的就算設置為true,也不會影響。
舉個例子,我只想配置一個SqlServer,連接字符串為xxxxxx:
"MainDB": "WMBLOG_MSSQL_1", //當前項目的主庫,所對應的連接字符串的Enabled必須為true"MutiDBEnabled": false, //是否開啟多庫模式"CQRSEnabled": false, //是否開啟讀寫分離模式,必須是單庫模式,且數據庫類型一致,比如都是SqlServer"DBS":?[{"ConnId": "WMBLOG_SQLITE","DBType": 2,"Enabled":?false,"HitRate": 50, // 值越大,優先級越高"Connection": "WMBlog.db" //只寫數據庫名就行,我會拼接字符串},// ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓{"ConnId": "WMBLOG_MSSQL_1","DBType": 1,"Enabled": true,"HitRate": 40,"Connection": "xxxxxx","ProviderName": "System.Data.SqlClient"},//?↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑{"ConnId": "WMBLOG_MSSQL_2","DBType": 1,"Enabled": true,"HitRate": 30,"Connection": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=WMBLOG_MSSQ","ProviderName": "System.Data.SqlClient"},{"ConnId": "WMBLOG_MYSQL","DBType": 0,"Enabled": false,"HitRate": 20,"Connection": "Server=localhost; Port=3306;Stmt=; Database=wmblogdb; Uid=root; Pwd=456;"},{"ConnId": "WMBLOG_ORACLE","DBType": 3,"Enabled": false,"HitRate": 10,"Connection": "Provider=OraOLEDB.Oracle; Data Source=WMBlogDB; User Id=sss; Password=789;","OracleConnection_other1": "User ID=sss;Password=789;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.8.65)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME = orcl)))"}],就是這么簡單,那下邊簡單說一下,如何配置多庫。
3、多庫操作模式
這個可能稍微麻煩一丟丟,我就直接寫步驟了:
1、配置MainDB —— 主庫Id;
2、配置MutiDBEnabled —— true,開啟多庫模式;
3、配置DBS —— 將需要用到的數據庫節點,Enabled=true;
4、在指定的實體類上邊增加特性,指定對應的從庫的連接Id;
舉例說明,我想配置一個多庫操作,主庫是Sqlite,從庫是Sqlserver:
"MainDB": "WMBLOG_SQLITE", //當前項目的主庫,所對應的連接字符串的Enabled必須為true"MutiDBEnabled":?true,?//是否開啟多庫模式"CQRSEnabled": false, //是否開啟讀寫分離模式,必須是單庫模式,且數據庫類型一致,比如都是SqlServer"DBS":?[// ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓{"ConnId": "WMBLOG_SQLITE","DBType": 2,"Enabled": true,// 主庫"HitRate": 50, // 值越大,優先級越高"Connection": "WMBlog.db" //只寫數據庫名就行,我會拼接字符串},{"ConnId": "WMBLOG_MSSQL_1","DBType": 1,"Enabled": true,// 從庫"HitRate": 40,"Connection": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=WMBLOG_MSSQL_1;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False","ProviderName": "System.Data.SqlClient"},// ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑{"ConnId": "WMBLOG_MYSQL","DBType": 0,"Enabled": false,// 不開啟"HitRate": 20,"Connection": "Server=localhost; Port=3306;Stmt=; Database=wmblogdb; Uid=root; Pwd=456;"},{"ConnId": "WMBLOG_ORACLE","DBType": 3,"Enabled":?false,//?不開啟"HitRate": 10,"Connection": "Provider=OraOLEDB.Oracle; Data Source=WMBlogDB; User Id=sss; Password=789;","OracleConnection_other1": "User ID=sss;Password=789;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.8.65)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME = orcl)))"}],這樣配置好后,我們的主庫就是WMBLOG_SQLITE,一個從庫是WMBLOG_MSSQL_1
然后配置下對應的實體類特性,指定這個表是從庫的表:
然后我們可以看看,系統啟動后,是怎么樣的:
從啟動日志上,我們可以看出來,已經實現了我們的目的。
4、讀寫分離模式
這個讀寫分離模式,其實和多庫模式差不多,只不過更簡單了:
1、配置MainDB —— 主庫Id;
2、配置CQRSEnabled —— true,開啟讀寫分離模式,必須是單庫;
3、配置DBS —— 將需要用到的數據庫節點,Enabled=true;
舉個例子,我想開啟主庫為WMBLOG_MSSQL_1,從庫為WMBLOG_MSSQL_2:
這里要注意一下:
1、開啟讀寫分離模式的話,就必須要是單庫模式,把MutiDBEnabled關掉,其實不關也行,只不過后期你可能會繞不過來,干脆禁掉。
2、不用再配置實體類了。
我們來看看系統啟動日志:
目前是按照完美的設想進行的,那到底數據是不是成功呢,我們做下測試。
我們執行博客數據查詢,總數是41條,這是讀操作,走的是從庫:
然后,我們添加一條數據,這是寫命令,走的是主庫:
可以看到,我們新建了一個Id是54的博客,但是我們能查詢出來么?
答案是否定的,因為我們的查詢是從庫,這也就是證明了我們的讀寫分離已經生效了。
好啦,今天的內容暫時就寫到這里吧,詳細的說明和操作都在視頻里,感興趣的可以去看看。
總結
以上是生活随笔為你收集整理的【项目升级】单库、多库、读写分离 · 任你选的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET Core 3.x - E
- 下一篇: 流传在程序员中的传说,你知道几个?