【发布时间】:2012-03-08 03:22:30
【问题描述】:
我正在使用 SOLR-3.4,使用具有 LatLonType (subType=tdouble) 的架构进行空间过滤。我有大约 20M 个地方的索引。我的基本问题是,如果我使用 cache=true 进行 bbox 过滤,性能相当不错(~40-50 QPS,大约 100-150ms 延迟),但一个很大的缺点是疯狂的快速老一代堆增长最终导致主要收集每 30-40 分钟(在一个非常大的堆上,25GB)。在这一点上,性能是无法接受的。另一方面,我可以关闭 bbox 过滤器的缓存,但随后我的延迟和 QPS 下降(延迟从 100ms => 500ms 下降)。 NumericRangeQuery javadoc 谈到了您可以获得的出色性能(低于 100 毫秒),但现在我想知道这是否启用了 filterCache,并且没有人费心查看导致的堆增长。我觉得这有点像第 22 条规则,因为这两种配置都不是真正可以接受的。
我愿意接受任何想法。我的最后一个想法(未尝试过)是使用地理哈希(并祈祷它在 cache=false 时表现更好,或者如果 cache=true 则具有更易于管理的堆增长)。
编辑:
精确步长:默认(我认为是双精度为 8)
系统内存:32GB (EC2 M2 2XL)
JVM:24GB
索引大小:11 GB
EDIT2:
precisionStep 为 8 的 tdouble 意味着您的双精度数将被拆分为 8 位序列。如果您所有的纬度和经度仅相差最后一个 8 位序列,那么 tdouble 将具有相同的性能,在范围查询中具有正常的双精度。这就是为什么我建议测试 4 的precisionStep。
问题:这对于双精度值实际上意味着什么?
【问题讨论】:
-
您的 tdouble 字段使用什么precisionStep?系统方面,是否有一些内存留给操作系统缓存?能否分享一下系统的内存总量、分配给 JVM 的内存量以及索引的大小(以字节为单位)?
-
@jpountz:查看更新的问题,只是不确定如何获取索引大小。
-
在 unix 下,只需运行
du -hs indexDir。在 Windows 下,我认为您可以通过右键单击索引目录上的属性来实现。
标签: java performance solr lucene