偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

MySQL百萬級(jí)高并發(fā)網(wǎng)站實(shí)戰(zhàn)攻略

數(shù)據(jù)庫 MySQL 數(shù)據(jù)庫運(yùn)維
在長(zhǎng)時(shí)間的網(wǎng)站開發(fā)過程中,能作一個(gè)百萬IP的網(wǎng)站對(duì)作者來說真是一個(gè)新的挑戰(zhàn)。本文將講述作者的經(jīng)歷。

在一開始接觸PHP接觸MYSQL的時(shí)候就聽不少人說:“MySQL就跑跑一天幾十萬IP的小站還可以,要是幾百萬IP就不行了”,原話不記得了,大體就是這個(gè)意思。一直也沒有好的機(jī)會(huì)去驗(yàn)證這個(gè)說法,一是從沒有接手過這么大流量的網(wǎng)站,二是平時(shí)工作也比較忙,懶得去管這些,反正現(xiàn)在用不著,抱著這個(gè)想法把這個(gè)問題一直留到了最近,才把這個(gè)問題搞明白。

就在前幾天公司旗下一網(wǎng)站(由于這是公司的商業(yè)內(nèi)容我就不說是那個(gè)網(wǎng)站了)以下簡(jiǎn)稱A站,這A站在年后流量猛增從一天的七八十萬猛跑到了好幾百萬的IP,一天下來接近一千萬的PV讓整個(gè)服務(wù)器在高壓下超負(fù)荷的工作著,時(shí)不時(shí)的服務(wù)就出現(xiàn)宕機(jī)。

最首先反映出情況的是數(shù)據(jù)統(tǒng)計(jì),一天下來一個(gè)數(shù)據(jù)也沒有統(tǒng)計(jì)上,原來是MySQL停止工作了。

本文就圍繞這個(gè)問題來講講我們公司幾個(gè)技術(shù)人員的解決方案。

1. MySQL服務(wù)器集群

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

這里說說我個(gè)人的理解!做集群不但添加資費(fèi)的開銷,而且在技術(shù)上也有很大的挑戰(zhàn),對(duì)于我們公司目前的情況是不大現(xiàn)實(shí)的。集群無非就是把一臺(tái)服務(wù)器的壓力轉(zhuǎn)接到兩臺(tái)或是多臺(tái)服務(wù)器上,我是這么理解的,也許我理解有誤,還請(qǐng)大家指教。

2. 分而治之

這個(gè)方法和集群差不多,不過是把統(tǒng)計(jì)的代碼放在不同的服務(wù)器上跑,由于公司有不少配置低的服務(wù)器跑幾萬到幾十萬IP還是沒有問題的,我們可以把幾百萬流量分成十來個(gè)幾十萬的量分而統(tǒng)計(jì)。

優(yōu)點(diǎn):充分的利用了現(xiàn)在的資源,解決了目前的問題。

缺點(diǎn):這樣的方法不是長(zhǎng)久之計(jì),遲早還是會(huì)出問題的。而且在統(tǒng)計(jì)數(shù)據(jù)的時(shí)候比較麻煩。

3. 統(tǒng)計(jì)代碼的修改

由于之前采用的是在插入數(shù)據(jù)之前加以判斷,這個(gè)IP是否存在,來路等的處理,無形中增加了服務(wù)器的壓力,所以大伙把統(tǒng)計(jì)代碼改成來一個(gè)就插入數(shù)據(jù)庫,不管三七二十一等以后在處理。

這個(gè)方法基本上把當(dāng)天的數(shù)據(jù)保留下來了,可是在處理的時(shí)候由于數(shù)據(jù)量的龐大,來來回回還是把服務(wù)器跑死了,而且在插入的時(shí)候由于當(dāng)時(shí)設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)的時(shí)候留有的索引,也大大的消耗了不少的服務(wù)器資源。

那么把索引去掉到最后處理的時(shí)候又是老慢的,得不償失。

4. 統(tǒng)計(jì)方式的修改

最后這一個(gè)方法,效果非常的明顯。那是什么方法呢!

這里就主要介紹這個(gè)方法:

A、 保留原用的數(shù)據(jù)結(jié)構(gòu)不變,并把所有的數(shù)據(jù)按一定的結(jié)構(gòu)存入文件

結(jié)構(gòu):可以是xml,json,也可以是你自己想的任何有規(guī)律的數(shù)據(jù)排放。

