簡體   English   中英

在MongoDB中創建集合內部文檔的最佳方法是什么

[英]what is the best way to create document inside collection in MongoDB

我正在使用PHPMySQL進行社交網絡系統

我有MySQL表名為member_feed ,在這個表中我為每個成員保存了feed,我的表結構是:

    |member_feed_id | member_id | content_id | activity_id |

在這張表中我有超過1.2億的記錄 ,並且每個成員都有記錄。

我目前正在努力從MySQL遷移到MongoDB ,我是MongoDB的新手。 所以我需要將此轉換為MongoDB中的 集合 我想為member_feed表構建我的集合 ,如:

1- member_feed表中的每一行作為文檔 ,如:

{  "member_id: 1" , "content_id: 10" , "activity_id: 1" },
{  "member_id: 1" , "content_id: 11" , "activity_id: 2" },
{  "member_id: 1" , "content_id: 12" , "activity_id: 3" },
{  "member_id: 2" , "content_id: 9" ,  "activity_id: 4" },
{  "member_id: 2" , "content_id: 11" , "activity_id: 5" },
{  "member_id: 2" , "content_id: 14" , "activity_id: 6" }

所以這個系列將有1.2億的記錄

2-具有成員標識的一個文檔的所有成員訂閱源以及該成員的所有訂閱源

{
        member_id: '1',
        feeds: [
            { content_id: '10', 'activity_id' : 1 },
            { content_id: '11', 'activity_id' : 2 },
            { content_id: '12', 'activity_id' : 3 }
        ]

        member_id: '2',
        feeds: [
            { content_id: '9',  'activity_id' : 4 },
            { content_id: '11', 'activity_id' : 2 },
            { content_id: '14', 'activity_id' : 6 }
        ]
    }

因此,當我需要在他的儀表板上查看用戶Feed時,我會這樣做:

1 - 通過member_id將$contentIdsFromMongo文檔中的所有ID作為$contentIdsFromMongo

在MySQL中運行2-運行查詢以獲取內容

select * from content where content_id in($contentIdsFromMongo); 

$ contentIdsFromMongo我有10000個ID ,這對MySQL性能有影響。

我在服務器上安裝了mongoDB,在另一台服務器上安裝了MySQL

並且在每一秒系統為每個成員插入大量記錄,所以我需要文檔能夠執行所有操作,如(插入,更新,選擇,...)

在每個成員的集合中創建文檔的最佳方法是什么,這對於使用mongoDB是對還是錯

謝謝。

文檔商店數據建模的兩個主要考慮因素:

  1. 數據如何隨着時間的推移而增長和變化,以及
  2. 您的應用程序將執行的查詢類型。

您已提供有關數據如何增長的信息。 就在此基礎上,我建議選擇#1。

{  "member_id: 1" , "content_id: 10" , "activity_id: 1" }

但是,了解您將要執行的查詢類型以及打算如何在應用程序中使用此數據也很重要。

可能的其他選項包括:

  • 每個成員一個文檔,每個文檔都有一個Feed數組
  • 按內容或活動ID對文檔進行分組,如果這是您的應用程序查詢數據的方式。

總而言之,要想出一個最佳模型,回答上面的問題2也很重要。

PS:你的問題中的選項2肯定聽起來像是一個壞主意,因為你描述的數據會如何增長。

您還可以參考此鏈接以獲取一些其他指南: http//docs.mongodb.org/manual/core/data-modeling/

暫無
暫無

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

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