MySQL サブデータベースとテーブルの完全ガイド: 初心者からマスターまでの上級ガイド!

みなさんこんにちは、テクノロジー大好きプログラマーのXiaomiです。今日は、開発者や DBA にとって非常に重要なトピックである MySQL のサブデータベースとサブテーブルのテクノロジについてお話します。

 

サブライブラリ、サブテーブルとは何ですか?

まず、サブデータベースとサブテーブルとは何かを理解しましょう。データベースとテーブルのシャーディングとは、もともと単一のデータベースに格納されていたデータを複数のデータベースまたは複数のデータ テーブルに分割することを指しますこの目的は、データベースのスケーラビリティとパフォーマンスを向上させ、データ量と同時アクセスの観点から単一データベースのボトルネックを解決することです。

サブデータベースサブテーブルが必要な理由

では、なぜサブデータベースやサブテーブルが必要なのでしょうか? 主に以下の理由が考えられます。

  • まず、ビジネスが発展し、データ量が増加し続けると、単一データベースのストレージ容量では需要を満たせなくなる可能性があります。このとき、サブデータベースを介してデータを複数のデータベースに分散し、システム全体の記憶容量を向上させることができます。
  • 次に、同時アクセスが多いことも考慮する必要がある問題です。アクセス量が多すぎると、1 つのデータベースで同時に大量のリクエストを処理できなくなる可能性があります。テーブル分割により、特定のルールに従ってデータを複数のテーブルに分割し、同時リクエストのバランスの取れた分散を実現し、システムの同時処理能力を向上させることができます。

水平サブライブラリ

水平シャーディングとは、特定のルールに従ってデータを複数のデータベースに分散することです。一般的なルールには、データのハッシュ値に基づく、時間範囲に基づく、またはビジネスの次元に基づくなどが含まれます。水平シャーディングを通じて、データをさまざまなデータベース インスタンスに分散して、データのオフロードと負荷分散を実現できます。

水平シャーディングの概念を説明するために、電子商取引プロジェクトを例に挙げてみましょう。私たちの電子商取引システムには数千の商品があり、各商品には大量の注文データがあると仮定します。製品 ID の範囲に応じて、異なる範囲の製品を異なるデータベースに保存できます。たとえば、製品 ID は 10,000 に制限され、10,000 未満の製品はデータベース A に保存され、10,000 を超える製品はデータベース B に保存されます。このようにして、各データベースは製品データの一部を処理するだけで済み、データベースの同時処理能力が向上します。

レベルスコア表

水平テーブルシャーディングは、特定のルールに従って同じデータベース内の異なるテーブルにデータを分散することです。この方法は、1 つのテーブル内のデータ量が多すぎてクエリと書き込みのパフォーマンスが低下する状況に適しています。水平テーブル シャーディングにより、データをさまざまなテーブルに分散して、クエリのパフォーマンスと書き込み速度を向上させることができます。

水平サブテーブルの応用例を見てみましょう。電子商取引プロジェクトでは、注文テーブルを時間ディメンションに従って複数のテーブルに分割できます。たとえば、各月の注文データは、order_202101、order_202102 などの別個のテーブルに保存されます。このようにすると、各テーブルのデータ量が比較的少なくなり、クエリと更新操作をより迅速に実行できるようになり、システムの応答速度が向上します。

垂直サブライブラリ

垂直シャーディングとは、ビジネス機能に応じてデータを異なるデータベースに分散することです。異なるビジネス機能を異なるデータベースに独立して存在させることができるため、各ビジネスが互いに独立し、データベース間の関連性や依存性が軽減されます。

水平分割に加えて、垂直分割も考慮できます。電子商取引プロジェクトでは、商品情報と注文情報は 2 つの独立したモジュールであり、アクセス モードやデータ特性が異なる場合があります。製品情報は別のデータベースに保存し、注文情報は別のデータベースに保存できます。これにより、異なるデータベース間のアクセスが相互に影響を与えなくなり、システム全体のパフォーマンスが向上します。

垂直テーブル

テーブルの垂直分割とは、単一のテーブルを列の特性に応じて分割することです。ビジネス機能またはアクセス頻度に応じてテーブル内の列を分割すると、各テーブル内の列の数が減り、クエリのパフォーマンスとストレージ効率が向上します。

電子商取引プロジェクトでは、製品情報テーブルに多数のフィールドが含まれる場合があり、一部のフィールドは更新頻度が低く、他のフィールドはより頻繁に更新されます。フィールドの更新頻度に応じてテーブルを垂直に分割し、更新頻度が低いフィールドを独立したテーブルに分割できます。たとえば、製品の基本情報と説明情報を 1 つのテーブルに格納し、在庫情報と価格情報を別のテーブルに格納します。このようにして、頻繁に更新されるフィールドによるテーブル全体のロックを軽減し、システムの同時実行パフォーマンスを向上させることができます。

