我想弄清楚在PHP中處理數據庫通信的最佳方式,通過FastCGI進行MySQL設置並使用PHP-FPM;這是一個比較繁重的站點,每秒有100到1,000個SQL查詢,所以我希望儘可能提高效率。PHP,MySQL,FastCGI - 處理很多查詢的最佳方式
我正在重寫部分網站,並在新代碼中使用PDO,並通過執行database :: insertEmployee($ name,$ SIN,$ DOB,$ position)來處理DB查詢和連接。 。我擔心的是每個查詢都會建立一個新的PDO連接。我應該試圖建立一個持久連接?
class database
{
protected $dbh;
protected static $instance;
private function __construct()
{
try {
// building data source name from config
$dsn = 'mysql:=' . DB_Config::read('db.host') .
';dbname=' . DB_Config::read('db.name');
$user = DB_Config::read('db.user');
$password = DB_Config::read('db.password');
$this->dbh = new PDO($dsn, $user, $password);
$this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
//@TODO-KP: log and alert
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
}
public static function getInstance()
{
if (!isset(self::$instance)) {
$object = __CLASS__;
self::$instance = new $object;
}
return self::$instance;
}
public static function insertEmployee($name, $position, $SIN, $DOB)
{
$dbi = self::getInstance();
try {
$sthEmployee = $dbi->dbh->prepare('INSERT INTO employees SET
name = :name
, position = :position
, SIN = :SIN
, DOB = :DOB'
);
$sthEmployee->bindParam(':name', $name);
$sthEmployee->bindParam(':position', $position);
$sthEmployee->bindParam(':SIN', $SIN);
$sthEmployee->bindParam(':DOB', date('Y-m-d G:i:s', $DOB));
return $sthEmployee->execute();
} catch (PDOException $e) {
//@FIXME-KP: log and alert
print "Error!: " . $e->getMessage() . "-- name [$name]";
return '';
}
}
}
有關最有效方法的任何想法將非常非常感激!
凱瑟琳。
我認爲第一步是確定正在運行的實際查詢。我不確定你會每秒插入1000名員工。 – Sebas
:)你是對的,insertEmployee是一個虛擬函數。我正在使用的應用程序查詢數據庫的下一個內容,查看日誌內容,日誌點擊操作等。 – Kate