有时候需要在文件上构建一颗 B 树、一张巨大的哈希表(动态数据结构)
面临的第一个问题:在文件上还能存数据结构的内存指针吗?——不能,只能存文件偏移代替
第二个问题:怎么对文件的存储空间进行管理?
构建 B 树、哈希表要为数据结构申请存储空间(文件偏移),删除数据会释放存储空间(文件偏移),已释放的存储空间能被重新利用吗?会不会有碎片化的问题?
看起来都指向了这个答案:在文件上实现 malloc 和 free
目前想到的方案:
- 大块存储空间使用 buddy 分配算法、小块存储空间使用 freelist (改良变种)管理
- “内存”管理的元数据和普通数据一起持久化到文件
- 使用 mmap 映射文件方便读写,使用 truncate 伸缩文件
初步做了一个 naive 的实现(使用 go ): https://github.com/roy2220/fsm
有兴趣一起讨论交流!