2013-04-03 69 views
3

在CouchDB中我有一個非常簡單的地圖功能,這樣我可以通過有效地TRIPID查找列表:Pouchdb如何使用鍵來優化查詢?

// by_tripid.js 
function (doc) { 

    if (doc.type == "list") { 

     for (var tripid in doc.tripids) { 
      emit(doc.tripids[tripid], null) 
     } 
    } 
} 

意圖是指數TRIPID名單。並且能夠通過指定鍵(tripid)來通過tripid檢索列表。

在Pouchdb中,我可以在db.query調用中使用大致相同的映射函數。

但是,我不想實際上最終返回所有列表,然後通過tripid過濾它們。這似乎相當低效。我不確定Pouchdb的視圖技術。視圖在查詢時被創建和使用,所以我猜Pouchdb並不是真正應用地圖來創建索引。我想這就像Couchdb中的臨時視圖,所以效率也許不在那裏。

一些專家意見將不勝感激。

謝謝,馬特

回答

2

有一個開放的issue on github實現增量的意見。

你是對的 - 現在PouchDB在數據庫中的每個文檔上運行map-reduce,每次調用query時,性能不是很好。對於小型數據庫來說,這很好,但顯然這對大型數據庫來說是一個問題。

+0

在這種情況下什麼是大分貝? – fiatjaf

+0

@GiovanniP沒有「大」的硬定義。在這種情況下,我們有一個線性算法(在根中它只是一個for循環/ forEach調用),所以隨着記錄數增加查詢數據庫所需的時間就會增加。根據應用程序的不同,我猜想有超過幾百條記錄會開始顯示明顯的延遲。 – chesles

1

PouchDB的query接口supports通過options.key。這將是mentioned in the API docs下一個版本。

  • 如果您連接到遠程沙發,它會將參數傳遞到遠程視圖,並由沙發本身進行優化。
  • 對於本地數據庫,optimization is ongoing,但在着陸時不會更改界面。道德:只要使用界面,不用擔心它,除非你打到性能牆。

此外,量化「多大太大」的問題是performance suite issue