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

PolarDB:概要

最終更新日:May 28, 2024

パーティション分割タイプ

PolarDB-Xには、データをパーティションにルーティングする方法を制御するために使用できる次のパーティション分割タイプがあります。

  • HASHパーティショニング

    • HASH (MySQLのHASHパーティショニング構文と互換性があります)

    • KEY (MySQLのKEYパーティショニング構文と互換性があります)

  • レンジパーティショニング

    • RANGE (MySQLのRANGEパーティショニング構文と互換性があります)

    • RANGE COLUMNS (MySQLのRANGE COLUMNSパーティショニング構文と互換性があります)

  • リスト分割

    • LIST (MySQLのLISTパーティショニング構文と互換性があります)

    • LIST COLUMNS (MySQLのLIST COLUMNSパーティショニング構文と互換性があります)

  • シナリオ固有のパーティション分割

    CO_HASH (PolarDB-Xはパーティション分割構文を備えています)

HASHパーティショニング

このパーティション分割型は、組み込みのコンシステントハッシングアルゴリズムを使用して、パーティション分割関数またはパーティションキー列を含む指定された式のハッシュ値を計算し、データをパーティションにルーティングします。 HASHパーティショニングタイプには、パーティショニング関数を含む式が使用されるか、パーティションキー列がパーティションキーとして使用されるかに基づいて、KEYパーティショニングHASHパーティショニングが含まれます。

表 1 KEYパーティショニングとHASHパーティショニングの比較

パーティション分割タイプ

サポートされているパーティションキー

サポート分割機能

文構文

制限

ルーティングポリシー (ポイントクエリ)

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

単一列パーティションキー

任意

キーによるパーティション (c1)

  • ホットパーティション分割はサポートされていません。

  • データは、最大1つのパーティションキー列の値に基づいてパーティションにルーティングされます。

  1. c1列の値のハッシュは、コンシステントハッシュアルゴリズムを使用して計算されます。

  2. データは、c1列の値のハッシュに基づいて異なるパーティションにルーティングされます。

ベクトル分割キー

任意

PARTITION BY KEY(c1,c2,...,cn)

  • ホットパーティション分割がサポートされています。

  • デフォルトでは、データはc1パーティションキー列のみの値に基づいてパーティションにルーティングされます。 他のパーティションキー列は、ホットパーティション分割に使用できます。

  • nは、同時にデータ分割に使用できるパーティションキー列の数を指定します。

  • 最大5つのパーティションキー列がサポートされています。

  1. パーティションキー列の値 (c1,c2,...,cn) をベクトルパーティションキーとして使用して、コンシステントハッシュアルゴリズムを使用してベクトル内の各列のハッシュを計算します。 ベクトルパーティションキーに対応するハッシュのベクトル (c1_hash,c2_hash,...,cn_hash) が取得される。

  2. ハッシュのベクトル (c1_hash,c2_hash,...,cn_hash) は、範囲によってパーティションにデータをルーティングするために使用されます。

ハッシュ

単一列パーティションキー

任意

ハッシュによるパーティー (c1)

  • ホットパーティション分割はサポートされていません。

  • データは、1つのパーティションキー列の値に基づいてパーティションにルーティングされます。

  • 次のパーティション関数のみがサポートされています。

    • YEAR

    • MONTH

    • DAYOFMONTH

    • デイオフウィーク

    • DAYOFYEAR

    • TO_DAYS

    • TO_MONTHS

    • TO_WEEKS

    • TO_SECONDS

    • UNIX_TIMESTAMP

    • SUBSTR/SUBSTRING

PARTITION BY HASH(c1) のルーティングポリシーは、PARTITION BY KEY(c1) のルーティングポリシーと同じです。

ハッシュによるパーティー (年 (c1))

  1. YEAR関数は、c1列の値に基づいて年の値を計算するために使用されます。

  2. ハッシュ値year_hashは、consistent hashingアルゴリズムを使用して年の値に基づいて計算されます。

  3. データは、year_hashの値に基づいてパーティションにルーティングされます。

ベクトル分割キー

任意

PARTITIONBY HASH(c1,c2,...,cn)

  • ホットパーティション分割はサポートされていません。

  • テーブルが作成されると、テーブル内のデータは、複数のパーティションキー列の値に基づいてパーティションにルーティングされます。

  • 最大5つのパーティションキー列がサポートされています。

  1. パーティションキー列の値 (c1,c2,...,cn) をベクトルパーティションキーとして使用して、コンシステントハッシュアルゴリズムを使用してベクトル内の各列のハッシュを計算します。 ベクトルパーティションキーに対応するハッシュのベクトルが取得される。

  2. データは、ベクトルのハッシュ値に基づいてパーティションにルーティングされます。

