非常に同時のWebアプリケーションを構築する場合、データベース接続のオーバーヘッドは、無視できないパフォーマンスボトルネックです。各要求とのデータベース接続を再確立することは、リソースを無駄にするだけでなく、頻繁に接続中断を引き起こす可能性もあります。この問題を解決するために、PHPはデータベース接続を持続するメカニズムを提供します。ここで、 Connect()関数は特定の拡張機能(MySQL、PostgreSQLなど)で永続的な方法で使用でき、それによりシステムのパフォーマンスと安定性が効果的に向上します。
永続的な接続とは、リクエストが完了した後、PHPスクリプトがデータベースとの接続を閉じることはないが、後続のリクエストを再利用するために接続プールの接続を保持することを意味します。これにより、頻繁に「接続ディスコネクトリコネクト」プロセスが回避され、サーバーの負荷が削減されます。
MySQLを例にとると、PHPのMySQLI拡張機能とPDO拡張機能の両方を、永続的な接続を使用するように構成できます。これがmysqliを使用した例です。
<?php
$host = 'p:localhost'; // プレフィックスに注意してください 'p:' 永続的な接続を示します
$user = 'db_user';
$password = 'db_pass';
$database = 'example_db';
$conn = new mysqli($host, $user, $password, $database);
if ($conn->connect_error) {
die("接続に失敗しました: " . $conn->connect_error);
}
echo "永続的な接続に正常に!";
?>
上記のコードでは、 P:プレフィックスをホスト名に追加することにより、 MySQLIは永続的な接続を確立しようとします。接続プールに利用可能な接続が既にある場合は、再利用してください。それ以外の場合は、新しい接続が作成されます。
PDOは、永続的な接続をセットアップするためのよりエレガントな方法を提供します。
<?php
$dsn = 'mysql:host=localhost;dbname=example_db';
$user = 'db_user';
$password = 'db_pass';
$options = [
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
];
try {
$pdo = new PDO($dsn, $user, $password, $options);
echo "PDO 永続的な接続に正常に!";
} catch (PDOException $e) {
echo "接続に失敗しました: " . $e->getMessage();
}
?>
PDO :: ATTR_PERSISTENTを使用すると、ホストアドレスを変更せずに永続的な接続を簡単に有効にすることができます。
パフォーマンスの改善:頻繁な接続の作成によって引き起こされるCPUとメモリオーバーヘッドを避けてください。
より速い応答:接続が既に存在し、データベース操作はほぼすぐに実行できます。
リソースの再利用:複数のリクエストが接続リソースを共有し、データベースサーバーの圧力を軽減できます。
永続的な接続には多くの利点がありますが、注意すべき潜在的な問題もいくつかあります。
接続リークリスク:コードロジックがトランザクションまたは閉鎖ステートメントを正しく処理しない場合、リソースが接続にバックログされる場合があります。
接続ステータスの汚染:接続は複数のリクエスト間で再利用され、各リクエストが開始される前に接続ステータスがクリーニングされることを確認する必要があります。
接続の数:永続的な接続のリリースは簡単ではなく、データベースへの接続の最大数を説明する場合があります。データベースレベルで合理的に構成することをお勧めします。
接続するリモートデータベースアドレスがdb.m66.netであり、PDOを使用して永続的な接続を実現するとします。