PHP:抽象PDO数据库。性能注意事项

时间:2013-02-07 22:35:01

标签: php performance design-patterns pdo

我正在PHP中构建数据库的抽象层。

我使用PDO,一切都在纯粹的命令式脚本中完美运行。

现在我想将这一堆代码(一个Web服务API)交换到一个带有MVC的OOP方法,我试图将数据库接口抽象为具有调用(如种族数据库环境中)getRaceList();或getRookieAthlets();从其他地方出来并提供给他们。

如果我在persistance类中执行类似的操作,那将会很有效。

class Persistantance{

   //other methods

/**
 * return all races
 **/
public function getRaces(){

    $result = null;
    try {   
        $db = $this->connect(); //return a PDO object
        $query = "SELECT races.title, races.year, races.id FROM races;";
        //here use prepared statement statements if needed
        $result = $db->query($query);
        $races = array();
        foreach ($result as $record) {
            //here insert $record in $races
        }
        $result->closeCursor();

        $db = null;
    }catch(PDOException $e){
        // Print PDOException message
        echo $e->getMessage();
    }
    return $races;
}
}

class View{
    public function viewRaces(){
        //...
        $races = $pers->getRaces();
        foreach($races as $race)
            printRecord($race);
        //...
    }
}

它会工作,但就像$ stmnt-> fetchAll()一样,它的内存非常密集,因为它会将所有内容都带入内存。 Db非常大,但是由于这种混乱,我不太可能得到非常大的数组,但我想知道一个模式尽可能与大小无关。 另一方面,如果我构建一个迭代器,我会使Persistance接口复杂化很多(我想分发接口):

//from a view class
perist->a_query()
repeat untill null
    perist->fetch_last_query_next()
perist->close_conn()

此外,如果不使用多个迭代器方法使接口复杂化,就不可能并行执行更多查询。

0 个答案:

没有答案