亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

DataRabbit 輕量的數(shù)據(jù)訪問框架(19)-- 讀寫

系統(tǒng) 2372 0

在高并發(fā)的系統(tǒng)中,我們常采用多數(shù)據(jù)庫分散放置、讀寫分離、細(xì)粒度的隔離級別設(shè)定等策略來提高系統(tǒng)的性能。 DataRabbit3.3 以及以上版本對這三種策略都給予了內(nèi)置的支持。

(1)數(shù)據(jù)庫分散放置:對于較大型的系統(tǒng),在設(shè)計(jì)數(shù)據(jù)庫時(shí),我們可以根據(jù)業(yè)務(wù)范圍將其設(shè)計(jì)為多個(gè)數(shù)據(jù)庫,而不是一個(gè),然后將這些數(shù)據(jù)庫部署在不同的物理服務(wù)器上,以分擔(dān)負(fù)載。當(dāng)然,如果已經(jīng)設(shè)計(jì)好的數(shù)據(jù)庫,也可以采用水平分區(qū)或垂直分區(qū)的方式來達(dá)到類似的效果。

(2)讀寫分離:在高性能的系統(tǒng)中,這是最常采用的策略。在SqlServer中,可以采用事務(wù)型的訂閱/發(fā)布模型來實(shí)現(xiàn)這種策略。在這種策略中,有一個(gè)Master DB 和多個(gè)(或一個(gè))Slave DB,其中所有的Slave DB是只讀的,而Master DB支持讀寫,當(dāng)Master DB中的數(shù)據(jù)發(fā)生變化時(shí),所有Slave DB會自動與其同步(可能會有稍微的延遲)。

(3)細(xì)粒度的隔離級別:比如,對于某些要求不高的查詢可以采用ReadUncommitted的隔離級別來讀取數(shù)據(jù)。

DataRabbit.Application. TransactionScopeFactoryProvider <TSourceKey,TSlaveSuitKey> 類可以支持?jǐn)?shù)據(jù)庫分散放置和讀寫分離。它支持【1套主/N套從】數(shù)據(jù)庫實(shí)例。 【一套】表示支持一個(gè)系統(tǒng)運(yùn)行的不可或缺的相互協(xié)作的多個(gè)數(shù)據(jù)庫。

TransactionScopeFactoryProvider 類圖結(jié)構(gòu)如下所示:

DataRabbit 輕量的數(shù)據(jù)訪問框架(19)-- 讀寫分離與隔離級別

其中泛型參數(shù) TSourceKey 是用來表示數(shù)據(jù)源標(biāo)志的類型,比如我們可以用字符串來為每個(gè)數(shù)據(jù)庫(數(shù)據(jù)源)命名,那么TSourceKey便可使用string類型。

泛型參數(shù) TSlaveSuitKey 是用來表示每套從庫的【套標(biāo)志】的類型,比如,我們每套Slave庫中包含5個(gè)數(shù)據(jù)庫(這與Master中的5個(gè)是一一對應(yīng)的),而我們可以提供比如3套Slave庫以支持超大負(fù)載的數(shù)據(jù)讀取,于是我們就要為這三套Slave庫加以不同的標(biāo)志以區(qū)分。

其中有用于注入Master DB數(shù)據(jù)庫連接信息的Dictionary屬性: MasterDataConfigurationDictionary ,鍵便是TSourceKey類型,是每個(gè)數(shù)據(jù)源的標(biāo)志,其值是用于封裝數(shù)據(jù)庫連接信息的DataConfiguration,這個(gè)類大家已經(jīng)很熟悉了。而SlaveSuitDictionary用于注入多套從庫的數(shù)據(jù)庫連接信息。當(dāng)然你已經(jīng)知道, MasterDataConfigurationDictionary SlaveSuitDictionary中每一套的項(xiàng)是一一對應(yīng)的。還有一個(gè)小技巧,如果你現(xiàn)在的系統(tǒng)還不夠大,但是以后會采用倒讀寫分離策略,那么暫時(shí)你可以將Master和Slave配置為指向同一個(gè)數(shù)據(jù)庫,這是沒有問題的,等系統(tǒng)做大了以上,需要Slave的支持時(shí),只要修改一下配置即可。

