[英]PostgreSql 14 lz4 compression not working?
我安裝了 PostgrSql 14,我想壓縮一些數據以節省一些磁盤空間。 數據是音頻文件(1kb - 5mb),轉換為 base64 字符串。 我創建了 3 個表:
CREATE TABLE t_uncompressed (
file_name VARCHAR(50) NOT NULL PRIMARY KEY,
file_size BIGINT,
raw_data TEXT
);
CREATE TABLE t_lz4 (
file_name VARCHAR(50) NOT NULL PRIMARY KEY,
file_size BIGINT,
raw_data TEXT COMPRESSION lz4
);
CREATE TABLE t_pglz (
file_name VARCHAR(50) NOT NULL PRIMARY KEY,
file_size BIGINT,
raw_data TEXT COMPRESSION pglz
);
然后我將我的數據插入到這些表中。 我檢查了壓縮數據的位置,發現 403 行是用lz4
壓縮的,只有一個是用pglz
壓縮的。
SELECT count(*) total,
count(*) FILTER ( WHERE pg_column_compression(raw_data) NOTNULL) compressed,
'lz4' compr_type
FROM t_lz4
UNION
SELECT count(*) total,
count(*) FILTER ( WHERE pg_column_compression(raw_data) NOTNULL) compressed,
'pglz' compr_type
FROM t_pglz;
total | compressed | compr_type
-------+------------+------------
738 | 1 | pglz
738 | 403 | lz4
(2 rows)
對我來說似乎很奇怪的是所有三個表的大小都是相同的,好的,關於未壓縮表和 pglz 表,但為什么 _lz4 表具有相同的大小?
我以這種方式獲得表格大小:
SELECT schemaname || '.' || tablename full_tname
, pg_size_pretty(pg_total_relation_size('"' || schemaname || '"."' || tablename || '"')) total_usage
, pg_size_pretty(pg_relation_size('"' || schemaname || '"."' || tablename || '"')) data_size
, pg_size_pretty((pg_total_relation_size('"' || schemaname || '"."' || tablename || '"') -
pg_relation_size('"' || schemaname || '"."' || tablename || '"') -
pg_indexes_size('"' || schemaname || '"."' || tablename || '"')))
AS TOAST
FROM pg_catalog.pg_tables
WHERE tablename ~ 't_';
full_tname | total_usage | data_size | toast
---------------------+-------------+-----------+--------
t_lz4 | 338 MB | 80 kB | 338 MB
t_pglz | 338 MB | 80 kB | 338 MB
t_uncompressed | 338 MB | 80 kB | 338 MB
(3 rows)
數據庫中使用的默認壓縮是 pglz,也許這個信息很重要......
postgres=# SHOW default_toast_compression ;
default_toast_compression
---------------------------
pglz
(1 row)
你沒有說什么樣的音頻文件。 大多數音頻文件格式已經壓縮,不會進一步壓縮。 base64 對它們進行編碼確實意味着它們應該壓縮一點,以壓縮由編碼它們引起的擴展。 沒有哈夫曼編碼的 LZ 在壓縮這種擴展方面特別糟糕。 這是您通過查看表的大小所看到的:壓縮是徒勞的。
PostgreSQL 使用的壓縮實現檢查無用性並放棄壓縮看起來不太可壓縮的東西。 這就是您在pg_column_compression()
中看到的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.