• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 性能優化篇:用戶和文章計數器方案(十七)

    發表于:2012-02-13來源:博客園作者:路過秋天點擊數: 標簽:性能測試
    原來的訪問計數器策略: 1:獲取緩存的計數器數數字。[用戶取值緩存,文章取值頁面上的數字] 2:根據Session或Cookie對每個用戶在某時間段間只計一次訪問的判斷。

      原來的訪問計數器策略:

      1:獲取緩存的計數器數數字。[用戶取值緩存,文章取值頁面上的數字]

      2:根據Session或Cookie對每個用戶在某時間段間只計一次訪問的判斷。

      3:在獲取的數字上,進行內存計數+1。

      4:概率性直接更新到用戶表和文章表中。

      復制代碼

      這種方案,會否產生黃金4K的ldb問題,取決于訪問量和概率性問題,概率值設置的越低,越安全,但是如果內存回收很頻繁,丟失數字也常見。

      秋色園QBlog 新的訪問計數器優化策略:

      1:仍舊保留內存計數器+1的方式。

      2:概率性更新,變成統一內置線程定時更新。

      這樣處理,原來概率性可能產生的并發更新問題,現在變成1個鏈接在更新,有效的減少黃金4K的問題。

      3:為了減少丟失的概率,新開了數據庫(qblogvisit.mdb)及數據表:

      新開有兩個表:Blog_UserVisit和Blog_ContentHit。

      新開表的字段:ID和Hits

      這個新庫的兩個表,加大了更新的頻率,用于物理保存用戶或文章的計數器,避免內存數字丟失的概率,當內存數字丟失時,先從這新表中取出原始數字,再進行+1,有效的減少數字丟失的問題。

      復制代碼

      PS:內置線程:是一件比較危險的事情,會產生比較想象還多的問題,需要全方位的處理可能產生的:并發,(應用程序池回收時)產生多個線程,異常等問題。

      開啟內置線程的代碼:

      靜態頁面動態顯示計數器數字

      首先:秋色園QBlog 的頁面多數是靜態化的*.html,可是你會發現文章的計數器,無論是首頁,列表,還是文章頁,都是變化的,如何將靜態化的數字,動態的變化顯示?

      用js異步?no..秋色園QBlog整站是無js的,如果有js,應該會是另一種實現方式。

      然后:由于URLRewrite遇到請求時并非直接轉向*.html,而是全轉向*.ashx,再加載*.html方式,使的后臺程序可以對靜態化的html進行二次處理。

      其實:如果你看過本系列的文章,應該會發現一個:Page_OnCache的生命周期,就是在這里動的手腳。

      因此:只要獲取列表上的數字,然后再從內存中尋找有沒有相應的數字,有則更新。

      結果:這樣訪問計數器的數字就是動態時時顯示了。

      復制代碼

      顯示動態數字的代碼:

      總結

      本節通過將頻繁產生數據庫交互動作的計數器部分,變成單線程的更新,有效的解決了黃金4K問題。

      同時為了減少數字丟失的概率,增加了新的數據庫來物理存儲文章的數字,但是不改變原有表的結構。

      結果:在計數器這塊,目前問題算是解決了。

      但是,黃金4K的問題,并沒有結束,因為,除了寫操作,更多的是讀取操作。

      正如上節所說:

      CYQ.Data 用Lock鎖住插入/更新/刪除,這些步驟,使的同一時間只出現一個鏈接打開。

      但是,通過上節的示例,發現了,讀取,也是要打開鏈接的。

      因此,優化仍沒有止步,本系列仍在繼續,請繼續關注。

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>