PHP RestAPI MySQL База данных нескольких подключений - PullRequest
0 голосов
/ 03 июня 2018

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

1 Ответ

0 голосов
/ 03 июня 2018

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...