前言
使用聚合查询中间件,多个http、t3、fdw服务的结果聚合,同时利用SQL引擎的能力对结果进行连接、分组、排序、聚合
安装聚合查询
试用版本安装见 lightdb周边-聚合查询试用包指引_星辰bitone的博客-CSDN博客
场景
假设 产品信息分为2个库,每个库中又分为4张表。
产品信息表定义
create table product_info_1 ( product_id varchar2(100), product_name varchar2(100) );
create table product_info_2 ( product_id varchar2(100), product_name varchar2(100) );
create table product_info_3 ( product_id varchar2(100), product_name varchar2(100) );
create table product_info_4 ( product_id varchar2(100), product_name varchar2(100) );
初始化数据
insert into product_info_1 values('1', '理财产品1');
insert into product_info_2 values('2', '理财产品2');
insert into product_info_3 values('3', '理财产品3');
insert into product_info_4 values('4', '理财产品4');
聚合查询配置
聚合查询配置FDW规则见:lightdb周边-聚合查询参考手册_星辰bitone的博客-CSDN博客 中外部表聚合章节
然后建立父表
create table f_products_info ( product_id VARCHAR(100), product_name VARCHAR(100) );
建立子外部表
已数据库1举例(数据库2同理),如下:
CREATE foreign table f_products_info_db1_tab1 ( )
INHERITS (f_products_info)
server oradb OPTIONS (schema 'ZHANGLIANG', table 'PRODUCT_INFO_1' );
CREATE foreign table f_products_info_db1_tab2 ( )
INHERITS (f_products_info)
server oradb OPTIONS (schema 'ZHANGLIANG', table 'PRODUCT_INFO_2' );
CREATE foreign table f_products_info_db1_tab3 ( )
INHERITS (f_products_info)
server oradb OPTIONS (schema 'ZHANGLIANG', table 'PRODUCT_INFO_3' );
CREATE foreign table f_products_info_db1_tab4 ( )
INHERITS (f_products_info)
server oradb OPTIONS (schema 'ZHANGLIANG', table 'PRODUCT_INFO_4' );;
效果
分表聚合效果
查询父表可以直接查询到所有分表的数据
大数据量效果
product_info_2、product_info3、product_info4都存放了1048576条数据。
直接查询效果如下:
lightdb@postgres=# select count(*) from f_products_info ;
count
---------
4194304
(1 row)
Time: 12046.512 ms (00:12.047)
lightdb@postgres=# select product_id, product_name, count(1) from f_products_info group by product_id , product_name;
product_id | product_name | count
------------+--------------+---------
1 | 理财产品1 | 1048576
2 | 理财产品2 | 1048576
3 | 理财产品3 | 1048576
4 | 理财产品4 | 1048576
(4 rows)
Time: 24341.296 ms (00:24.341)
暴露接口查询,mybatis xml配置
<select id="getProductInfoFDW" resultType="map">
select product_id, product_name, count(1) from f_products_info group by product_id , product_name
</select>
直接分组聚合400w数据,18.56s拿到应答信息。