首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sunspot-Solr在我的应用程序攀升到> 1000个对象时变慢为野兽[包括Solr日志]

Sunspot-Solr在我的应用程序攀升到> 1000个对象时变慢为野兽[包括Solr日志]
EN

Stack Overflow用户
提问于 2011-02-03 22:08:51
回答 2查看 3.5K关注 0票数 4

我很好奇是否有人注意到了Sunspot-Solr的缩放问题。即使我删除了所有可搜索的参数,它也只是计算原始类本身的值;在本地加载仍然需要5到8秒,在生产环境中需要4到5秒。

还有没有其他人能够扩展太阳黑子-Solr?一些常见的问题是什么?

如何才能更深入地了解这一点呢?

以下是单个请求的Solr日志:

代码语言:javascript
复制
Solr Select (208.1ms)   {:rows=>20, :start=>0, :q=>"*:*", :sort=>"score desc", :fq=>["type:Organization", "published_b:true", "updated_at_d:[2009\\-02\\-03T16\\:11\\:55Z TO *]"]}

Solr Select (5.5ms)   {:rows=>20, :start=>0, :q=>"*:*", :sort=>"score desc", :fq=>["type:Organization", "published_b:true", "updated_at_d:[2009\\-02\\-03T16\\:11\\:55Z TO *]"]}

Solr Update (12.6ms)   <?xml version="1.0" encoding="UTF-8"?><add><doc><field name="type">User</field><field name="type">ActiveRecord::Base</field><field name="id">User 2</field><field name="class_name">User</field><field name="first_name_s">Bob</field><field name="created_at_d">2009-09-28T21:00:27Z</field><field name="last_name_s">Marley</field><field name="email_s">bob.marley@gmail.com</field><field name="name_s">Bob Marley</field><field name="last_name_text">Marley</field><field name="first_name_text">Bob</field><field name="email_text">bob.marley@gmail.com</field><field name="name_text">Bob Marley</field></doc></add>


Solr Update (487.7ms)   <?xml version="1.0" encoding="UTF-8"?><commit/>
Completed in 12632ms (View: 11633, DB: 228) | 200 OK [http://localhost/organizations/search]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-04 05:42:22

1000个对象对于Solr来说是小菜一碟,所以这里的~200ms Solr读取有些可疑。但是,您最直接的问题是在GET请求期间写入Solr --这是怎么回事?您是否正在保存一个可搜索的对象,这将触发Sunspot的自动索引?如果您需要在GET请求过程中更新模型(如果可能,应该在后台作业中完成),则需要在Sunspot中禁用自动索引:

代码语言:javascript
复制
searchable :auto_index => false
  # sunspot setup
end

然后,当您确实希望在Solr中更新控制器时,您需要显式地在控制器中调用my_model.index

最后,最后的大更新是Solr提交,它告诉Solr将未暂存的更改写入磁盘,并加载一个反映这些更改的新搜索器。提交代价很高;Sunspot::Rails默认情况下会在任何写入Solr的请求结束时执行提交,但此行为的目标是让Sunspot的新用户最不感到惊讶,而不是生产中的实时应用程序。你会想在你的config/sunspot.yml中禁用它

代码语言:javascript
复制
auto_commit_after_request: false

然后,您可能想要在solr/conf/solrconfig.xml中配置autoCommit --它在默认的太阳黑子Solr发行版中被注释掉了,在那里也有一个解释。我发现每分钟一次是一个很好的开始。

在进行了这些更改之后,我会看看您的读取是否仍然很慢--我认为原因很可能是每次您搜索时,对Solr的写入/提交导致它必须从磁盘加载一个新的搜索器。因此,它不能允许任何内部缓存预热等,并且通常处于巨大的压力之下。

希望这能有所帮助!

票数 19
EN

Stack Overflow用户

发布于 2016-06-23 18:01:47

当我在更新提交期间遇到很长的请求时间时,我偶然发现了这个博客

mytechmembank.blogspot.de

事实证明,我必须更改以下内容:

代码语言:javascript
复制
 Performance killer:
<str name="buildOnCommit">true</str>

Way to go:
<str name="buildOnCommit">false</str>

在solrconfig.xml中

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4887142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档