使用 starocks_fdw 实现读写分离

最近更新时间:2024-09-23 14:46:41

我的收藏
云数据库 PostgreSQL 支持自研的 starrocks_fdw 插件,让您能够将 starrocks 中的表作为 PostgreSQL 的外部表,从而实现冷热存储分离。该插件的使用兼容 mysql_fdw 插件,以下为一个使用示例,更多详细的参数及使用请参考 mysql_fdw 官网。本文的前提是您已经部署完毕 starrocks ,且可以访问。同时您已经购买了云数据库 PostgreSQL 实例。
本文中,已经购买一个云数据库 PostgreSQL 实例,且在同一个 VPC 下的 CVM 上已经自建一个 starrocks。下面将为您一一描述操作过程。
说明:
starocks_fdw 插件当前只支持 v13.14_r1.17及以上的 PG13版本。

在 starrocks 上准备数据

新建表格 sr_m1:
mysql> CREATE TABLE sr_m1 (
-> id int not null,
-> str INT
-> );
Query OK, 0 rows affected (0.02 sec)
插入数据:
mysql> insert into sr_m1(id,str)values(1,1),(2,2),(3,3);
Query OK, 3 rows affected (0.48 sec)
{'label':'insert_61cc249a-758a-11ef-a99a-5254006f765d', 'status':'VISIBLE', 'txnId':'1024'}
检查数据插入成功:
mysql> select * from sr_m1;
+------+------+
| id | str |
+------+------+
| 1 | 1 |
| 3 | 3 |
| 2 | 2 |
+------+------+
3 rows in set (0.01 sec)

在云数据库 PostgreSQL 上创建插件

新建 database 并切换至该数据库,如您已有数据库可以忽略:
postgres=> create database am_sr;
CREATE DATABASE
postgres=> \\c am_sr
psql (14.11, server 13.14)
You are now connected to database "am_sr" as user "dbadmin".
am_sr=>
创建插件:
am_sr=> create extension starrocks_fdw;
CREATE EXTENSION

在云数据库 PostgreSQL 上创建外部服务和用户映射

创建外部服务器,其参数请参考 插件参数文档
am_sr=> CREATE SERVER server_sr FOREIGN DATA WRAPPER starrocks_fdw OPTIONS (host '10.21.0.11', port '9030',instanceid 'ins-xxx3tfi5',access_type '2',region 'ap-guangzhou', uin '100033123456', own_uin '100033456789', vpcid 'vpc-fqxagfew', subnetid 'vpc-fqxawe23');
CREATE SERVER
创建用户映射,假设云数据库 PostgreSQL 的用户是 dbadmin,希望使用用户名root和密码123456连接到 starrocks,则命令如下:
am_sr=> CREATE USER MAPPING for dbadmin SERVER server_sr OPTIONS (password '123456', username 'root');
CREATE USER MAPPING
您可以使用如下命令查看当前已经新建的外部服务:
am_sr-> FROM pg_foreign_server;
srvname | srvowner | srvfdw | srvtype | srvversion |
srvoptions
-----------+----------+--------+---------+------------+------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------
server_sr | 16385 | 16495 | | | {host=10.21.0.11,port=9030,instanceid=ins-xxx3tfi5,access_type=2
,region=ap-guangzhou,uin=100033123456,own_uin=100033456789,vpcid=vpc-fqxagfew,subnetid=vpc-fqxawe23,linkid=352}
(1 row)
您同时可以使用如下命令查看当前已经建立的用户映射:
am_sr=> SELECT um.umid, um.srvid, fs.srvname, um.umuser, r.rolname AS usename, um.umoptions FROM pg_user_mappings um JOIN pg_foreign_server fs ON um.srvid = fs.oid JOIN pg_roles r ON um.umuser = r.oid;
umid | srvid | srvname | umuser | usename | umoptions
-------+-------+-----------+--------+---------+---------------------------------
16499 | 16498 | server_sr | 16385 | dbadmin | {password=123456,username=root}
(1 row)

在云数据库 PostgreSQL 上创建外部表

创建表格:
am_sr=> CREATE TABLE sr (id INT NOT NULL,str INT) PARTITION BY RANGE (id);
CREATE TABLE
创建外部表:
am_sr=> CREATE foreign TABLE sr_m PARTITION OF sr FOR VALUES FROM (1) TO (10) SERVER server_sr OPTIONS (dbname 'my_database', table_name 'sr_m1');
CREATE FOREIGN TABLE
查询数据:
am_sr=> select * from sr;
id | str
----+-----
1 | 1
3 | 3
2 | 2
(3 rows)