欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

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

系統 2080 0

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

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

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

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

DataRabbit.Application. TransactionScopeFactoryProvider <TSourceKey,TSlaveSuitKey> 類可以支持數據庫分散放置和讀寫分離。它支持【1套主/N套從】數據庫實例。 【一套】表示支持一個系統運行的不可或缺的相互協作的多個數據庫。

TransactionScopeFactoryProvider 類圖結構如下所示:

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

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

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

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

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

接下來我們再看GetFactory方法:

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

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

如此,我們可以這樣來使用讀寫分離機制 -- 比如,我們有一個任務只是讀取數據庫,而不會有任何修改行為,那么就從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;

這個例子中,我們用一個枚舉 DBSourceType 來標志多個數據源,例子從標志位Basic的數據源的Slave庫中讀取所有的Student列表信息。

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

還是使用上面的這個例子,假設我們的業務允許讀取Student列表可以為臟讀,那么可以降低讀取的隔離級別(默認為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及以上版本對上述策略都給予了充分的支持,你可以下載 最新版本 試試。

關于DataRabbit的更多信息目錄,參見 這里

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


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久综合九色综合欧洲 | 欧美福利专区 | 久久99精品国产99久久 | 国产精品成人免费观看 | 97一本大道波多野吉衣 | 九九九热在线精品免费全部 | 婷婷黄色| 亚洲一区二区三区中文字幕 | 欧美一级在线免费 | 福利视频1000 | 国产一区二区三区在线免费观看 | 91免费精品国偷自产在线在线 | 中文字幕在线观看 | 亚洲国产欧洲精品路线久久 | 国产手机免费视频 | 亚州综合 | 成人黄页在线观看 | 国产午夜小视频 | 精品伊人久久久99热这里只 | 国产在线自在拍91精品黑人 | 高清在线一区二区 | 天天久 | 91精品国产亚洲爽啪在线观看 | 天天做天天爱天天操 | www.99riav.com| 国产精品视频网站 | 国产精品日韩在线观看 | 亚洲三级视频 | 国产伦精品一区二区三区精品视频 | 国产人成精品综合欧美成人 | 狠狠综合久久综合鬼色 | 91精品天美精东蜜桃传媒入口 | 欧美激情一区二区三区视频高清 | 国产日韩一区二区三免费高清 | h5.meihuan.art| 日本九九精品一区二区 | 国产欧美精品午夜在线播放 | 久草在 | 加勒比欧美 | 久久久久国产亚洲日本 | 在线视频一区二区 |