在對一個相當大的應用程序(350個表db,某些表上的幾百萬個條目)中實現的不同庫/框架進行了一些研究後,我發現Zend_Db很容易完成我想要做的事情:適配器管理數據庫之間快速切換。Zend_Db性能
的問題是,表演也相當低廉,這裏有一個例子($ DB是一個基本適配器,時間計算上的選擇/只取):
SQL查詢(用於查詢進行檢測,該表包含〜200種元素)
SELECT * FROM element WHERE id=2'
基本PDO - 0.6392s
$db = new PDO('mysql:dbname=etab_191;host=127.0.0.1', 'root');
for ($i=0; $i<2000; $i++) {
$stmt = $db->query($sql);
$p = $stmt->fetch(PDO::FETCH_OBJ);
$stmt->closeCursor();
}
當前的應用程序的數據庫管理器 - 0.7401s(超過mysqli的核心功能簡單抽象層)
$db = GestionConnexionBDD::getInstance('default', 1)->gestionBDD;
for ($i=0; $i<2000; $i++) {
$res = $db->query($sql);
$p = $db->fetchObject($res);
$db->freeResult($res);
}
Zend_Db的手動查詢 - 1.0647s(Mv_Core_Db_Manager是基於Zend的一個抽象層,返回的列表一個Zend_Db_Adapter_Abstract)
$db = Mv_Core_Db_Manager::getInstance()->getAdapter('default', 1);
for ($i=0; $i<2000; $i++) {
$stmt = $db->query($sql);
$p = $stmt->fetch();
$stmt->closeCursor();
}
Zend_Db_Table_Abstract查詢 - 3.6702s(扭捏與Zend_Db_Table_Abstrac T :: setDefaultMetadataCache($緩存))
$elmt = new Element();
for ($i=0; $i<2000; $i++) {
$elmt->find(2);
}
查詢環路上殺死zend的表演。我知道這不是最好的事情,但是應用程序已經開發出來了,我很樂意改變可能的代碼。
有些想法?難道我做錯了什麼 ?
我認爲你必須在你的Zend_Db_Table_Abstract例如代碼中的錯誤:'$ DB->使用fetchall($ SQL) ;'不適合。 – cypherabe
謝謝,我改變了fetchOne() – kitensei
仍然,我想知道爲什麼你同時執行Zend_Db_Table_Abstract類的find()和Zend_Db_Adapter類的獲取操作; – cypherabe