duckdb 1.4新功能和改进测试

1.数据库加密

测试内存、不加密文件各种加密文件的生成tpch数据性能
编写如下脚本
encry.txt

load tpch;
call dbgen(sf=1);
ATTACH 'ENC_NO' as ENC_NO; 
use enc_no;
call dbgen(sf=1);
ATTACH 'ENC_GCM' as ENC_GCM (ENCRYPTION_KEY 'asdf', ENCRYPTION_CIPHER 'GCM'); 
use enc_gcm;
call dbgen(sf=1);
ATTACH 'ENC_CTR' as ENC_CTR (ENCRYPTION_KEY 'asdf', ENCRYPTION_CIPHER 'CTR');
use enc_ctr;
call dbgen(sf=1);
ATTACH 'ENC_CBC' as ENC_CBC (ENCRYPTION_KEY 'asdf', ENCRYPTION_CIPHER 'CBC');
use enc_cbc;
call dbgen(sf=1);

执行结果

C:\d>duckdb140 <encry.txt
100% ▕██████████████████████████████████████▏ (00:00:02.13 elapsed) --内存表

100% ▕██████████████████████████████████████▏ (00:00:08.12 elapsed) --不加密文件

100% ▕██████████████████████████████████████▏ (00:00:10.13 elapsed) --GCM加密文件

100% ▕██████████████████████████████████████▏ (00:00:08.14 elapsed) --CTR加密文件

Not implemented Error:
CBC encryption is disabled
Catalog Error:
SET schema: No catalog + schema named "enc_cbc" found.
100% ▕██████████████████████████████████████▏ (00:00:08.55 elapsed)

执行两遍,生成的文件大小如下,加密后比未加密大了30MB,因为CBC被禁止,所以实际生成2种加密格式,CTR格式生成了4份数据。

2025/09/17  19:34     1,127,755,776 ENC_CTR
2025/09/17  19:34       565,194,752 ENC_GCM
2025/09/17  19:34       535,310,336 ENC_NO

直接打开数据库命令对加密数据库失效,在CLI中attach可以看到原本5行的region表现在有20行。

C:\d>duckdb ENC_GCM
Error: unable to open database "ENC_GCM": Catalog Error: Cannot open encrypted database "ENC_GCM" without a key

D ATTACH 'ENC_CTR' as ENC_CTR (ENCRYPTION_KEY 'asdf', ENCRYPTION_CIPHER 'CTR');
D use enc_ctr;
D  select count(*) from region;
┌──────────────┐
│ count_star() │
│    int64     │
├──────────────┤
│      20      │
└──────────────┘

删除文件和cbc加密测试语句,再测试一遍, 文件大小就正常了

2025/09/17  19:57       276,312,064 ENC_CTR
2025/09/17  19:57       276,312,064 ENC_GCM
2025/09/17  19:56       261,107,712 ENC_NO

其他人做过的测试参见https://github.com/duckdb/duckdb/pull/17275 ,https://github.com/duckdb/duckdb/pull/18619
2.排序性能提高
分别测试tpch sf=2 sf=3时,lineitem表排序
编写如下脚本
testsortsf.txt

load tpch;
call dbgen(sf=2);
.timer on
from lineitem order by l_shipdate;
.timer off
DROP TABLE IF EXISTS customer;
DROP TABLE IF EXISTS lineitem;
DROP TABLE IF EXISTS nation;
DROP TABLE IF EXISTS orders;
DROP TABLE IF EXISTS part;
DROP TABLE IF EXISTS partsupp;
DROP TABLE IF EXISTS region;
DROP TABLE IF EXISTS supplier;
call dbgen(sf=3);
.timer on
from lineitem order by l_shipdate;
.timer off

1.3.2版

duckdb132 < testsortsf.txt
│ 11997996 rows (40 shown)                                                                 16 columns (7 shown) │
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Run Time (s): real 1.901 user 13.921875 sys 3.68750017996609 rows (40 shown)                                                                 16 columns (7 shown) │
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Run Time (s): real 5.111 user 19.328125 sys 18.750000

1.4.0版

duckdb140 < testsortsf.txt
│ 11997996 rows (12.00 million rows, 40 shown)                                             16 columns (7 shown) │
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Run Time (s): real 1.273 user 8.656250 sys 1.89062517996609 rows (18.00 million rows, 40 shown)                                             16 columns (7 shown) │
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Run Time (s): real 4.209 user 13.203125 sys 16.906250
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值