2011-02-03 6 views
4

誰かがSunspot-Solrのスケーリング問題に気づいたのか不思議です。検索可能なすべてのパラメータを削除しても、それだけで生のクラスに対して数えても、それは私のローカルにロードするのに5〜8秒、プロダクションで4〜5秒かかります。Sunspot-Solrが私のアプリケーションが> 1000個のオブジェクトに登場したら獣になるまで減速する[Solr Logs Include]

誰か他の人がSunspot-Solrを拡張できましたか?よくある問題は何ですか?

これをより深くどのように見ることができますか?

ここでSolrのログは、単一の要求のためだ:

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">[email protected]</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">[email protected]</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] 
+0

Solrログを確認します。 Sunspotが生成するSolrクエリーストリングは何ですか? –

+0

チップをありがとう!ログを投稿する場合は – Trip

答えて

19

1000年オブジェクトのSolrのための子どもの遊びなので、魚〜200msのSolrに読んでここで起こっ何かがあります。しかし、あなたの最も直面する問題は、GETリクエストのように見える間にSolrに書いていることです。それは何ですか? Sunspotの自動インデックスを起動している検索可能なオブジェクトを保存していますか?あなたは(可能ならば、おそらくバックグラウンドジョブで実行されなければならない)GETリクエストの過程でモデルを更新する必要がある場合は、太陽黒点で自動インデックス作成を無効にすることをお勧めします:

searchable :auto_index => false 
    # sunspot setup 
end 

それからあなたが実際にSolrでそれらを更新したいときにコントローラの中に明示的にmy_model.indexを呼び出す必要があります。

最後に、この大きなアップデートはSolrのコミットです。これは、Solrにステージングされていない変更をディスクに書き込み、それらの変更を反映する新しいサーチャをロードするように指示します。コミットは高価です。 Sunspot :: Railsは、デフォルトでSolrに書き込むリクエストの最後にコミットを実行しますが、この動作は生産中のライブアプリではなく、Sunspotの新しいユーザーにとっては最小の驚きの原則を対象としています。

auto_commit_after_request: false 

あなたは、おそらくあなたのsolr/conf/solrconfig.xmlではautoCommitを設定することをお勧めします - それは、デフォルト太陽黒点Solrの配布にコメントアウトだ、と説明があまりにもそこにあります:あなたは、あなたのconfig/sunspot.ymlでそれを無効にしたいでしょう。私は1分に1回は始めるのが良い場所であることを発見しました。

これらの変更を行った後でも、読み込みがまだ遅いのがわかります。を検索するたびに、その原因がである可能性が高いと思います。ディスクから新しい検索者をロードする必要があります。したがって、内部キャッシュのどれかを暖めることなどができず、一般的に膨大な負荷がかかります。

希望に役立ちます! solrconfig.xmlで

Performance killer: 
<str name="buildOnCommit">true</str> 

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

+0

WOWこれは大きな助けになります。 @outoftimeにとても感謝します。もうすぐ別のRails meetupであなたに会いたいと思っています。 – Trip

+0

私は ' true'を' solrconfig 'に設定しました。あなたが明示的に言っていない限り、sunspotはとにかくコミットしません。 –

+0

私はこれをRailsのモデルに入れました。これは、検索可能な:ignore_attribute_changes_of => [:updated_at、:votes_up、:votes_down、:votes_sum] do #setup end'、**を追加する方法です:auto_index => false ** toこのセットアップ? – sahil

1

私が経験した長い更新中の時間が、私はこのブログ

mytechmembank.blogspot.de

につまずいた、それは私が次のように変更しなければならなかったことが判明したコミット要求します

関連する問題