@
abersheeran #10
@
815979670 #17
我用近 14000 章的《带着农场混异界》,试了一下 zstd 的预训练词典,感觉很适合分章节压缩存储,
因为 UTF-8 时,整本压缩率 20%,分章节总压缩率也才 22% ~ 28%,还能快速随机选取章节。
如果独立压缩章节,总压缩率飙到 38%。
1. 压缩后,UTF-16 没有明显优势。所以采取 UTF-8 就好。
UTF-8 时 137.4 MB
- gzip 压缩 43.5 MB ( 31.7%)
- zstd 压缩 28.7 MB ( 20.9%)
- lzma 压缩 26.8 MB ( 19.5%)
UTF-16 时 96.9 MB ,
- gzip 压缩 39.0 MB (少 10.5%,相比 UTF-8 压缩后)
- zstd 压缩 27.6 MB (少 3.9%)
- lzma 压缩 25.2 MB (少 6.2%)
2. 分章节后,所有压缩算法表现都很差。可选择多章节压缩,或分离词典。
- gzip 后共 55.6 MB ( 40.5%)
- zstd 后共 51.8 MB ( 37.7%)
- lzma 后共 52.4 MB ( 38.2 %)
3. 只有 zstd 支持预训练词典,且不同词典大小,分章节总压缩率也不同。
- 32 KB 词典(压缩后 12.6 KB ),压缩后+词典 39.6 MB ( 28.8%)
- 64 KB 词典(压缩后 24.7 KB ),压缩后+词典 37.8 MB ( 27.5%)
- 110 KB 词典(压缩后 41.9 KB ),压缩后+词典 36.6 MB ( 26.7%)← 默认词典大小
- 128 KB 词典(压缩后 48.7 KB ),压缩后+词典 36.3 MB ( 26.4%)
- 256 KB 词典(压缩后 97.8 KB ),压缩后+词典 35.0 MB ( 25.5%)
- 512 KB 词典(压缩后 197.2 KB ),压缩后+词典 34.1 MB ( 24.8%)
- 1024 KB 词典(压缩后 315.3 KB ),压缩后+词典 33.0 MB ( 24%)
- 2048 KB 词典(压缩后 611.2 KB ),压缩后+词典 32.1 MB ( 23.3%)
- 4096 KB 词典(压缩后 1164.8 KB ),压缩后+词典 31.2 MB ( 22.7%)
- 8192 KB 词典(压缩后 2328.5 KB ),压缩后+词典 32.4 MB ( 23.6%)
4. 个人认为,不同场景的选择。
- 如果本地收藏,追求极致压缩,每次查看,接受解压全本,应该选 UTF-16 + lzma ,压缩率 18%
- 如果本地收藏,但要求快速任意跳转章节,选 UTF-8 + zstd + 大词典,压缩率 23%
- 如果对外提供服务,选 UTF-8 + zstd + 小词典,压缩率 27%
第三点考虑如下:
- 若服务器本地解压,再传给用户,每次选取章节后,再取对应词典压力较小,缓存词典所需内存也少
- 若要求客户端先拿词典,再本地解压呈现章节。面对只看几章就弃书的用户,沉没成本较低( 20 ~ 40 KB )