全部产品
Search
文档中心

PolarDB:Lokalitas

更新时间:Jul 06, 2025

Topik ini menjelaskan cara menggunakan atribut LOCALITY untuk menentukan node data.

Atribut LOCALITY dapat digunakan untuk database dalam mode AUTO guna menentukan node data untuk database, tabel, atau partisi. Hal ini membantu mengisolasi dan mendistribusikan data secara merata ke node data.

Berikut adalah skenario penggunaan atribut LOCALITY:

  • Gunakan atribut LOCALITY untuk menentukan node data untuk database, tabel, atau partisi. Setelah menetapkan atribut LOCALITY, operasi yang memodifikasi distribusi data dibatasi oleh nilai atribut tersebut. Operasi penghapusan node data tidak dibatasi oleh nilai atribut LOCALITY.

  • Nilai atribut LOCALITY untuk grup tabel dan grup partisi dapat diubah. Setelah perubahan dilakukan, migrasi data asinkron akan dipicu secara otomatis.

Prasyarat

  • Versi kernel instance PolarDB-X Anda harus 5.4.14 atau lebih baru.

  • Database logis harus dipartisi dalam mode AUTO.

Catatan

Untuk informasi tentang cara melihat versi kernel instance PolarDB-X, lihat Lihat dan perbarui versi instance.

Peringatan

  • Setelah menghapus node data, atribut LOCALITY yang mencakup ID node data menjadi tidak valid secara otomatis.

  • Atribut LOCALITY ditentukan menggunakan ID node data. Jika Anda memulihkan data pada node data dari cadangan, atribut LOCALITY objek database asli menjadi tidak valid secara otomatis.

Tentukan atribut LOCALITY objek database

Lihat informasi tentang node data instance PolarDB-X

Eksekusi pernyataan berikut untuk melihat informasi tentang node data dari instance PolarDB-X:

SHOW STORAGE;

Contoh hasil:

+--------------------+----------------------------------+------------+-----------+----------+-------------+--------+-----------+-------+--------+
| STORAGE_INST_ID    | LEADER_NODE                      | IS_HEALTHY | INST_KIND | DB_COUNT | GROUP_COUNT | STATUS | DELETABLE | DELAY | ACTIVE |
+--------------------+----------------------------------+------------+-----------+----------+-------------+--------+-----------+-------+--------+
| polardbx-ng28-dn-0 | polardbx-ng28-dn-0-cands-0:14289 | true       | MASTER    | 1        | 2           | 0      | false     | null  | null   |
| polardbx-ng28-dn-1 | polardbx-ng28-dn-1-cands-0:14176 | true       | MASTER    | 1        | 1           | 0      | true      | null  | null   |
| polardbx-ng28-dn-2 | polardbx-ng28-dn-2-cands-0:14568 | true       | MASTER    | 1        | 1           | 0      | true      | null  | null   |
| polardbx-ng28-dn-3 | polardbx-ng28-dn-3-cands-0:16796 | true       | MASTER    | 1        | 1           | 0      | true      | null  | null   |
| polardbx-ng28-gms  | polardbx-ng28-dn-0-cands-0:14289 | true       | META_DB   | 2        | 2           | 0      | false     | null  | null   |
+--------------------+----------------------------------+------------+-----------+----------+-------------+--------+-----------+-------+--------+
Catatan
  • STORAGE_INST_ID: ID node data. Atribut LOCALITY ditentukan menggunakan ID node data.

  • INST_KIND: jenis node data. Jika nilainya META_DB, node data merupakan node metadata yang tidak dapat digunakan untuk menyimpan data bisnis.

  • STATUS: status node data. Nilai 0 menunjukkan bahwa node data tersedia.

  • DELETABLE: menunjukkan apakah node data dapat dihapus. Nilai false berarti node data tidak dapat dihapus. Misalnya, Anda tidak dapat menghapus node metadata atau node data dengan ID polardbx-ng28-dn-0.

Tentukan atribut LOCALITY saat membuat database

Saat membuat database, Anda dapat menentukan node data tempat data akan disimpan. Ini mengisolasi data dalam database dari data lain di instance PolarDB-X yang sama.

Sintaks:

CREATE DATABASE database_name databse [database_option_list];

Buat database dengan mode partisi AUTO dan tentukan atribut LOCALITY. Untuk detail sintaks, lihat CREATE DATABASE.

Contoh:

CREATE DATABASE db1 LOCALITY='dn=polardbx-ng28-dn-0,polardbx-ng28-dn-1,polardbx-ng28-dn-2' MODE = 'auto';

Setelah pembuatan database, eksekusi pernyataan SHOW CREATE DATABASE untuk melihat informasi database. Gunakan pernyataan SHOW DS untuk melihat node data yang digunakan.

mysql> SHOW CREATE DATABASE `db1`;
+----------+--------------------------------------------------------------------------------------------------------------------+
| DATABASE | CREATE DATABASE                                                                                                    |
+----------+--------------------------------------------------------------------------------------------------------------------+
| db1      | CREATE DATABASE `db1` /* MODE = 'auto' LOCALITY = "dn=polardbx-ng28-dn-0,polardbx-ng28-dn-1,polardbx-ng28-dn-2" */ |
+----------+--------------------------------------------------------------------------------------------------------------------+
1 row in set (0.04 sec)

mysql> SHOW DS;
+----+--------------------+--------------------+---------------------------------+----------------------+---------+
| ID | STORAGE_INST_ID    | DB                 | GROUP                           | PHY_DB               | MOVABLE |
+----+--------------------+--------------------+---------------------------------+----------------------+---------+
|  0 | polardbx-ng28-dn-0 | db1                | DB1_P00000_GROUP                | db1_p00000           |       1 |
|  1 | polardbx-ng28-dn-1 | db1                | DB1_P00001_GROUP                | db1_p00001           |       1 |
|  2 | polardbx-ng28-dn-2 | db1                | DB1_P00002_GROUP                | db1_p00002           |       1 |
|  3 | polardbx-ng28-gms  | information_schema | INFORMATION_SCHEMA_SINGLE_GROUP | polardbx_info_schema |       0 |
+----+--------------------+--------------------+---------------------------------+----------------------+---------+
4 rows in set (0.04 sec)
Catatan

Penyimpanan database harus mencakup node data dengan nomor seri 0. Batasan ini tidak berlaku untuk penyimpanan tabel dan partisi.

Tentukan atribut LOCALITY saat membuat tabel non-partisi

Saat membuat tabel non-partisi, gunakan atribut LOCALITY untuk mengaktifkan sharding otomatis tabel di beberapa node data. Tabel non-partisi diseimbangkan secara otomatis berdasarkan jumlah tabel dan data pada setiap node.

Buat beberapa tabel non-partisi dalam instance dan tetapkan atribut LOCALITY sebagai "balance_single_table=on". Untuk detail sintaks, lihat CREATE TABLE (mode AUTO).

Contoh:

CREATE TABLE t_sgl1 (
  `id` bigint(11) NOT NULL AUTO_INCREMENT BY GROUP,
  `order_id` varchar(20) DEFAULT NULL,
  `buyer_id` varchar(20) DEFAULT NULL,
  `seller_id` varchar(20) DEFAULT NULL,
  `order_snapshot` longtext DEFAULT NULL,
  `order_detail` longtext DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `l_i_order` (`order_id`)
) SINGLE locality = 'balance_single_table=on';

CREATE TABLE t_sgl2 (
  `id` bigint(11) NOT NULL AUTO_INCREMENT BY GROUP,
  `order_id` varchar(20) DEFAULT NULL,
  `buyer_id` varchar(20) DEFAULT NULL,
  `seller_id` varchar(20) DEFAULT NULL,
  `order_snapshot` longtext DEFAULT NULL,
  `order_detail` longtext DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `l_i_order` (`order_id`)
) SINGLE locality = 'balance_single_table=on';

CREATE TABLE t_sgl3 (
  `id` bigint(11) NOT NULL AUTO_INCREMENT BY GROUP,
  `order_id` varchar(20) DEFAULT NULL,
  `buyer_id` varchar(20) DEFAULT NULL,
  `seller_id` varchar(20) DEFAULT NULL,
  `order_snapshot` longtext DEFAULT NULL,
  `order_detail` longtext DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `l_i_order` (`order_id`)
) SINGLE locality = 'balance_single_table=on';

CREATE TABLE t_sgl4 (
  `id` bigint(11) NOT NULL AUTO_INCREMENT BY GROUP,
  `order_id` varchar(20) DEFAULT NULL,
  `buyer_id` varchar(20) DEFAULT NULL,
  `seller_id` varchar(20) DEFAULT NULL,
  `order_snapshot` longtext DEFAULT NULL,
  `order_detail` longtext DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `l_i_order` (`order_id`)
) SINGLE locality = 'balance_single_table=on';

Setelah pembuatan tabel, eksekusi pernyataan SHOW CREATE TABLE untuk melihat informasi tabel. Gunakan pernyataan SHOW TOPOLOGY untuk melihat distribusi data.

mysql> SHOW CREATE TABLE `t_sgl1`;
+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| TABLE   | CREATE TABLE                                                                                                                                                                                                                                                                                                                                                                                        |
+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t_order | CREATE TABLE `t_sgl1` (
	`id` bigint(11) NOT NULL AUTO_INCREMENT,
	`order_id` varchar(20) DEFAULT NULL,
	`buyer_id` varchar(20) DEFAULT NULL,
	`seller_id` varchar(20) DEFAULT NULL,
	`order_snapshot` longtext,
	`order_detail` longtext,
	PRIMARY KEY (`id`),
	INDEX `l_i_order` (`order_id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8
/* LOCALITY='balance_single_table=on' */ |
+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.05 sec)

mysql> SHOW TOPOLOGY `t_sgl1`;
+----+------------------+--------------------+----------------+-------------+--------------------+
| ID | GROUP_NAME       | TABLE_NAME         | PARTITION_NAME | PHY_DB_NAME | DN_ID              |
+----+------------------+--------------------+----------------+-------------+--------------------+
|  1 | DB1_P00001_GROUP | t_sgl1_92mv_00000  | p1             | db1_p00001  | polardbx-ng28-dn-1 |
+----+------------------+--------------------+----------------+-------------+--------------------+
3 rows in set (0.15 sec)

mysql> SHOW TOPOLOGY `t_sgl2`;
+----+------------------+--------------------+----------------+-------------+--------------------+
| ID | GROUP_NAME       | TABLE_NAME         | PARTITION_NAME | PHY_DB_NAME | DN_ID              |
+----+------------------+--------------------+----------------+-------------+--------------------+
|  1 | DB1_P00002_GROUP | t_sgl2_87fg_00000  | p1             | db1_p00002  | polardbx-ng28-dn-2 |
+----+------------------+--------------------+----------------+-------------+--------------------+
3 rows in set (0.15 sec)

mysql> SHOW TOPOLOGY `t_sgl3`;
+----+------------------+--------------------+----------------+-------------+--------------------+
| ID | GROUP_NAME       | TABLE_NAME         | PARTITION_NAME | PHY_DB_NAME | DN_ID              |
+----+------------------+--------------------+----------------+-------------+--------------------+
|  1 | DB1_P00002_GROUP | t_sgl3_64uj_00000  | p1             | db1_p00001  | polardbx-ng28-dn-1 |
+----+------------------+--------------------+----------------+-------------+--------------------+
3 rows in set (0.15 sec)

mysql> SHOW TOPOLOGY `t_sgl4`;
+----+------------------+--------------------+----------------+-------------+--------------------+
| ID | GROUP_NAME       | TABLE_NAME         | PARTITION_NAME | PHY_DB_NAME | DN_ID              |
+----+------------------+--------------------+----------------+-------------+--------------------+
|  1 | DB1_P00001_GROUP | t_sgl4_71mb_00000  | p1             | db1_p00002  | polardbx-ng28-dn-2 |
+----+------------------+--------------------+----------------+-------------+--------------------+
3 rows in set (0.15 sec)

Hasil menunjukkan bahwa tabel non-partisi di-shard secara otomatis di beberapa node data.

Tentukan atribut LOCALITY saat membuat tabel logis

Saat membuat tabel logis, Anda dapat menentukan node data tempat data akan disimpan. Ini mengisolasi data dalam tabel dari data lain di database yang sama. Atribut LOCALITY dapat diterapkan pada tabel non-partisi dan tabel partisi menggunakan metode RANGE, HASH, atau LIST.

Sintaks:

CREATE [PARTITION] TABLE [IF NOT EXISTS] tbl_name
    (create_definition, ...)
    [table_options]
    [table_partition_definition]
    [local_partition_definition]

Buat tabel logis dalam instance dan tentukan atribut LOCALITY. Untuk detail sintaks, lihat CREATE TABLE (mode AUTO).

Contoh:

CREATE TABLE t_order (
  `id` bigint(11) NOT NULL AUTO_INCREMENT BY GROUP,
  `order_id` varchar(20) DEFAULT NULL,
  `buyer_id` varchar(20) DEFAULT NULL,
  `seller_id` varchar(20) DEFAULT NULL,
  `order_snapshot` longtext DEFAULT NULL,
  `order_detail` longtext DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `l_i_order` (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 locality = 'dn=polardbx-ng28-dn-1,polardbx-ng28-dn-2';

Setelah pembuatan tabel, eksekusi pernyataan SHOW CREATE TABLE untuk melihat informasi tabel. Gunakan pernyataan SHOW TOPOLOGY untuk melihat distribusi data.

mysql> SHOW CREATE TABLE `t_order`;
+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| TABLE   | CREATE TABLE                                                                                                                                                                                                                                                                                                                                                                                        |
+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t_order | CREATE TABLE `t_order` (
	`id` bigint(11) NOT NULL AUTO_INCREMENT,
	`order_id` varchar(20) DEFAULT NULL,
	`buyer_id` varchar(20) DEFAULT NULL,
	`seller_id` varchar(20) DEFAULT NULL,
	`order_snapshot` longtext,
	`order_detail` longtext,
	PRIMARY KEY (`id`),
	INDEX `l_i_order` (`order_id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8
/* LOCALITY='dn=polardbx-ng28-dn-1,polardbx-ng28-dn-2' */ |
+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.05 sec)

mysql> SHOW TOPOLOGY `t_order`;
+----+------------------+--------------------+----------------+-------------+--------------------+
| ID | GROUP_NAME       | TABLE_NAME         | PARTITION_NAME | PHY_DB_NAME | DN_ID              |
+----+------------------+--------------------+----------------+-------------+--------------------+
|  0 | DB1_P00002_GROUP | t_order_18dV_00001 | p2             | db1_p00002  | polardbx-ng28-dn-2 |
|  1 | DB1_P00001_GROUP | t_order_18dV_00000 | p1             | db1_p00001  | polardbx-ng28-dn-1 |
|  2 | DB1_P00001_GROUP | t_order_18dV_00002 | p3             | db1_p00001  | polardbx-ng28-dn-1 |
+----+------------------+--------------------+----------------+-------------+--------------------+
3 rows in set (0.15 sec)
Catatan
  • Node data dalam atribut LOCALITY tabel logis harus termasuk dalam kumpulan node data database yang bersangkutan.

  • Untuk tabel non-partisi, hanya satu node data yang dapat ditentukan dalam atribut LOCALITY.

  • Jika tabel logis termasuk dalam grup tabel logis, nilai atribut LOCALITY tabel logis harus sesuai dengan nilai atribut grup tabel, partisi, dan grup partisi.

  • Secara default, tabel logis, grup tabel logis, indeks sekunder global (GSIs), dan grup tabel GSI berbagi nilai atribut LOCALITY yang sama.

Tentukan atribut LOCALITY untuk partisi tabel logis

Saat membuat tabel logis, Anda dapat menentukan node data untuk setiap partisi. Dengan cara ini, partisi berbeda disimpan di node data yang berbeda.

Contoh:

CREATE TABLE orders_region(
 order_id int AUTO_INCREMENT primary key,
 customer_id int,
 country varchar(64),
 city varchar(64),
 order_time datetime not null)
PARTITION BY LIST COLUMNS(country,city)
(
  PARTITION p1 VALUES IN (('China','Shanghai')) LOCALITY = 'dn=polardbx-ng28-dn-2',
  PARTITION p2 VALUES IN (('China','Beijing')) LOCALITY = 'dn=polardbx-ng28-dn-2',
  PARTITION p3 VALUES IN (('China','Hangzhou')) ,
  PARTITION p4 VALUES IN (('China','Nanjing')) ,
  PARTITION p5 VALUES IN (('China','Guangzhou')) ,
  PARTITION p6 VALUES IN (('China','Shenzhen')) ,
  PARTITION p7 VALUES IN (('China','Wuhan')) ,
  PARTITION p8 VALUES IN (('America','New York'))
) LOCALITY = 'dn=polardbx-ng28-dn-0,polardbx-ng28-dn-1';

Setelah pembuatan tabel, eksekusi pernyataan SHOW CREATE TABLE untuk melihat informasi tabel. Gunakan pernyataan SHOW TOPOLOGY untuk melihat distribusi data.

mysql> SHOW CREATE TABLE `orders_region`;
+---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| TABLE         | CREATE TABLE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
+---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| orders_region | CREATE TABLE `orders_region` (
	`order_id` int(11) NOT NULL AUTO_INCREMENT,
	`customer_id` int(11) DEFAULT NULL,
	`country` varchar(64) DEFAULT NULL,
	`city` varchar(64) DEFAULT NULL,
	`order_time` datetime NOT NULL,
	PRIMARY KEY (`order_id`),
	KEY `auto_shard_key_country_city` USING BTREE (`country`, `city`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4
/* LOCALITY='dn=polardbx-ng28-dn-0,polardbx-ng28-dn-1' */
PARTITION BY LIST COLUMNS(`country`,`city`)
(PARTITION `p1` VALUES IN (('China','Shanghai')) ENGINE = InnoDB LOCALITY='dn=polardbx-ng28-dn-2',
 PARTITION `p2` VALUES IN (('China','Beijing')) ENGINE = InnoDB LOCALITY='dn=polardbx-ng28-dn-2',
 PARTITION `p3` VALUES IN (('China','Hangzhou')) ENGINE = InnoDB,
 PARTITION `p4` VALUES IN (('China','Nanjing')) ENGINE = InnoDB,
 PARTITION `p5` VALUES IN (('China','Guangzhou')) ENGINE = InnoDB,
 PARTITION `p6` VALUES IN (('China','Shenzhen')) ENGINE = InnoDB,
 PARTITION `p7` VALUES IN (('China','Wuhan')) ENGINE = InnoDB,
 PARTITION `p8` VALUES IN (('America','New York')) ENGINE = InnoDB) |
+---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.05 sec)

mysql> SHOW TOPOLOGY `orders_region`;
+----+------------------+--------------------------+----------------+-------------+--------------------+
| ID | GROUP_NAME       | TABLE_NAME               | PARTITION_NAME | PHY_DB_NAME | DN_ID              |
+----+------------------+--------------------------+----------------+-------------+--------------------+
|  0 | DB1_P00002_GROUP | orders_region_RlsY_00000 | p1             | db1_p00002  | polardbx-ng28-dn-2 |
|  1 | DB1_P00002_GROUP | orders_region_RlsY_00001 | p2             | db1_p00002  | polardbx-ng28-dn-2 |
|  2 | DB1_P00001_GROUP | orders_region_RlsY_00003 | p4             | db1_p00001  | polardbx-ng28-dn-1 |
|  3 | DB1_P00001_GROUP | orders_region_RlsY_00004 | p5             | db1_p00001  | polardbx-ng28-dn-1 |
|  4 | DB1_P00001_GROUP | orders_region_RlsY_00006 | p7             | db1_p00001  | polardbx-ng28-dn-1 |
|  5 | DB1_P00000_GROUP | orders_region_RlsY_00002 | p3             | db1_p00000  | polardbx-ng28-dn-0 |
|  6 | DB1_P00000_GROUP | orders_region_RlsY_00005 | p6             | db1_p00000  | polardbx-ng28-dn-0 |
|  7 | DB1_P00000_GROUP | orders_region_RlsY_00007 | p8             | db1_p00000  | polardbx-ng28-dn-0 |
+----+------------------+--------------------------+----------------+-------------+--------------------+
8 rows in set (0.25 sec)
Catatan

Node data untuk partisi tabel logis harus termasuk dalam kumpulan node data database yang bersangkutan, tetapi dapat dikecualikan dari kumpulan node data tabel logis.

Ubah atribut LOCALITY objek database

Ubah atribut LOCALITY grup tabel

Anda dapat mengubah atribut LOCALITY grup tabel secara dinamis sesuai kebutuhan bisnis.

Sintaks:

ALTER TABLEGROUP identifier SET LOCALITY = locality_option
locality_option:
    'dn=storage_inst_id_list'
 |  ''

Contoh:

Misalnya, jika tabel orders_region termasuk dalam grup tabel tg3, eksekusi pernyataan berikut untuk mengubah atribut LOCALITY grup tabel tg3:

ALTER TABLEGROUP `tg3` SET LOCALITY = `dn=polardbx-ng28-dn-0`;

Setelah perubahan atribut LOCALITY grup tabel tg3, eksekusi pernyataan SHOW TOPOLOGY untuk melihat hubungan topologi dalam tabel orders_region.

mysql> SHOW TOPOLOGY `orders_region`;
+----+------------------+--------------------------+----------------+-------------+--------------------+
| ID | GROUP_NAME       | TABLE_NAME               | PARTITION_NAME | PHY_DB_NAME | DN_ID              |
+----+------------------+--------------------------+----------------+-------------+--------------------+
|  0 | DB1_P00002_GROUP | orders_region_RlsY_00000 | p1             | db1_p00002  | polardbx-ng28-dn-2 |
|  1 | DB1_P00002_GROUP | orders_region_RlsY_00001 | p2             | db1_p00002  | polardbx-ng28-dn-2 |
|  2 | DB1_P00000_GROUP | orders_region_RlsY_00002 | p3             | db1_p00000  | polardbx-ng28-dn-0 |
|  3 | DB1_P00000_GROUP | orders_region_RlsY_00003 | p4             | db1_p00000  | polardbx-ng28-dn-0 |
|  4 | DB1_P00000_GROUP | orders_region_RlsY_00004 | p5             | db1_p00000  | polardbx-ng28-dn-0 |
|  5 | DB1_P00000_GROUP | orders_region_RlsY_00005 | p6             | db1_p00000  | polardbx-ng28-dn-0 |
|  6 | DB1_P00000_GROUP | orders_region_RlsY_00006 | p7             | db1_p00000  | polardbx-ng28-dn-0 |
|  7 | DB1_P00000_GROUP | orders_region_RlsY_00007 | p8             | db1_p00000  | polardbx-ng28-dn-0 |
+----+------------------+--------------------------+----------------+-------------+--------------------+
8 rows in set (0.17 sec)

Setelah perubahan atribut LOCALITY grup tabel tg3, node data partisi tabel yang tidak ditentukan atribut LOCALITY saat pembuatan tabel diubah. Node data partisi tabel yang ditentukan atribut LOCALITY saat pembuatan tabel tetap tidak berubah.

Catatan

Setelah memodifikasi metadata grup tabel atau grup partisi yang atribut LOCALITY-nya diubah, metadata baru segera dikirim ke sistem backend. Sistem backend kemudian menghasilkan tugas migrasi untuk memigrasi partisi dalam grup tabel secara asinkron. Dalam contoh ini, sistem backend menjalankan tugas REBALANCE TABLEGROUP tg3 untuk memigrasi partisi. Eksekusi pernyataan berikut untuk memeriksa kemajuan tugas migrasi dari information_schema.ddl_plan:

mysql> select * from information_schema.ddl_plan where table_schema = "db1";
+----+---------------------+---------------------+--------------+------------------------------------------------------------------+---------+-----------+----------+-------------+--------+--------+---------------------+---------------------+----------------+
| ID | plan_id             | job_id              | table_schema | ddl_stmt                                                         | state   | ddl_type  | progress | retry_count | result | extras | gmt_created         | gmt_modified        | resource       |
+----+---------------------+---------------------+--------------+------------------------------------------------------------------+---------+-----------+----------+-------------+--------+--------+---------------------+---------------------+----------------+
|  1 | 1465819565798723584 | 1465819579241467904 | db1          | REBALANCE TABLEGROUP `tg3`  EXPLAIN=false ASYNC=true DEBUG=false | SUCCESS | REBALANCE |      100 |           0 |        |        | 2022-05-24 14:37:58 | 2022-05-24 14:38:11 | tablegroup:tg3 |
+----+---------------------+---------------------+--------------+------------------------------------------------------------------+---------+-----------+----------+-------------+--------+--------+---------------------+---------------------+----------------+

Ubah atribut LOCALITY grup partisi

Anda dapat mengubah atribut LOCALITY grup partisi secara dinamis sesuai kebutuhan bisnis.

Sintaks:

ALTER TABLEGROUP identifier SET PARTITIONS part_name LOCALITY = locality_option
locality_option:
    'dn=storage_inst_id_list'
 |  ''

Contoh:

Sebagai contoh, jika tabel orders_region termasuk dalam grup tabel tg3 dan partisi p3 merupakan bagian dari tabel orders_region, Anda dapat mengeksekusi pernyataan berikut untuk mengubah atribut LOCALITY partisi p3:

ALTER TABLEGROUP `tg3` SET PARTITIONS p3 LOCALITY = `dn=polardbx-ng28-dn-1`;

Setelah perubahan atribut LOCALITY partisi p3, eksekusi pernyataan SHOW TOPOLOGY untuk melihat hubungan topologi dalam tabel orders_region.

mysql> show topology orders_region;
+----+------------------+--------------------------+----------------+-------------+--------------------+
| ID | GROUP_NAME       | TABLE_NAME               | PARTITION_NAME | PHY_DB_NAME | DN_ID              |
+----+------------------+--------------------------+----------------+-------------+--------------------+
|  0 | DB1_P00002_GROUP | orders_region_RlsY_00000 | p1             | db1_p00002  | polardbx-ng28-dn-2 |
|  1 | DB1_P00002_GROUP | orders_region_RlsY_00001 | p2             | db1_p00002  | polardbx-ng28-dn-2 |
|  2 | DB1_P00001_GROUP | orders_region_RlsY_00002 | p3             | db1_p00001  | polardbx-ng28-dn-1 |
|  3 | DB1_P00000_GROUP | orders_region_RlsY_00003 | p4             | db1_p00000  | polardbx-ng28-dn-0 |
|  4 | DB1_P00000_GROUP | orders_region_RlsY_00004 | p5             | db1_p00000  | polardbx-ng28-dn-0 |
|  5 | DB1_P00000_GROUP | orders_region_RlsY_00005 | p6             | db1_p00000  | polardbx-ng28-dn-0 |
|  6 | DB1_P00000_GROUP | orders_region_RlsY_00006 | p7             | db1_p00000  | polardbx-ng28-dn-0 |
|  7 | DB1_P00000_GROUP | orders_region_RlsY_00007 | p8             | db1_p00000  | polardbx-ng28-dn-0 |
+----+------------------+--------------------------+----------------+-------------+--------------------+
8 rows in set (0.11 sec)

Ubah atribut LOCALITY tabel

Anda dapat mengubah atribut LOCALITY tabel secara dinamis sesuai kebutuhan bisnis. Harap diperhatikan bahwa operasi ini memicu migrasi data.

Untuk mengubah tabel non-partisi dengan atribut LOCALITY "balance_single_table=on" menjadi tabel partisi, Anda harus secara eksplisit menghapus atribut LOCALITY dengan melakukan repartisi. Contoh:

ALTER TABLE t_sgl1 PARTITION BY HASH(ID) PARTITIONS 32 LOCALITY = "";

Untuk mengubah atribut LOCALITY tabel logis, Anda dapat langsung memodifikasi atribut LOCALITY dengan melakukan repartisi. Contoh:

ALTER TABLE t_sgl1 PARTITION BY HASH(ID) PARTITIONS 8 LOCALITY = "dn=dn1";

Perubahan nilai atribut LOCALITY setelah operasi modifikasi partisi

Database dalam mode AUTO mendukung operasi modifikasi partisi seperti ALTER TABLEGROUP, mengubah jenis tabel, dan mengubah strategi partisi tabel. Untuk informasi lebih lanjut, lihat ALTER TABLEGROUP dan Ubah tipe dan aturan partisi tabel.

Setelah operasi modifikasi partisi, grup partisi baru atau grup tabel baru mewarisi nilai asli atribut LOCALITY, dan sistem mendistribusikan data berdasarkan nilai asli atribut LOCALITY. Nilai atribut LOCALITY berubah dalam skenario berikut:

  • Setelah tabel dikonversi menjadi tabel non-partisi atau tabel siaran, nilai atribut LOCALITY tabel menjadi kosong.

  • Setelah partisi yang menyimpan data panas dibagi menjadi beberapa partisi, nilai atribut LOCALITY partisi baru menjadi kosong.

  • Setelah beberapa partisi dengan nilai atribut LOCALITY berbeda digabungkan menjadi satu partisi, nilai atribut LOCALITY partisi baru menjadi kosong.

Perubahan atribut LOCALITY setelah operasi modifikasi partisi:

Tipe Operasi

Objek

Apakah atribut LOCALITY berubah

Ubah strategi partisi

Tabel

Tidak

Ubah tipe tabel

Tabel

Atribut LOCALITY tetap tidak berubah hanya jika tabel non-partisi dikonversi menjadi tabel partisi.

Migrasi partisi

Grup partisi

Tidak

Gabungkan partisi

Grup partisi

Partisi baru mewarisi nilai atribut LOCALITY partisi yang digabungkan hanya jika partisi yang digabungkan memiliki nilai atribut LOCALITY yang sama.

Pisahkan partisi

Grup partisi

Tidak

Pisahkan partisi berdasarkan nilai panas

Grup partisi

Ya

Ekstrak data panas dari partisi

Grup partisi

Ya

Hapus partisi

Grup partisi

-

Tambah partisi

Grup partisi

Tidak

Modifikasi partisi menggunakan metode partisi LIST

Grup partisi

Tidak

Ganti nama partisi

Grup partisi

Tidak

Skenario

  • Saat membuat database, gunakan atribut LOCALITY untuk menentukan node data guna mengisolasi data. Tabel dan partisi dalam database didistribusikan secara otomatis di node data yang ditentukan.

  • Saat membuat tabel non-partisi, gunakan atribut LOCALITY untuk menentukan node data. Ini membantu menghindari tekanan penyimpanan tinggi pada node data dengan nomor seri 0 saat ada banyak tabel non-partisi.

  • Saat membuat tabel partisi, gunakan atribut LOCALITY untuk menentukan node data untuk partisi. Dengan cara ini, partisi tabel dapat didistribusikan di node data yang berbeda. Sebagai contoh, gunakan metode partisi LIST untuk mempartisi data dan menyimpan data dari wilayah berbeda di node data yang berbeda. Untuk informasi lebih lanjut, lihat bagian "Tentukan atribut LOCALITY untuk partisi tabel logis".

  • Saat partisi data berisi data panas, bagi partisi dan gunakan atribut LOCALITY untuk menentukan node data tempat data panas akan disimpan. Ini mengisolasi data panas secara fisik dari data non-panas. Untuk informasi lebih lanjut, lihat bagian "Ubah atribut LOCALITY tabel".