熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> MySQL >> 正文

百萬級高並發網站MYSQL應用攻略

2013-11-23 20:59:49  來源: MySQL 

  在長時間的網站開發過程中能作一個百萬IP的網站對我來說真是一個新的挑戰由於本人的水平有限所以一直就職於一個小公司在這裡也只是抱著重在參與的想法在以後我所講述到的內容知識點上如有不適之處請大家多多批評指教

  在一開始接觸PHP接觸MYSQL的時候就聽不少人說Mysql就跑跑一天幾十萬IP的小站還可以要是幾百萬IP就不行了原話不記得了大體就是這個意思一直也沒有好的機會去驗證這個說法一是從沒有接手過這麼大流量的網站二是平時工作也比較忙懶得去管這些反正現在用不著抱著這個想法把這個問題一直留到了最近才把這個問題搞明白

  就在前幾天公司旗下一網站(由於這是公司的商業內容我就不說是那個網站了免得有兄弟說是AD)以下簡稱A站這A站在年後流量猛增從一天的七八十萬猛跑到了好幾百萬的IP一天下來接近一千萬的Pv讓整個服務器在高壓下超負荷的工作著時不時的服務就出現當機

  最首先反映出情況的是數據統計一天下來一個數據也沒有統計上原來是mysql掛了

  本文就圍繞這個問題來講講我們公司幾個技術人員的解決方案

   Mysql服務器集群

  由於是小公司在資金和成本上都有所限制而且在技術上也沒有幾個技術員接觸過所以這個方法自然就讓大伙否決了

  這裡說說我個人的理解!做集群不但添加資費的開銷而且在技術上也有很大的挑戰對於我們公司目前的情況是不大現實的集群無非就是把一台服務器的壓力轉接到兩台或是多台服務器上我是這麼理解的也許我理解有誤還請大家指教

   分而治之

  這個方法和集群差不多不過是把統計的代碼放在不同的服務器上跑由於公司有不少配置低的服務器跑幾萬到幾十萬IP還是沒有問題的我們可以把幾百萬流量分成十來個幾十萬的量分而統計

  優點充分的利用了現在的資源解決了目前的問題

  缺點這樣的方法不是長久之計遲早還是會出問題的而且在統計數據的時候比較麻煩

   統計代碼的修改

  由於之前采用的是在插入數據之前加以判斷這個IP是否存在來路等的處理無形中增加了服務器的壓力所以大伙把統計代碼改成來一個就插入數據庫不管三七二十一等以後在處理

  這個方法基本上把當天的數據保留下來了可是在處理的時候由於數據量的龐大來來回回還是把服務器跑死了而且在插入的時候由於當時設計數據結構的時候留有的索引也大大的消耗了不少的服務器資源

  那麼把索引去掉到最後處理的時候又是老慢的得不償失

   統計方式的修改

  最後這一個方法效果非常的明顯那是什麼方法呢!

  這裡就主要介紹這個方法

  A 保留原用的數據結構不變並把所有的數據按一定的結構存入文件

  結構可以是xmljson也可以是你自己想的任何有規律的數據排放

  例如

     windowxp\r\n
windowxp\r\n
    
    寫入文件:fopenfwrite??no 這裡介紹一個非常好用的技巧也許大家都知道但是像我這樣的菜鳥大概都不知道那就是用error_log這不是寫錯誤日志的嗎?對就是他非常方便

  格式

     error_log(內容 /datedat);    
    這裡我就不說他的具體用了不明白的朋友可以查一下手冊

  B數據文件的命名

  為什麼這裡要講文件的命名呢?如果就一味的把數據的寫入文件不作任何的處理那麼他和直接插入數據庫有多大的區別呢?那麼我們所作的一切都是無用功了

  首先是在時間的利用上:date(YmdH)得到的值是如這有什麼好入這樣一來這個數據就是一個小時一個文件必免了文件過大而且不用去判斷自動生成

  IP的應用由於在很多數據上都是一個IP操作的所以把相同IP的數據放在一個文件裡在後面的處理就非常方便處理請看後面的介紹這裡我們取IP成三位為文件名字的一部分

  C 數據的導入處理

  通過以上兩位的操作當天的數據會一個不少的保留下來接下來怎麼處理其實並不是很重要了但是這裡還是講講我的想法

  入庫前處理

  前面講到把IP三位相同的放一個文件就是為了入庫前到它們進行處理首先可以用最笨的方法把數據拆成N個數據在進行重復數據的刪除

  如果一個IP浏覽多頁那麼PV在這裡就可以得到統計並把訪問的頁面進行處理組成新的數據

  導入方法

  這裡要介紹一下數據的導入方法

     $sql=LOAD DATA INFILE $file INTO TABLE `test` FIELDS TERMINATED BY LINES TERMINATED BY \r\n(

  `time` `md`

  );    
    就這一個語句在導入幾十萬數據的時候可以說是刷刷的用法我這裡也不過多介紹了大家有不明白的可以查手冊所以說解決數據庫的瓶頸的辦法不定要加設備也不一定要換數據庫只要換一個思路就能解決不少問題

  至此所以有數據也就講的差不多了由於我肚子裡的墨水太少如有不得當之處還請大家見諒


From:http://tw.wingwit.com/Article/program/MySQL/201311/29419.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.