欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Asp.Net 網(wǎng)站優(yōu)化系列之?dāng)?shù)據(jù)庫優(yōu)化措施 使用主從庫(全)

 更新時間:2010年06月09日 20:34:22   作者:  
網(wǎng)站規(guī)模到了一定程度之后,該分的也分了,該優(yōu)化的也做了優(yōu)化,但是還是不能滿足業(yè)務(wù)上對性能的要求;這時候我們可以考慮使用主從庫。
網(wǎng)站規(guī)模到了一定程度之后,該分的也分了,該優(yōu)化的也做了優(yōu)化,但是還是不能滿足業(yè)務(wù)上對性能的要求;這時候我們可以考慮使用主從庫。

主從庫是兩臺服務(wù)器上的兩個數(shù)據(jù)庫,主庫以最快的速度做增刪改操作+最新數(shù)據(jù)的查詢操作;從庫負(fù)責(zé)查詢較舊數(shù)據(jù),做一些對實效性要求較小的分析,報表生成的工作。這樣做將數(shù)據(jù)庫的壓力分擔(dān)到兩臺服務(wù)器上從而保證整個系統(tǒng)響應(yīng)的及時性。

SQL Server提供了復(fù)制機制來幫我們實現(xiàn)主從庫的機制。我們看下如何在sql server 2005中實踐:

實踐前需要新創(chuàng)建一個Test的數(shù)據(jù)庫,這個庫中建一個測試表。

1. 打開sql server企業(yè)管理器,在對象資源管理器里面選擇復(fù)制à本地發(fā)布,右鍵選擇新建發(fā)布
 

2. 打開新建發(fā)布向?qū)?,點下一步,選擇發(fā)布數(shù)據(jù)的數(shù)據(jù)庫


3. 我們選擇Test數(shù)據(jù)庫,并點擊下一步,選擇發(fā)布類型


這里我們選擇的是事務(wù)性發(fā)布,事務(wù)性發(fā)布保證數(shù)據(jù)在做更新之后盡可能快的分發(fā)到訂閱服務(wù)器上。有關(guān)其他幾種發(fā)布類型的使用場景請參考msdn
4. 點擊下一步,選擇要發(fā)布的對象,這里我們只對表進(jìn)行發(fā)布
 
5. 點擊下一步進(jìn)入篩選數(shù)據(jù)設(shè)置,這里我們要復(fù)制表的所有數(shù)據(jù)所以不做設(shè)置
 
6. 點擊下一步,指定何時運行快照,我們選擇初始話數(shù)據(jù),并選擇默認(rèn)的運行快照頻率
 
7. 繼續(xù)下一步,設(shè)置快照代理的運行賬戶,我們選擇sql server agent賬戶
 
8. 點擊下一步選擇創(chuàng)建發(fā)布,再次點擊下一步設(shè)置發(fā)布的名稱
 
9. 點擊完成,完成發(fā)布的設(shè)置,并創(chuàng)建發(fā)布,現(xiàn)在在本地發(fā)布出新添加了我們創(chuàng)建的發(fā)布
 

現(xiàn)在成功創(chuàng)建了發(fā)布,我們還需要創(chuàng)建訂閱:在本地訂閱文件夾上右擊新建訂閱,通過向?qū)Э梢院苋菀椎膭?chuàng)建訂閱,創(chuàng)建訂閱時可以選擇以發(fā)布者推送或者訂閱者主動的方式創(chuàng)建。具體步驟如下:
1. 通過右鍵菜單打開新建訂閱,點擊下一步,選擇我們剛剛創(chuàng)建的發(fā)布作為訂閱源


2. 選擇是以推送還是以主動請求的方式同步數(shù)據(jù),我們選擇主動訂閱
 
3. 設(shè)置執(zhí)行分發(fā)代理的賬戶
 
4. 設(shè)置代理請求同步的頻率
 
5. 設(shè)定是否立即做數(shù)據(jù)的初始化操作
 
6. 完成創(chuàng)建訂閱

