インターネット ビジネスの継続的な発展とデータ量の増加に伴い、単一のデータベース サーバーではビジネス ニーズを満たすことができなくなりました。この場合、データベースの水平シャーディングおよび垂直シャーディングテクノロジーが登場しました。この記事では、PHP プログラミングにおける垂直シャーディングと水平シャーディングの最適化の実践について説明します。
1. 垂直シャーディング
垂直シャーディングとは、ビジネス ロジックに基づいて、単一データベース内のデータを異なるデータベースに分散することを指します。垂直シャーディングの利点は、テーブル (コレクション) 内のレコード数を減らし、データ クエリの時間を短縮できることです。読み取りが多く書き込みが少ないビジネス シナリオの場合、垂直シャーディングによりデータベースの読み取りおよび書き込みのパフォーマンスと安定性が向上します。
PHP プログラミングでは、垂直シャーディングを実装するには、ビジネス ロジックに従ってデータを分類する必要があります。たとえば、電子商取引 Web サイトでは、製品情報、ユーザー情報、注文情報を異なるデータベースに保存できます。 PHP コードでは、PDO を通じて複数のデータベースに接続し、さまざまなデータベースに対して追加、削除、変更、クエリ操作を実行できます。
サンプルコード:
$pdo1 = new PDO("mysql:host=localhost;dbname=db1", "user", "password"); $pdo2 = new PDO("mysql:host=localhost;dbname=db2", "user", "password"); $pdo3 = new PDO("mysql:host=localhost;dbname=db3", "user", "password"); // 查询商品信息 $pdo1->query("SELECT * FROM products"); // 添加用户信息 $pdo2->query("INSERT INTO users(name, age) VALUES('Tom', 18)"); // 查询订单信息 $pdo3->query("SELECT * FROM orders");
2. 水平シャーディング
水平シャーディング (水平シャーディング) とは、単一のテーブル (コレクション) のデータを異なるデータベースに分散することを指します。データを異なるデータベースに割り当てることができます。水平シャーディングの利点は、複数のデータベース サーバーのパフォーマンスを最大限に活用し、データベースの読み書き機能と信頼性を向上できることです。
PHP プログラミングで水平シャーディングを実装するには、ビジネス ロジックに基づいてテーブル データを異なるデータベースに分割する必要があります。例えば、注文テーブルをユーザーIDごとに分割し、異なるユーザーからの注文を異なるデータベースに振り分けて管理することができます。 PHP コードでは、アルゴリズムを通じてデータを断片化し、異なるデータベースに書き込むことができます。
サンプル コード:
// 根据用户ID计算数据库编号 function getDbIndex($userId, $dbCount) { return $userId % $dbCount; } // 获取数据库连接 function getPdo($userId) { $dbCount = 3; // 数据库数量 $dbIndex = getDbIndex($userId, $dbCount); $dsn = "mysql:host=localhost;dbname=db" . ($dbIndex + 1); return new PDO($dsn, "user", "password"); } // 添加订单信息 function addOrder($userId, $product, $price) { $pdo = getPdo($userId); $pdo->query("INSERT INTO orders(user_id, product, price) VALUES($userId, '$product', $price)"); } // 查询订单信息 function queryOrder($userId) { $pdo = getPdo($userId); $pdo->query("SELECT * FROM orders WHERE user_id=$userId"); }
3. 包括的なアプリケーション
PHP プログラミングでは、垂直シャーディングと水平シャーディングを包括的に適用することで、データベースのパフォーマンスと信頼性をさらに向上させることができます。 。たとえば、電子商取引 Web サイトでは、製品情報、ユーザー情報、注文情報を異なるデータベースに保存し、ユーザー ID に基づいて注文テーブルを異なるデータベースに分散できます。 PHP コードでは、複数の PDO 接続を通じて分散データを追加、削除、変更、クエリできます。
サンプル コード:
// 根据用户ID查询订单信息 function queryOrder($userId) { $pdo1 = new PDO("mysql:host=localhost;dbname=db1", "user", "password"); $pdo2 = new PDO("mysql:host=localhost;dbname=db2", "user", "password"); $pdo3 = new PDO("mysql:host=localhost;dbname=db3", "user", "password"); // 查询商品信息 $pdo1->query("SELECT * FROM products"); // 查询用户信息 $pdo2->query("SELECT * FROM users WHERE id=$userId"); // 根据用户ID查询订单信息 $pdo3->query("SELECT * FROM orders WHERE user_id=$userId"); } // 添加订单信息 function addOrder($userId, $product, $price) { $dbCount = 3; // 数据库数量 $dbIndex = getDbIndex($userId, $dbCount); $dsn = "mysql:host=localhost;dbname=db" . ($dbIndex + 1); $pdo = new PDO($dsn, "user", "password"); $pdo->query("INSERT INTO orders(user_id, product, price) VALUES($userId, '$product', $price)"); }
4. 概要
垂直シャーディングと水平シャーディングは、インターネット ビジネスで一般的に使用されるデータベース最適化テクノロジであり、データベースの読み取りおよび書き込みパフォーマンスを効果的に向上させることができます。データベースと信頼性。 PHP プログラミングでは、分散データの追加、削除、変更、クエリ操作を複数の PDO 接続を通じて実現でき、システムのパフォーマンスと信頼性をさらに向上させることができます。
以上がPHP プログラミングにおける垂直シャーディングと水平シャーディングの最適化の実践の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。