當前位置:編程學習大全網 - 遊戲軟體 - 高性能MySQL:計數器表

高性能MySQL:計數器表

  計數器表

 如果應用在表中保存計數器 則在更新計數器時可能碰到並發問題 計數器表在Web 應用中很常見 可以用這種表緩存壹個用戶的朋友數 文件下載次數等 創建壹張獨立的表存儲計數器通常是個好主意 這樣可使計數器表小且快 使用獨立的表可以幫助避免查詢緩存失效 並且可以使用本節展示的壹些更高級的技巧

 應該讓事情變得盡可能簡單 假設有壹個計數器表 只有壹行數據 記錄網站的點擊次數

 問題在於 對於任何想要更新這壹行的事務來說 這條記錄上都有壹個全局的互斥鎖(mutex) 這會使得這些事務只能串行執行 要獲得更高的並發更新性能 也可以將計數器保存在多行中 每次隨機選擇壹行進行更新 這樣做需要對計數器表進行如下修改

 然後預先在這張表增加 行數據 現在選擇壹個隨機的槽(slot)進行更新

 如果希望減少表的行數 以避免表變得太大 可以寫壹個周期執行的任務 合並所有結果到 號槽 並且刪除所有其他的槽

 mysql> UPDATE daily_hit_counter as c

  > INNER JOIN (

  > SELECT day SUM(cnt) AS cnt MIN(slot) AS mslot

  > FROM daily_hit_counter

  > GROUP BY day

  > ) AS x USING(day)

  > SET c cnt = IF(c slot = x mslot x cnt )

  > c slot = IF(c slot = x mslot c slot)

 mysql> DELETE FROM daily_hit_counter WHERE slot <> AND cnt = ;

 更快地讀 更慢地寫

 為了提升讀查詢的速度 經常會需要建壹些額外索引 增加冗余列 甚至是創建緩存表和匯總表 這些方法會增加寫查詢的負擔 也需要額外的維護任務 但在設計高性能數據庫時 這些都是常見的技巧 雖然寫操作變得更慢了 但更顯著地提高了讀操作的性能

 然而 寫操作變慢並不是讀操作變得更快所付出的唯壹代價 還可能同時增加了讀操作和寫操作的開發難度

? 返回目錄 高性能MySQL

? 編輯推薦

? ASP NET MVC 框架揭秘

Oracle索引技術

? ASP NET開發培訓視頻教程

lishixinzhi/Article/program/MySQL/201311/29673

  • 上一篇:漂亮的手寫字體有哪些?
  • 下一篇:黃金綠葉吳孟達和周星馳為何後來壹直沒有合作過?發生了什麽事?
  • copyright 2024編程學習大全網