2012-02-05 57 views
1

我對mongodb相當陌生。我正在創建一個網絡應用程序,允許插入和搜索多種產品,如筆記本電腦,硬盤驅動器,網絡攝像頭...我的問題是我應該把他們全部放在同一個集合,如「電腦」,或者我應該把每個產品他們自己的集合像「筆記本電腦」,「硬盤驅動器」,「網絡攝像頭」,以便用戶搜索和插入產品時會更快?我應該在mongodb中創建一個還是多個集合以便更快地插入和搜索?

非常感謝

回答

2

一般來說,你應該按「型」的事情你存儲使用一個集合。這聽起來像你上面給出的所有例子都屬於產品「類型」,應該在同一個集合中。同一個集合中的文檔不需要全部具有相同的字段,但對於產品,您可能在所有文檔中有幾個相同的字段:名稱,價格,製造商等;每個文件「子類型」可能有幾個共同的字段,如硬盤可能都有RPM,存儲容量,形狀因子,接口(SATA2/3,IDE等)。

這個建議的基本原理是MongoDB查詢一次只能在一個集合上執行。如果您想要顯示涵蓋您擁有的不同類別產品的搜索結果,那麼這對於一個集合來說很簡單,但對於幾個(而且性能較低)則更加困難。

就查詢性能而言,一定要在搜索的字段上創建索引。如果您允許按產品名稱或製造商進行搜索,則您可以在名稱上找到索引,並在製造商處找到另一個索引。您的確切索引取決於您在文檔中的字段。

另一方面,插入速度越快,索引越少(因爲每次索引可能需要在每次保存或更新文檔時更新),所以重要的是不要創建比您更多的索引實際上需要。

有關這些主題的更多信息,請參閱schema designindexes上的MongoDB文檔以及10gen演講者和MongoDB用戶的presentations on 10gen.com

1

我建議先從一個集合開始。搜索一個集合而不是蒐集每個產品要簡單得多。而且,如果您對收藏品的質疑變得緩慢,您可以開始思考如何加速收藏。

Mongodb相當快indexes它的設計是可擴展的,所以一旦你需要擴展你的數據庫 - replica setsauto sharing就位。

相關問題