日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【项目升级】单库、多库、读写分离 · 任你选

發(fā)布時(shí)間:2023/12/4 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【项目升级】单库、多库、读写分离 · 任你选 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本期配套視頻:

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:

"MainDB": "WMBLOG_MSSQL_1", //當(dāng)前項(xiàng)目的主庫,所對應(yīng)的連接字符串的Enabled必須為true"MutiDBEnabled": false, //是否開啟多庫模式"CQRSEnabled": true, //是否開啟讀寫分離模式,必須是單庫模式,且數(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": "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_MSSQL_2","DBType": 1,"Enabled": true,"HitRate": 30,"Connection": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=WMBLOG_MSSQL_2;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)))"}],

這里要注意一下:

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。