0

我试图弄清楚什么样的二进制文件可以支持我对反向索引的需求。假设我有一个可以用唯一 ID 识别的文档,每个文档可以有 360 个固定值,范围为 0-65535。像这样的东西:

Document0: [1, 10, 123, ...] // 360 个值

Document1: [1, 10, 345, ...] // 360 个值

现在,反向索引很容易 - 我可以为包含的每个可能的文档值列表创建,并且可以快速执行查询,例如:

1:[文档0,文档1]

10:[文档0,文档1]

123:[文档0]

345:[文档1]

但我想将大量文档存储在某种文件(二进制)中,并且能够快速查询,但也可以在不重新创建整个结构的情况下添加新文档。

现在我正在努力如何组织该文件。如果我想快速访问,我需要固定长度的文档数组来进行文件查找而不是读取。但是固定大小意味着我将有很多空白空间用于文档列表。我唯一的想法是拥有某种分桶系统,每个值都可以属于特定大小的桶,例如,有大小为 1、2、4、8、16、32、...(或类似的东西)的桶和我需要某种标题,它将指向我存储桶的开始位置和存储桶的大小。这个想法将优化存储大小,但我再次遇到添加新文档的问题。

知道如何组织我的“反向索引”文件吗?

最好的。

4

2 回答 2

0

我会选择 65536 个文件,每个文件都有文件的 ID。如果您想对文件系统进行温和处理,请将其分成 256 个目录,每个目录有 256 个文件。

00\00.idx
00\01.idx
..
FF\FF.idx
于 2010-10-08T00:22:32.743 回答
0

听起来不错。我的读取速度非常快,另一方面写入速度较慢 - 我需要确保每个文件中都有唯一的文档(现在我有一个简单的模型来在内存中存储恒定数量的文件,并将它们转储到达到某个阈值时的磁盘)。感谢您的回复。

于 2010-10-10T13:51:07.740 回答