Как часто мне следует закрывать соединения с базой данных? - PullRequest
6 голосов
/ 13 января 2010

В настоящее время я открываю соединение с базой данных при инициализации моего приложения. Это довольно маленькое приложение, PHP, если это актуально.

Должен ли я подключаться к базе данных, совершать вызовы, затем закрывать и повторять этот процесс для каждой функции базы данных, которую я пишу?

Например, у меня есть следующая функция, которая получает переменную $ db из инициализации моего приложения.

function get_all_sections()
{
    global $db;
    $sql = 'select * from sections'; 

    if (!$db->executeSQL($sql, $result))
    {
        throw new Exception($db->getDatabaseError());
        exit();
    }

    $sections = array();

    for ($i = 0; $i < $db->numberOfRows($result); $i++)
    {
        $sections[] = new Section($db->fetchArray($result, MYSQLI_ASSOC));
    }

    return $sections;
}

Было бы лучше, если бы я открыл соединение, а затем закрыл его после извлечения строк? Это похоже на множество соединений, которые открываются и закрываются.

Ответы [ 5 ]

5 голосов
/ 13 января 2010

Если у вас есть пул подключений (http://en.wikipedia.org/wiki/Connection_pool), нормально захватывать новое соединение, когда вам это нужно. ОДНАКО, я бы сказал, что вы привыкли относиться к любому ресурсу как к «ограниченному», и если Вы открываете ручку БД и держите ее как можно дольше.

3 голосов
/ 13 января 2010

Используйте mysql_pconnect для пула соединений и закрывайте в конце каждой операции.Поток действительно не закроется, и поток будет использован повторно.Таким образом, это и безопасно, и эффективно.

3 голосов
/ 13 января 2010

Подключение к базе данных занимает ограниченное количество времени. Это незначительно при соединении через доменный сокет или именованный канал, но оно может быть намного больше, если через сетевое соединение или, что еще хуже, в открытом Интернете. Оставьте его подключенным как минимум к жизни запроса.

2 голосов
/ 13 января 2010

Поскольку соединения PHP MySQL довольно легкие, вы, вероятно, можете открывать и закрывать соединение при необходимости. Это не относится к другим соединениям с базами данных, таким как соединение с SQL Server, которое имеет довольно тяжелые соединения.

Однако во всех случаях делайте все, что в наибольшей степени целесообразно с точки зрения удобства обслуживания / логики / зависимостей. Затем, если вы обнаружите, что чувствуете заметное замедление, вы можете оптимизировать те области, которые нуждаются в ускорении.

В случае сомнений следуйте золотому правилу: не оптимизируйте преждевременно.

1 голос
/ 13 января 2010

Самое простое решение - использовать mysql_pconnect () - см. Здесь

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

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