Rumah >pembangunan bahagian belakang >tutorial php >Amalan pengoptimuman kolam sambungan dalam pengaturcaraan PHP
Memandangkan perniagaan aplikasi Internet secara beransur-ansur menjadi lebih kompleks, pangkalan data telah menjadi bahagian yang sangat diperlukan dalam aplikasi. Dalam pembangunan aplikasi PHP, menyambung ke pangkalan data telah menjadi tugas biasa dalam kerja harian. Walau bagaimanapun, jika sambungan pangkalan data tidak dioptimumkan, anda mungkin menghadapi masalah berikut:
1 Sambungan pangkalan data yang kerap
2. Pangkalan Data Sambungan tamat masa atau terputus sambungan, menyebabkan pengecualian aplikasi.
class DBHelper { private $pool = array(); private static $instance; private $max_size = 10; private $dsn = ''; private $username = ''; private $password = ''; private function __construct($dsn, $username, $password) { $this->dsn = $dsn; $this->username = $username; $this->password = $password; } public static function getInstance($dsn, $username, $password) { if (self::$instance == null) { self::$instance = new DBHelper($dsn, $username, $password); } return self::$instance; } }Dalam pembina, kita perlu memasukkan DSN, nama pengguna dan kata laluan pangkalan data. Pada masa yang sama, kami juga menetapkan max_size, yang mewakili nilai maksimum kapasiti kumpulan sambungan. Seterusnya, kita perlu menulis kaedah getConnection untuk mendapatkan sambungan pangkalan data. Kaedah ini mula-mula akan mendapatkan sambungan yang tersedia daripada kumpulan sambungan Jika tiada sambungan tersedia dalam kumpulan sambungan, buat sambungan baharu, jika tidak, kembalikan sambungan yang tersedia.
public function getConnection() { foreach ($this->pool as &$conn) { if ($conn['status'] == 1) { $conn['status'] = 0; return $conn['pdo']; } } if (count($this->pool) < $this->max_size) { $pdo = new PDO($this->dsn, $this->username, $this->password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $this->pool[] = array( 'pdo' => $pdo, 'status' => 0 ); return $pdo; } }Dalam kaedah getConnection, kami mula-mula melintasi semua sambungan dalam kumpulan sambungan dan mendapatkan sambungan melahu untuk digunakan. Jika tiada sambungan tersedia dalam kumpulan sambungan, tentukan sama ada kumpulan sambungan telah mencapai kapasiti maksimum, dan jika tidak, buat sambungan baharu. Jika tidak, null dikembalikan, menunjukkan bahawa kumpulan sambungan telah mencapai had atas. Selain itu, kami juga perlu menulis kaedah releaseConnection, yang digunakan untuk mengembalikan sambungan ke kolam sambungan.
public function releaseConnection($pdo) { foreach ($this->pool as &$conn) { if ($conn['pdo'] == $pdo) { $conn['status'] = 1; break; } } }Dalam kaedah releaseConnection, kami merentasi semua sambungan dalam kumpulan sambungan, cari sambungan yang sepadan dengan parameter masuk $pdo, dan tetapkan status sambungan kepada 1, menunjukkan bahawa ia kini melahu sambungan. Bahagian 3: Amalan AplikasiDalam aplikasi sebenar, kita boleh membuat contoh kelas DBHelper dahulu, dan kemudian mendapatkan sambungan pangkalan data melalui tika ini.
$dsn = 'mysql:dbname=test;host=127.0.0.1'; $username = 'root'; $password = 'password'; $dbHelper = DBHelper::getInstance($dsn, $username, $password); $pdo = $dbHelper->getConnection();Selepas menggunakan sambungan pangkalan data, kami perlu mengembalikan sambungan ke kumpulan sambungan Ini boleh menghalang aplikasi daripada terlalu banyak menduduki sambungan pangkalan data dan menjejaskan prestasi aplikasi.
// 业务逻辑处理 // ... // 归还连接 $dbHelper->releaseConnection($pdo);Bahagian 4: RingkasanDalam artikel ini, kami memperkenalkan kaedah pengurusan sambungan pangkalan data berdasarkan pengumpulan sambungan. Dengan menggunakan kumpulan sambungan, kami boleh mengelak daripada kerap membuka dan menutup sambungan pangkalan data, mengurangkan bilangan sambungan pangkalan data dan meningkatkan prestasi aplikasi. Pada masa yang sama, kami melaksanakan kumpulan sambungan mudah dengan menulis kod PHP, yang boleh digunakan dalam aplikasi praktikal. Perlu diambil perhatian bahawa penyatuan sambungan bukanlah satu peluru perak dan boleh menyebabkan masalah jika digunakan secara tidak betul. Sebagai contoh, jika saiz kolam sambungan ditetapkan terlalu kecil, aplikasi mungkin tidak dapat mendapatkan sambungan yang mencukupi jika saiz kolam sambungan ditetapkan terlalu besar, ia mungkin menduduki terlalu banyak sumber memori. Oleh itu, apabila menggunakan kolam sambungan, anda perlu membuat tetapan yang munasabah berdasarkan keperluan aplikasi.
Atas ialah kandungan terperinci Amalan pengoptimuman kolam sambungan dalam pengaturcaraan PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!