2010-05-17 13 views
3

我正計劃在一個項目上使用CouchDB。但是,由於查詢機制涉及編寫視圖(很像常規RDMBMS上的索引),我想知道,如果文檔數據庫不斷更新(寫入大量數據庫),那麼與常規RDBMS相比,CouchDB的表現會不錯嗎?或者,我們是否必須偶爾對系統進行壓縮/重新索引以使其性能更快?CouchDB如何執行定期更新的數據集?

回答

3

您可以這樣思考CouchDB視圖模型的優缺點。 (CouchDB的黑客可以不同意,但國際海事組織是足夠準確的用戶使用。)

  1. 視圖功能總是執行一個完整的「表掃描」時,第一次創建(就像一個RDBMS BTW)
  2. 只要他們沒有副作用,地圖和減少功能可以任意複雜
  3. 每個文檔和地圖/減少結果被緩存,並且從未再次計算
  4. 如果您添加或更改文檔,它將(並且只有它)爲該視圖計算(並緩存)

考慮到這些,你可以得出關於CouchDB的性能的一些結論:

  • 從未有一個重指數相對於整個數據集,每個文檔更新
  • 只是增量更改視圖功能力量重新構建整個索引
  • 由於CouchDB和RDBMS都必須更新新數據的索引,所以認爲對於大量更新/插入使用情況,性能會類似。

很明顯,YMMV和標準cop-out,「你必須測試你自己的負載」適用。不過,我會再添加一些注意事項。

  • 我說RDBMS對於探索式查詢數據是非常優越的。當你甚至不知道要從你的數據中提出什麼問題時,你真的無法擊敗語言查詢查詢結構
  • 然而,一旦你定義了你想知道的東西,CouchDB(也許是Hadoop)提供了最豐富的查詢系統,因爲你只是在編寫代碼。
  • 如果您的數據集很大,NoSQL數據庫將更容易擴展。例如,CouchDB-Lounge允許一組沙發進行並行處理。 Hadoop也是這樣做的,然後它會歸結爲次要考慮:熟悉性,可維護性,CouchDB是一個Web服務器,但需要更多的DIY; Hadoop以複雜性,外部性等爲代價內化了更多集羣管理。

我希望能夠幫助您瞭解您的決定!

+0

我一直在強調,你也可以用'stale = ok'查詢視圖,避免用新數據更新索引。不過,我認爲'stale = ok'是CouchDB的「全局變量」 - 通常不是一個好主意,但如果您是高級用戶,它有時可能會有用。我的感覺是避免它,直到顯然你不能。我更喜歡確保視圖始終更新的技術:http://wiki.apache。org/couchdb/Regenerating_views_on_update – JasonSmith 2010-05-19 06:24:17

+0

「當你甚至不知道要從你的數據中提出什麼問題時」,你可能正處於開發的早期階段,只需要使用臨時視圖即可。或者不? – fiatjaf 2013-09-20 21:45:16