配置PolarDB表到Tair表的映射關(guān)系
在完成添加Tair緩存節(jié)點(diǎn)、創(chuàng)建Tair緩存節(jié)點(diǎn)賬號以及創(chuàng)建Tair自定義連接地址操作后,您需要配置表映射關(guān)系,明確PolarDB數(shù)據(jù)庫中的表到Tair緩存節(jié)點(diǎn)的Redis協(xié)議的KV(Key-Value)結(jié)構(gòu)或者KKV(Key-Key-Value)結(jié)構(gòu),從而使Tair緩存節(jié)點(diǎn)按照您的業(yè)務(wù)預(yù)期來提供緩存能力。
前提條件
已通過創(chuàng)建的Tair自定義連接地址連接到PolarDB數(shù)據(jù)庫集群。
配置說明
目前映射配置支持String映射和Hash映射兩種模式。在此之前,我們來了解一下系統(tǒng)表。
系統(tǒng)表介紹
為了在PolarDB中實(shí)現(xiàn)Tair緩存一體化的能力,PolarDB預(yù)置了如下系統(tǒng)表:
-- system table, create by default, mysql
-- string映射模式的系統(tǒng)表
CREATE TABLE mysql.`tair_string_containers` (
`name` varchar(50) NOT NULL COMMENT '映射的唯一名,用于唯一確定一個映射',
`db_schema` varchar(250) NOT NULL COMMENT '映射的表所在的db',
`db_table` varchar(250) NOT NULL COMMENT '映射表',
`key_column` varchar(250) NOT NULL COMMENT '映射的key使用的列',
`value_column` varchar(250) NOT NULL COMMENT '映射的value使用的列',
`unique_idx_name_on_key` varchar(250) NOT NULL COMMENT '使用的索引名,因?yàn)閠air不感知所有的索引,也不使用優(yōu)化器,因此需要手動指定索引',
PRIMARY KEY (`name`)
);
-- hash映射模式的系統(tǒng)表
CREATE TABLE IF NOT EXISTS `tair_hash_containers` (
`name` varchar(50) NOT NULL COMMENT '映射的唯一名,用于唯一確定一個映射',
`db_schema` varchar(250) NOT NULL COMMENT '映射的表所在的db',
`db_table` varchar(250) NOT NULL COMMENT '映射表',
`key_column` varchar(250) NOT NULL COMMENT '映射的key使用的列',
`value_column` varchar(250) NOT NULL COMMENT '映射的value使用的列',
`unique_idx_name_on_key` varchar(250) NOT NULL COMMENT '使用的索引名,因?yàn)閠air不感知所有的索引,也不使用優(yōu)化器,因此需要手動指定索引',
PRIMARY KEY (`name`)
);
支持的字段數(shù)據(jù)類型如下:
key | value | |
TINYINT | 支持 | 支持 |
SMALLINT | 支持 | 支持 |
MEDIUMINT | 暫未支持 | 暫未支持 |
INT或INTEGER | 支持 | 支持 |
BIGINT | 支持 | 支持 |
FLOAT | 無意義,不支持 | 支持 |
DOUBLE | 無意義,不支持 | 支持 |
DECIMAL | 暫未支持 | 暫未支持 |
CHAR | 支持 | 支持 |
VARCHAR | 支持 | 支持 |
TINYBLOB | 支持,不建議 | 支持 |
TINYTEXT | 支持,不建議 | 支持 |
BLOB | 支持,不建議 | 支持 |
TEXT | 支持,不建議 | 支持 |
MEDIUMBLOB | 支持,不建議 | 支持 |
MEDIUMTEXT | 支持,不建議 | 支持 |
LONGBLOB | 暫未支持 | 暫未支持 |
LONGTEXT | 暫未支持 | 暫未支持 |
(推薦)模式一:String映射
為了保證更好的使用體驗(yàn),建議您優(yōu)先選擇String映射模式進(jìn)行配置。
String映射支持在具有讀寫權(quán)限的表中,使用KV結(jié)構(gòu),將一個column作為key,一個column作為value。
為保證key的唯一性,選擇作為key的column,需要事先創(chuàng)建索引unique_idx_name_on_key
。
以下通過一個示例,帶您了解如何通過SQL配置String映射:
CREATE database test_db;
use test_db
CREATE TABLE `test` (
`key` varchar(50) NOT NULL,
`value` varchar(50) DEFAULT NULL,
`value2` varchar(50) DEFAULT NULL,
PRIMARY KEY (`key`)
);
insert into mysql.tair_string_containers values ("example", "test_db", "test", "key", "value", "PRIMARY");
insert into test values ("k", "v", "v2");
FLUSH TAIR;
從Tair緩存節(jié)點(diǎn)以Redis協(xié)議讀取數(shù)據(jù)時,需要以設(shè)置的name作為key的前綴,并使用@
分隔。例如:
redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> get example@k
"v"
模式二:Hash映射
Hash映射符合Redis Hash結(jié)構(gòu)用法,支持在具有讀寫權(quán)限的表中,使用KKV結(jié)構(gòu),將一個column作為key,多個column的字段名作為field,column的數(shù)據(jù)作為子field的value。
為保證key的唯一性,選擇作為key的column,需要事先創(chuàng)建索引unique_idx_name_on_key
。
以下通過一個示例,帶您了解如何通過SQL配置Hash映射:
CREATE database test_db;
use test_db
CREATE TABLE `test` (
`key` varchar(50) NOT NULL,
`value` varchar(50) DEFAULT NULL,
`value2` varchar(50) DEFAULT NULL,
PRIMARY KEY (`key`)
);
insert into mysql.tair_hash_containers values ("hexample", "test_db", "test", "key", "value,value2", "PRIMARY");
insert into test values ("k", "v", "v2");
FLUSH TAIR;
從Tair緩存節(jié)點(diǎn)以Redis協(xié)議讀取數(shù)據(jù)時,需要以設(shè)置的name作為key的前綴,并使用@
分隔。例如:
redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> hget hexample@k value2
"v2"
127.0.0.1:6379> hget hexample@k value
"v"
多column組成key
當(dāng)前String映射模式和Hash映射模式都支持多column組成key。您只需要在key_column
中傳入多個逗號分隔的column名稱即可。
為了保證key的唯一性,選擇作為key的column,需要創(chuàng)建unique_idx_name_on_key
索引覆蓋所有的key_column。
以下通過一個示例,帶您了解如何通過SQL配置多column組成key:
CREATE database test_db;
use test_db
CREATE TABLE `test` (
`user` varchar(50) NOT NULL,
`phone` varchar(50) NOT NULL,
`value` varchar(50) DEFAULT NULL,
`value2` varchar(50) DEFAULT NULL,
);
ALTER TABLE test ADD UNIQUE INDEX idx_user_phone (user, phone);
insert into mysql.tair_hash_containers values ("hexample", "test_db", "test", "user,phone", "value,value2", "idx_user_phone");
insert into test values ("test_user", "13600001234", "v", "v2");
FLUSH TAIR;
從Tair緩存節(jié)點(diǎn)以Redis協(xié)議讀取數(shù)據(jù)時,需要拼接多個key_column,并使用#
分隔。例如:
redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> hget hexample@test_user#13600001234 value2
"v2"
127.0.0.1:6379> hget hexample@test_user#13600001234 value
"v"
問題排查
添加映射后,執(zhí)行如下命令以刷新配置:
FLUSH TAIR;
刷新配置后,有些配置可能無法刷新成功,此時可以使用如下命令,查看對應(yīng)的錯誤日志:
show warnings;
后續(xù)操作
在完成表映射關(guān)系配置后,您就可以連接到PolarDB數(shù)據(jù)庫集群,并發(fā)出Redis命令以使用Tair緩存節(jié)點(diǎn)提供的功能。