すべてのプロダクト
Search
ドキュメントセンター

PolarDB:透過的な分散

最終更新日:Aug 13, 2026

このトピックでは、PolarDB-X における透過的な分散とは何か、またその仕組みについて説明します。

背景情報

従来のスタンドアロン MySQL データベースで実行されるアプリケーションがリソースやパフォーマンスのボトルネックに直面した場合、ユーザーはビジネス要件を満たすための実証済みの効果的なソリューションとして、データベースを分散データベースにアップグレードします。

しかし、アップグレード後、ユーザーは分散データベースを使用する上で、次のような問題に直面する傾向があります。

  • データはデータベース全体にどのように分散されているのか?

  • どのテーブルを水平分割する必要があるのか? テーブルをどのようにパーティショニングし、どのパーティションキーを使用すべきか? テーブルの適切なパーティション数はいくつか?

  • 自分のデータはどのデータノードに格納されているのか? リソースの不均衡にはどのように対処すればよいのか?

これらの問題を解決するには、ユーザーは分散データベースの仕組みと、利用できるシナリオを理解する必要があります。分散データベースを適切に活用することは容易ではありません。

分散データベースをより使いやすくし、スタンドアロンデータベースからのアップグレードを容易にするために、Alibaba Cloud は PolarDB-X 2.0 でカーネル内透過分散機能を提供します。

説明

この機能は、AUTO モードのデータベースのみをサポートしています。

透過的な分散とは

PolarDB-X 2.0 の透過的分散機能は、デフォルトのパーティショニングポリシーとデフォルトのデータ分散ポリシーを提供するため、ユーザーはアプリケーションを変更することなく分散データベースに接続してパフォーマンスを向上させることができます。

透過的な分散の中核となる機能は、ユーザーがテーブルのパーティション方式と、テーブルデータの PolarDB-X データノード (DN) への分散を決定するのを支援することです。

従来のスタンドアロン MySQL データベースから分散型 PolarDB-X データベースに切り替えるユーザーにとって、業務テーブルを作成するための SQL ステートメントは 2 つのカテゴリに分類されます。

  • カテゴリ 1:SQL ステートメントが MySQL パーティショニング構文を明示的に使用していない場合。これらの SQL ステートメントを使用して作成されたテーブルは、非パーティション MySQL テーブルと呼ぶことができます。

  • カテゴリ 2:SQL ステートメントが MySQL パーティショニング構文を明示的に使用している場合 (例: Partition By Hashs(id) を含む SQL ステートメント) 。これらの SQL ステートメントを使用して作成されたテーブルは、パーティション MySQL テーブルと呼ぶことができます。

ユーザーがカテゴリ 2 のステートメントを使用してテーブルを作成した場合、ビジネス要件に合わせたパーティショニング方式を選択したと見なされます。その理由は、ステートメントが MySQL のパーティショニング構文を明示的に使用しているためです。これらのテーブルは、PolarDB-X によっても手動パーティションテーブルと見なされます。これらのテーブルのパーティションは、負荷分散のために DN に均等に分散されます。

カテゴリ 1 のステートメントから大量に生成されるテーブルは、ユーザーがパーティショニングスキームとデータ分散スキームを選択するのを支援することを目的とした、PolarDB-X の透過的な分散の焦点となります。

PolarDB-X の透過的な分散機能は、カテゴリ 1 のステートメントから作成されたテーブル用に、3 つのパーティショニングおよびデータ分散スキームを提供します:

  • 非パーティションテーブル: この方式では、PolarDB-X はテーブルをパーティション化せずに、固定の DN を割り当てます。これにより、ユーザーは従来のスタンドアロン MySQL テーブルと同じようにテーブルを使用できます。

  • シャードテーブル: この方式では、PolarDB-X 内で MySQL テーブルはパーティション化されません。ただし、テーブルは自動的にシャーディングされ、DNs に分散されます。

  • パーティションテーブル:この方式では、パーティション化されていない MySQL テーブルが PolarDB-X によって自動的にパーティション化されます。

    • プライマリテーブルは、主キーに基づいて HASH で水平パーティショニングされます。

    • デフォルトでグローバルインデックスが使用され、インデックス列に基づいて水平パーティショニングが実行されます。

したがって、透過的な分散機能は、テーブルのパーティショニングおよびデータ分散スキーマに基づいて、3 つのモードで動作します。

  • テーブルシャーディング

  • 自動パーティショニング

  • 手動パーティショニング (デフォルト)

透過的な分散の動作モード

アプリケーションを分散データベースに接続する際、特に初めて接続する場合には、希望するパーティショニングまたはデータ分散スキーマに基づいて、ビジネス要件に適した動作モードを選択できます。

次の表では、各動作モードのメリットとデメリットについて説明します。

動作モード

説明

メリットとデメリット

テーブルシャーディング

論理データベース内のすべてのテーブルについて:

  • 論理テーブルで MySQL のパーティショニング構文が明示的に使用されていない場合、そのテーブルはパーティション化されず、負荷分散のために PolarDB-X の DN にランダムに分散されます。

  • 論理テーブルが MySQL パーティショニング構文を明示的に使用している場合、テーブルはパーティション化され、各パーティションは DN に均等に分散されます。

メリット:

  • アプリケーションの変更が不要で使いやすい。

  • SQL 互換性が最も高い。

  • SQL クエリのパフォーマンスが MySQL に最も近い。

デメリット:

  • テーブルのアクセス頻度とスキャン行数の違いにより、DN 間で負荷が不均衡になる。

自動パーティショニング

論理データベース内のテーブルが MySQL パーティショニング構文を明示的に使用していない場合:

  • テーブルは主キーに基づいて自動的に水平パーティショニングされます。

  • グローバルインデックスが自動的に使用され、インデックス列に基づいて水平パーティショニングが実行されます。

メリット:

  • アプリケーションの変更がほぼ不要で使いやすい。

  • 水平スケーラビリティ。

デメリット:

  • 複数のグローバルインデックスを維持する必要があるため、書き込みスループットが低下する。

  • グローバルインデックスのホットスポットが異なるため、DN 間で負荷が不均衡になり、スケーラビリティが低下する。

手動パーティショニング (デフォルト)

論理データベース内のすべてのテーブルについて:

  • 論理テーブルが MySQL パーティショニング構文を明示的に使用していない場合、テーブルは非パーティションテーブルと見なされ、同じ DN に割り当てられます。

  • 論理テーブルが MySQL パーティショニング構文を明示的に使用している場合、テーブルはパーティション化され、各パーティションは DN に均等に分散されます。

メリット:

  • さまざまなビジネスシナリオへの適応性。

  • 最適なパフォーマンス、負荷分散、および線形スケーラビリティを提供。

デメリット:

  • 理解と使用が比較的困難。

  • アプリケーションの変更が必要。

説明

3 つの動作モードは組み合わせて使用できます。たとえば、複数の要件を満たすために、手動パーティショニングをテーブルシャーディングまたは自動パーティショニングと組み合わせて使用できます。

モードの適したシナリオの詳細については、「ベストプラクティス」をご参照ください。