主要观点:许多数据处理系统采用了自定义字符串格式“German Strings”,其具有诸多优势,如节省空间、减少分配和数据移动、便于并行处理等,同时有“短暂”“持久”等存储类概念可管理字符串生命周期,但也需深入考虑应用场景。
关键信息:
- C 中字符串简单但实践中麻烦,C++标准库字符串有改进但仍可优化。
- 构建 CedarDB 时观察到多数字符串短、不常变且只需查看部分,于是发明“German Strings”。
- “German Strings”用 128 位结构体表示字符串,短字符串直接存储内容,长字符串存储长度、前缀和指针,还有“短暂”“持久”等存储类。
- 通过字符串长度判断是短串还是长串,访问前缀无需判断。
重要细节: - C 中字符串无终止字节易出错,计算长度需遍历,扩展需手动处理内存。
- C++“std::string”通过存储大小、指针和容量优化,有短字符串优化但 Rust 无法实现。
- “German Strings”节省容量字段开销,可通过寄存器传递字符串,短串直接存储内容方便访问前缀,长串缩短长度字段为 32 位节省空间,存储前缀加快操作,指针指向数据区域且数据不可变,有“短暂”“持久”存储类,“短暂”字符串创建开销小但需确保数据有效。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。