例如:

1 221.2.70.52,http://www.baidu.com,windowxp\r\n
2 221.2.70.52,http://www.baidu.com,windowxp\r\n

寫入文件:fopen,fwrite??no 這里介紹一個(gè)非常好用的技巧,也許大家都知道,但是像我這樣的菜鳥大概都不知道,那就是用error_log,這不是寫錯(cuò)誤日志的嗎?對(duì)就是他,非常方便。

格式:

1 error_log("內(nèi)容", 3, "/date.dat");

這里我就不說他的具體用了,不明白的朋友可以查一下手冊(cè)。

B、數(shù)據(jù)文件的命名

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

首先是在時(shí)間的利用上:date(‘YmdH’)得到的值是如:2008121112這有什么好入,這樣一來這個(gè)數(shù)據(jù)就是一個(gè)小時(shí)一個(gè)文件必免了文件過大,而且不用去判斷自動(dòng)生成。

IP的應(yīng)用:由于在很多數(shù)據(jù)上都是一個(gè)IP操作的,所以把相同IP的數(shù)據(jù)放在一個(gè)文件里在后面的處理就非常方便處理。請(qǐng)看后面的介紹,這里我們?nèi)P成三位為文件名字的一部分。

C、數(shù)據(jù)的導(dǎo)入處理

通過以上兩位的操作當(dāng)天的數(shù)據(jù)會(huì)一個(gè)不少的保留下來,接下來怎么處理其實(shí)并不是很重要了。但是這里還是講講我的想法。

入庫前處理:

前面講到把IP三位相同的放一個(gè)文件就是為了入庫前到它們進(jìn)行處理,首先可以用最笨的方法把數(shù)據(jù)拆成N個(gè)數(shù)據(jù)。在進(jìn)行重復(fù)數(shù)據(jù)的刪除。

如果一個(gè)IP瀏覽多頁那么PV在這里就可以得到統(tǒng)計(jì),并把訪問的頁面進(jìn)行處理,組成新的數(shù)據(jù)。

導(dǎo)入方法:

這里要介紹一下數(shù)據(jù)的導(dǎo)入方法

1 $sql="LOAD DATA INFILE '".$file."' INTO TABLE `test` FIELDS TERMINATED BY ',
   ' LINES TERMINATED BY '\r\n'(
2
3   `time` , `md5`
4
5   )";

就這一個(gè)語句,在導(dǎo)入幾十萬數(shù)據(jù)的時(shí)候可以說是十分快速的,用法我這里也不過多介紹了,大家有不明白的可以查手冊(cè),所以說解決數(shù)據(jù)庫的瓶頸的辦法不定要加設(shè)備,也不一定要換數(shù)據(jù)庫,只要換一個(gè)思路就能解決不少問題。

【編輯推薦】

  1. MySQL鮮為人知的幾個(gè)特殊技巧
  2. MySQL數(shù)據(jù)庫之UPDATE更新語句精解
  3. PHP將數(shù)據(jù)從Oracle向MySQL數(shù)據(jù)遷移實(shí)例
責(zé)任編輯:彭凡 來源: IT168
相關(guān)推薦

2011-08-23 17:12:22

MySQL支撐百萬級(jí)流

2017-01-09 16:06:19

2025-05-26 02:11:00

2019-02-12 09:34:00

微博短視頻架構(gòu)

2025-02-14 03:00:00

2010-07-23 08:48:21

PHP架構(gòu)

2011-11-03 13:59:05

2025-06-05 01:22:00

SpringGateway高并發(fā)

2009-06-16 14:43:23

大型網(wǎng)站系統(tǒng)架構(gòu)

2019-12-31 10:33:57

Netty高性能內(nèi)存

2010-12-06 15:05:08

2010-12-09 14:38:59

百萬級(jí)訪問網(wǎng)站

2010-12-17 13:01:55

2014-02-10 16:27:09

百萬級(jí)IOPSOceanStor 1

2018-12-20 09:13:39

Linux服務(wù)器高并發(fā)

2020-01-13 10:20:30

架構(gòu)聊天架構(gòu)百萬并發(fā)量

2025-05-30 03:40:00

2022-05-17 11:06:44

數(shù)據(jù)庫MySQL系統(tǒng)

2020-10-16 16:40:26

Linux高并發(fā)命令

2015-01-14 14:07:12

聽云Server
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)