共计 1204 个字符,预计需要花费 4 分钟才能阅读完成。
基础换算原理
根据 Unicode 标准,单个 token 的字节占用取决于编码方式和语言特性(假设使用 UTF- 8 编码):

存储空间 (B) = \sum_{i=1}^{n}(token_i \times bytes_{char}) + metadata
其中:
– 英文字符通常占 1 字节(ASCII 范围)
– 中文字符占 3 - 4 字节(UTF- 8 编码)
– 特殊符号占 2 - 4 字节
三种存储方案对比
方案一:原始文本存储
-
空间计算 :
# 英文文本示例 text = "hello world" print(f"占用字节数:{len(text.encode('utf-8'))}") # 输出:11 -
特点 :
- 无需转换直接存储
- 可读性强但空间利用率低
- 10 亿 token 约需 1.2-3.7GB(纯英文 - 混合中文)
方案二:整数 ID 编码存储
-
空间优化公式 :
空间节省率 = 1 - \frac{sizeof(uint32)}{avg_{bytes_{token}}} -
Python 实现 :
import numpy as np # 假设词汇表大小为 50k ids = np.random.randint(0, 50000, 1_000_000, dtype=np.uint32) print(f"存储需求:{ids.nbytes / 1024**2:.2f}MB") # 输出约 3.81MB/ 百万 token -
优势 :
- 固定每个 token 占 4 字节
- 10 亿 token 仅需 3.72GB
方案三:压缩算法存储
-
zstd 压缩示例 :
import zstandard as zstd data = "自然语言处理" * 100_000 cctx = zstd.ZstdCompressor() compressed = cctx.compress(data.encode()) print(f"压缩率:{len(compressed)/len(data.encode()):.1%}") # 典型输出 30-50% -
性能对比 :
| 算法 | 压缩率 | 解压速度 (MB/s) |
|——–|——–|—————-|
| gzip | 60% | 200 |
| zstd | 40% | 500 |
| LZ4 | 50% | 800 |
生产环境避坑指南
I/ O 性能权衡
- 内存映射文件比直接读取快 5 -10 倍
- 批量写入(100MB+)比小文件吞吐量高 20 倍
分布式分片策略
- 按 token ID 范围分片(适合有序访问)
- 一致性哈希分片(适合随机查询)
- 冷热数据分层存储(SSD+HDD 混合)
压缩算法选择
- 高吞吐场景:优先 LZ4/zstd
- 归档存储:选用 brotli/xz
- 检索密集:建立压缩块索引
思考题
如何设计存储方案使 1b token 的检索延迟 <100ms?可考虑:
– 内存缓存热数据
– 列式存储格式
– 布隆过滤器加速查找
参考文献
- Unicode Consortium. UTF-8 Encoding Standard (2022)
- Google Zopfli Compression Algorithm Whitepaper
- Facebook Zstd Benchmark Reports
正文完
发表至: 未分类
近三天内
