У меня есть класс базы данных на php, который подключается к базе данных при запуске и используется для выполнения запросов и возврата данных из базы данных пользователям через запрос RestAPI.Проблема, с которой здесь сталкиваются, заключается в том, что каждый раз, когда пользователь делает запрос HTTP, новый класс базы данных инициируется, и новое соединение устанавливается на каждый запрос, выполняемый пользователем с использованием RestAPI.
Класс базы данных выглядит следующим образом:
<?php
class DbHandler
{
private $conn;
function __construct()
{
require_once dirname(__FILE__) . '/db_connect.php';
$db = new DbConnect();
$this->conn = $db->connect();
}
public function getSpotlight($user_id) {
$stmt = $this->conn->prepare("SELECT *, (SELECT COUNT(*) FROM followers WHERE following = u.id) as followers, (SELECT COUNT(*) FROM posts WHERE user_id = u.id) as totalPosts from users u WHERE u.id NOT IN (select if(user_id = :var1, user_with, user_id) from friends where user_id = :var1 OR user_with = :var1) AND u.id != :var1 order by followers desc limit 10;");
$stmt->bindParam(":var1", $user_id);
$stmt->execute();
$users = $stmt;
$stmt = null;
return $users;
}
DbConnect выглядит следующим образом:
<?php
class DbConnect
{
private $conn;
function __construct()
{
}
function connect()
{
include_once dirname(__FILE__) . '/config.php';
$host = DB_HOST;
$db_name = DB_NAME;
$user = DB_USERNAME;
$pass = DB_PASSWORD;
$this->conn = new PDO("mysql:host=$host;dbname=$db_name", $user, $pass);
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
return $this->conn;
}
}
?>
Таким образом, теперь, когда пользователь вызывает index.php, запускается новый класс базы данных и каждый раз, когда выполняется запрос, новое соединение устанавливается каждый раз и послезапрос завершен, он закрывается.
Это не было проблемой, пока у нас не было более 1000 пользователей, и каждый раз это увеличивает время отклика, и я проверял список процессов в MySQL, и соединения увеличивались и выходили, и новыесоединения были.
Я совершенно не уверен, что должно быть решением этой проблемы.Есть ли какой-нибудь подход, который делает постоянным соединение с этим файлом DbHandler?или есть другие подходы в PHP, которые мы могли бы реализовать.Готов услышать решения для этой проблемы.