ハイブリッドパーティションを使用すると、異なるストレージエンジンに保存されているデータにアクセスできます。
ハイブリッドパーティションの仕組みを次の図に示します。
ハイブリッドパーティションテーブルは、パーティションを異なるストレージメディアに保存します。これにより、ホットデータとコールドデータを分離して個別に管理できます。たとえば、ホットデータをローカルPFSに、コールドデータをOSSに保存できます。このアプローチにより、ホットデータに対するクエリパフォーマンスやDML操作に影響を与えることなく、コールドデータのストレージコストを削減できます。
ハイブリッドパーティションテーブル機能は、カナリアリリース中です。この機能を使用するには、クォータセンターにアクセスし、[クォータID] polardb_mysql_hybrid_partition のクォータを見つけて、[アクション] 列の [リクエスト] をクリックします。
前提条件
ご利用のクラスターは、マイナーエンジンバージョン8.0.2.2.5以降のPolarDB for MySQL 8.0.2を実行している必要があります。クラスターバージョンは、「バージョン番号の確認」をご参照ください。
パーティションのデータファイルは、すでにOSSに存在している必要があります。ファイル名は次の命名規則に従う必要があります。
ファイル拡張子とパーティションマーカーは、大文字である必要があります。
テーブル名とパーティション名は、データベース内の名前と同じである必要があります。
たとえば、テーブル
t1のパーティションp1がCSVストレージエンジンを使用する場合、そのデータファイルはt1#P#p1.CSVという名前である必要があります。
重要な注意事項
各ハイブリッドパーティションテーブルには、InnoDBエンジン上に作成されたパーティションが少なくとも1つ含まれている必要があります。
サブパーティションを持つハイブリッドパーティションテーブルを作成する場合、ハッシュパーティションエンジンはテーブルエンジンと一致する必要があります。また、少なくとも1つのサブパーティションがInnoDBエンジン上に作成されている必要があります。
ハイブリッドパーティションテーブルは、
RANGEおよびLISTパーティションタイプのみをサポートします。ハイブリッドパーティションテーブル内のOSSパーティションに対して、
INSERT、UPDATE、DELETE、またはLOADなどのDML操作を実行することはできません。PolarDB for MySQL 8.0.2.2.17以降を実行しているクラスターは、ハイブリッドパーティションテーブルに対する ADD および DROP 操作をサポートします。以前のバージョンでは、これらの操作はサポートされていません。
パラメーター
ハイブリッドパーティションテーブルを使用する場合、ご使用の PolarDB クラスターの パラメーター で、以下のパラメーターを設定する必要があります。
パラメーター | 説明 |
loose_hybrid_partition_query_mix_engine_enabled | クエリがハイブリッドパーティションテーブルをスキャンする方法を制御します。有効な値は次のとおりです:
|
ハイブリッドパーティションの作成
既存のOSSサーバーを使用してハイブリッドパーティションを作成できます。OSSサーバーが存在しない場合は、次の構文を使用して作成できます。
CREATE SERVER oss_server_name
FOREIGN DATA WRAPPER oss
OPTIONS(EXTRA_SERVER_INFO '{"oss_endpoint": "<my_oss_endpoint>",
"oss_bucket": "<my_oss_bucket>", "oss_access_key_id": "<my_oss_access_key_id>",
"oss_access_key_secret": "<my_oss_access_key_secret>", "oss_prefix":"<my_oss_prefix>", "oss_sts_token": "<my_oss_sts_token>"}');my_oss_sts_token パラメーターは、リビジョンバージョン8.0.2.2.6以降のPolarDB for MySQL 8.0.2クラスターでサポートされています。
次の表に、パラメーターを示します。
パラメーター | タイプ | 注記 |
oss_server_name | String | OSSサーバーの名前。 説明 これはグローバルパラメーターであり、一意である必要があります。大文字と小文字を区別せず、最大64文字です。64文字を超える名前は切り捨てられます。名前を引用符で囲むことができます。 |
my_oss_endpoint | String | OSSリージョンのドメイン名。 説明 Alibaba Cloud ホストからデータベースにアクセスする場合、インターネットトラフィックを回避するために、内部の同一リージョンエンドポイント (「internal」を含むドメイン名) を使用してください。 |
my_oss_bucket | String | データファイルが存在するOSSバケット。このバケットはOSSで事前に作成する必要があります。 |
my_oss_access_key_id | String | OSSアカウントID。 |
my_oss_access_key_secret | String | OSSアカウントキー。 |
my_oss_prefix | String | OSSパスプレフィックス。データファイルを保存する場所を指定します。特殊文字を含んだり、空にしたりすることはできません。 |
my_oss_sts_token | String | OSS一時アクセス認証情報。詳細については、「一時アクセス認証情報の取得」をご参照ください。 説明
|
次の例は、ハイブリッドパーティションテーブルを作成する方法を示しています。
CREATE TABLE t2(a1 INT, a2 VARCHAR(30), a3 VARCHAR(256))
CONNECTION = "oss_server_name"
PARTITION BY RANGE(a1)
(
PARTITION p1 values less than (1000) ENGINE = CSV,
PARTITION p2 values less than (2000) ENGINE = CSV,
PARTITION p3 values less than (3000) ENGINE = INNODB
);ハイブリッドパーティションのクエリ
次の3つの方法のいずれかで、異なるストレージエンジンにわたるパーティションデータをクエリできます。
hybrid_partition_query_mix_engine_enabledパラメーターを ON に設定します。これにより、クエリはInnoDB、X-Engine、およびOSSパーティションからデータを返します。例:-- t1 is a hybrid partitioned table. SELECT * FROM t1;hybrid_partition_query_mix_engine_enabledパラメーターを OFF に設定します。クエリはInnoDBパーティションとX-Engineパーティションからのみデータを返します。例:-- t1 is a hybrid partitioned table. SELECT * FROM t1;パーティション名を指定します。これにより、任意のタイプのストレージエンジンを使用するパーティションからデータをクエリできます。例:
-- t1 is a hybrid partitioned table. p1 is the partition name. SELECT * FROM t1 PARTITION (p1);