DBOperationLogger屬性用于記錄數(shù)據(jù)庫的所有操作和訪問產(chǎn)生的異常信息。如果不設(shè)置,則表示不記錄這些信息,關(guān)于DBOperationLogger的介紹,可以參考 這里 。

接下來我們再看GetFactory方法:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> TransactionScopeFactory GetFactory(TSourceKeysourceKey, bool fromMaster);

其第一個(gè)參數(shù)表示要訪問哪個(gè)數(shù)據(jù)庫,第二個(gè)參數(shù)表示是要訪問Master庫還是Slave庫。我們要注意到,當(dāng)系統(tǒng)采用多套從庫時(shí),GetFactory()方法會隨機(jī)的返回某套從庫的TransactionScopeFactory,從而達(dá)到自動負(fù)載均衡的目的。 當(dāng)然你也可以通過GetSlaveFactory()方法來返回指定標(biāo)志的某套從庫的TransactionScopeFactory。

如此,我們可以這樣來使用讀寫分離機(jī)制 -- 比如,我們有一個(gè)任務(wù)只是讀取數(shù)據(jù)庫,而不會有任何修改行為,那么就從Slave庫中讀取:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> IList < Student > list = null ;
TransactionScopeFactory factory
= this .transactionScopeFactoryProvider.GetFactory( DBSourceType .Basic, false );
using ( TransactionScope scope = factory.NewTransactionScope( false ))
{
IOrmAccesser
< Student > accesser = scope.NewOrmAccesser < Student > ();
list
= accesser.GetAll();
scope.Commit();
}

return list;

這個(gè)例子中,我們用一個(gè)枚舉 DBSourceType 來標(biāo)志多個(gè)數(shù)據(jù)源,例子從標(biāo)志位Basic的數(shù)據(jù)源的Slave庫中讀取所有的Student列表信息。

接下來,我們來看對隔離級別的支持。

還是使用上面的這個(gè)例子,假設(shè)我們的業(yè)務(wù)允許讀取Student列表可以為臟讀,那么可以降低讀取的隔離級別(默認(rèn)為ReadCommitted):

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> IList < Student > list = null ;
TransactionScopeFactory factory
= this .transactionScopeFactoryProvider.GetFactory( DBSourceType .Basic, false );
using ( TransactionScope scope = factory.NewTransactionScope( false, IsolationLevel.ReadUncommitted ))
{
IOrmAccesser
< Student > accesser = scope.NewOrmAccesser < Student > ();
list
= accesser.GetAll();
scope.Commit();
}

return list;

IsolationLevel定義如下:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> public enum IsolationLevel
{
ReadUncommitted
= 0 ,
ReadCommitted,
RepeatableRead,
Serializable
}

DataRabbit3.3及以上版本對上述策略都給予了充分的支持,你可以下載 最新版本 試試。

關(guān)于DataRabbit的更多信息目錄,參見 這里 。

DataRabbit 輕量的數(shù)據(jù)訪問框架(19)-- 讀寫分離與隔離級別


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日本久久精品视频 | 国产一级视频 | 96精品国产高清在线看入口 | 97视频在线观看视频最新 | 成人在线一区二区三区 | 97爱爱爱| 免费爱爱视频网站 | 日韩精品一区二区三区国语自制 | 成人亚洲国产综合精品91 | 久青草国产手机在线视频 | 欧美日韩亚洲在线观看 | 亚洲另类视频 | 日韩av片免费播放 | 91chinese 永久免费 | 久草在线视频免费 | 四虎在线永久免费观看 | 日韩精品中文字幕一区二区三区 | 精品一区二区三区的国产在线观看 | 伊人网五月天 | 久草小区二区三区四区网页 | 一区二区在线 | 91在线品视觉盛宴免费 | 亚洲伊人久久综合影院2021 | 欧美亚洲精品小说一区二三区 | 久久无码精品一区二区三区 | 色狠狠一区二区三区香蕉蜜桃 | 成人性色生活片全黄 | 日本乱人伦片中文字幕三区 | 天天综合天天看夜夜添狠狠玩 | 久久亚洲影院 | 四虎国产精品视频免费看 | 国产原创麻豆精品视频 | 爱我久久国产精品 | 国产伦精品一区二区三区高清 | 99九九久久| 亚洲欧美综合网 | 99精品欧美 | 5388国产亚洲欧美在线观看 | 狠狠色丁婷婷综合久久 | 国产精品福利在线观看 | 四虎在线影视 |