欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

.NETCore中怎么實(shí)現(xiàn)分表分庫

本篇文章給大家分享的是有關(guān).NET Core中怎么實(shí)現(xiàn)分表分庫,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

成都創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括杭州網(wǎng)站建設(shè)、杭州網(wǎng)站制作、杭州網(wǎng)頁制作以及杭州網(wǎng)絡(luò)營(yíng)銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,杭州網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到杭州省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

FreeSql.Repository安裝

dotnet add package FreeSql.Repository

可用于:.net framework 4.6+、.net core 2.1+

FreeSql.Repository的定義

var fsql = new FreeSql.FreeSqlBuilder()

.UseConnectionString(FreeSql.DataType.Sqlite, @"Data Source=|DataDirectory|\document.db;Pooling=true;Max Pool Size=10")

.UseLogger(loggerFactory.CreateLogger())

.UseAutoSyncStructure(true) //自動(dòng)遷移實(shí)體的結(jié)構(gòu)到數(shù)據(jù)庫

.Build();

過濾與驗(yàn)證

假設(shè)我們有User(用戶)、Topic(主題)兩個(gè)實(shí)體,在某領(lǐng)域類中定義了兩個(gè)倉儲(chǔ):

var userRepository = fsql.GetGuidRepository();

var topicRepository = fsql.GetGuidRepository();

開發(fā)過程中,我總會(huì)擔(dān)心 topicRepository 的數(shù)據(jù)安全問題,即有可能查詢或操作到其他用戶的主題。因此在v0.0.7版本進(jìn)行了改進(jìn),增加了 filter lambad 表達(dá)式參數(shù)。

var userRepository = fsql.GetGuidRepository(a => a.Id == 1);

var topicRepository = fsql.GetGuidRepository(a => a.UserId == 1);

在查詢/修改/刪除時(shí)附加此條件,從而達(dá)到不會(huì)修改其他用戶的數(shù)據(jù);

在添加時(shí),使用表達(dá)式驗(yàn)證數(shù)據(jù)的合法性,若不合法則拋出異常;

有朋友說這個(gè)功能像 abp 的租戶,但這是更小單位的過濾+驗(yàn)證,確保數(shù)據(jù)安全。

有朋友說這個(gè)功能省事,但我覺得是省心。

分表與分庫

GuidRepository 作為分存式倉儲(chǔ)將實(shí)現(xiàn)了分表與分庫(不支持跨服務(wù)器分庫)的封裝類。

var logRepository = fsql.GetGuidRepository(null, oldname => $"{oldname}_{DateTime.Now.ToString("YYYYMM")}");

上面我們得到一個(gè)日志倉儲(chǔ)實(shí)例按年月分表,使用它 CURD 最終會(huì)操作 Log_201903 表。

注意:雖然 FreeSql 支持 CodeFirst 遷移,但不提供遷移分表,開發(fā)環(huán)境中仍然可以遷移 Log 表。

讀寫分離

FreeSql 支持?jǐn)?shù)據(jù)庫讀寫分離,本功能是客戶端的讀寫分離行為,數(shù)據(jù)庫服務(wù)器該怎么配置仍然那樣配置,不受本功能影響,為了方便描術(shù)后面講到的【讀寫分離】都是指客戶端的功能支持。

各種數(shù)據(jù)庫的讀寫方案不一,數(shù)據(jù)庫端開啟讀寫分離功能后,讀寫分離的實(shí)現(xiàn)大致分為以下幾種:

1、nginx代理,配置繁瑣且容易出錯(cuò);

2、中件間,如MySQL可以使用MyCat,但是其他數(shù)據(jù)庫怎么辦?

3、在client端支持;

FreeSql 實(shí)現(xiàn)了第3種方案,支持一個(gè)【主庫】多個(gè)【從庫】,【從庫】的查詢策略為隨機(jī)方式。

若某【從庫】發(fā)生故障,將切換到其他可用【從庫】,若已全部不可用則使用【主庫】查詢。

出現(xiàn)故障【從庫】被隔離起來間隔性的檢查可用狀態(tài),以待恢復(fù)。以 mysql 為例:

var connstr = "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;" +

"Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=10";

IFreeSql fsql = new FreeSql.FreeSqlBuilder()

.UseConnectionString(FreeSql.DataType.MySql, connstr)

.UseSlave("connectionString1", "connectionString2") //使用從數(shù)據(jù)庫,支持多個(gè)

.Build();

select.Where(a => a.Id == 1).ToOne(); //讀【從庫】(默認(rèn))

select.Master().WhereId(a => a.Id == 1).ToOne(); //強(qiáng)制讀【主庫】

以上就是.NET Core中怎么實(shí)現(xiàn)分表分庫,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

文章題目:.NETCore中怎么實(shí)現(xiàn)分表分庫
標(biāo)題URL:http://chinadenli.net/article48/ppjoep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、企業(yè)建站、App設(shè)計(jì)、網(wǎng)站建設(shè)網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計(jì)公司