Я новичок в программировании (особенно в PHP). Я пишу простой PHP-сайт. Я также использую базу данных PostgreSQL. Вот мой маленький класс для работы с базой данных.PHP PostgreSQL открытое/закрытое соединение
class dbWorker {
private static $conString = "host=localhost port=5432 dbname=myDB user=postgres password=root";
public static function execute($sql) {
$db_conn = pg_connect(self::$conString) or die('Could not connect: ' . pg_last_error());
pg_query($sql) or die('Query error: ' . pg_last_error());
pg_close($db_conn);
return;
}
public static function queryOne($sql) {
$allData = self::queryAll($sql);
if ($allData) {
return $allData[0];
}
return null;
}
public static function queryAll($sql) {
$db_conn = pg_connect(self::$conString) or die('Could not connect: ' . pg_last_error());
$qu = pg_query($db_conn, $sql) or die('Query error: ' . pg_last_error());
$retval = [];
while ($data = pg_fetch_object($qu)) {
$retval[] = $data;
}
pg_free_result($qu);
pg_close($db_conn);
if (!empty($retval)) {
return $retval;
}
return null;
}
}
Это довольно удобно, используя это. Но когда я использую этот класс 10-20 раз на странице - время загрузки страницы занимает около 5-6 секунд. Затем я удалил следующие строки:
pg_free_result($qu);
pg_close($db_conn);
После этого время загрузки страницы составило 161 миллисекунду.
Вопрос в том, как лучше организовать этот процесс.
Должен ли я написать что-то вроде этого?
dbWorker::open_connection();
...
all my functions calls (like getComments(), getMessages(), getTasksList() ect.)
...
dbWorker::close_connection();
На данный момент я новичок, и я ищу простое решение. (Заранее спасибо за помощь и извините за мой английский)
Да, нет смысла открывать и закрывать соединение несколько раз на одной странице. Я не знаю, есть ли какое-либо значение при явном закрытии соединения, если это веб-страница. – halfer
Во-первых, почему вы хотите многократно открывать и закрывать соединение с базой данных для одной страницы? Это только приводит к проблемам с производительностью. Во-вторых, всегда используйте пул соединений, например pgBouncer или pgPool, для повышения производительности и масштабируемости. –