全部产品
Search
文档中心

PolarDB:Jenis-jenis partisi yang disediakan oleh PolarDB-X

更新时间:Jul 06, 2025

Jenis-jenis partisi

PolarDB-X menyediakan jenis-jenis partisi berikut untuk mengontrol cara data diarahkan ke partisi:

  • Pembagian HASH

    • HASH (kompatibel dengan sintaks pembagian HASH di MySQL)

    • KEY (kompatibel dengan sintaks pembagian KEY di MySQL)

  • Pembagian RANGE

    • RANGE (kompatibel dengan sintaks pembagian RANGE di MySQL)

    • RANGE COLUMNS (kompatibel dengan sintaks pembagian RANGE COLUMNS di MySQL)

  • Pembagian LIST

    • LIST (kompatibel dengan sintaks pembagian LIST di MySQL)

    • LIST COLUMNS (kompatibel dengan sintaks pembagian LIST COLUMNS di MySQL)

  • Pembagian spesifik skenario

    CO_HASH (sintaks pembagian fitur PolarDB-X)

Pembagian HASH

Jenis partisi ini menggunakan algoritma penghashan konsisten bawaan untuk menghitung nilai hash dari ekspresi tertentu yang mencakup fungsi partisi atau kolom kunci partisi, lalu mengarahkan data ke partisi. Pembagian HASH mencakup KEY partitioning dan HASH partitioning, tergantung pada apakah ekspresi yang mencakup fungsi partisi digunakan atau kolom kunci partisi digunakan sebagai kunci partisi.

Perbandingan antara Pembagian KEY dan Pembagian HASH

Jenis partisi

Kunci partisi yang didukung

Dukungan fungsi partisi

Sintaks pernyataan

Batasan

Kebijakan routing (query titik)

Pembagian KEY (default)

Kunci partisi satu kolom

Tidak

PARTITION BY KEY(c1)

  • Pemecahan partisi panas tidak didukung.

  • Data diarahkan ke partisi berdasarkan nilai dalam satu kolom kunci partisi.

  1. Nilai hash c1_hash dihitung menggunakan algoritma penghashan konsisten berdasarkan nilai kolom c1.

  2. Data diarahkan ke partisi yang berbeda berdasarkan nilai c1_hash.

Kunci partisi vektor

Tidak

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

  • Pemecahan partisi panas didukung.

  • Secara default, data diarahkan ke partisi berdasarkan nilai dalam kolom kunci partisi c1 saja. Kolom kunci partisi lainnya dapat digunakan untuk pemecahan partisi panas.

  • n menentukan jumlah kolom kunci partisi yang dapat digunakan untuk pembagian data secara bersamaan.

  • Maksimal lima kolom kunci partisi didukung.

  1. Nilai-nilai kolom kunci partisi (c1,c2,...,cn) digunakan sebagai kunci partisi vektor untuk menghitung hash setiap kolom dalam vektor menggunakan algoritma penghashan konsisten. Vektor hash (c1_hash,c2_hash,...,cn_hash) yang sesuai dengan kunci partisi vektor diperoleh.

  2. Vektor hash (c1_hash,c2_hash,...,cn_hash) digunakan untuk mengarahkan data ke partisi berdasarkan rentang.

Hash

Kunci partisi satu kolom

Tidak

PARTITION BY HASH(c1)

  • Pemecahan partisi panas tidak didukung.

  • Data diarahkan ke partisi berdasarkan nilai dalam satu kolom kunci partisi.

  • Hanya fungsi partisi berikut yang didukung:

    • YEAR

    • MONTH

    • DAYOFMONTH

    • DAYOFWEEK

    • DAYOFYEAR

    • TO_DAYS

    • TO_MONTHS

    • TO_WEEKS

    • TO_SECONDS

    • UNIX_TIMESTAMP

    • SUBSTR/SUBSTRING

Kebijakan routing PARTITION BY HASH(c1) sama dengan PARTITION BY KEY(c1).

Ya

PARTITION BY HASH(YEAR(c1))

  1. Fungsi YEAR digunakan untuk menghitung nilai tahun berdasarkan nilai kolom c1.

  2. Nilai hash year_hash dihitung berdasarkan nilai tahun menggunakan algoritma penghashan konsisten.

  3. Data diarahkan ke partisi berdasarkan nilai year_hash.

Kunci partisi vektor

Tidak

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

  • Pemecahan partisi panas tidak didukung.

  • Setelah tabel dibuat, data dalam tabel diarahkan ke partisi berdasarkan nilai dalam beberapa kolom kunci partisi.

  • Maksimal lima kolom kunci partisi didukung.

  1. Nilai-nilai kolom kunci partisi (c1,c2,...,cn) digunakan sebagai kunci partisi vektor untuk menghitung hash setiap kolom dalam vektor menggunakan algoritma penghashan konsisten. Vektor hash yang sesuai dengan kunci partisi vektor diperoleh.

  2. Data diarahkan ke partisi berdasarkan nilai hash vektor.

Pembagian RANGE

Jenis partisi ini membandingkan dan menghitung nilai kolom kunci partisi tertentu atau nilai yang dikembalikan oleh ekspresi tertentu yang mencakup fungsi partisi untuk menentukan rentang partisi yang telah ditentukan sebelumnya, kemudian mengarahkan data ke partisi. Pembagian RANGE mencakup RANGE COLUMNS partitioning dan RANGE partitioning, tergantung pada apakah ekspresi yang mencakup fungsi partisi digunakan atau kolom kunci partisi digunakan sebagai kunci partisi.

Perbandingan antara Pembagian RANGE dan Pembagian RANGE COLUMNS

Jenis partisi

Kunci partisi yang didukung

Dukungan fungsi partisi

Sintaks pernyataan

Batasan

Kebijakan routing (query titik)

Range Columns

Kunci partisi satu kolom dan kunci partisi vektor

Tidak

PARTITION BY RANGE COLUMNS (c1,c2,...,cn) ( PARTITION p1 VALUES LESS THAN (1,10,...,1000), PARTITION p2 VALUES LESS THAN (2,20,...,2000) ...)

Pemecahan partisi panas didukung. Jika sejumlah besar baris berisi nilai yang sama, seperti 88 dalam kolom kunci partisi c1, Anda dapat membagi data panas berdasarkan nilai dalam kolom kunci partisi c2.

  1. Nilai-nilai kolom kunci partisi (c1,c2,...,cn) digunakan sebagai kunci partisi vektor.

  2. Kunci partisi vektor ini digunakan untuk menentukan partisi ke mana data diarahkan berdasarkan algoritma pencarian biner.

Range

Kunci partisi satu kolom

Ya

PARTITION BY RANGE(YEAR(c1)) ( PARTITION p1 VALUES LESS THAN (2019), PARTITION p2 VALUES LESS THAN (2021) ...)

  • Pemecahan partisi panas tidak didukung.

  • Hanya fungsi partisi berikut yang didukung:

    • YEAR

    • MONTH

    • DAYOFMONTH

    • DAYOFWEEK

    • DAYOFYEAR

    • TO_DAYS

    • TO_MONTHS

    • TO_WEEKS

    • TO_SECONDS

    • UNIX_TIMESTAMP

    • SUBSTR/SUBSTRING

  1. Fungsi YEAR digunakan untuk menghitung nilai tahun berdasarkan nilai kolom c1.

  2. Nilai tahun digunakan untuk menentukan partisi ke mana data diarahkan berdasarkan algoritma pencarian biner.

Pembagian LIST

Jenis partisi ini mirip dengan pembagian RANGE. Ini membandingkan dan menghitung nilai kolom kunci partisi tertentu atau nilai yang dikembalikan oleh ekspresi tertentu yang mencakup fungsi partisi untuk menentukan rentang partisi yang telah ditentukan sebelumnya, lalu mengarahkan data ke partisi. Pembagian LIST mencakup LIST COLUMNS partitioning dan LIST partitioning, tergantung pada apakah beberapa kolom kunci partisi digunakan sebagai kunci partisi dan metode penggunaannya.

Perbandingan antara Pembagian LIST dan Pembagian LIST COLUMNS

Jenis partisi

Kunci partisi yang didukung

Dukungan fungsi partisi

Sintaks pernyataan

Batasan

Kebijakan routing (query titik)

List Columns

Kunci partisi satu kolom dan kunci partisi vektor

Tidak

PARTITION BY LIST COLUMNS (c1,c2,...,cn) ( PARTITION p1 VALUES IN ((1,10,...,1000),(2,20,...,2000) ), PARTITION p2 VALUES IN ((3,30,...,3000),(3,30,...,3000) ), ...)

Pemecahan partisi panas tidak didukung.

  1. Nilai-nilai kolom kunci partisi (c1,c2,...,cn) digunakan sebagai kunci partisi vektor.

  2. Kunci partisi vektor ini digunakan untuk menentukan partisi ke mana data diarahkan berdasarkan algoritma pencarian biner.

List

Kunci partisi satu kolom

Ya

PARTITION BY LIST(YEAR(c1)) ( PARTITION p1 VALUES IN (2018,2019), PARTITION p2 VALUES IN (2020,2021) ...)

Pemecahan partisi panas tidak didukung.

Pembagian COHASH

PolarDB-X juga menawarkan jenis partisi baru, yaitu Pembagian COHASH, untuk skenario di mana tabel perlu dipartisi horizontal berdasarkan kolom kunci partisi yang berbeda dengan nilai serupa.

Pembagian COHASH mirip dengan pembagian HASH dan pembagian KEY. Tabel berikut membandingkan jenis-jenis tersebut.

Perbandingan antara Pembagian COHASH, Pembagian HASH, dan Pembagian KEY

Item

CO_HASH

KEY

Hash

Sintaks pernyataan

PARTITION BY CO_HASH(c1, c2) PARTITOINS 8

PARTITION BY KEY(c1, c2) PARTITOINS 8

PARTITION BY HASH(c1, c2) PARTITOINS 8

Kunci partisi satu kolom

Tidak didukung

Didukung

Didukung

Kunci partisi vektor

Didukung

Didukung

Didukung

Fungsi partisi pada kolom kunci partisi vektor

Didukung. Contoh:

PARTITION BY CO_HASH(
-- Partisi tabel berdasarkan empat karakter terakhir dari nilai kolom c1.
RIGHT(c1, 4),
-- Partisi tabel berdasarkan empat karakter terakhir dari nilai kolom c2.
RIGHT(c2, 4))
PARTITOINS 8

Tidak didukung

Tidak didukung

Hubungan antara kolom kunci partisi

Nilai dalam kolom serupa. Anda perlu menjaga kesamaan antara nilai kolom kunci partisi yang berbeda dalam tabel yang dipartisi. Contoh:

  • Nilai kolom c1 dan c2 selalu sama

  • CO_HASH(c1, c2) cocok.

  • Empat karakter terakhir dari nilai kolom c1 dan c2 selalu sama.

  • CO_HASH(RIGHT(c1,4), RIGHT(c2,4)) cocok.

Mirip dengan awalan indeks federasi.

Mirip dengan awalan indeks federasi.

Query ekuivalen untuk kolom kunci partisi dengan awalan, pemangkasan partisi, dan contoh

Didukung. Contoh:

  • c1='x': Pemangkasan partisi didukung dan query diarahkan ke satu partisi.

  • c1='x' and c2='y': Pemangkasan partisi didukung dan query diarahkan ke nol atau satu partisi. Jika partisi routing untuk c1='x' dan c2='y' berbeda, tidak ada partisi yang dikembalikan.

Didukung. Contoh:

  • c1='x': Pemangkasan partisi didukung dan query diarahkan ke satu atau lebih shard. Jika Anda melakukan pemecahan partisi panas pada nilai x, beberapa partisi akan dikembalikan.

  • c1='x' and c2='y': Pemangkasan partisi didukung dan query diarahkan ke satu partisi.

Tidak didukung. Pemangkasan partisi hanya didukung ketika kondisi ekuivalen untuk semua kolom kunci partisi disertakan. Contoh:

  • c1='x': Pemangkasan partisi tidak dapat dilakukan dan semua partisi gagal dipindai.

  • c1='x' and c2='y': Pemangkasan partisi didukung dan query diarahkan ke satu partisi.

Query ekuivalen untuk kolom kunci partisi tanpa awalan, pemangkasan partisi, dan contoh

Didukung. Kondisi ekuivalen untuk semua kolom kunci partisi mendukung pemangkasan partisi. Contoh:

  • c2='x': Pemangkasan partisi didukung dan query diarahkan ke satu partisi.

  • c1='x' or c2='y': Pemangkasan partisi didukung dan query diarahkan ke satu atau dua partisi. Jika partisi routing untuk c1='x' dan c2='y' sama, satu partisi dikembalikan. Jika tidak, dua partisi dipindai.

Tidak didukung. Kondisi ekuivalen untuk partisi tanpa awalan harus menghasilkan pemindaian untuk semua partisi. Contoh:

  • c2='x': Semua partisi dipindai.

  • c1='x' or c2='y': Semua partisi dipindai.

Tidak didukung. Kondisi ekuivalen untuk partisi tanpa awalan harus menghasilkan pemindaian untuk semua partisi. Contoh:

  • c2='x': Semua partisi dipindai.

  • c1='x' or c2='y': Semua partisi dipindai.

Query rentang

Tidak didukung. Semua partisi dipindai.

Tidak didukung. Semua partisi dipindai.

Tidak didukung. Semua partisi dipindai.

Kebijakan routing (query titik)

  1. Ekstrak nilai asli v1 untuk query ekuivalen dari kolom c1. Operasi ini berlaku untuk kolom lainnya.

  2. Jika kolom menggunakan fungsi partisi, nilai fungsi dihitung menggunakan rumus f1 = partFunc(v1). Jika tidak, nilai fungsi adalah v1.

  3. Gunakan algoritma penghashan konsisten untuk menghitung hash c1_hash dari f1. Hash tersebut adalah bilangan bulat tipe long.

  4. Data diarahkan ke partisi yang berbeda berdasarkan nilai c1_hash.

Untuk informasi lebih lanjut, lihat Kebijakan routing dalam bagian Pembagian HASH.

Untuk informasi lebih lanjut, lihat Kebijakan routing dalam bagian Pembagian Hash.

Pemecahan partisi panas

Tidak didukung. Pemecahan partisi panas lebih lanjut tidak dapat dilakukan pada nilai kunci panas seperti c1='88'.

Didukung

Tidak didukung

Manajemen partisi seperti pembagian partisi, penggabungan, dan migrasi

Didukung

Didukung

Didukung

Subpartisi

Didukung

Didukung

Didukung