MMDD は、PolarDB-X 1.0 において、大規模なテーブルをカレンダー日単位でテーブルシャードに分割する関数です。各テーブルシャード名の添字は、2 桁の月(MM)と 2 桁の日(DD)からなる MMDD 形式で表され、特定の日付を示します。
仕組み
MMDD は、パーティションキーの値から月と日の部分を抽出し、その値に基づいてテーブルシャードの添字を決定します。create_time が 2024-03-15 の行は、テーブルシャード 0315 にマップされ、3 月 15 日を表すシャードに配置されます。
MMDD は年間の日付単位でルーティングを行うため、各データベースシャードには最大 366 個のテーブルシャード(1 年間の最大日数である 366 日分)が格納されます。
制限事項
| 制約 | 詳細 |
|---|---|
| サポートされるデータの型 | DATE、DATETIME、または TIMESTAMP |
| シャーディング範囲 | テーブルシャーディングのみ — データベースシャーディングには使用できません |
| データベースシャードあたりの最大テーブルシャード数 | 366(カレンダー上の各日付に対応する 1 つ — 1 年間の最大日数は 366 日) |
| 最小バージョン | PolarDB-X 1.0 インスタンス バージョン 5.1.28-1320920 以降 |
適用範囲/利用シーン
年間の日付単位で大規模なテーブルをパーティション化し、クエリパターンが特定のカレンダー日付と一致する場合に、MMDD を使用してください。テーブルシャードの添字はカレンダー日付を直接表すため、日付ベースの範囲クエリが効率的になります。
MMDD は以下の用途には適していません。
データベースシャーディング —
MMDDはテーブルシャーディングでのみ動作します。日付に関係なく均等なデータ分散 — データ量が日付によって大きく変動する場合(例:平日はトラフィックが集中し、週末は少ない)、
MMDDではシャードサイズが不均等になります。均一な分散が必要な場合は、ハッシュベースの関数をご利用ください。
MMDD シャーディングによるテーブル作成
以下のデータ定義言語(DDL)の例では、ユーザー名(ハッシュ)に基づいてデータをデータベースシャードに分割し、MMDD 関数を create_time 列に適用してテーブルシャードに分割しています。
CREATE TABLE test_mmdd_tb (
id INT,
name VARCHAR(30) DEFAULT NULL,
create_time DATETIME DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE = InnoDB DEFAULT CHARSET = utf8
dbpartition BY HASH(name)
tbpartition BY MMDD(create_time) tbpartitions 366;
-- 366 個の tbpartitions:カレンダー上の各日付に対応(1 年間の最大日数は 366 日)主なパラメーター:
| パラメーター | 値 | 説明 |
|---|---|---|
dbpartition by | HASH(name) | name 列の値をハッシュ化し、その結果に基づいて行をデータベースシャード間で分散します |
tbpartition by | MMDD(create_time) | create_time |
tbpartitions | 366 | データベースシャードあたりのテーブルシャード数 — 1 年間のすべてのカレンダー日付を網羅するために 366 を指定します |