創(chuàng)建完成之后,我們可以通過在主庫表中插入n條數(shù)據(jù),然后在從庫中查詢的方式驗證復(fù)制是否成功。

在Sql server2005中的復(fù)制創(chuàng)建起來很簡單,我們需要根據(jù)業(yè)務(wù)需要設(shè)定復(fù)制的類型和同步的頻率,下面我們談?wù)勅绾斡行У脑诔绦蛑惺褂弥鲝膸臁?br>
主從庫之間是一種發(fā)布訂閱的關(guān)系,發(fā)布者和訂閱者之間并非實時同步的,通常會有幾分鐘的延時,更有甚者會有幾個小時的延時。所以我們需要通過合理的使用來避開有延時這個問題。

我們希望主庫盡可能的少參與查詢,來提高寫的及時性;同時要讓從庫在不影響讀出數(shù)據(jù)的準(zhǔn)確及時的前提下盡可能的分擔(dān)主庫的壓力。

主從兩個庫需要在配置文件中配置兩個連接字符串,CONN_Master和CONN_Slave。我們需要設(shè)定一些規(guī)則決定當(dāng)前的查詢應(yīng)該從主庫查還是需要從從庫查。這個規(guī)則沒有定式,只能根據(jù)業(yè)務(wù)需要來確定。下面我舉幾個例子來說明:

1. 以豆瓣讀書書的詳細(xì)頁為假定場景,你可以點擊這里看下頁面的結(jié)構(gòu)(我不是豆瓣的技術(shù),在這里只是拿這個頁面舉例)
我們來分析呈現(xiàn)這個頁面需要的數(shù)據(jù)和這些數(shù)據(jù)的實效性要求
1) 書的詳細(xì)信息 時效性要求:要求及時
2) 豆瓣成員的常用標(biāo)簽 實效性:不需要很及時
3) 喜歡讀這本書的人也喜歡讀的書 屬于分析數(shù)據(jù),不需要很及時
4) 最新書評 要求及時
5) 讀這本書的幾個用戶 及時性不高
6) 喜歡這本書的人常去的小組 屬于分析數(shù)據(jù)不需要很及時
從上面的分析可以看出只有1),4)兩項數(shù)據(jù)需要從主庫讀,而2),3),5),6)為非及時數(shù)據(jù)從從庫讀取即可。當(dāng)然我們可以對這些實效性不高的數(shù)據(jù)做緩存處理。

2. 以論壇帖子列表頁面為假定場景,玩論壇的人都喜歡頂貼,把自己的帖子頂?shù)降谝豁撟尭嗟娜岁P(guān)注,而對于50頁之后的帖子則反讀的人很少;我們可以根據(jù)這個業(yè)務(wù)邏輯特征來決定在用戶訪問前50頁帖子列表數(shù)據(jù)時從主庫讀,而當(dāng)用戶訪問超過50頁之后的數(shù)據(jù)時則從從庫進(jìn)行查詢。

3. 以訂單為例,通常超過三個月的訂單就不會再有變化了,假定我們把訂單號設(shè)計為日期格式時,根據(jù)訂單號去查詢訂單時就可以根據(jù)訂單號來決定該訪問主庫還是從庫。

舉了幾個適用的場景,我們以第三個場景為例,寫一段簡單的示意代碼看下

復(fù)制代碼 代碼如下:

//orderNo 的格式為 20100528120105000001 即yyyyMMddHHmmss + 序號
public OrderInfo GetOrder(string orderNo) {
string connString = ConnStringGetter.GetForOrder(orderNo);
using (SqlConnection conn = new SqlConnection(connString))
{
...
}
}

public class ConnStringGetter
{
public static string GetForOrder(string orderNo) {
int year = int.Parse(orderNo.Substring(0,4));
int money = int.Parse(orderNo.Substring(4,2));
int date = int.Parse(orderNo.Substring(6,2));
DateTime orderTime = new DateTime(year, money, date);

TimeSpan ts = DateTime.Now - orderTime;
//根據(jù)訂單的時間決定使用主庫還是從庫
if (ts.TotalDays > 30) return ConfigurationManager.ConnectionStrings["CONN_Slave"].ConnectionString;
return ConfigurationManager.ConnectionStrings["CONN_Master"].ConnectionString;
}
}


