2014-01-19 62 views
1

在這裏我的問題:我想創建一個網絡,允許用戶上傳帖子和喜歡他們。喜歡在mongoDB

我想我可以將每篇文章存儲在一個名爲'post'的集合中,而且我沒有這樣做的問題。

但我在哪裏可以存儲每個帖子上的相關數據(時間,用戶等等)喜歡? 我不能在發佈文檔裏面這樣做,因爲文檔的最大尺寸是16MB,並且想象我將不得不爲每個帖子記錄數千個喜歡的相關數據,我無法做到這一點。

我可以將每個帖子關聯到一個集合,其中包括文檔和每個文檔是一樣的。但是,如果可能的話,我真的不想創造數百萬和數百萬的收藏。後文件的

例子:

{_id: blabla, userfrom: {}, txt: "i am the post", time: {}, geo: {}, likes: {here i have to add as many likes as users clicks, and it can exceed 16MB}}

現在

在「喜歡」我可以把一個引用的集合,但是這是我想不能做什麼。

我讀過關於MongoDB的gridstore,但我沒有明白。我可以使用它作爲一個大小可以趨於無限的文件嗎?所以我可以添加儘可能多的記錄,因爲我想要?因此,與電網商店,我可以這樣做:

{_id: blabla, userfrom: {}, txt: "i am the post", time: {}, geo: {}, likes: {infinite records}}

有人可以幫助我處理嗎?謝謝

+0

不確定你的意思是「創造數百萬和數百萬的收藏」。常見的做法是創建一個集合,每個集合包含一個文檔,其中包含對其所引用的帖子的引用。爲什麼這不起作用? –

+0

爲什麼不把喜歡的文件存儲爲文件?每個人都有他們喜歡的職位的參考ID?並且,保留帖子中的總數,以便代碼實際上不需要每次都得到一個計數。我敢打賭,每次顯示帖子時都不需要獲取每個「喜歡」的詳細信息,因此最好不要將所有數據存儲在一個文檔中。 – WiredPrairie

+0

你的意思是爲每個帖子或單個集合創建一個集合,將所有帖子中的所有喜歡集合在一起? @AndreasHultgren – Morrisda

回答

3

當你不想嵌入喜歡,你必須去關係的方式。

創建另一個集合「喜歡」,其中每個文檔都有一個字段,表示它適用於哪個帖子。爲了避免必須計算likes-collection中的所有條目來獲取帖子的喜歡數量,還應該將當前計數存儲在後文檔中。

關於GridFS:我認爲它不會幫助你。它不應該用於文檔。其目的是將大型二進制文件存儲在數據庫中。

+0

如果我們將當前計數存儲在後期文檔中,則每次用戶喜歡或不喜歡該文章時,都需要更新該計數。不要認爲數百萬次更新文檔是最好的想法,因爲數據在發佈和類似表格之間不會保持一致。 –

+1

@JyotmanSingh在你的應用程序中會發生什麼更頻繁的事情:用戶*看到*喜歡數字或用戶*改變*喜歡數字?更頻繁的情況是你應該優化的。我非常肯定,這個數字將會被更多地讀取,而不是被寫入。我也非常肯定,擁有*百萬*喜歡的文檔與標準相比是個例外,大多數文檔的數量會少得多,但擁有數百萬喜歡的文檔仍然是那些意見最多的文檔。但它是你的應用程序。 – Philipp

+0

是的,你提出了一個非常有效的觀點。我不會進一步評論,因爲我不知道更好的解決方案,但是知道這是否有更好的解決方案會很好。這似乎是很常見的問題(喜歡),但我還沒有遇到一個非常好的實現。 –