spqplugin_v2使用
前提条件
1.一个CN以及若干DN节点服务器运行正常,openGauss能够正常启动
2.所有节点网络互通
3.线程池关闭(目前暂不兼容)
部署
1.openGauss部署
1.1 CN节点
修改cn节点数据目录/postgresql.conf
,添加如下参数
password_encryption_type = 1
enable_pbe_optimization = OFF
shared_preload_libraries = 'spq'
port = cn节点port
修改完上述配置后,需要重启openGauss进程,命令例如(若openGauss未启动则启动即可,命令为实例,其他启动方式也可以)
gs_ctl restart -D CN节点数据目录
1.2 DN节点
修改dn节点数据目录/postgresql.conf
添加如下参数
password_encryption_type = 1
shared_preload_libraries = 'spq'
port = dn节点port
listen_addresses = 'localhost,当前DN节点网卡IP'
修改dn节点数据目录/pg_hba.conf
添加如下行,接收来自cn节点的所有用户连接(此处代码逻辑控制)
# TYPE DATABASE USER ADDRESS METHOD
host all all CN节点IP/32 trust
此处要注意,如果是使用单机多docker方式部署(DN和CN节点都在该机器上,但为不同docker容器),则DN节点的pg_hba.conf中CN节点IP要配置为ifconfig命令输出中,docker0的IP,例如下面示例中的172.17.0.1
$ ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
inet6 fe80::42:a6ff:fe5e:19cb prefixlen 64 scopeid 0x20<link>
ether 02:42:a6:5e:19:cb txqueuelen 0 (Ethernet)
RX packets 23556 bytes 1778105 (1.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 23323 bytes 2091561 (1.9 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
修改完上述配置后,需要重启openGauss进程,命令例如(若openGauss未启动则启动即可,命令为示例,其他启动方式也可以)
gs_ctl restart -D 当前DN节点数据目录
查看每个DN节点的防火墙是否开启,若开启则需要对CN节点放通其openGauss的监听端口
# 查看firewalld是否开启,若输出包含Active: active (running)则说明firewalld正在运行,否则我们需要对CN节点IP放通openGauss监听端口。
systemctl status firewalld
# DN节点向CN节点IP放通端口
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=CN节点IP port port=当前DN节点openGauss端口 protocol=“tcp” accept'
firewall-cmd --reload
注意,对每个DN节点都要进行如上配置
2.spq配置
2.1 加载插件
连接CN节点和所有DN节点的openGauss执行如下sql,加载spq插件,注意所有节点的openGauss都需要执行。
create extension spq;
2.2 节点配置
连接CN节点,添加节点配置
-- 设置自身为CN节点
SELECT * from spq_set_coordinator_host('127.0.0.1', CN节点端口号);
-- 添加所有DN节点
SELECT * from spq_add_node('DN1 IP', DN1端口号);
SELECT * from spq_add_node('DN2 IP', DN2端口号);
...
--查询所有节点
SELECT * from pg_dist_node;
SELECT * FROM spq_get_active_worker_nodes();
2.3 分布式表使用示例
创本地表
CREATE TABLE IF NOT EXISTS public.pg_vector_collection (id BIGINT PRIMARY KEY, embedding vector(4));
ALTER TABLE public.pg_vector_collection ALTER COLUMN embedding SET STORAGE PLAIN;
ALTER TABLE public.pg_vector_collection SET (parallel_workers = 32);
-- 查询表的分片分布情况:
SELECT * from pg_dist_shard;
转分布式表
SELECT create_distributed_table('pg_vector_collection', 'id', shard_count:=4);
-- 查询表的分片分布情况:
SELECT * from pg_dist_shard;
插数据
INSERT INTO public.pg_vector_collection
VALUES(1,'[1,2,3,4]'),(2,'[1,2,3,4]'),(3,'[1,2,3,4]'),(4,'[1,2,3,4]'),(5,'[1,2,3,4]'),(6,'[1,2,3,4]'),(7,'[1,2,3,4]');
建索引
CREATE INDEX IF NOT EXISTS "opengauss_index" ON public. pg_vector_collection USING "hnsw" (embedding "vector_cosine_ops" ) WITH ( "m" = "16", "ef_construction" = "200" );
查询
SELECT * FROM public.pg_vector_collection ORDER BY embedding <=> '[1,2,3,4]' LIMIT 5;
删表
drop table pg_vector_collection;
意见反馈