2011-04-01 34 views
1

假設我有博客文章表。我想將所有評論一起存儲在博客文章中。 如果在1年後對某個帖子有新評論,我希望將其添加到收藏的最後評論中。 這是爲了確保當我閱讀該帖子的評論時,我會做一個SEEK操作。如何控制MongoDB中的文檔插入點?

否則,我將不得不掃描該帖子的評論,如果他們分散。 加分區/分區可能會將不同部分的相同評論的評論。

Comments 
{ 
    {post_id: 1, cmt_id:1, usr: 'bob', text: 'Cool!'} 
    {post_id: 1, cmt_id:2, usr: 'bob', text: 'Cool!'} 
    {post_id: 2, cmt_id:3, usr: 'rob', text: 'Cool!'} 
    {post_id: 2, cmt_id:4, usr: 'job', text: 'Cool!'} 
} 

如果沒有爲1後一個新的註釋,然後收集我想:

Comments 
{ 
    {post_id: 1, cmt_id:1, usr: 'bob', text: 'Cool!'} 
    {post_id: 1, cmt_id:2, usr: 'bob', text: 'Cool!'} 

    {post_id: 1, cmt_id:5, usr: 'bob', text: 'Cool!'} <-- inserted 

    {post_id: 2, cmt_id:3, usr: 'rob', text: 'Cool!'} 
    {post_id: 2, cmt_id:4, usr: 'job', text: 'Cool!'} 
} 

這是可能的,或者我還在想着它在SQL?

如果有替代方法具有相同或更好的性能?

感謝您的閱讀。

+0

有沒有理由不將評論存儲在博客文章中? – 2011-04-01 23:02:10

+0

@Justin:我猜想不是,@Projapati只是用sql方式思考。 – 2011-04-01 23:08:13

+0

要存儲在單個文檔中的東西太多。每份文件的限制爲16MB。另外,我不想一次閱讀所有評論。它將通過分頁來提供(每頁10/20條評論)。單個評論的最大尺寸是500個字符。如果需要,我可以對每個帖子允許的評論數量設置限制。 – kheya 2011-04-01 23:29:53

回答

1

首先你用sql方式思考..在mongodb中要實現更好的性能需要嵌入一切。在你的情況,你應該嵌入註釋到博客帖子是這樣的:

Post 
{ 
    _id, 
    PostText, 
    Comments { cmt_id, usr, text }, 
    ... 
} 

在這種情況下,你不需要用左右分片插入位置和可能出現的問題(從不同的碎片一個職位評論)照顧。

希望得到這個幫助!

0

你永遠不會保證評論按順序存儲在磁盤上。如果帖子1得到評論,然後發佈2,然後再發布1評論將交錯在磁盤上,評論之間的時間無關緊要。只要你在評論集合上有post_id的索引,加載一篇文章的所有評論總是會很快。

保證評論是連續的唯一方法是將它們添加爲子文檔,但這是不明智的。首先,這意味着郵件文檔必須經常在磁盤上移動(在Mongo中是一個非常昂貴的操作,因爲在整個移動過程中全局鎖定是持續的),其次,像註釋這樣的東西是無限的,因爲一個非常受歡迎的帖子,你可以很好地達到文件大小限制,並且將無法添加更多評論。

相關問題