<b>百万级高并发网站MYSQL利用攻略</b>[MySQL防范]
本文“<b>百万级高并发网站MYSQL利用攻略</b>[MySQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
在长时间的网站开辟历程中,能作一个百万IP的网站对我来说真是一个新的挑衅,由于本人的水平有限,所以一向就任于一个小公司,在这里也只是抱侧重在参与的设法.在今后我所报告到的内容知识点上若有不适之处请大家多多批判指教.
在一开始接触PHP接触MYSQL的时刻就听不少人说:"Mysql就跑跑一天几十万IP的小站还可以,如果几百万IP就不行了",原话不记得了,大体就是这个意思.一向也没有好的机会去考证这个说法,一是从没有接办过这么大流量的网站,二是平常工作也对比忙,懒得去管这些,反正目前用不着,抱着这个设法把这个问题一向留到了近来,才把这个问题搞懂得.
就在前几天公司旗下一网站(由于这是公司的商业内容我就不说是那个网站了,免得有兄弟说是AD)以下简称A站,这A站在年后流量猛增从一天的七八十万猛跑到了好几百万的IP,一天下来接近一千万的Pv让整个服务器在高压下超负荷的工作着,时不时的服务就呈现当机.
最首先反映出情形的是数据统计,一天下来一个数据也没有统计上,本来是mysql挂了.
本文就环绕这个问题来说讲我们公司几个技术人员的办理筹划.
1. Mysql服务器集群
由于是小公司在资金和本钱上都有所限制,并且在技术上也没有几个技术员接触过,所以这个办法自然就让大伙反对了.
这里说说我个人的理解!做集群不但增添资费的开销,并且在技术上也有很大的挑衅,关于我们公司目前的情形是不大实际的.集群无非就是把一台服务器的压力转接到两台或是多台服务器上,我是这么理解的,大概我理解有误,还请大家指教.
2. 分而治之
这个办法和集群差不多,不过是把统计的代码放在差别的服务器上跑,由于公司有不少配置低的服务器跑几万到几十万IP还是没有问题的,我们可以把几百万流量分成十来个几十万的量分而统计.
长处:充分的操纵了目前的资源,办理了目前的问题.
缺陷:这样的办法不是长期之计,早晚还是会出问题的.并且在统计数据的时刻对比麻烦.
3. 统计代码的改正
由于之前采取的是在插入数据之前加以判断,这个IP能否存在,来路等的处理,无形中增添了服务器的压力,所以大伙把统计代码改成来一个就插入数据库,不管三七二十一等今后在处理.
这个办法基本上把当天的数据保存下来了,但是在处理的时刻由于数据量的宏大,交往复回还是把服务器跑死了,并且在插入的时刻由于当时计划数据构造的时刻留有的索引,也大大的损耗了不少的服务器资源.
那么把索引去掉到最后处理的时刻又是老慢的,得不偿失.
4. 统计方法的改正
最后这一个办法,效果非常的明显.那是什么办法呢!
这里就主要介绍这个办法:
A、 保存原用的数据构造不变,并把全部的数据按一定的构造存入文件.
构造:可以是xml,json,也可以是你自己想的任何有规律的数据排放.
比方:
1 221.2.70.52,http://www.百度.com,windowxp\r\n 2 221.2.70.52,http://www.百度.com,windowxp\r\n |
写入文件:fopen,fwrite??no 这里介绍一个非常好用的本领,大概大家都知道,但是像我这样的菜鸟大约都不知道,那就是用error_log,这不是写错误日记的吗?对就是他,非常便利.
格局:
1 error_log("内容", 3, "/date.dat"); |
这里我就不说他的具体用了,不懂得的朋友可以查一下手册.
B、数据文件的命名
为什么这里要讲文件的命名呢?假如就一味的把数据的写入文件不作任何的处理那么他和直接插入数据库有多大的辨别呢?那么我们所作的一切都是无勤奋了.
首先是在时间的操纵上:date(‘YmdH’)得到的值是如:2008121112这有什么好入,这样一来这个数据就是一个小时一个文件必免了文件过大,并且不用去判断自动生成.
IP的利用:由于在很大都据上都是一个IP操作的,所以把相同IP的数据放在一个文件里在背面的处理就非常便利处理.请看背面的介绍,这里我们取IP成三位为文件名字的一部份.
C、 数据的导入处理
通过以上两位的操作当天的数据会一个不少的保存下来,接下来怎么处理其实并非很重要了.但是这里还是讲讲我的设法.
入库前处理:
前面讲到把IP三位相同的放一个文件就是为了入库前到它们举行处理,首先可以用最笨的办法把数据拆成N个数据.在举行反复数据的删除.
假如一个IP浏览多页那么PV在这里便可以得到统计,并把拜候的页面举行处理,构成新的数据.
导入办法:
这里要介绍一下数据的导入办法
1 $sql="LOAD DATA INFILE '".$file."' INTO TABLE `test` FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n'( 2 3 `time` , `md5` 4 5 )"; |
就这一个语句,在导入几十万数据的时刻可以说是刷刷的,用法我这里也不过量介绍了,大家有不懂得的可以查手册,所以说办理数据库的瓶颈的办法不定要加设备,也不一定要换数据库,只要换一个思绪就可以办理不少问题.
至此所以有数据也就讲的差不多了.由于我肚子里的墨水太少,若有不得当之处还请大家包涵.
以上是“<b>百万级高并发网站MYSQL利用攻略</b>[MySQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |