2015-05-07 26 views
1

我有一個集合,其中只有兩個查詢被調用。使用出版物或分爲收藏(表演)?

Ex。 Cars.find({color: 'red'});Cars.find({color: 'blue'});

我想知道是否我應該只是創造RedCarsBlueCars收藏而不是使用上Cars兩種刊物。

想到這裏的表現,如果Cars集合變得非常大,使用兩個集合會更高效嗎?而且,他們從來沒有被調用過相同的模板。每個都有自己的模板。

感謝

回答

3

從蒙戈的角度來看,如果你有其中一個集合中跨文檔的單場開始看起來像一個索引(如您已如上所述),它實際上將開始針對該索引的查詢方案領域並且高度調整返回。您可以使用標準的Mongo索引參數對數據庫進行更新(如果有大量數據落入您所描述的場景中,您應該調整此索引)。這個表現還有更多。例如,如果是高讀取,低寫入,那麼Mongo通常會將部分或全部查詢保留在內存中,以便快速檢索。

至於把它們分成兩個集合是否更好。這是一個艱難的。從性能角度來看,如果您正確調整索引並允許Mongo做到最好,它可能會以同樣的方式。但是,從流星的角度來看,我認爲從代碼可維護性和可測試性的角度來看,將它們保存在一個集合中要容易得多。

+1

感謝了很大的反響訪問數據。 – Nathan

+1

具體來說,在我的使用案例中,這個集合會寫得更高,因爲只有一小部分集合會被客戶檢索到。我會說......一次不超過30個文件。 它基於所有時間,用戶只需要查看最近的文檔。 – Nathan

1

就性能而言,如果集合變大,那麼如果在藍色或紅色汽車上進行更改,應用程序最終會收到比您預期更多的數據。一個好的解決方案,而不是創建兩個集合是使用參數化的訂閱,它只會過濾您正在查看的數據集。

例如

Meteor.publish('cars', function(c) { 
     check(c, String); 
     return Cars.find({color: c}); 
    }); 

然後你就可以通過訂閱Meteor.subscribe('cars', 'blue')