uint64 idx[] = { 0, 20, 500, 1024, ..., 103434 };
这意味着第一个字符串位于位置0,第二个字符串位于位置20,第三个字符串位于位置500,第n个字符串位于位置103434。这些位置始终是非负的64位整数,按顺序排列。虽然数字之间的差异可能会有所不同,但实际上我希望典型的差异范围在2^8到2^20之间。我希望将此索引映射到内存中,并且将随机访问这些位置(假设均匀分布)。
我考虑编写自己的代码来执行某种块增量编码或其他更复杂的编码,但在编解码速度和空间之间存在太多不同的权衡,因此我宁愿得到一个工作库作为起点,甚至可以放弃任何定制。
有什么提示吗? C库是理想的选择,但C++库也可以让我运行一些初始基准测试。
如果您还在关注,以下是一些更详细的信息。这将用于构建类似于cdb(http://cr.yp.to/cdb/cdbmake.html)的库,基于cmph(http://cmph.sf.net)库。简而言之,它是用于具有小内存索引的大型磁盘基础只读关联映射。
由于它是一个库,我无法控制输入,但我想要优化的典型用例有数百万个值,平均值大小在几千字节范围内,最大值为2^31。
记录一下,如果我找不到可用的库,我打算实现64个整数块的增量编码,其中初始字节指定到目前为止的块偏移量。块本身将使用树进行索引,给我O(log(n/64))的访问时间。有太多其他选项,我宁愿不讨论它们。我真的很期待能够使用现成的代码,而不是关于如何实现编码的想法。一旦我使其工作,我会很乐意与每个人分享我的经验。
感谢您的帮助,请让我知道是否有任何疑问。