ビジネスの発展とデータ量の増加に伴い、単一のデータベース テーブルでは大量のデータを保存および管理できなくなることがよくあります。現時点では、データベース シャーディングは非常に必要なデータ管理方法となっています。この記事では、PHP を使用してデータベース テーブル パーティショニングを実装する方法を紹介します。
1. データベーステーブルとは何ですか?
データベース分割とは、特定のルールに従って大きなデータベース テーブルを複数の比較的小さなテーブルに分割し、これらのテーブルを別々に格納することです。この方法では、分散された方法でデータベースにデータを保存し、データベースのパフォーマンスを最適化し、データを管理できます。
2. データベースのサブテーブルが必要なのはなぜですか?
1. 大量のデータを保存する
テーブル内のデータの量が多い場合、クエリ、更新、削除などの操作に時間がかかり、パフォーマンスに影響します。データベースをテーブルに分割すると、データを複数のテーブルに分散できるため、1 つのテーブルのデータ量が小さくなり、運用効率が向上します。
2. テーブル ロックと行ロックを回避する
複数のアプリケーションが同じテーブルの読み取りと書き込みを行うと、読み取りと書き込みの競合が発生し、テーブル ロックと行ロックが発生します。データベース シャーディングを使用すると、特定のルールに従ってデータを複数のテーブルに分散できるため、同じテーブルの読み取りと書き込みが減り、この状況を効果的に回避できます。
3. ビジネス管理と分類
データベース テーブルのシャーディング方法は、ビジネス ニーズに応じて分類することも、ビジネス管理とクエリを容易にするために別個のデータベースとテーブルに実装することもできます。
3. PHP を使用してデータベース テーブルのパーティショニングを実装するにはどうすればよいですか?
1. テーブル パーティショニング戦略
データベース パーティショニングでは、特定の戦略に従ってテーブルを分割する必要があります。一般的な方法は次のとおりです。
(1) 年、月、日などで表を分割するなど、時間に従って分割します。
(2) 注文テーブル、ユーザーテーブル、商品テーブルなど、データの種類ごとに分割します。
(3) データのサイズに応じて分割する たとえば、最大 100,000 件のデータのみを格納するテーブルを設定すると、超過したデータは自動的に新しいテーブルに格納されます。
さまざまなビジネス ニーズに基づいて、特定のテーブル シャーディング戦略を開発します。
2. テーブル作成ステートメントの生成
PHP を使用してテーブル作成ステートメントを自動生成し、テーブル分割戦略に従って複数のテーブルのテーブル作成ステートメントを自動的に生成します。例として、次のメソッドを使用してテーブル名とテーブル作成ステートメントを生成できます:
$tableName = 'order_'.date('Ym'); $sql = 'CREATE TABLE `'.$tableName.'` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY, `order_no` varchar(20) NOT NULL, `user_id` int(11) unsigned NOT NULL, `status` tinyint(1) NOT NULL DEFAULT '0', `create_time` int(11) unsigned NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8';
3. データの挿入
PHP のプログラム ロジックを通じて、テーブル名とテーブル作成ステートメントを自動的に識別できます。現在挿入されているデータをどのテーブルに格納するかを指定してから、データを挿入します。
$time = time(); $tableName = 'order_'.date('Ym', $time); $sql = 'INSERT INTO `'.$tableName.'` (`order_no`, `user_id`, `status`, `create_time`) VALUES (?, ?, ?, ?)'; $params = ['20210001', 1, 1, $time]; DB::getInstance()->execute($sql, $params);
HereDB::getInstance()
はデータベース接続オブジェクトで、execute()
メソッドは SQL ステートメントを実行するメソッドです。
4. データのクエリ
ほとんどのビジネス シナリオでは、時間またはページごとにデータをクエリしますが、クエリを実行する場合は、さまざまなテーブルを操作してクエリを実行できます。例として、次のメソッドを使用して注文データをクエリできます:
$tableName = 'order_'.date('Ym', $time); $sql = "SELECT * FROM `$tableName` WHERE `user_id` = ?"; $params = [1]; $result = DB::getInstance()->query($sql, $params);
5. テーブル全体を展開します
データ量が増加するにつれて、新しいテーブルを追加する必要があります。データストレージ。新しいテーブルを自動的に生成するには、次のメソッドを使用できます:
for ($i=1; $i<6; $i++) { $dt = strtotime("-$i month"); $tableName = 'order_'.date('Ym', $dt); if (!existTable($tableName)) { $replaceSql = "REPLACE INTO `$tableName` (`order_no`, `user_id`, `status`, `create_time`) VALUES (?, ?, ?, ?)"; $params = [ ['20210001', 2, 1, $dt], ['20210002', 2, 1, $dt], ['20210003', 3, 1, $dt], ['20210004', 2, 1, $dt], ]; foreach ($params as $item) { DB::getInstance()->execute($replaceSql, $item); } } }
上記のコードは、過去 5 か月分の注文テーブルを自動的に生成します。テーブルが存在しない場合は、新しいテーブルを作成して 4 個を挿入します偽のデータのこと。
4. 概要
データベース シャーディングはデータ管理の重要な方法であり、パフォーマンスと管理効率を効果的に向上させることができます。 PHP を使用したデータベース テーブル パーティショニングの実装は比較的簡単で、特定のテーブル パーティショニング戦略を策定し、テーブル作成ステートメントと挿入ステートメントを自動的に生成し、さまざまなテーブルを介してデータ クエリと管理を実行するだけです。
以上がデータベーステーブルのパーティショニングを実装するための PHP メソッドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。