Vellum:高效的字节到整数映射库
Vellum 是一个由 Couchbase 团队开发的 Go 语言库,它实现了有限状态转换器(FST),能够高效地进行字节数组到 64 位无符号整数的映射,并且支持按照字典序枚举键值对。虽然 Vellum 的主要开发已经转移到 blevesearch/vellum,但这个仓库仍然保留以支持早期版本的 Couchbase。
项目介绍
Vellum 的设计目标是实现:
- 在构建过程中保持内存限制。
- 支持在构建期间流式输出 FST 数据。
- 支持通过内存映射文件(mmap)加载和运行非常大的 FST(可选)。
通过简单的 API,你可以轻松地建立和操作 FST,无论是将数据保存在内存中还是硬盘上。
项目技术分析
Vellum 的构建过程是基于字节顺序的,确保插入的键始终有序。在构建完成后,数据可以被加载到内存或从磁盘映射到内存以创建一个 FST 实例。FST 的核心思想是通过优化状态转移来节省存储空间,使得相同的状态可以合并,以达到高效的数据表示。
序列化的 FST 格式有详细的文档说明,可以在 vellum 盘格式 v1 中查阅。此外,Vellum 还提供了一个命令行工具,用于与 Vellum 文件交互,包括创建、检查和查询等。
项目及技术应用场景
Vellum 主要适用于需要高效字节到数值映射和按字典顺序遍历键值的应用场景,这在搜索引擎、数据库索引和文本处理等领域尤为有用。例如,在搜索引擎中,可以使用 Vellum 来快速查找关键词对应的文档 ID;在数据库中,它可以作为高效的前缀搜索和过滤工具。
项目特点
- 顺序插入: 必须按照字典顺序插入键,以保证正确性。
- 内存效率: 构建时可以控制内存使用,并支持流式输出 FST 数据。
- 灵活存储: 可以选择在内存中构建和操作 FST 或者将其保存到磁盘并使用 mmap 加载。
- 高度优化: 采用类似于 mafsa 和 BurntSushi/fst 的技术,提供高性能的字节级状态转换。
- 易用 API: 提供简洁的接口,便于构建、读取和迭代 FST。
总结,无论你是开发搜索引擎、数据库系统,还是任何需要高效存储和查找字符串映射信息的应用,Vellum 都是一个值得考虑的强大工具。尽管其活跃开发已转移,但这个仓库仍然是许多现有系统的重要依赖。如果你的项目需要这样的功能,不妨尝试一下 Vellum。