複数ノードでデータベースを運用! MariaDB Galera ClusterとPHP/PDOで実現する高可用性Webアプリケーション
PHP/PDO MariaDB Galera Cluster プログラミング解説
MariaDB Galera Clusterとは、複数のノードで構成されるデータベースクラスタシステムです。高い可用性とスケーラビリティを実現し、大量のデータ処理やミッションクリティカルなアプリケーションに適しています。
PHPは、Webアプリケーション開発に広く使用されるプログラミング言語です。PDOは、PHPにおけるデータベース操作のための拡張ライブラリで、さまざまなデータベースとの接続と操作を可能にします。クラスターコンピューティングは、複数のコンピュータを連携させて処理能力を高める技術です。
PHP/PDO MariaDB Galera Clusterでは、PDOを用いてMariaDB Galera Clusterに接続し、データの読み書きや操作を行います。クラスターコンピューティングの特性を活用することで、高可用性とスケーラビリティを実現したWebアプリケーションを構築することができます。
接続と操作
MariaDB Galera Clusterに接続するには、PDOのdsn
オプションに以下の情報を含めます。
$dsn = "mysql:host=node1;dbname=test;port=3306";
上記の情報は、接続先のノードアドレス、データベース名、ポート番号を表しています。
接続後は、PDOのメソッドを用いてデータ操作を行います。例えば、以下のようにデータを取得できます。
try {
$dbh = new PDO($dsn, $username, $password);
$stmt = $dbh->prepare("SELECT * FROM users");
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo $row["name"] . " " . $row["email"] . "\n";
}
} catch (PDOException $e) {
echo $e->getMessage();
}
高可用性
MariaDB Galera Clusterは、複数のノードで構成されるため、1つのノードが故障しても他のノードがデータ処理を継続することができます。これは、高可用性と呼ばれる機能であり、ミッションクリティカルなアプリケーションにとって重要な要件です。
スケーラビリティ
接続とデータ挿入
<?php
$dsn = "mysql:host=node1;dbname=test;port=3306";
$username = "user";
$password = "password";
try {
$dbh = new PDO($dsn, $username, $password);
$sql = "INSERT INTO users (name, email) VALUES (?, ?)";
$stmt = $dbh->prepare($sql);
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $email);
$name = "John Doe";
$email = "[email protected]";
$stmt->execute();
echo "Data inserted successfully\n";
} catch (PDOException $e) {
echo $e->getMessage();
}
このコードでは、PDOを用いてMariaDB Galera Clusterに接続し、users
テーブルにデータを挿入します。
データ取得
<?php
$dsn = "mysql:host=node1;dbname=test;port=3306";
$username = "user";
$password = "password";
try {
$dbh = new PDO($dsn, $username, $password);
$sql = "SELECT * FROM users";
$stmt = $dbh->prepare($sql);
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo $row["name"] . " " . $row["email"] . "\n";
}
} catch (PDOException $e) {
echo $e->getMessage();
}
データ更新
<?php
$dsn = "mysql:host=node1;dbname=test;port=3306";
$username = "user";
$password = "password";
try {
$dbh = new PDO($dsn, $username, $password);
$sql = "UPDATE users SET email = ? WHERE id = ?";
$stmt = $dbh->prepare($sql);
$stmt->bindParam(1, $email);
$stmt->bindParam(2, $id);
$email = "[email protected]";
$id = 1;
$stmt->execute();
echo "Data updated successfully\n";
} catch (PDOException $e) {
echo $e->getMessage();
}
データ削除
<?php
$dsn = "mysql:host=node1;dbname=test;port=3306";
$username = "user";
$password = "password";
try {
$dbh = new PDO($dsn, $username, $password);
$sql = "DELETE FROM users WHERE id = ?";
$stmt = $dbh->prepare($sql);
$stmt->bindParam(1, $id);
$id = 1;
$stmt->execute();
echo "Data deleted successfully\n";
} catch (PDOException $e) {
echo $e->getMessage();
}
注意事項
MariaDB Galera Cluster 接続の代替方法
MySQLクライアントライブラリ
MariaDB Galera Clusterは、標準のMySQLクライアントライブラリと互換性があります。そのため、mysql
コマンドやMySQLドライバを用いたアプリケーションでも、MariaDB Galera Clusterに接続することができます。
<?php
$host = "node1";
$port = 3306;
$username = "user";
$password = "password";
$database = "test";
$conn = mysql_connect("$host:$port", $username, $password);
if (!$conn) {
die("Connection failed: " . mysql_error());
}
mysql_select_db($database, $conn);
$sql = "SELECT * FROM users";
$result = mysql_query($sql, $conn);
if (mysql_num_rows($result) > 0) {
while ($row = mysql_fetch_assoc($result)) {
echo $row["name"] . " " . $row["email"] . "\n";
}
} else {
echo "0 results";
}
mysql_close($conn);
PHP Data Objects (PDO) Extension
PDOは、PHPにおけるデータベース操作のための拡張ライブラリです。MySQLだけでなく、MariaDB Galera Clusterを含む様々なデータベースとの接続と操作を可能にします。
<?php
$dsn = "mysql:host=node1;dbname=test;port=3306";
$username = "user";
$password = "password";
try {
$dbh = new PDO($dsn, $username, $password);
$sql = "SELECT * FROM users";
$stmt = $dbh->prepare($sql);
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo $row["name"] . " " . $row["email"] . "\n";
}
} catch (PDOException $e) {
echo $e->getMessage();
}
MySQLi Extension
MySQLiは、PHPにおけるMySQLデータベース操作のための拡張ライブラリです。PDOよりも古いライブラリですが、高速で効率的な処理が可能です。
<?php
$host = "node1";
$port = 3306;
$username = "user";
$password = "password";
$database = "test";
$conn = new mysqli($host, $username, $password, $database, $port);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT * FROM users";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
echo $row["name"] . " " . $row["email"] . "\n";
}
} else {
echo "0 results";
}
$conn->close();
上記以外にも、MariaDB Galera Clusterに接続するための様々なライブラリが提供されています。例えば、以下のライブラリが挙げられます。
これらのライブラリは、それぞれ異なる機能や特性を提供しています。
適切な方法の選択
MariaDB Galera Clusterに接続する方法は、開発者の好みやアプリケーションの要件によって異なります。
- シンプルさ: PDOは、シンプルで使いやすい方法です。
- パフォーマンス: MySQLiは、PDOよりも高速で効率的な処理が可能です。
- 機能: PHPGaleraやGalera Connectorのようなライブラリは、より高度な機能を提供する場合があります。
- クラスタ管理: MySQLnd-muxは、クラスタ管理機能を提供します。
php pdo cluster-computing