性能¶
有关各种查询方法的比较以及使用Rtree可以获得多少加速度,请参阅`tests / benchmarks.py`_文件。
有一些简单的事情可以提高性能。
使用流加载¶
通过允许对数据进行预排序,这将在很大程度上(在许多情况下为数量级)提高性能:py:meth:〜rtree.index.Index.insert
>>> def generator_function(somedata):
... for i, obj in enumerate(somedata):
... yield (i, (obj.xmin, obj.ymin, obj.xmax, obj.ymax), obj)
>>> r = index.Index(generator_function(somedata))
批量加载索引后,您可以使用以下命令将其他记录插入索引:py:meth:~rtree.index.Index.insert
重写 dumps
去使用最高的pickle协议¶
>>> import cPickle, rtree
>>> class FastRtree(rtree.Rtree):
... def dumps(self, obj):
... return cPickle.dumps(obj, -1)
>>> r = FastRtree()
使用对象='raw'¶
在任何 intersection()
或 nearest()
或查询中,使用objects='raw'关键字参数::
>>> objs = r.intersection((xmin, ymin, xmax, ymax), objects="raw")
调整索引属性¶
调整 rtree.index.Property
适合你的索引。
设置你的
leaf_capacity
高于默认值100。在许多情况下,默认页面大小4096可以使用1000+。增加
fill_factor
接近0.9。较小的填充因子意味着更多的拆分,这意味着更多的节点。根据您的使用情况,这可能是坏的或好的。
将维度限制为所需的数量¶
不要使用超过实际需要的尺寸。如果你只需要2个,只需要2个。否则,您将浪费大量的存储空间,并为索引的每个查询、搜索和插入操作添加更多的浮点比较。
使用正确的查询方法¶
如果你只需要一个计数,使用 count()
,如果你只需要ID,使用 intersection()
。否则,可能会复制大量数据。