ホームページ  >  記事  >  バックエンド開発  >  PHP プログラミングにおける垂直シャーディングと水平シャーディングの最適化の実践

PHP プログラミングにおける垂直シャーディングと水平シャーディングの最適化の実践

王林
王林オリジナル
2023-06-22 21:35:101188ブラウズ

インターネット ビジネスの継続的な発展とデータ量の増加に伴い、単一のデータベース サーバーではビジネス ニーズを満たすことができなくなりました。この場合、データベースの水平シャーディングおよび垂直シャーディングテクノロジーが登場しました。この記事では、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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。