簡體   English   中英

我應該如何在mongodb中處理共享圖像?

[英]how should I handle shared images in mongodb?

可以說我有一個帶有嵌入式作者的Posts文檔。

{
    name: "some post",
    text: "some text",
    author:{
        avatar_img: "http://www.someimage.com/1"
    },
    comments: [
        {
            user: "some name"
            avatar_img: "http://www.someimage.com/5"
        }
    ]
}

現在假設我在前端使用了這些數據,並在頁面上顯示了帶有作者圖像的帖子。 作者更改頭像URL會怎樣? 我將不得不用新的圖像URL更新每個帖子。 這是正確的方法嗎? 我看到的唯一選擇是引用“用戶”文檔,但是每個帖子都會有2個數據庫請求。 更不用說所有注釋也將需要2個db請求才能獲取圖像URL。

在系統設計級別上有兩種方法-當某人更改其頭像時,您是否應該讓他們以前的帖子顯示舊的或新的頭像?

有人可能會說,如果您發布時具有化身[X],那么回到該帖子應顯示相同的化身圖像“永遠”。 其他人可能認為作者的頭像圖片是他們的標識符,應該對其進行更改以匹配其當前頭像[Y]。

如果您想做前者,那么您已經完成了:)

如果要進行后者,那么當作者將其頭像從[X]更改為[Y]時,您可以運行一個更新,如下所示:

db.posts.update({ "author.name":"joejoe", "author.avatar_img":"[X]"}, 
                { $set:{"author.avatar_img":"[Y]"}},
                { multi : true }
               );

我在這里做了一些假設-一種是您存儲作者的姓名,而不僅僅是avatar_img,另一種是每個帖子只能有一位作者,第三種是您的多次更新可能會中斷,這就是為什么我的匹配條件既是作者名, 又是他們的舊頭像。

那照顧作者。 現在,評論呢? 我要告訴您的是,將注釋嵌入到后期文檔中是一個“錯誤的想法(tm)”-由於性能原因,您希望限制文檔的持續增長,因此最多可以將前幾個注釋嵌入文檔本身。 (這樣一來,您可以在顯示帖子時顯示前幾條評論),但這些評論屬於自己的收藏集,如果查看者要求查看更多評論,則可以在其中進行查詢。 將它們放在單獨的集合中后,您可以像對帖子一樣對它進行相同的更新(如果需要)。 由於您將發布后的數組元素數量限制為少數注釋,因此您可以使用另一個(或幾個)更新命令輕松地更新它們。

請注意,當用戶更改化身時,以非規范化形式更新化身將是異步的,但這沒關系,因為用戶不需要太多更改化身,您不必擔心更新時間是否會長一點,但會在性能上獲得巨大收益通過優化最頻繁的操作-僅閱讀一次即可在視圖中顯示帖子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM