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.687500
│ 17996609 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.890625
│ 17996609 rows (18.00 million rows, 40 shown) 16 columns (7 shown) │
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Run Time (s): real 4.209 user 13.203125 sys 16.906250

1259

被折叠的 条评论
为什么被折叠?



