Лучший способ создать класс соединения для массовых множественных соединений - PullRequest
0 голосов
/ 22 мая 2019

Мне хотелось бы получить несколько советов о том, как создать класс соединений с базой данных, эффективный для обработки от 200 до 600 соединений в секунду в PHP. Буду признателен за любые советы о методах использования или настройках сервера.

Ответы [ 3 ]

0 голосов
/ 22 мая 2019

Mysql по умолчанию для одновременного соединения 150. ваш предел намного выше, чем это. вам придется реализовать кеш потоков кеш таблицы кеш запросов

В PHP вам придется использовать одноэлементный класс для создания соединений, чтобы соединения использовались повторно. Маленький бывший -

function connect()
{
   static $connection;
      if($connection == null)
      {
        $dsn = "mysql://{$username}:{$password}@{$hostName}/{$databaseName}";

            $connection = DB::connect($dsn);

            if (DB::isError($connection))
            {
                echo "db connect error";
                return FALSE;
            }  
      }
}

В коде каждый вызов connect () не заканчивается созданием нового соединения. Новое соединение создается только для самого первого вызова connect (), последующие вызовы connect () используют то же соединение.

0 голосов
/ 22 мая 2019

С точки зрения PHP ничего особенного делать нельзя.Любой класс, который разумно разработан, подойдет.Вы только должны убедиться, что соединение выполняется только один раз за выполнение скрипта.Если ваш код - это традиционное PHP-спагетти, подойдет синглтон.Однако для объектно-ориентированного кода вместо этого рекомендуется использовать внедрение зависимости.

200–600 соединений в секунду - это тоже не проблема.Это не потребует столько одновременных подключений, если ваша база данных работает быстро.Например, если ваш PHP-скрипт работает в течение 0,1 секунды, он потребует скромного количества 60 одновременных подключений, что не составляет большого труда.

0 голосов
/ 22 мая 2019

MySQL имеет max_connections , который должен быть установлен для покрытия общего количества соединений. back_log . Отставание действует только в качестве sysctl для Linux net.core.somaxconn (по умолчанию 128).

Кэш потоков также важно учитывать, чтобы гарантировать, что потоки не создаются при каждом соединении.

Рекомендовать прочитать через клиентские подключения mysql . Настройте ссылки, соответствующие вашей версии MySQL.

Никаких рекомендаций по PHP от меня. https://dba.stackexchange.com/ рекомендуется для вопросов базы данных, http://serverfault.com/ может дать вам подсказки для множества соединений. Не используйте крошечный виртуальный сервер и не ожидайте большой производительности.

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