サブデータベース、サブテーブルをサポートするミドルウェア

実際のアプリケーションでは、いくつかのミドルウェアを使用してサブデータベースとサブテーブルの機能を実現できます。より一般的に使用されるものには、ShardingSphere、MyCat、Vitess などが含まれます。これらのミドルウェアは、SQL を解析して書き換え、データを正しいデータベースまたはデータ テーブルにルーティングし、サブデータベースとテーブルの詳細を非表示にし、便利なインターフェイスと管理ツールを提供できます。

サブデータベースとサブテーブルに従う原則

データベースとテーブルをシャーディングする際には、従う必要がある原則がいくつかあります。電子商取引プロジェクトを例として、私がまとめたいくつかの原則を以下に示します。

  1. ビジネスシナリオに応じてセグメント化します。たとえば、製品情報と注文情報を別のデータベースに分割します。
  2. データベース間のトランザクションを避けてください。たとえば、注文を行う場合、製品在庫と注文テーブルを同時に操作する必要がある場合、製品在庫情報を注文テーブルに冗長化して、データベース間のトランザクションのオーバーヘッドを回避できます。
  3. ライブラリ間の結合操作は避けてくださいたとえば、注文をクエリするときは、複数のテーブル間の結合操作を避けるようにしてください。冗長データまたはテーブルのグループ化により、データベース間の結合の可能性を減らすことができます。
  4. データ範囲を合理的に分割します。例えば、データベースは製品IDの範囲に応じて分割され、データテーブルは時間の次元に応じて分割されます。
  5. シャード キーは賢明に選択してください。シャード キーの選択は重要であり、データのスキューやホットスポットの問題を回避するために、データの特性とクエリ モードに基づいて選択する必要があります。
  6. インデックスを適切に計画してください。クエリのシナリオとデータ分散ルールに従って、適切なインデックス戦略を選択し、クエリの効率を向上させます。
  7. ハードウェア リソースの合理的な割り当て。サブデータベースとサブテーブルはシステムのハードウェア リソースの消費量を増加させるため、システムのパフォーマンスと安定性を確保するには、実際の状況に応じて合理的に構成する必要があります。
  8. 定期的なメンテナンスと監視。データベースをテーブルに分割した後は、システムの安定稼働を確保するために、問題をタイムリーに検出して解決するために、定期的なメンテナンスと監視が必要です。
  9. 柔軟な拡張と移行。ビジネスの発展に応じて、システムの拡張性を確保するために、データベースやデータテーブルを柔軟に拡張および移行する必要があります。
  10. バックアップとリカバリの戦略。データベースとテーブルをシャーディングした後は、データのセキュリティと信頼性を確保するために、バックアップとリカバリの戦略もそれに応じて調整する必要があります。

提案

最後に、次のようなアドバイスをしたいと思います。

  • できれば分割しないようにしてください。データベースとテーブルのシャーディングは、システムの複雑さとメンテナンスのコストを増加させます。データベースとテーブルのシャーディングは、データ量と同時アクセスが一定のレベルに達した場合にのみ検討してください。
  • セグメント化する場合は、適切なセグメント化ルールを選択し、事前に計画する必要があります。ビジネスの特性とニーズに応じて、適切なセグメンテーション ルールを選択して、後からの調整や変更を回避します。
  • データのセグメント化では、データの冗長性またはテーブルのグループ化を通じてデータベース結合の失敗の可能性を減らすように努める必要があります。頻繁なデータベース間結合操作を回避するには、冗長データまたはテーブルのグループ化を通じてデータベース間結合の可能性を減らすことができます。
  • データベースミドルウェアはデータ結合実装のメリットとデメリットを把握することが難しく、高いパフォーマンスを実現することが非常に難しいため、ビジネス読み取りでは複数テーブル結合の使用をできるだけ少なくし、クエリに関連付けられるテーブルは最大 3 つまでにする必要があります。 。複数テーブルの結合操作の頻度を減らすと、システムのクエリ パフォーマンスが向上します。

終わり

上記の内容が、皆さんが MySQL サブデータベースとテーブル テクノロジーを理解するのに役立つことを願っています。MySQL のデータベースとテーブルのシャーディングは複雑かつ重要なテクノロジであり、実際のアプリケーションでは、ビジネス ニーズと実際の状況に基づいて合理的に設計および調整する必要があります。ご質問がございましたら、コメント欄に残していただければ、できる限りお答えさせていただきます。ご協力ありがとうございました!

ご質問や技術的な共有がある場合は、私の WeChat 公開アカウント「それが何なのか、なぜなのかを知る」をフォローしてください。

 

おすすめ

転載: blog.csdn.net/en_joker/article/details/131111570