正確的使用主從庫,可以很好的提升系統(tǒng)的性能。使用主庫還是從庫的選擇權(quán)決定在業(yè)務(wù)邏輯的手里。

相關(guān)文章

  • EF?Core項目中不同數(shù)據(jù)庫需要的安裝包介紹

    EF?Core項目中不同數(shù)據(jù)庫需要的安裝包介紹

    這篇文章介紹了EF?Core項目中不同數(shù)據(jù)庫需要的安裝包,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • ASP.NET頁面?zhèn)鬟f值的方式介紹

    ASP.NET頁面?zhèn)鬟f值的方式介紹

    面?zhèn)髦凳菍W(xué)習(xí)asp.net初期都會面臨的一個問題,總的來說有頁面?zhèn)髦?、存儲對象傳值、ajax、類、model、表單等。但是一般來說,常用的較簡單有QueryString,Session,Cookies,Application,Server.Transfer。
    2012-12-12
  • 如何建立ASP.NET站點

    如何建立ASP.NET站點

    這篇文章主要介紹了如何建立ASP.NET站點,具有一定的參考價值,需要的朋友可以參考一下
    2015-10-10
  • 淺談ADO.NET數(shù)據(jù)庫腳本

    淺談ADO.NET數(shù)據(jù)庫腳本

    最近跟著公司做了一個小項目,雖然不是很好,卻也有點心得,在此和大家分享一下,希望高手能不吝賜教啊。。。還有很多得更加努力學(xué)習(xí)啊
    2015-06-06
  • ASP.NET操作Word的IIS權(quán)限設(shè)置

    ASP.NET操作Word的IIS權(quán)限設(shè)置

    檢索 COM 類工廠中 CLSID 為 {00024500-0000-0000-C000-000000000046} 的組件時失敗,原因是出現(xiàn)以下錯誤: 80070005。
    2011-02-02
  • vs2010根據(jù)字符串內(nèi)容添加斷點的方法介紹

    vs2010根據(jù)字符串內(nèi)容添加斷點的方法介紹

    這篇文章介紹了vs2010根據(jù)字符串內(nèi)容添加斷點的方法,有需要的朋友可以參考一下
    2013-08-08
  • asp.net 用戶在線退出更新實現(xiàn)代碼

    asp.net 用戶在線退出更新實現(xiàn)代碼

    更新用戶是否在線?注銷用戶的話有三種情況:1.點擊退出,2.會話超時,3.關(guān)閉瀏覽器
    2010-03-03
  • .NET發(fā)起web請求時維持Session

    .NET發(fā)起web請求時維持Session

    一般使用.NET C#發(fā)起一個web請求是用WebClient類,應(yīng)為使用很簡單,但是每調(diào)用一次OpenRead就會在服務(wù)器啟用一個新Session,使用HttpWebRequest + CookieContainer就可以讓多個web請求只有一個session。
    2009-05-05
  • asp.net TripleDES加密、解密算法

    asp.net TripleDES加密、解密算法

    加密,使用密碼產(chǎn)生加密算法的公鑰,并使用TripleDES對密碼進(jìn)行加密。解密,使用密碼產(chǎn)生加密算法的公鑰,并使用TripleDES對加密數(shù)據(jù)進(jìn)行解密。
    2008-08-08
  • .net開發(fā)中幾個重要的認(rèn)識誤區(qū)小結(jié)

    .net開發(fā)中幾個重要的認(rèn)識誤區(qū)小結(jié)

    .net如今已經(jīng)很流行,成為趕時髦的程序員的首選。但是,大量剛剛接觸.net的程序員的確存在一定的認(rèn)識誤區(qū),這里先介紹一部分。
    2010-04-04

最新評論