レンジパーティショニング

このパーティショニングタイプは、指定されたパーティションキー列の値、またはパーティション関数を含む指定された式によって返される値を比較および計算して、データが分散される定義済みパーティションの範囲を決定し、データをパーティションにルーティングします。 RANGEパーティショニングタイプには、パーティション関数を含む式が使用されるか、パーティションキー列がパーティションキーとして使用されるかに基づいて、RANGE COLUMNSパーティショニングRANGEパーティショニングが含まれます。

表 2. RANGEパーティショニングとRANGE COLUMNSパーティショニングの比較

パーティション分割タイプ

サポートされているパーティションキー

サポート分割機能

文構文

制限

ルーティングポリシー (ポイントクエリ)

範囲の列

単一列パーティションキーとベクターパーティションキー

任意

PARTITION BY RANGE COLUMNS (c1,c2,...,cn) ( PARTITION p1値が (1,10,...,1000) 未満、PARTITION p2値が (2,20,...,2000) 未満、...)

ホットパーティション分割がサポートされています。 c1パーティションキー列の88など、多数の行に同じ値が含まれている場合は、c2パーティションキー列の値に基づいてホットデータを分割できます。

  1. パーティションキー列の値 (c1,c2,...,cn) は、ベクトルパーティションキーとして使用されます。

  2. このベクトルパーティションキーは、バイナリ検索アルゴリズムに基づいてデータがルーティングされるパーティションを決定するために使用されます。

範囲

単一列パーティションキー

範囲による部分 (年 (c1)) (部分p1の値がより少ない (2019) 、部分p2の値がより少ない (2021) ...)

  • ホットパーティション分割はサポートされていません。

  • 次のパーティション関数のみがサポートされています。

    • YEAR

    • MONTH

    • DAYOFMONTH

    • デイオフウィーク

    • DAYOFYEAR

    • TO_DAYS

    • TO_MONTHS

    • TO_WEEKS

    • TO_SECONDS

    • UNIX_TIMESTAMP

    • SUBSTR/SUBSTRING

  1. YEAR関数は、c1列の値に基づいて年の値を計算するために使用されます。

  2. 年の値は、バイナリ検索アルゴリズムに基づいてデータがルーティングされるパーティションを決定するために使用されます。

リスト分割

このパーティショニングタイプは、RANGEパーティショニングに似ています。 指定されたパーティションキー列の値、またはパーティション関数を含む指定された式によって返される値を比較および計算して、データが分散される定義済みパーティションの範囲を決定し、データをパーティションにルーティングします。 LISTパーティショニングタイプには、複数のパーティションキー列がパーティションキーとして使用されているかどうか、および使用方法に基づいて、LIST COLUMNSパーティショニングとLISTパーティショニングが含まれます。

表 3. LISTパーティショニングとLIST COLUMNSパーティショニングの比較

パーティション分割タイプ

サポートされているパーティションキー

サポート分割機能

文構文

制限

ルーティングポリシー (ポイントクエリ)

リスト列

単一列パーティションキーとベクターパーティションキー

任意

リストによるPARTITION COLUMNS (c1,c2,...,cn) ( PARTITION p1 VALUES IN ((1,10,...,1000),(2,20,...,2000) )) 、PARTITION p2 VALUES IN (((3,30,...,3000),(3,30,...,3000) )) 、...

ホットパーティション分割はサポートされていません。

  1. パーティションキー列の値 (c1,c2,...,cn) は、ベクトルパーティションキーとして使用されます。

  2. このベクトルパーティションキーは、バイナリ検索アルゴリズムに基づいてデータがルーティングされるパーティションを決定するために使用されます。

List

単一列パーティションキー

リストによる部分 (YEAR(c1)) (部分p1の値 (2018,2019) 、部分p2の値 (2020,2021) ...)

ホットパーティション分割はサポートされていません。

COHASHパーティショニング

PolarDB-Xには、値が似ているさまざまなパーティションキー列に基づいてテーブルを水平方向にパーティション分割する必要があるシナリオ用の新しいパーティション分割タイプCOHASHパーティション分割もあります。

COHASH分割は、HASH分割およびKEY分割と同様である。 次の表は、タイプを比較しています。

表 4. COHASHパーティショニング、HASHパーティショニング、およびKEYパーティショニングの比較

違い

CO_ハッシュ

キー

ハッシュ

ステートメント構文

PARTITION BY

CO_HASH(c1, c2)

パーティション8

PARTITION BY

