OceanBaseデータベースは、水平スケーリングやデータの動的な均衡化などのロードバランシング機能を提供しています。
水平スケーリングとは、サービスノードの数を調整することでサービス能力の拡張・縮小を実現する機能です。例えば、単一のサービスノードから2つのサービスノードへ拡張することで、サービス能力の拡張が可能になります。同時に、水平スケーリングではデータの再分散もサポートする必要があります。例えば、単一のサービスノードから2つのサービスノードへ拡張する際には、データを2つのサービスノードに均等に分散させる必要があります。逆に、2つのサービスノードを単一のサービスノードへ縮小する場合には、データを再び単一のサービスノードに再分散させる必要があります。
データの動的均衡化とは、サービスノードを変更せずに、データの分布を調整することで各サービスノードの負荷を動的に均衡化する機能です。例えば、テーブルやパーティションが動的に作成または削除されるにつれて、異なるサービスノード間でパーティション数に大きな差が生じ、サービスノードの負荷が不均衡になることがあります。パーティションの動的均衡化機能により、パーティションを各サービスノードに均等に分散させることで、負荷均衡を実現できます。
フォワードスケーリングとリトロスケーリング
OceanBaseデータベースにおけるテナントのストレージ容量および読み書きサービス能力は、主に以下の2つの側面に影響されます:
Unit Number、すなわち各Zoneで提供されるサービスUnitの数
Unit Numberを増減することで、サービスノードを増減し、読み書きサービスとストレージ容量のフォワードスケーリングおよびリトロスケーリングを実現します。
Unit Numberの調整によるテナントのスケーリングの詳細な操作については、Unit Numberの調整によるテナントのスケーリングを参照してください。
Primary Zone、すなわち読み書きサービスを提供するZoneのリスト
最優先のPrimary Zoneの数を増減することで、読み書きサービスを提供するZoneを増減し、Zone間での読み書きサービスのフォワードスケーリングおよびリトロスケーリングを実現します。
Primary Zoneの調整によるテナントのスケーリングの詳細な操作については、Primary Zoneの調整によるテナントのスケーリングを参照してください。
ユーザーは、Unit NumberとPrimary Zoneを動的に調整することで、Zone内およびZone間でのテナントの読み書きサービス能力のフォワードスケーリングおよびリトロスケーリングを実現できます。ロードバランシング機能は、ユーザーのサービス能力設定に基づいて、ログストリームとパーティションの分散を適応的に調整します。
パーティションの均衡化
パーティションの均衡化とは、テーブルやパーティションが動的に変化する状況下で、パーティションの分布を動的に調整することにより、サービスノード上のパーティション数およびストレージ容量の均衡を実現することを指します。
OceanBaseデータベースは、パーティションテーブル、パーティションテーブル、サブパーティションテーブルなど、さまざまなテーブルタイプをサポートしています。異なるタイプのテーブルに対する均衡化戦略はそれぞれ異なります。均衡化効果を容易に説明するために、OceanBaseデータベースでは異なるテーブルパーティションごとに均衡化グループを設定し、各均衡化グループ内でパーティション数の均衡とストレージ容量の均衡を実現します。均衡化グループ間には関係性はなく、内部で自動的に均衡化グループ間の分布関係を調整します。デフォルトでは、OceanBaseデータベースのパーティション均衡化戦略は以下の通りです:
パーティションテーブル:各パーティションテーブルは独立した均衡化グループであり、テーブルのすべてのパーティションが各サービスノードに分散配置されます。
サブパーティションテーブル:各パーティションのすべてのサブパーティションが独立した均衡化グループを形成し、各パーティションのすべてのサブパーティションが各サービスノードに分散配置されます。
パーティションテーブル:すべてのパーティションテーブルを統合的に考慮し、1つの均衡化グループのみが存在し、すべてのパーティションテーブルが各サービスノードに分散配置されます。
さまざまなテーブルデータ間の集約と分散関係をより柔軟に記述するために、OceanBaseデータベースはテーブルグループ(Table Group)という概念を導入しました。
テーブルグループは論理的な概念であり、一連のテーブルの集合を表します。テーブルグループ内のテーブルは物理的に近接しており、関連性のある複数のテーブルは通常同じパーティションルールを持っています。同じルールのパーティションを集約して配置することで、Partition Wise Joinを実現し、読み書き性能を大幅に最適化できます。
OceanBaseデータベースV4.2.0以降では、テーブルグループのSHARDINGプロパティを導入し、テーブルグループ内のテーブルデータの集約と分散関係を制御できるようになりました。テーブルグループのSHARDINGプロパティにはNONE、PARTITION、ADAPTIVEの3つの値があります。
ユーザーは、自身の利用シナリオに応じて適切なSHARDINGプロパティ値を選択できます。
シナリオ1:テーブルグループ内のすべてのテーブルを集約
ユーザーが任意の種類のテーブルを1台のマシン上に集約し、業務の単一アクセスニーズを満たしたい場合は、SHARDING = NONEのテーブルグループを使用して、任意の種類のテーブルを集約できます。
SHARDING = NONEのテーブルグループの意味は以下の通りです:
- パーティションテーブル、パーティションテーブル、サブパーティションテーブルを含む、任意のパーティションタイプのテーブルを追加できます。
- テーブルグループ内のすべてのテーブルのすべてのパーティションを集約し、システムは1台のマシン上でのスケジューリングを保証します。
シナリオ2:テーブルグループ内のテーブルデータの水平分散
単一マシンでは特定のビジネスデータを処理できない場合、ユーザーはデータを複数のマシンに分散配置して水平スケーリングを実現したい場合は、SHARDING = PARTITIONまたはSHARDING = ADAPTIVEのテーブルグループを使用してこのニーズを満たすことができます。
SHARDING = PARTITIONのテーブルグループの意味は以下の通りです:
パーティションテーブルとサブパーティションテーブルを追加できます。
- パーティション方式要件:パーティションのパーティション方式が同一であること。サブパーティションテーブルの場合、システムはパーティションのパーティション方式のみを検証します。したがって、パーティションテーブルとサブパーティションテーブルは同時に存在でき、そのパーティションのパーティション方式が同一であることが求められます。
- パーティション整列ルール:同一のパーティション値のパーティションを集約します。これには、パーティションテーブルのパーティションとサブパーティションテーブルの対応するパーティションのすべてのサブパーティションが含まれます。
テーブルグループ内のすべてのテーブルをパーティション単位で分散します。同時に、サブパーティションテーブルの場合、そのパーティションのすべてのサブパーティションを集約します。
SHARDING = ADAPTIVEのテーブルグループの意味は以下の通りです:
追加できるテーブルはパーティションテーブルまたはサブパーティションテーブルです。
パーティション方式要件:すべてがパーティションテーブル、またはすべてがサブパーティションテーブルであること。パーティションテーブルの場合、パーティションのパーティション方式が同一であること。サブパーティションテーブルの場合、パーティションとサブパーティションのパーティション方式が同一であること。
パーティション整列ルール:
- パーティションテーブル:パーティション値が同一のパーティションを集約します
- サブパーティションテーブル:パーティション値が同一であり、かつサブパーティション値も同一のパーティションを集約します
自動分散方式。テーブルグループ内のすべてのテーブルがパーティションテーブルの場合、パーティション単位で分散します。テーブルグループ内のすべてのテーブルがサブパーティションテーブルの場合、各パーティションのサブパーティション単位で分散します。
テーブルグループの詳細情報と操作については、テーブルグループの作成と管理(MySQLモード)およびテーブルグループの作成と管理(Oracleモード)を参照してください。
データロードバランシング関連の構成パラメータ
enable_rebalance
テナントレベルの構成パラメータ
enable_rebalanceは、システムテナントではテナント間のロードバランシングを行うかどうかを制御し、ユーザーテナントではテナント内のロードバランシングを行うかどうかを制御します。デフォルト値はtrueです。パラメータ
enable_rebalanceの詳細については、enable_rebalance を参照してください。enable_transfer
テナントレベルの構成パラメータ
enable_transferは、テナント内でTransferを行うかどうかを制御します。デフォルト値はtrueです。その中で:パラメータ
enable_rebalanceの値がfalseの場合、パラメータenable_transferの値がtrueであってもfalseであっても、システムは自動的なロードバランシングを行いません。パラメータ
enable_rebalanceの値がtrueであり、かつenable_transferの値もtrueの場合、テナントのスケーリング時にシステムが自動的にテナント内のログストリーム数を調整し、ログストリームの分割、統合、Transferなどの操作を通じて、テナント内のリーダーとパーティションのバランシングを行います。パラメータ
enable_rebalanceの値がtrueであり、かつenable_transferの値がfalseの場合、テナントのスケーリング時にシステムはTransferを行わず、ログストリーム数の変更もありません。既存のログストリームに基づいて、可能な限りログストリームのバランシングを保証します。
パラメータ
enable_transferの詳細については、enable_transfer を参照してください。partition_balance_schedule_interval
テナントレベルの構成パラメータ
partition_balance_schedule_intervalは、パーティションロードバランシングタスクを生成する時間間隔を制御します。これは、enable_rebalanceの値がtrueの場合、システムがpartition_balance_schedule_intervalを時間間隔としてパーティションロードバランシングタスクを自動的にトリガーすることを意味します。デフォルト値は2hで、値の範囲は [0s, +∞) です。0sはパーティションバランシングを無効にすることを表します。パラメータ
partition_balance_schedule_intervalの詳細については、partition_balance_schedule_interval を参照してください。