POSTGRESQL 数据库可以处理OLTP+OLAP,是完全可以,集成了DUCKDB的POSTGRESQL,可以在一个数据库里面,进行OLTP+OLAP的工作,也就是第一个行列混插的数据库。 当然这个数据库是 阿里云POSTGRESQL RDS,一个疯狂的产品。
废话不说,我们先看效果。
List of relations
Schema | Name | Type | Owner
--------+------------+-------+----------
public | test_table | table | postgres
(1 row)
duckdb_test=> select count(*) from test_table;
count
----------
10000000
(1 row)
Time: 622.994 ms
duckdb_test=> SET rds_duckdb.execution = on;
SET
Time: 3.626 ms
duckdb_test=> select count(*) from test_table;
count
----------
10000000
(1 row)
Time: 12.148 ms
上面的例子,对同样的表进行count(*)操作结果却是不同的,使用了622ms ,一个使用了12ms。
什么原因导致的这个结果,这就是duckdb in PostgreSQL RDS,我们都知道duckdb在OLAP中的功能,且是一个列存的数据库系统。作为一个传统数据库的使用者,实际上最大需求就来自于传统数据库POSTGRESQL 是否能支持OLAP + OLTP ALL IN ONE ,POSTGRESQL。
这样的产品是我们需要的,通过打开一个开关就可以将我查询的语句转换到列存取查询,这是逆天的改革。
使用方法也很简单,登录到POSTGRESQL RDS产品P13 -17 都可以,然后将 rds_duck写入到shared_preload_libraries 参数中,重启数据库。
OK POSTGRESQL 改造为OLAP + OLTP = POSTGRESQL RDS 的工作就完成了。
登录到你的RDS 产品直接,运行
duckdb_test=> create extension rds_duckdb;
CREATE EXTENSION
Time: 54.836 ms
duckdb_test=> SELECT rds_duckdb.duckdb_version();
WARNING: Trying to execute an operation with non-duckdb tables((null)), fallback to PG.
WARNING: If you don't want to use DuckDB anymore, set rds_duckdb.execution = off;
duckdb_version
----------------
v1.1.1
(1 row)
Time: 3.968 ms
duckdb_test=>
然后你的POSTGRESQL RDS 产品就直接变成了OLTP + OLAP = POSTGRESQL RDS的数据库了。(此事此刻我都听见他在说 其他数据库都是小垃圾了,WO WO WO come down ,Don't be too pushy )
事情是怎么回事,阿里云的POstgreSQL 开发了一个新的功能,将DUCK_DB 作为extension 插入到POSTGRESQL 13 14 15 16 17 的版本中,在你使用POSTGRESQL 的时候,系统将自动判断你的语句是否适合duck_db来操作,如果不能就退回给行式引擎。
且在POSTGRESQL 数据库中打开和关闭这个功能只需要。
SET rds_duckdb.execution = on;
同时可以调整AP的加速参数,调整使用的线程数和使用内存的限制
SET rds_duckdb.worker_threads = 32;
SET rds_duckdb.memory_limit = 16384;
这里我仅仅做了一个简单的测试,测试结果当然是核爆级别的,历史上第一次一个数据库,一个开源的数据库产品,一个开源的数据库产品可以自动切换行,列数据库引擎,在执行SQL的时候。
当然在一个数据库里面能同时进行行列引擎服务一个SQL的其他数据库也有,POLARDB FOR MYSQL 以及POLARDB FOR POSTGRESQL。 但 但 但,他们都是要加“积木”的,也就是需要使用 IMCI 节点,或矢量节点参与的,而这个RDS 产品的POSTGRESQL 在一个开源的数据库上可以融合两个数据库引擎来进行SQL的处理,将这一切简单化。
不要和我提 GAUSSDB ,TDSQL-C ,他们和POLARDB 一样都是两个引擎分别工作,他们和这个比不配。
duckdb_test=> SELECT rds_duckdb.refresh_duckdb_table('test_table');
duckdb_test=> select count(*) from test_table;
count
----------
10000000
(1 row)
Time: 622.994 ms
duckdb_test=> SET rds_duckdb.execution = on;
SET
Time: 3.626 ms
duckdb_test=> select count(*) from test_table;
count
----------
10000000
(1 row)
Time: 12.148 ms
duckdb_test=> drop extension rds_duckdb;
DROP EXTENSION
Time: 11.483 ms
duckdb_test=> create extension rds_duckdb;
CREATE EXTENSION
Time: 54.836 ms
duckdb_test=> SELECT rds_duckdb.duckdb_version();
WARNING: Trying to execute an operation with non-duckdb tables((null)), fallback to PG.
WARNING: If you don't want to use DuckDB anymore, set rds_duckdb.execution = off;
duckdb_version
----------------
v1.1.1
(1 row)
Time: 3.968 ms
现在第一步已经OK 了,剩下的第二步,行列表数据实时同步已经在测试中,如果这个做出来,那么市面上的大部分数据库,就只能称之为“小垃圾”。
总结,POSTGRESQL RDS
1 直接在PG 数据库中create extension rds_duckdb
2 一个SQL 直接通过PG 和 DUCKDB 两个数据库引擎进行处理(实际上是存在行,列表)直接返回结果
3 目前创建列表后的数据增量已经可以实时同步剩下是性能的调优的问题,现在线上的RDS PG 的列表还如PG的物化视图,需要手动刷新。
4 实时行列表同步的功能尽在咫尺,性能测试ING
期待,将市面上的传统数据库都打入,“小垃圾”的 PostgreSQL RDS 新品上线的时刻。
本文分享自 AustinDatabases 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!