2008-09-23 16 views
18

據我所知,當查詢查詢時會更新CouchDB索引。假設有更多的讀取比寫入,這不是縮放的不好嗎?我如何配置CouchDB以便在寫入時更新索引,或更好地按照時間表更新?如何在CouchDB中安排索引更新

回答

26

CouchDB確實在更新時重新生成視圖,但僅限於上次對視圖的讀取訪問後發生了更改。假設您的讀取卷大大超過您的寫入量,這應該不成問題。

當您一次更改大量文檔時,這可能會導致第一次讀取請求花費大量時間。爲了緩解這種情況,已經提出了一些不同的可能性。大多數依靠註冊CouchDB的更新通知並自動觸發讀取。

在CouchDB維基[1]上提供了一個用於完成該操作的示例腳本。

[1] http://wiki.apache.org/couchdb/RegeneratingViewsOnUpdate

+0

有沒有辦法來傳播指數計算在多臺計算機或完成它時自動複製設置? – 2012-10-02 11:01:43

+0

@ThomasFankhauser:sharding?請參閱BigCouch – OrangeDog 2012-10-30 10:13:27

5

你不能也,爲什麼你想呢?

想想看這樣的:

  • 當您將數據導入到MySQL中,你可以把indizes的,因爲它更昂貴的更新索引你插入的每一行,比它更新100指數在一次運行中寫入(或導入多行)。
  • 這就是爲什麼CouchDB在讀取時更新索引的原因,因爲它同時集成這100個更改的成本較低,然後在寫入時更改每個更改。

這是CouchDB的優點之一! :)我並不是說這是一個CouchDB專用功能,但是在閱讀時這樣做很明智。

你可以做的一件事是閱讀更新= false,這是一個髒讀,可能不會返回你所期望的。如果你總是這樣做,你可以通過cronjob安排一個「常規」閱讀,並用它來更新你的索引。我只是覺得沒有道理。

9

a)「縮放」是這樣一個超負荷的術語。你指的是什麼樣的縮放比例? (無論哪種方式,我都看不清楚它是如何影響你的)。

b)寫入更新:在寫入之後查詢您的視圖。請注意,將大量數據添加到索引中會更加資源友好(不特定於CouchDB)。所以你可能想要在N次寫入時觸發你的視圖。

c)計劃:設置一個每M分鐘查詢一次你的視圖的cronjob。

d)等待CouchDB的發展,爲您提供允許您使用配置參數進行設置的基礎結構。

e)(BEST OPTION)。把你的手弄髒,幫助我們拋光CouchDB!任何貢獻,高度讚賞。

d)RTFM (blink :)