php不适合处理大数据 php yield 处理大数据( 三 )


Intel(R) Xeon(R) CPUE@ GHz
软件相关
Nginx nginx version: nginx/built by gcc (Red Hat )
Php (采用php fpm)
PHP (cP) (built: Mar: : )
Copyright (c) The PHP Group
Zend Engine v Copyright (c) Zend Technologies
with eAccelerator v Copyright (c) eAccelerator by eAccelerator
bingo
PHP框架
其他说明
目标机器的部署方式 nginx php fpm php脚本
测试压力机器和目标机器独立部署
裸PHP性能
最简单的PHP脚本
?php
require_once ‘ /actions/indexAction php’;
$objAction = new indexAction();
$objAction init();
$objAction execute();
?
Acitons/indexAction php里面的代码如下
?php
class indexAction
{
pubPc function execute()
{
echo ‘helloworld!’;
}
}
?
通过压力工具测试结果如下
裸PHP框架性能
为了和 的对比 基于bingo 框架实现了类似的功能 代码如下
?php
require_once ‘Bingo/Controller/Front php’;
$objFrontController = Bingo_Controller_Front::getInstance(array(
‘actionDir’ = ‘ /actions’
));
$objFrontController dispatch();
压力测试结果如下
从该测试结果可以看出框架虽然有一定的消耗 但对整体的性能来说影响是非常小的
标准PHP模块的基准性能
所谓标准PHP模块 是指一个PHP模块所必须要具体的基本功能
路由分发
自动加载
LOG初始化Notice日志打印 所以的UI请求都一条标准的日志
错误处理
时间校正
自动计算每个阶段耗时开销
编码识别编码转化
标准配置文件的解析和调用
采用bingo 的代码自动生成工具产生标准的测试PHP模块 test
测试结果如下
结论
从测试数据的结论来看 PHP本身的性能还是可以的 基准性能完全能够达到几千甚至上W的QPS 至于为什么在大多数的PHP模块中表现不佳 其实这个时候更应该去找出系统的瓶颈点 而是简单的说OK PHP不行 那我们换C来搞吧 (下一个章节 会通过一些例子来对比 采用C来处理不见得有特 别的优势)
通过基准数据 可以得出以下几个具体的结论
PHP本身性能也很不错 简单功能下能够达到 QPS 极限也能过W
PHP框架本身对性能影响非常有限 尤其是在有一定业务逻辑和数据交互的情况下 几乎可以忽略
一个标准的PHP模块 基准性能能够达到 QPS( cpu idle)
对比分析
lishixinzhi/Article/program/PHP/201311/21287
PHP的算法可以实现大数据分析吗1.Bloom filter
适用范围:可以用来实现数据字典,进行数据的判重,或者集合求交集
基本原理及要点:
对于原理来说很简单,位数组+k个独立hash函数 。将hash函数对应的值的位数组置1,查找时如果发现所有hash函数对应位都是1说明存在,很明显这个过程并不保证查找的结果是100%正确的 。同时也不支持删除一个已经插入的关键字,因为该关键字对应的位会牵动到其他的关键字 。所以一个简单的改进就是 counting Bloom filter,用一个counter数组代替位数组 , 就可以支持删除了 。
还有一个比较重要的问题,如何根据输入元素个数n,确定位数组m的大小及hash函数个数 。当hash函数个数k=(ln2)*(m/n)时错误率最小 。在错误率不大于E的情况下 , m至少要等于n*lg(1/E)才能表示任意n个元素的集合 。但m还应该更大些 , 因为还要保证bit数组里至少一半为 0,则m 应该=nlg(1/E)*lge 大概就是nlg(1/E)1.44倍(lg表示以2为底的对数) 。
举个例子我们假设错误率为0.01 , 则此时m应大概是n的13倍 。这样k大概是8个 。

推荐阅读