PHP RestAPI MySQL База данных нескольких подключений

0

У меня есть класс базы данных на 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, которые мы могли бы реализовать. Желаю услышать решения по этой проблеме.

Теги:
rest

1 ответ

0

возможно, это может помочь https://www.phpfastcache.com/ Уменьшить вызовы базы данных/веб-службы

На вашем веб-сайте есть 10 000 посетителей, которые подключены к сети, и ваша динамическая страница должна отправлять 10 000 раз тем же запросам в базу данных или веб-сервис при каждой загрузке страницы.\С phpFastCache ваша страница отправляет только 1 запрос на ваш DB/WS и использует кеш, чтобы обслуживать 9 999 других посетителей.\Вы, очевидно, можете выбрать TTL, который будет соответствовать вашим потребностям.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню