您可以通過創建混合分區(Hybrid Partition)的方式來訪問存儲在不同引擎中的數據。
混合分區原理如下圖所示:
混合分區的基本原理是將分區表中的分區存儲在不同的存儲介質上,以達到冷熱數據分離管理的目的。比如將熱數據存儲在本地PFS上,冷數據存儲在OSS上,這樣可以極大地降低冷數據的存儲成本,且不影響熱數據的查詢性能,也不影響對熱數據執行DML操作。
創建混合分區表功能目前處于灰度階段。如需使用,請前往配額中心,根據配額ID
polardb_mysql_hybrid_partition
找到配額名稱,在對應的操作列單擊申請來開通該功能。如需了解更多關于創建混合分區的內容,請搜索釘釘群號加群進行咨詢。釘釘群號:24490017825。
前提條件
集群版本需為PolarDB MySQL版8.0.2版本且Revision version為8.0.2.2.5及以上。您可以通過查詢版本號來確認集群版本。
OSS上已存在需要創建的分區的數據文件,且數據文件名稱需要符合以下命名規則:
擴展名和分區標記需大寫。
表名和分區名與數據庫中的名稱保持一致。
示例:假設表
t1
的p1
分區為CSV引擎,則該分區的數據文件命名為:t1#P#p1.CSV
。
注意事項
創建的混合分區表至少需要包含一個在InnoDB引擎上創建的分區。
創建包含二級分區的混合分區表時,一級分區的引擎必須和表的引擎保持一致,且二級分區至少需要包含一個在InnoDB引擎上創建的分區。
混合分區表的分區類型目前僅支持
RANGE
和LIST
類型。暫不支持對混合分區表中的OSS分區執行DML操作(包括
INSERT
、UPDATE
、DELETE
和LOAD
)。集群版本為PolarDB MySQL版8.0.2.2.17版本及以上時,支持對混合分區表執行ADD和DROP操作。其它版本暫不支持對混合分區表執行ADD和DROP操作。
參數說明
使用混合分區表時,您可以根據實際使用場景在PolarDB集群的參數配置中設置以下參數。
參數 | 說明 |
loose_hybrid_partition_query_mix_engine_enabled | 查詢混合分區表時,是否查詢非InnoDB引擎中的分區數據。取值如下:
|
創建混合分區
您可以通過已有的OSS Server來創建混合分區,如果當前不存在OSS Server,您可以通過以下語法來創建OSS Server:
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 MySQL版8.0.2版本且Revision version為8.0.2.2.6及以上時,支持使用my_oss_sts_token
參數。
參數說明如下表所示:
參數 | 類型 | 備注 |
oss_server_name | 字符串 | OSS server名稱。 說明 該參數為全局參數,且全局唯一。該參數不區分大小寫,最大長度不超過64個字符,超過64個字符的名稱會被自動截斷。您可以將OSS server名稱指定為帶引號的字符串。 |
my_oss_endpoint | 字符串 | OSS對應區域的域名。 說明 如果是從阿里云的主機訪問數據庫,應該使用內網域名(即帶有“internal”的域名),避免產生公網流量。 |
my_oss_bucket | 字符串 | 數據文件所在OSS的bucket,需要通過OSS預先創建。 |
my_oss_access_key_id | 字符串 | OSS賬號ID。 |
my_oss_access_key_secret | 字符串 | OSS賬號KEY。 |
my_oss_prefix | 字符串 | OSS路徑前綴。用于指定數據文件的存放路徑。不能包含特殊字符,也不能為空。 |
my_oss_sts_token | 字符串 | 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
);
查詢混合分區
您可以通過以下兩種方式來查詢不同引擎的分區數據。
在控制臺將
hybrid_partition_query_mix_engine_enabled
參數設置為ON,執行查詢語句時,查詢結果中就會包含非InnoDB分區的數據。示例如下:SELECT * FROM t1;
其中,
t1
表示需要查詢的混合分區表。在控制臺將
hybrid_partition_query_mix_engine_enabled
參數設置為OFF,查詢指定分區中的數據。示例如下:SELECT * FROM t1 partition (p1);
其中,
t1
表示需要查詢的混合分區表,p1
表示需要查詢的分區。