ハイブリッドパーティションテーブルを作成して、異なるストレージエンジンに保存されているデータにアクセスできます。
次の図は、ハイブリッドパーティションの仕組みを示しています。
ハイブリッドパーティションは、テーブルのパーティションを異なるストレージメディアに保存することで、ホットデータとコールドデータを分離します。これにより、ホットデータに対するクエリパフォーマンスや DML 操作に影響を与えることなく、コールドデータのストレージコストを削減できます。
この機能を使用するには、クォータセンター を開き、クォータ ID polardb_mysql_hybrid_partition を使用して クォータ名 を見つけ、[操作] 列の [適用] をクリックします。
前提条件
ご利用のクラスターで、PolarDB for MySQL 8.0.2、リビジョンバージョン 8.0.2.2.34 以降を実行している必要があります。クラスターのバージョンは、バージョン番号の表示で確認できます。
作成するパーティションのデータファイルがすでに OSS に存在し、そのファイル名が次のルールに従っている必要があります。
ファイル拡張子とパーティションマーカーは、大文字である必要があります。
テーブル名とパーティション名は、データベース内の名前と一致している必要があります。
たとえば、テーブル
t1のパーティションp1が CSV エンジンを使用する場合、そのパーティションのデータファイル名はt1#P#p1.CSVとなります。
制限事項
ハイブリッドパーティションテーブルには、InnoDB ストレージエンジンを使用するパーティションが少なくとも 1 つ含まれている必要があります。
サブパーティションを持つハイブリッドパーティションテーブルを作成する場合、第 1 レベルのパーティションのエンジンはテーブルのエンジンと一致する必要があり、かつ、少なくとも 1 つのサブパーティションが InnoDB ストレージエンジンを使用している必要があります。
現在、ハイブリッドパーティションテーブルは
RANGEおよびLISTパーティションタイプのみをサポートしています。ハイブリッドパーティションテーブルの OSS パーティションでは、DML 操作 (
INSERT、UPDATE、DELETE、LOADなど) はサポートされていません。ハイブリッドパーティションテーブルで ADD および DROP 操作を実行するには、ご利用のクラスターで PolarDB for MySQL 8.0.2、リビジョンバージョン 8.0.2.2.17 以降を実行している必要があります。
パラメーター
ご利用の 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>"}');クラスターのバージョンが PolarDB for MySQL 8.0.2、リビジョンバージョンが 8.0.2.2.6 以降の場合、my_oss_sts_token パラメーターがサポートされます。
次の表にパラメーターを示します。
パラメーター | タイプ | 説明 |
oss_server_name | string | OSS サーバーの名前。 説明 このパラメーターはグローバルであり、一意である必要があります。名前は、大文字と小文字を区別せず、最大 64 文字です。64 文字を超える名前は切り捨てられます。OSS サーバー名は、引用符で囲まれた文字列として指定できます。 |
my_oss_endpoint | string | OSS リージョンのエンドポイント。 説明 Alibaba Cloud ホストからデータベースにアクセスする場合は、内部エンドポイントを使用してインターネットトラフィックの発生を回避します。内部エンドポイントには通常、「internal」という単語が含まれます。 |
my_oss_bucket | string | データファイルを含む OSS バケット。このバケットは、事前に OSS に存在している必要があります。 |
my_oss_access_key_id | string | OSS へのアクセスに使用する AccessKey ID。 |
my_oss_access_key_secret | string | OSS へのアクセスに使用する AccessKey シークレット。 |
my_oss_prefix | string | OSS 内のデータファイルのパスプレフィックス。この値は、空にしたり、特殊文字を含めたりすることはできません。 |
my_oss_sts_token | string | OSS の一時的なアクセス認証情報です。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 はハイブリッドパーティションテーブルです。 SELECT * FROM t1;hybrid_partition_query_mix_engine_enabledパラメーターを OFF に設定します。この場合、クエリは InnoDB および X-Engine パーティションのデータのみを返します。例:-- t1 はハイブリッドパーティションテーブルです。 SELECT * FROM t1;特定のパーティションを名前でクエリします。これにより、ストレージエンジンに関係なく、指定されたパーティションからデータが取得されます。例:
-- t1 はハイブリッドパーティションテーブルで、p1 はクエリ対象のパーティション名です。 SELECT * FROM t1 partition (p1);