`
ssxxjjii
  • 浏览: 950982 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

百万级高并发网站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,[url]http://www.baidu.com[/url],windowxp\r\n 2 221.2.70.52,[url]http://www.baidu.com[/url],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在这里就可以得到统计,并把访问的页面进行处理,组成新的数据。   导入方法:   这里要介绍一下数据的导入方法 $sql="LOAD DATA INFILE '".$file."' INTO TABLE `test` FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n'(   `time` , `md5`   )";   就这一个语句,在导入几十万数据的时候可以说是刷刷的,用法我这里也不过多介绍了,大家有不明白的可以查手册,所以说解决数据库的瓶颈的办法不定要加设备,也不一定要换数据库,只要换一个思路就能解决不少问题。
分享到:
评论
1 楼 windywany 2010-01-21  
我们现在是一天一张表,然后处理表.最大的缺点就是当天数据要明天年,至少也要1个小时.

相关推荐

    高并发高可用mysql优化

    在IT行业中,数据库是系统的核心组成部分,特别是在高并发场景下,MySQL作为一款广泛使用的开源关系型数据库,其性能优化显得尤为重要。本篇文章将基于“高并发高可用MySQL优化”这一主题,深入探讨MySQL的索引优化...

    MySQL 数据库如何解决高并发问题

    MySQL 数据库在面对高并发场景时,需要采取一系列优化措施以确保系统稳定性和性能。以下是一些关键的优化策略: 1. **短距离**:优化数据传输路径,减少数据库访问延迟。 - **页面静态化**:对于不常变化的页面,...

    mysql高并发解决方案

    MySQL作为一款广泛使用的开源关系型数据库,经常在处理高并发场景时面临挑战。高并发意味着大量用户在同一时间访问系统,这对数据库的性能、稳定性和扩展性提出了极高要求。本资料包"3月20php+mysql高并发解决方案...

    易语言MySql高并发操作模块源码 效率很高

    【MySQL高并发操作模块源码】是一个专门设计用于处理大量并发请求的软件组件,它能够高效地处理数据库的读写操作。在高并发环境中,系统的性能往往受到数据库操作的限制,因为数据库是系统中的瓶颈。这个模块的目标...

    马士兵百万级并发IM即时消息系统

    《马士兵百万级并发IM即时消息系统》是针对大规模用户在线聊天场景设计的高效、稳定、可扩展的即时通讯解决方案。该系统的核心是利用Go语言的高性能特性,结合现代Web开发框架Gin来构建,旨在处理百万级别的并发连接...

    mysql高级参考课件(供实操参考).zip

    MySQL是世界上最受欢迎的关系型数据库管理系统之一,尤其在Web应用程序中被广泛应用。本课程将深入探讨MySQL的高级特性,旨在帮助用户提升数据库管理、查询优化以及系统性能等方面的能力。以下是基于提供的"mysql...

    高并发Web网站构建和安全防护

    ### 高并发Web网站构建和安全防护 #### 高并发Web网站构建 ##### 高并发的由来 随着互联网技术的飞速发展,用户对于Web应用的需求也日益增长,这直接导致了对Web服务器处理能力的要求越来越高。在早期,简单的...

    Mysql 百万级数据优化资料

    从给定的文件标题、描述、标签以及部分内容中,我们可以提炼出关于MySQL百万级数据优化的关键知识点,这些知识点涵盖了系统架构、硬件选择、文件系统、应用程序接口(API)、查询优化等多个方面,对于处理大规模...

    ssm+mysql+Redis实现简易的高并发模拟

    在本项目中,"ssm+mysql+Redis实现简易的高并发模拟" 是一个典型的Web应用架构,用于处理大量并发请求。SSM是Spring、Spring MVC和MyBatis的缩写,这是一种流行的Java Web开发框架组合,而MySQL是常用的开源关系型...

    MySQL数据库高可用高并发集群实战演练视频教程

    通过以上内容的学习,可以全面掌握MySQL数据库的设计、管理和优化技能,尤其是在构建高可用、高并发的企业级应用时所需的关键技术点。这些知识点不仅适用于MySQL本身,在其他关系型数据库系统中也具有广泛的参考价值...

    高并发 高负载 web应用系统架构-数据库架构策略

    标题和描述概述的是“高并发高负载Web应用系统架构中的数据库架构策略”,这涉及到了数据库在Web应用系统中如何应对大规模用户访问、处理大量数据时的性能和稳定性问题。随着Web应用规模的增长,数据库作为数据存储...

    Druid简单高性能MySQL连接池

    Druid是阿里巴巴开源的一款高效、强大的数据库连接池组件,它在Java编程中广泛应用于大数据量、高并发的Web应用中。Druid不仅提供了基础的数据库连接池功能,还集成了监控、SQL解析、参数绑定等多个高级特性,为开发...

    MySQL高级 锁机制

    MySQL的锁机制是数据库管理系统中用于控制并发操作的重要机制,对于多用户环境下的数据一致性、事务隔离性和系统性能有着至关重要的影响。本文将深入探讨MySQL的高级锁机制,包括表锁和行锁,并提供一些优化建议。 ...

    2020PHP,Linux,mvc,mysql,redis缓存,高并发面试题集合大全.zip

    这份资源包"2020PHP,Linux,mvc,mysql,redis缓存,高并发面试题集合大全.zip"显然是为了帮助求职者准备IT行业的技术面试,特别是针对PHP、Linux、MVC架构、MySQL数据库和Redis缓存技术以及高并发场景的问题。...

    高并发web架构完整1

    在当今互联网行业中,随着用户数量的急剧增长,Web应用必须具备处理高并发请求的能力,才能确保服务的稳定性和用户体验。本资料旨在深入探讨如何设计和实施这种能够应对大规模并发访问的Web架构。 第一部分:基础...

    nodejs封装好的mysql数据库模块,带mysql连接池以及百万测试数据

    本模块基于Node.js实现了对MySQL数据库的封装,利用了mysql连接池来优化性能,并且包含了用于测试的百万级数据,确保了在大数据量场景下的稳定性和效率。以下将详细介绍该模块的关键知识点: 1. **Node.js与MySQL**...

    MySQL高并发场景实战.rar

    MySQL作为世界上最受欢迎的开源关系型数据库管理系统,在处理高并发场景时扮演着重要角色。本实战教程将深入探讨如何优化MySQL以应对高并发挑战。 首先,我们需要理解“高并发”这个概念。高并发是指在短时间内有...

    Mysql 高级编程

    MySQL支持多线程和高并发,适用于多种应用场景,从嵌入式系统、小型Web网站到大型企业级应用。 MySQL的历史可以追溯到1985年,由一群瑞典开发者创建,最初是为了支持他们的想法而开发了自己的数据库系统。他们最初...

    非常全面的高性能高并发服务器架构解决方案

    在当前的互联网时代,高性能高并发服务器架构已经成为网站运营商和开发者的必备技术之一。本文将从高性能高并发服务器架构的优化心得、架构设计问题、负载均衡技术、开源平台的高并发集群思考等多方面详细介绍高性能...

Global site tag (gtag.js) - Google Analytics