2012-10-19 14 views
9

我是Solr的新手。我試圖製作一個將結構化數據存儲在數據庫中的服務器,並且可以使用Solr/Lucene進行搜索。可以將服務器集羣到任意數量的相同節點中以實現高可用性。能否讓Apache Solr索引在事務上與被索引的數據庫一致?

似乎標準配置Solr將索引存儲在文件系統上的文件中。這似乎引入了一致性和集羣方面的一些問題。

如何使索引與數據庫在事務上一致?有沒有辦法做到這一點? (例如某種方式來提交數據庫提交到Solr索引的提交協調?)

是否有任何方法將索引存儲在(關係數據庫)中?這將解決一致性問題和集羣問題,但是我沒有找到關於如何做到這一點的大量文獻。

當配置爲羣集時,每個羣集節點是否需要維護它自己的索引副本。目前還不清楚Solr的多個實例是否可以更新單個索引。

或者 - 我們是否放棄接受該索引不能保證一致,每天重建呢?人們通常會對此做些什麼?

+0

這可能有助於在單個文檔上爭用更新http://stackoverflow.com/questions/12857218/versioning-and-optimistic-locking-in-solr-4-0您是否遇到特定問題像頭腦中的多文檔原子一樣? – aitchnyu

+0

具體問題是簡單地爲集羣企業應用程序提供索引。每個節點都獨立更新數據庫。由於Solr不會將數據存儲在數據庫中,因此每個節點都必須有自己的Solr副本運行,並且每個節點都有自己的索引。問題很簡單,就是確保每個Solr都得到來自每個羣集節點的所有更改的通知。如果節點退出,數據庫將回滾到一致狀態,但Solr索引可能包含更多或更少的更新。這些指標在重建之前將會是錯誤的,這些必須定期完成。 – AgilePro

回答

15

Q>如何使索引與數據庫在事務上一致?
A>你不能。你也許可以發明另一個交易層,但它需要很長時間才能發展,無論如何你都不會達到100%的一致性。例如,您可以將數據發送到數據庫和Solr,並且只在兩個數據到達後才提交,但這不會是原子性的。

Q>有什麼方法可以將索引存儲在(關係型)數據庫中嗎?
A>使用Lucene 4.0,您可能(通過編寫自己的編解碼器)。但是這不會解決你的問題。

Q>當配置爲羣集時,每個羣集節點是否需要維護它自己的索引副本?
A>是的。

Q>目前尚不清楚Solr的多個實例是否可以更新單個索引。
A>多個Lucene/Solr實例無法寫入相同的索引文件。您最多可以做的是創建多個IndexSearcher s。但是,無論如何,這可能是在Solr級別完成的。

Q>我們是否放棄接受索引不能保證一致?
A>是的。我認爲你也是以數據庫爲中心的。想想關於Google的Solr/Lucene - 我敢打賭,他們並沒有在整個世界中以原子的方式推出他們的整個索引。如果搜索結果會根據您打到的服務器(當然是幾秒鐘)會有微小的不一致,那麼這不是什麼大不了的事情。

Q>重建它每天左右?人們通常會對此做些什麼?
A> Lucene有near-real time search,但在基本級別上,您只需發送索引更新並在發生數據庫更改時提交,然後重新打開索引閱讀器以查看這些更新。這一切都是在Solr中自動完成的。

+0

謝謝!這些都是很好的答案。 – AgilePro

+0

如果您滿意,您可能希望將答案標記爲已接受。這是這個網站的工作原理。 – mindas

+0

你知道......我花了15分鐘的時間才找出檢查圖標是點擊「接受」答案的東西。但現在我知道,謝謝你的提示。 – AgilePro

1

在知道這是有點老,但它可能有助於某人。 您可以使用Apache zookeeper嘗試solrcloud。

開箱即用的Apache Solr包括設置集成容錯和高可用性的Solr服務器集羣 - 稱爲SolrCloud,這些功能提供分佈式索引和搜索功能,支持配置如下幾項功能:

Central configuration for the entire cluster 
Automatic load balancing and fail-over for queries 
ZooKeeper integration for cluster coordination and configuration. 

Zookeeper是solr的集羣管理器。它對solr非常有效。

https://cwiki.apache.org/confluence/display/solr/SolrCloud 

http://zookeeper.apache.org/doc/trunk/zookeeperOver.html 
+0

這是有趣和有用的信息,但它沒有解決交易問題。所需的行爲是保存更改IF和ONLY如果更改也保存到關係數據庫。更具體地說,如果數據庫更新失敗,我希望Solr更新不成功。我必須解決指數大致正確的問題,並按照日程安排(每日)重建指數以解決不一致問題。 – AgilePro