应用场景是这样的:有一个类,里面大约26、7个函数,其中约一半的函数是涉及数据库增删改查操作的,在这些函数中又有8个是频繁查询和更新数据库信息的(来自前台的Ajax定时请求);其余的函数不涉及数据库操作,但有Rest http数据加载。
    有两种选择:
      1.在每个函数中连接和断开数据库,
      2.在构造函数中连接数据库,在析构中断开
    第一种照顾不涉及数据库操作的函数,但是会造成频繁的链接和断开,尤其是定时请求的函数;第二种方法不会频繁连接和断开,但是是持续连接,而且这个类贯穿业务流程的整个生命周期,可能造成数据库连接上限到顶。
    大家给点意见吧

解决方案 »

  1.   

    第一种和第二种效果一样
    在脚本开始定义一个数据库对象或变量,在函数里通过global调用
    在脚本结束时断掉相对来说第二种方法较好
      

  2.   


    class youclassname {
        ......
        static $db;
        function __construct(){}    function getDB(){
            if (!self::$db) self::$db = new db();
            return self::$db;
        }    function youdbmethod($sql){
            $this->getDB()->query($sql);
        }    function __destruct(){
            if (self::$db) self::$db->close();
        }}
      

  3.   

    为啥设计时不考虑连接池呢?用微软的压力测试工具 web stress application,来做压力,虽然不专业,但是可以看到效果,,
      

  4.   

    方法1和方法2其实是一样的 没有任何区别 析构是自动调用 就算自己没有写关闭操作 忘记了 PHP页面也会在载入的瞬间释放掉内存 如果是害怕MySQL上限 可以在放进global数组里,限制连接的数量 就如同工厂模式 就是连接池了 不过高并发的情况下 只有master-slave集群才是办法 再怎么牛B 几百万的PV 不做集群 还是会爆的
      

  5.   

    而且你应该搞清楚ajax请求和数据库请求之间的关系。两次ajax请求之间,根本就处于两个不同的进(线)程。除非你用的是长连接,否则根本没有可能共用同一个数据库连接。
      

  6.   

    支持而且你应该搞清楚ajax请求和数据库请求之间的关系。两次ajax请求之间,根本就处于两个不同的进(线)程。除非你用的是长连接,否则根本没有可能共用同一个数据库连接。