キー (c1, c2)

パーティション8

PARTITION BY

HASH(c1, c2)

パーティション8

単一列パーティションキー

非対応

対応

対応

ベクトル分割キー

対応

対応

対応

ベクトルパーティションキー列のパーティション関数

サポートされています。 例: PARTITION BY

CO_HASH (

/* c1列の値の最後の4文字でテーブルを分割します。* /

右 (c1, 4) 、

/* c2列の値の最後の4文字でテーブルを分割します。* /

右 (c2, 4)

)

パーティション8

非対応

非対応

パーティションキー列の関係

列の値は似ています。 パーティションテーブルの異なるパーティションキー列の値の類似性を維持する必要があります。 例:

  • c1列とc2列の値は常に同じです。

  • CO_HASH(c1, c2) が適切である。

  • c1とc2の列値の最後の4文字は常に同じです。

  • CO_HASH(RIGHT(c1,4), RIGHT(c2,4)) が適している。

フェデレーションインデックスのプレフィックスに似ています。

フェデレーションインデックスのプレフィックスに似ています。

プレフィックス、パーティションプルーニング、および例を含むパーティションキー列の同等のクエリ

サポートされる例:

  • c1='x': パーティションプルーニングがサポートされ、クエリは単一のパーティションにルーティングされます。

  • c1='x' およびc2='y': パーティションプルーニングがサポートされ、クエリはゼロまたは単一のパーティションにルーティングされます。 c1='x' とc2='y' のルーティングパーティションが異なる場合、パーティションは返されません。

サポートされる例:

  • c1='x': パーティションプルーニングがサポートされ、クエリは1つ以上のシャードにルーティングされます。 x値に対してホットパーティション分割を実行すると、複数のパーティションが返されます。

  • c1='x' およびc2='y': パーティションプルーニングがサポートされ、クエリが単一のパーティションにルーティングされます。

サポートされていません。 パーティションプルーニングは、すべてのパーティションキー列に同等の条件が含まれている場合にのみサポートされます。 例:

  • c1='x': パーティションプルーニングを実行できず、すべてのパーティションのスキャンに失敗しました。

  • c1='x' およびc2='y': パーティションプルーニングがサポートされ、クエリが単一のパーティションにルーティングされます。

プレフィックス、パーティションプルーニング、および例のないパーティションキー列の同等のクエリ

すべてのパーティションキー列の同等の条件は、パーティションプルーニングをサポートします。 例:

  • c2='x': パーティションプルーニングがサポートされ、クエリは単一のパーティションにルーティングされます。

  • c1='x' またはc2='y': パーティションプルーニングがサポートされ、クエリは1つまたは2つのパーティションにルーティングされます。 c1='x' とc2='y' のルーティングパーティションが同じ場合、1つのパーティションが返されます。 そうでない場合、2つのパーティションがスキャンされます。

サポートされていません。 プレフィックスのないパーティションの同等の条件では、すべてのパーティションがスキャンされる必要があります。 例:

  • c2='x': 全てのパーティションがスキャンされる。

  • c1='x' またはc2='y': すべてのパーティションがスキャンされます。

サポートされていません。 プレフィックスのないパーティションの同等の条件では、すべてのパーティションがスキャンされる必要があります。 例:

  • c2='x': 全てのパーティションがスキャンされる。

  • c1='x' またはc2='y': すべてのパーティションがスキャンされます。

範囲クエリ

サポートされていません。 すべてのパーティションがスキャンされます。

サポートされていません。 すべてのパーティションがスキャンされます。

サポートされていません。 すべてのパーティションがスキャンされます。

ルーティングポリシー (ポイントクエリ)

  1. c1列から同等のクエリの元の値v1を抽出します。 この操作は他の列にも適用できます。

  2. 列が分割関数を使用する場合、関数の値はf1 = partFunc(v1) 式を使用して計算されます。 そうでない場合、関数値はv1である。

  3. コンシステントハッシュアルゴリズムを使用して、f1のハッシュc1_hashを計算します。 ハッシュはlong型の整数です。

  4. データは、ハッシュc1_hashに基づいて異なるパーティションにルーティングされます。

KEYパーティショニングおよびHASHパーティショニングに関する前述の内容を参照してください。

KEYパーティショニングおよびHASHパーティショニングに関する前述の内容を参照してください。

ホットパーティション分割

サポートされていません。 c1='88' などのホットキー値に対しては、さらにホットパーティション分割を実行できません。

対応

非対応

パーティション分割、マージ、移行などのパーティション管理

対応

対応

対応

レベル2パーティション

対応

対応

対応