5

我正在使用来自http://libspatialindex.github.com/的空间索引库

我正在主内存中创建一个 R* 树:

size_t capacity = 10;
bool bWriteThrough = false;
fileInMem = StorageManager
    ::createNewRandomEvictionsBuffer(*memStorage, capacity, bWriteThrough);

double fillFactor = 0.7;
size_t indexCapacity = 10;
size_t leafCapacity = 10;
size_t dimension = 2;
RTree::RTreeVariant rv = RTree::RV_RSTAR;
tree = RTree::createNewRTree(*fileInMem, fillFactor, indexCapacity,
   leafCapacity, dimension, rv, indexIdentifier);

然后我插入了大量的边界框,目前大约 250 万(德国巴伐利亚州的道路网络)。稍后我的目标是插入欧洲的所有道路。

存储管理器和 rtree 的参数有哪些好的选择?大多数情况下,我使用 rtree 来查找到给定查询(bbox 交叉点)的最近道路。

4

1 回答 1

3

由于您的数据是静态的,因此良好的批量加载可能对您有用。最流行(也是相当简单)的 bluk 加载是 Sort-Tile-Recursive。但是,它在某种程度上是围绕点数据设计的。当您插入空间对象时,它可能会也可能不会正常工作。

如果您使用批量加载,它将不再是 R*-tree,而是普通的 R-tree。

容量 10 对我来说听起来太少了。你想要一个更大的扇出。但是您需要进行基准测试,这取决于数据集和查询什么是好的。我肯定会尝试100个或更多。

于 2012-11-04T10:56:07.287 回答