【项目升级】单库、多库、读写分离 · 任你选
本期配套視頻:
https://www.bilibili.com/video/BV1BJ411B7mn?p=6
(點(diǎn)擊閱讀原文,可看,如果沒有,最晚下午可看)
繼上周增加【任務(wù)調(diào)度】以后,繼續(xù)對項(xiàng)目進(jìn)行2.0版本升級,其實(shí)改動(dòng)的地方并不多,主要的功能上,更豐富了,之前其實(shí)項(xiàng)目已經(jīng)實(shí)現(xiàn)了多庫的更新:
多庫操作2:終于實(shí)現(xiàn)多個(gè)數(shù)據(jù)庫操作
單單多庫操作還不夠完美,所以這幾天就把讀寫分離給加上了,你可能會(huì)好奇,多庫不就是讀寫分離么?主庫和從庫相互不影響的操作,滿足xxxx的需求等等,其實(shí)不是的,至少在我這里兩者不是一回事,下面我就簡單的文字說一下,如果讀不懂,或者不想讀,可以直接看視頻。
Github:相關(guān)代碼目前在Is4分支。
1、多庫操作與讀寫分離
單庫模式就不說了,我們所有的項(xiàng)目都必須至少要支持這個(gè),不然如何持久化?
多庫操作,我理解的是,可以任意操作指定的任意數(shù)據(jù)庫,只要允許訪問,我們配置好連接字符串,并做一定的處理后,就可以CURD了,我這里可以簡化稱之為——C和Q,也就是命令和查詢模式,命令就是指的寫入、編輯、刪除的操作。這里多個(gè)數(shù)據(jù)庫是平等的,舉個(gè)例子,我們可以在資源服務(wù)器Blog.Core中,來操作認(rèn)證中心的role角色表,不僅可以讀取,如果有必要,還可以修改,當(dāng)然,這里業(yè)務(wù)上是不允許修改的。
讀寫分離,顧名思義,就是讀(Q)和寫(C)的動(dòng)作是分開的,雖然也是多個(gè)數(shù)據(jù)庫,雖然也是分主庫和從庫,但是讀只能讀取從庫,寫只能寫在主庫,這就是和普通的多庫操作最大的也是最本質(zhì)的不同之處。
簡單解釋過后,那我就說一下,Blog.Core項(xiàng)目中,如果實(shí)現(xiàn)單庫模式、多庫模式以及讀寫分離模式。
2、單庫操作模式
這個(gè)很簡單,當(dāng)你第一次下載的時(shí)候,默認(rèn)的就是單庫模式:
MutiDBEnabled和CQRSEnabled都為false,所以如果你就只想連接一個(gè)數(shù)據(jù)庫,那就把MainDB配置成下邊對應(yīng)的ConnId,然后把他對應(yīng)Enabled設(shè)置為true就行了,其他的不用管,其他的就算設(shè)置為true,也不會(huì)影響。
舉個(gè)例子,我只想配置一個(gè)SqlServer,連接字符串為xxxxxx:
"MainDB": "WMBLOG_MSSQL_1", //當(dāng)前項(xiàng)目的主庫,所對應(yīng)的連接字符串的Enabled必須為true"MutiDBEnabled": false, //是否開啟多庫模式"CQRSEnabled": false, //是否開啟讀寫分離模式,必須是單庫模式,且數(shù)據(jù)庫類型一致,比如都是SqlServer"DBS":?[{"ConnId": "WMBLOG_SQLITE","DBType": 2,"Enabled":?false,"HitRate": 50, // 值越大,優(yōu)先級越高"Connection": "WMBlog.db" //只寫數(shù)據(jù)庫名就行,我會(huì)拼接字符串},// ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓{"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、多庫操作模式
這個(gè)可能稍微麻煩一丟丟,我就直接寫步驟了:
1、配置MainDB —— 主庫Id;
2、配置MutiDBEnabled —— true,開啟多庫模式;
3、配置DBS —— 將需要用到的數(shù)據(jù)庫節(jié)點(diǎn),Enabled=true;
4、在指定的實(shí)體類上邊增加特性,指定對應(yīng)的從庫的連接Id;
舉例說明,我想配置一個(gè)多庫操作,主庫是Sqlite,從庫是Sqlserver:
"MainDB": "WMBLOG_SQLITE", //當(dāng)前項(xiàng)目的主庫,所對應(yīng)的連接字符串的Enabled必須為true"MutiDBEnabled":?true,?//是否開啟多庫模式"CQRSEnabled": false, //是否開啟讀寫分離模式,必須是單庫模式,且數(shù)據(jù)庫類型一致,比如都是SqlServer"DBS":?[// ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓{"ConnId": "WMBLOG_SQLITE","DBType": 2,"Enabled": true,// 主庫"HitRate": 50, // 值越大,優(yōu)先級越高"Connection": "WMBlog.db" //只寫數(shù)據(jù)庫名就行,我會(huì)拼接字符串},{"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,一個(gè)從庫是WMBLOG_MSSQL_1
然后配置下對應(yīng)的實(shí)體類特性,指定這個(gè)表是從庫的表:
然后我們可以看看,系統(tǒng)啟動(dòng)后,是怎么樣的:
從啟動(dòng)日志上,我們可以看出來,已經(jīng)實(shí)現(xiàn)了我們的目的。
4、讀寫分離模式
這個(gè)讀寫分離模式,其實(shí)和多庫模式差不多,只不過更簡單了:
1、配置MainDB —— 主庫Id;
2、配置CQRSEnabled —— true,開啟讀寫分離模式,必須是單庫;
3、配置DBS —— 將需要用到的數(shù)據(jù)庫節(jié)點(diǎn),Enabled=true;
舉個(gè)例子,我想開啟主庫為WMBLOG_MSSQL_1,從庫為WMBLOG_MSSQL_2:
這里要注意一下:
1、開啟讀寫分離模式的話,就必須要是單庫模式,把MutiDBEnabled關(guān)掉,其實(shí)不關(guān)也行,只不過后期你可能會(huì)繞不過來,干脆禁掉。
2、不用再配置實(shí)體類了。
我們來看看系統(tǒng)啟動(dòng)日志:
目前是按照完美的設(shè)想進(jìn)行的,那到底數(shù)據(jù)是不是成功呢,我們做下測試。
我們執(zhí)行博客數(shù)據(jù)查詢,總數(shù)是41條,這是讀操作,走的是從庫:
然后,我們添加一條數(shù)據(jù),這是寫命令,走的是主庫:
可以看到,我們新建了一個(gè)Id是54的博客,但是我們能查詢出來么?
答案是否定的,因?yàn)槲覀兊牟樵兪菑膸?#xff0c;這也就是證明了我們的讀寫分離已經(jīng)生效了。
好啦,今天的內(nèi)容暫時(shí)就寫到這里吧,詳細(xì)的說明和操作都在視頻里,感興趣的可以去看看。
總結(jié)
以上是生活随笔為你收集整理的【项目升级】单库、多库、读写分离 · 任你选的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET Core 3.x - E
- 下一篇: 流传在程序员中的传说,你知道几个?