Web サイトのビジネスが急速に発展すると、Web サイトのトラフィックも増加し、プレッシャーがかかります。データに関する負荷も増加します。たとえば、電子商取引システムの場合、ダブル イレブン プロモーションは、数十万の同時 TPS を伴う注文データに多大な負荷をかけます。従来のアーキテクチャ (1 つのマスターと複数のスレーブ) が使用されている場合、 、メインのデータベース容量は、間違いなくそのような高い Tps を満たすことはできません。ビジネスはますます大きくなり、単一のテーブル データがデータベースでサポートされる容量を超え、永続ディスク IO、従来のデータベース パフォーマンスのボトルネック、製品ビジネスマネージャー - プログラムを変更し、データベースナイフセグメンテーションを最適化する必要があります。データベース接続の数が不十分であり、テーブル内のデータが膨大であるため、最適化後もクエリのパフォーマンスが依然として低いため、分割が必要です。
サブデータベースとサブテーブルのソリューションは、リレーショナルのデータ ストレージとアクセス メカニズムを補足するものです。データベース。
#サブライブラリ: 1 つのライブラリのデータを複数の同一のライブラリに分割し、アクセス中に 1 つのライブラリにアクセスします
##テーブル分割:1 つのテーブルのデータを複数のテーブルに分割し、対応するテーブルを操作します
(1) データベースの垂直分割
ビジネスに応じて分割すると、図に示すように、電子商取引システムは注文ライブラリ、会員ライブラリ、製品ライブラリに分割されます(2) テーブルの垂直分割
図に示すように、業務に応じてテーブルを分割し、user テーブルを user_base テーブルと user_info テーブルに分割します。use_base はログインの格納を担当し、user_info はログインの格納を担当します。基本的なユーザー情報の保存垂直分割の特徴:
#利点:
#分割後、ビジネスが明確になります (特別なデータベースはビジネスごとに分割されます)
単一テーブル内のデータ量が多い場合、書き込みと読み取りの負荷が高くなります
これは、特定のビジネスによって決定または制限されます。つまり、ビジネスがデータベースに影響を与えることがよくあります。 ボトルネック (ダブル イレブンのラッシュ セールなどのパフォーマンスの問題)
一部のビジネスは結合に関連付けることができず、Java プログラム インターフェイス経由でのみ呼び出すことができるため、開発の複雑さが増大します
2. 水平分割
図に示すように、メンバー データベースに応じて分割、メンバー 1 データベース、メンバー 2 データベースに分割、userId、userId 末尾で分割数値 0 ~ 5 は 1 データベース、6 ~ 9 は 2 データベースです。他の方法もあります。剰余を取得して、偶数を 1 データベースに入れます。奇数をデータベース 2( 2) テーブルを水平に分割します
##図に示すように、users テーブルを users1 テーブルと users2 テーブルに分割します。users2 テーブルは userId に基づいて分割され、係数は次のようになります。偶数は users1 テーブルに配置され、奇数は users2 テーブルに配置されます。
#他の水平分割方法:
Range は各データベース内の連続データを分割するために使用され、通常は時間範囲に基づいて使用されますが、最新のデータはホットスポットが発生しやすく、大量のトラフィックが発生するため、一般的にはあまり使用されません上、メリット:拡張するときは月ごとにライブラリを用意するだけなので非常に楽 新しい月が来たら自然と新しいライブラリを書くことになる デメリット:ほとんどのリクエストが最新データにアクセスする実際の運用環境での範囲の使用はシナリオによって異なります。ユーザーは最新のデータにアクセスするだけでなく、現在のデータと履歴データにも均等にアクセスします。
(3)水平分割機能
各ライブラリ(テーブル)の構造は同じです
(4) 水平型のメリットとデメリットsplit
利点:
単一データベース/単一テーブルのデータは一定量に維持 (削減) されます。パフォーマンスの向上
分割テーブルは同じ構造を持ち、プログラムの変更が少なくて済みます。
#欠点:
shardingsphere 、 tddl
mycat、mysql-proxy (360)
jdbc 直接接続層は、すべてのシャーディング ルールとすべてのシャーディング ロジックのため、jdbc アプリケーション層とも呼ばれます。 , 分散トランザクションの処理に関するこれらすべての問題を含む すべてはアプリケーション層にあります. すべてのプロジェクトは war パッケージで構成されています. すべてのフラグメントは jar パッケージとして書き込まれ、war パッケージに配置されます. Java を実行するには仮想マシンが必要です. 仮想マシンが実行されるときマシンが実行されると、war パッケージは次のようになります 内部のバイト ファイルは classLoder によって jvm メモリにロードされます すべてのシャーディング ロジックはメモリ側に基づいて動作します
#(2) プロキシ層
図に示すように、プロキシ層、すべてのシャーディング ルール、分散トランザクションの処理を含むすべてのシャーディング ロジックはすべて mycat で記述され、すべてのシャーディング ロジックは mycat に基づいて操作されます。 mycat
(3) jdbc 直接接続層とプロキシ層のメリットとデメリット
jdbc 直接接続層はパフォーマンスが高く、Java 言語のみをサポート、クロスデータベースをサポートします
以上がMySQLでサブデータベースとテーブルを作成する方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。