用于地理空间查询的 EC2 上的 Solr 性能
Posted
技术标签:
【中文标题】用于地理空间查询的 EC2 上的 Solr 性能【英文标题】:Solr performance on EC2 for geospatial queries 【发布时间】:2012-07-24 17:43:42 【问题描述】:EC2 配置
mlarge machine -
4 CPU,
7.5G,
EBS volume,
JVM Memory - 6G,
Solr Version tested on both 4.0-ALPHA and 3.6.1
schema.xml
<fieldType name="tdouble" class="solr.TrieDoubleField" precisionStep="4" positionIncrementGap="0"/>
<field name="id" type="long" indexed="true" stored="true" required="true" />
<field name="location" type="location" indexed="true" stored="true"/>
<field name="location_0_coordinate" type="tdouble" indexed="true" stored="true" />
<field name="location_1_coordinate" type="tdouble" indexed="true" stored="true" />
<field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/>
solrconfig.xml 中没有变化。
编辑:
<query>
<filterCache class="solr.FastLRUCache" size="512" initialSize="512" autowarmCount="0"/>
<queryResultCache class="solr.LRUCache" size="512" initialSize="512" autowarmCount="0"/>
<documentCache class="solr.LRUCache" size="512" initialSize="512" autowarmCount="0"/>
<enableLazyFieldLoading>true</enableLazyFieldLoading>
<queryResultWindowSize>20</queryResultWindowSize>
<queryResultMaxDocsCached>200</queryResultMaxDocsCached>
<useColdSearcher>false</useColdSearcher>
<maxWarmingSearchers>2</maxWarmingSearchers>
</query>
其中加载了 128M 条数据记录。
Java 客户端代码
ModifiableSolrParams params = new ModifiableSolrParams();
params.set("wt","csv");
params.set("df","id");
params.set("fl", "id,location");
params.set("q", "*:*");
params.set("fq", "!geofilt");
params.set("sfield", "location");
params.set("d", "0.05");
params.set("pt", columns[1] +"," + columns[2]);
QueryResponse response = solr.query(params);
顶部
Tasks: 71 total, 1 running, 70 sleeping, 0 stopped, 0 zombie
Cpu(s): 38.7%us, 0.0%sy, 0.0%ni, 49.4%id, 0.0%wa, 0.0%hi, 0.0%si, 11.9%st
Mem: 7634740k total, 7570960k used, 63780k free, 150708k buffers
Swap: 0k total, 0k used, 0k free, 3914812k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
956 root 20 0 25.7g 4.0g 889m S 100.1 55.2 353:48.70 java
所以结果是,查询一个文档平均需要大约 1.5 秒。
record 203 response Time 1108 result: 42.7461000,-73.6924000,
record 207 response Time 1123 result: 40.8448850,-73.7156030,
record 210 response Time 1180 result: 40.8087660,-74.1583510,
record 211 response Time 1656 result: 0,
record 212 response Time 1423 result: 0,
record 213 response Time 1316 result: 39.1027710,-76.7964910.
有什么建议吗?
【问题讨论】:
【参考方案1】:试试SOLR-2155,这是一个适用于 Solr 3.x 的插入式地理空间插件
底层算法/方法是 Lucene/Solr 4 中新空间模块的核心。人们告诉我他们使用 SOLR-2155,因为它的性能优于 LatLonType。
在您试用 SOLR-2155 并告诉我们在相同情况下它有多快之后,我建议将您的索引分成 2-3 个分片并进行分布式搜索。
【讨论】:
当然,我会试一试。但是我使用 Solr 4.0.0-ALPHA 得到了类似的性能结果。 Solr 4.0.0-ALPHA尚未使用新的 Lucene 空间模块,但它会。 LatLonType 将保持原样,这将带来新的字段类型。 太棒了!!我放弃了 SOLR-2155 插件,性能有了很大提高。人们是对的!记录2225响应时间79结果:[36.23622997663915]记录2226响应时间174结果:[41.825548047199845]记录2227响应时间62结果:[41.99102492071688,-88.30942897126079]记录2230响应时间142结果:[40.662010135129094, - 73.88779459521174] 我是否应该在 solrconfig.xml 文件中进行任何内存设置更改以进一步提高性能。非常感谢。 我很高兴看到它对您如此有效。很难解释您的回复,但您似乎得到了 62-142 毫秒?排序是一个记忆猪,所以如果可以的话,请避免它。否则,此插件不会显式使用任何内存。为了获得最佳性能,请使用满足您需求的 geohash 长度,而不再使用。长度 10 相当于亚米精度,也许你可以使用更低的精度?有关 geohash,请参阅 Wikipedia 中的表格。将索引优化到更少的段也将有助于提高性能。 我玩弄了 128M 记录的配置:Precision Length = 10,JVM 6G,响应大约 60 -150ms;长度=10,JVM=4G,响应时间10-30ms;长度 = 10,JVM = 2G,响应时间 10 - 30ms。有关配置的任何其他建议,因此我可以进一步减少响应时间。您还可以为我提供有效分片 solr 服务器的链接吗?再次感谢【参考方案2】:是的,对于初学者来说:如果 No Changes for solrconfig.xml. 你的意思是你正在使用 \example 中的那个而不做任何更改,那么你有一堆你可能没有的东西'不需要(因为它是一个示例,显示了许多不同的功能),所以从那里删除你不需要的东西(我认为主要是字段)并再次测试。
【讨论】:
是的,solrconfig.xml 来自 \example 文件夹。好吧,我看过了,但是除了在查询标签下之外,大部分内容都被注释了。以上是关于用于地理空间查询的 EC2 上的 Solr 性能的主要内容,如果未能解决你的问题,请参考以下文章