这是个简单却难以回答得圆满的问题:
做一个大型的网站,就是LAMP系统,在程序后台有很大的计算量,这些计算量都要访问MySQL数据库。请问,在做设计时,这些大计算量的程序,是放在PHP里用一些PHP自定义函数来实现更好,还是做成MySQL的存储过程和触发器,用MySQL的存储过程和触发器来实现更好?类似的,比如我用SQL Server 2000 + C#来开发一个大型网站,或者功能型网站,最好把需要大量计算的部分放在SQL Server 2000的存储过程和触发器里实现,而前台使用C#来调用这些存储过程和触发器。但是PHP + MySQL的情况可能不一样,这一点因为我没有做过PHP + MySQL的大型网站,所以不清楚是否该采用这样的方法来设计。我是基于这么考虑的:
第一,使用存储过程和触发器,减少外部程序对数据库的访问,就少了PHP对MySQL数据库N次访问的时间消耗。第二,使用预编译的SQL语句,也许对MySQL来说执行效率会更快一些。我的犹豫是:
第一,某些地方的说明是,PHP的处理速度非常快,要高于数据库的处理速度,如果我使用PHP本身来做大量的计算,可能相反速度高于使用数据库的计算速度第二,某些地方的说明是,MySQL的存储过程能力还不是很成熟,这一点是否会影响到MySQL对预编译的SQL语句的执行效率。
需要说明的是,我眼下用的开发调试平台是:
WindowsXP + IIS5 + PHP5.2 + MySQL5.0
做一个大型的网站,就是LAMP系统,在程序后台有很大的计算量,这些计算量都要访问MySQL数据库。请问,在做设计时,这些大计算量的程序,是放在PHP里用一些PHP自定义函数来实现更好,还是做成MySQL的存储过程和触发器,用MySQL的存储过程和触发器来实现更好?类似的,比如我用SQL Server 2000 + C#来开发一个大型网站,或者功能型网站,最好把需要大量计算的部分放在SQL Server 2000的存储过程和触发器里实现,而前台使用C#来调用这些存储过程和触发器。但是PHP + MySQL的情况可能不一样,这一点因为我没有做过PHP + MySQL的大型网站,所以不清楚是否该采用这样的方法来设计。我是基于这么考虑的:
第一,使用存储过程和触发器,减少外部程序对数据库的访问,就少了PHP对MySQL数据库N次访问的时间消耗。第二,使用预编译的SQL语句,也许对MySQL来说执行效率会更快一些。我的犹豫是:
第一,某些地方的说明是,PHP的处理速度非常快,要高于数据库的处理速度,如果我使用PHP本身来做大量的计算,可能相反速度高于使用数据库的计算速度第二,某些地方的说明是,MySQL的存储过程能力还不是很成熟,这一点是否会影响到MySQL对预编译的SQL语句的执行效率。
需要说明的是,我眼下用的开发调试平台是:
WindowsXP + IIS5 + PHP5.2 + MySQL5.0
WindowsXP + IIS5 + PHP5.2 + MySQL5.0
-----晕,你做LAMP你还不配置一个环境啊。
---这不是大问题.php也有很好的跨平台性
WIN很大部分是为了迎合以前的ASP用户而产生的.
postgresql
或者oracle
如果你的网站访问量很多,那么产生的数据库连接会很多,因此
1 需要减少单个连接访问数据库的时间好加快释放;
2 减少数据库查询所以说,如果在访问数据库的同时还有大量复杂耗时的计算的话,呢可能需要改变策略,否则单个连接将占用大量时间,连接很长时间才被释放,导致数据库资源消耗严重。
这个无论什么数据库都会有问题,如果你的应用在sql server 2000没有问题,那么在mysql上也没问题。(前提是数据量别太庞大,否则无论你如何做mysql都不行)
(所以某程度上说提供访问量用人民币技术也不为过)如果并发数比较低(服务器少必然不可能很高),而且web和db混合的话,
瓶颈会在数据库连接上,这是我征询过不下20个网管的普遍结论
所以应把计算转嫁到php上,如果执行时间较长的计算甚至应该转嫁到“富客户端”
再用ajax把计算结果重新传到php再进行下一步操作除非你有需要对算法进行保密,否则应该多考虑利用客户端的能力
并且数据库的服务器和程序服务器是分开的,甚至连数据库服务器都有负载平衡
我个人觉得网站的规模大到一定限度的时候,在软件上的提高也就这么点了,反而硬件上的提高才是最重要的
建议有些不需要经常更改的数据可以做成缓存文件, 可以减少访问MySQL 的次数!
还有如果Money够多的话, 数据库服务器可以用独立的主机!
跟人有关
连接查询次数多的可以生成缓存吧或者学google自己做个WEB服务-_-!
招聘人数2-3名
职位描述: 基于 PHP + MySQL 开发网站程序
任职资格 :
1、精通使用 Apache + PHP + MySQL进行WEB的开发;
2、掌握UML,至少熟练掌握一种UML建模工具;
3、具有文档编写能力,面向对象的编程思想,优良的编程风格和习惯;
4、计算机相关学历;有两年以上的php脚本开发经验;
5、对软件开发工作有富有热情,工作责任心强,富于团队精神和敬业精神;待遇根据能力定薪金,具体待遇面议,保证不低于同行业水平,有意者请发电子邮件到Email:[email protected]
工作地点:
北京望京科技园利泽中园或北京电子城科技园区 [靠近望京和酒仙桥地区]
==>嗯:希望在每句sql 执行前先explain 一道。对大量数据不怎么更新的数据,可以转成全文检索类型,(要加个中文补丁) 长期对表进行维护。没有企业级需求时数据库不要用innodb 存储引擎。我的犹豫是:
第一,某些地方的说明是,PHP的处理速度非常快,要高于数据库的处理速度,如果我使用PHP本身来做大量的计算,可能相反速度高于使用数据库的计算速度.
第二,某些地方的说明是,MySQL的存储过程能力还不是很成熟,这一点是否会影响到MySQL对预编译的SQL语句的执行效率。
总之优化大型网站我所知道的必要的几个东西.
1 crond 用计划任务来处理一些东西。使数据库压力分散。
2 网站静态化。减少访问数据库次数。
3 查询优化。
4 数据库集群,(服务器不够?先做个M/s结构,让s来分担search 任务。)
如果是大型网站那硬件也必须跟上,所以我的解决方法就是在硬件上,尽可能的把最常用的应用单独放到一台服务器上,网站和数据库要用集群,有条件的话直接上阵列,程序上静态化,这样的做法一般的大型网站还是可以胜任的,但如果并发数达到5w或更大的话就只能再加服务器或用其它办法了,具体可以参考google的做法。