答案 0 :(得分:4)
我认为这取决于你的索引与内存相比有多大。以下是我的第一个自发想法:
假设它的大小是RAM的几十倍,我会尝试使用例如层次聚类树(在FLANN中实现)来聚类数据。我会修改树的实现,以便它们将分支保留在内存中并将树叶(簇)保存在磁盘上。因此,每次都必须加载适当的集群。然后,您可以尝试以不同的方式对其进行优化。
如果它不是那么大(让我们说RAM的大小的两倍),我会将数据集分成两部分,并为每个部分创建一个索引。因此,我需要在每个数据集中找到最近的邻居,然后在它们之间进行选择。
答案 1 :(得分:4)
这取决于您的数据是否非常高维。如果它相对较低,则可以使用现有的磁盘R-Tree实现,例如Spatialite。
如果它是一个更高维度的数据,你可以使用X-Trees,但我不知道任何磁盘上的实现。
或者,您可以使用磁盘持久性实现locality sensitive hashing,例如使用mmap。