亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

c#編寫的高并發(fā)數(shù)據(jù)庫控制訪問代碼

 更新時間:2015年03月17日 15:04:39   投稿:hebedich  
往往大數(shù)據(jù)量,高并發(fā)時, 瓶頸都在數(shù)據(jù)庫上, 好多人都說用數(shù)據(jù)庫的復(fù)制,發(fā)布, 讀寫分離等技術(shù), 但主從數(shù)據(jù)庫之間同步時間有延遲.

代碼的作用在于保證在上端緩存服務(wù)失效(一般來說概率比較低)時,形成倒瓶頸,從而能夠保護數(shù)據(jù)庫,數(shù)據(jù)庫宕了,才是大問題(比如影響其他應(yīng)用)。

假設(shè)(非完全正確數(shù)據(jù),僅做示例):
每秒支持10,000,000次查詢(千萬);
一次讀庫需要耗時:1ms;
修改內(nèi)存變量需要耗時:0.001ms;
那么:
每秒最終訪問的數(shù)據(jù)庫的請求數(shù)量 < 1000
其他的9,900,000個請求會返回到其他頁面。這就是為啥很多搶單網(wǎng)站有人可以訪問,而有人得到繁忙中頁面的原因。

微觀到1ms來看,在currentValidSessionID == -1的時間是 1ms,從而平均會有10000條記錄涌入。
currentValidSessionID從-1變?yōu)槠渌档臅r間為0.001ms,這個時間內(nèi),

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

  lock (databaseDoor)
  {
    // now there is only one request can reach below codes.
    if (currentValidSessionID == -1)
    {
      currentValidSessionID = currentRequest.SessionID;
    }
  }

平均會有 10000×0.001=10條記錄會執(zhí)行到上述這段代碼,操作系統(tǒng)會為鎖形成等待序列。
那么我們的目標(biāo)是,每毫秒只允許一次讀庫(因為其他應(yīng)用也會使用),所以我們只希望這進入的10條,最終只有一條能夠繼續(xù)前進。
那么這就是

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

if (currentValidSessionID == -1)
{
}

的作用了。再次進行一次判斷,進入原子保護隊列的請求,也只有一個能夠繼續(xù)。

一點思考:
其實對于一個主頻能上N GHz的服務(wù)器來說,一個內(nèi)存數(shù)賦值給另一個內(nèi)存數(shù)據(jù)就是1~4條指令(平均2條,兩次MOV操作),也就是2/N ns時間,而不是我們上述假設(shè)的 1000ns(0.001ms)。其實不用原子,我們已經(jīng)可以把千億級請求的訪問數(shù)控制在個位數(shù)。
不過一個架構(gòu)師,如果可以用一個99.99%安全的方案,就絕對不用99.9%。 SO。

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

public static long currentValidSessionID = -1;
public static object databaseDoor = new object();
void readDatabase(Request currentRequest)
{
    // use currentValidSessionID to filter out other requests came in during the execute time gap
    if (currentValidSessionID == -1)
    {
        // use object-lock to filter out other requests came in during the variable change time gap.
        lock (databaseDoor)
        {
            // now there is only very little number of requests can reach below codes.
            if (currentValidSessionID == -1)
            {   // now there will be only one request can access the database
                currentValidSessionID = currentRequest.SessionID;
            }
        }
    }
    if (currentValidSessionID == currentRequest.SessionID)
    {   // here is the one !
        try
        {
            // use transaction to guarantee the execute time to void block
            // access database codes go here
        }
        catch()
        {
            // exception codes go here
        }
        finally
        {
            currentValidSessionID = -1;  // recover to original state
        }
    }
}

以上就是本文所述的全部內(nèi)容了,希望對大家學(xué)習(xí)C#的高并發(fā)編程能夠有所幫助。

相關(guān)文章

  • C#實現(xiàn)圖片縮略圖功能的示例詳解

    C#實現(xiàn)圖片縮略圖功能的示例詳解

    這篇文章主要為大家詳細介紹了如何利用C#實現(xiàn)圖片縮略圖的功能,文中的示例代碼講解詳細,對我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • C# WPF利用Clip屬性實現(xiàn)截屏框功能

    C# WPF利用Clip屬性實現(xiàn)截屏框功能

    這篇文章主要為大家詳細介紹了C# WPF如何利用Clip屬性實現(xiàn)截屏框功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • C#實現(xiàn)FFT(遞歸法)的示例代碼

    C#實現(xiàn)FFT(遞歸法)的示例代碼

    FFT是數(shù)字信號處理中的重要算法。這篇文章將為大家詳細介紹一下如何利用C#語言實現(xiàn)FFT(遞歸法),文中的示例代碼講解詳細,感興趣的可以了解一下
    2022-07-07
  • Unity?AssetPostprocessor模型函數(shù)Model實用案例深入解析

    Unity?AssetPostprocessor模型函數(shù)Model實用案例深入解析

    這篇文章主要為大家介紹了Unity?AssetPostprocessor模型Model函數(shù)實用案例深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • C#中String.LastIndexOf方法小結(jié)

    C#中String.LastIndexOf方法小結(jié)

    String.LastIndexOf()是C#中string類的一個方法,它用于在字符串中查找指定子字符串(或字符)最后一次出現(xiàn)的位置,并返回其索引,本文主要介紹了C#中String.LastIndexOf方法小結(jié),感興趣的可以了解一下
    2024-01-01
  • C#中查找Dictionary中的重復(fù)值的方法

    C#中查找Dictionary中的重復(fù)值的方法

    這篇文章主要介紹了C#中查找Dictionary中的重復(fù)值的方法,需要的朋友可以參考下
    2015-09-09
  • C#獲取遠程XML文檔的方法

    C#獲取遠程XML文檔的方法

    這篇文章主要介紹了C#獲取遠程XML文檔的方法,涉及C#文件傳輸與XML文檔操作相關(guān)技巧,需要的朋友可以參考下
    2016-01-01
  • C#中靜態(tài)構(gòu)造函數(shù)的幾點說明介紹

    C#中靜態(tài)構(gòu)造函數(shù)的幾點說明介紹

    本篇文章主要是對C#中靜態(tài)構(gòu)造函數(shù)的幾點說明進行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-01-01
  • unity實現(xiàn)流光效果

    unity實現(xiàn)流光效果

    這篇文章主要為大家詳細介紹了unity實現(xiàn)流光效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • c#實現(xiàn)漢諾塔問題示例

    c#實現(xiàn)漢諾塔問題示例

    這篇文章主要介紹了c#實現(xiàn)漢諾塔問題示例,需要的朋友可以參考下
    2014-04-04

最新評論