2014-03-05 104 views
1

我有以下步驟:在數據庫Solr的原子更新

  1. 更新記錄
  2. 添加記錄使用JSON
  3. 到Solr提交記錄在數據庫

我使用updatejson插入記錄用?commit = true調用 但是這一步需要很長時間。有沒有更好的方法來保持同步? 記錄需要存儲在solr中。我不介意它可以立即搜索。

+0

當你說它很慢時,你的意思是說?commit = true會阻止你的進程?我做的是 –

+0

。但我通過做一個?commitWithin = 15000 – broersa

+1

來解決我的問題。 commitWithin的替代方法是waitSearcher = false&waitFlush = false。 –

回答

1

我通過執行?解決了問題?commitWithin = 15000 這會持續數據,但不會合並數據與索引。它每15秒完成一次。足以不阻止我的過程。加載100000條記錄從幾天到幾個小時。

1

提交很貴。每次添加後都不要提交。您可以提交每個X請求(其中X取決於您的延遲要求和每秒寫入次數),或者每X分鐘執行一次提交。 (與/update?commit=true

1

有兩個方面:

  • 保持你的數據庫和Solr同步
  • 使其快速

爲了保持同步可靠,你需要做一些形式的two-phase commit。見

要做到這一點快,你應該這樣做分批爲阿倫在the other answer建議,並因爲它是suggested in Solrj documentation。如果您不需要立即可用於搜索的文檔,情況尤其如此。

您也可以嘗試使用soft commits,它比硬承諾便宜。請參閱"commit" and "optimize" in Solr documentation。網址將以update?softCommit=true結尾。本文中有一個很好的軟和硬提交的討論:Understanding Transaction Logs, Soft Commit and Commit in SolrCloud