2012-08-30 182 views
0

我使用mongodb作爲我的後端。我擁有電影,音樂,書籍等數據,我將其存儲在一個集合中。每個bson條目的必填字段是「_id」,「name」,「category」。其他字段取決於條目所屬的類別。例如,我有一個存儲的電影記錄。mongodb-架構設計

{ 
    "_id": <some_id>, 
    "name": <movie_name>, 
    "category": "movie", 
    "director": <director_name>, 
    "actors": <list_of_actors>, 
    "genre": <list_of_genre> 
} 

對於音樂,我也有,

{ 
    "_id": <some_id>, 
    "name": <movie_name>, 
    "category": "music" 
    "record_label": <label_name> 
    "length": <length> 
    "lyrics": <lyrics> 
} 

現在我有12個不同的類別,其中只有_id,名稱和類別是常見的領域。其餘的字段對於不同的類別都是不同的。我決定將所有數據存儲在一個單一的收藏中,還是應該爲每個類別製作不同的收藏?

+1

該選擇實際上取決於您的偏好和您的應用程序用例;集合不強制執行單個文檔模式。你需要搜索電影,書籍和音樂......還是他們完全獨立的實體? – Stennie

+0

搜索我只會使用名稱或_id。 –

+2

我的問題是您是否需要按名稱搜索多個類別的匹配項,或者您是否一次只搜索一個類別(例如,只能按電影名稱搜索,而不能搜索「電影和音樂」)。將這些保存在同一個集合中的一個原因是爲了更容易/可能地進行跨分類搜索。 – Stennie

回答

1

如果您搜索不同的類別,則最好使用單個集合。擁有單個集合可能會降低插入性能,但如果您沒有較高的寫入需求,那應該沒有關係。

1

即使每個文檔都不同,MongoDB允許您在文檔中存儲任何字段結構,所以這不是問題。通過使用這3個一致的字段,您可以將這些字段用作索引的一部分並處理您的查詢。這是無模式數據庫幫助的一個很好的例子,因爲您可以將所有內容存儲在單個集合中。

以這種方式使用單個集合沒有性能上的好處。實際上,實際上有一個好處,因爲您可以稍後將該集合作爲縮放策略。分割是在集合級別完成的,因此您可以根據_id字段對它們進行分片,以使它們均勻分佈,或者使用分類字段爲每個分片或某個組合分配特定類別。

要注意的一件事是未來的查詢要求。如果您確實需要索引其他字段,那麼您可以使用sparse indexes這意味着沒有索引字段的文檔將不在索引中,因此不會在索引中佔用任何空間;一個方便的優化。

如果您進行了更新,您還應該使用be aware of growing the documents。這確實會對性能產生重大影響。

+0

感謝您的回答。尼斯博客:) –