我正在使用SOLR-3.4,具有LatLonType(subType = tdouble)的模式进行空间过滤。我有一个约20M的地方索引。我的基本问题是,如果我使用缓存= true的bbox过滤器,性能相当不错(大约40-50 QPS,大约100-150毫秒的延迟),但是一个很大的缺点是疯狂快速的旧gen堆增长最终导致主要收藏每30-40分钟(在一个非常大的堆上,25GB)。而在这一点上,表现是无法接受的。另一方面,我可以关闭bbox过滤器的缓存,但随后我的延迟和QPS下降(延迟从100ms => 500ms下降)。 NumericRangeQuery javadoc讨论了您可以获得的出色性能(小于100毫秒),但现在我想知道是否启用了filterCache,并且没有人打算查看堆结果的增长。我觉得这是一种捕捉,因为这两种配置都不是真的可以接受的。solr空间不良性能
我愿意接受任何想法。我最后的想法(未尝试)是使用地理散列(并且祈求它或者在cache = false的情况下执行得更好,或者如果cache = true,则可以有更多的可管理的堆增长)。
编辑:
精密步:默认(8双,我认为)
系统内存:32GB(EC2 M2 2XL)
JVM:24GB
指数尺寸:11 GB
EDIT2:
tdouble与precisionStep为8意味着您的双打将被分割为8位序列。如果你所有的纬度和经度只与最后一个8位的序列有所不同,那么tdouble将具有相同的性能,在范围查询中具有正常的双倍。这就是为什么我建议测试precisionStep为4.
问题:这实际上对于双值的含义是什么?
什么precisionStep你用于你的tdouble字段?系统方面,有没有为OS缓存留下一些内存?你能分享你系统的内存总量,给JVM的数量和索引的大小(以字节为单位)吗? – jpountz 2012-03-08 09:55:04
@jpountz:看到更新的问题,只是不知道如何获得索引大小。 – Kevin 2012-03-08 11:44:28
在unix下,运行'du -hs indexDir'。在Windows下,我认为你可以通过右键单击索引目录中的属性来实现。 – jpountz 2012-03-08 13:47:33