Php 在MongoDB中创建集合内部文档的最佳方法是什么

Php 在MongoDB中创建集合内部文档的最佳方法是什么,php,mongodb,nosql,Php,Mongodb,Nosql,我正在使用PHP和MySQL作为社交网络系统 我有一个名为member\u feed的MySQL表,在这个表中我为每个成员保存feed,我的表结构是: |member_feed_id | member_id | content_id | activity_id | 在这个表格中,我有超过1.2亿条记录,每个成员都有一套记录 我目前正在从MySQL迁移到MongoDB,我是MongoDB的新手。 因此,我需要将这个表转换为MongoDB中的集合。 我想为member\u提要表构建我的集合

我正在使用PHPMySQL作为社交网络系统

我有一个名为member\u feedMySQL表,在这个表中我为每个成员保存feed,我的表结构是:

    |member_feed_id | member_id | content_id | activity_id |
在这个表格中,我有超过1.2亿条记录,每个成员都有一套记录

我目前正在从MySQL迁移到MongoDB,我是MongoDB的新手。 因此,我需要将这个转换为MongoDB中的集合。 我想为member\u提要表构建我的集合,如下所示:

1-成员提要表中的每一行作为文档,如:

{  "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-具有成员id的一个文档的所有成员提要以及此成员的所有提要

{
        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 }
        ]
    }
因此,当我需要在其仪表板上查看用户提要时,我将执行以下操作:

1-按成员id从mongoDB内部的文档中获取所有id,作为
$contentIdsFromMongo

2-在MySQL中运行查询以获得如下内容

select * from content where content_id in($contentIdsFromMongo); 
而且,$contentIdsFromMongo我的be有10000个ID,这对MySQL性能也有影响

服务器上有mongoDB,另一台服务器上有MySQL

系统每秒钟都会为每个成员插入大量记录,因此我需要文档能够执行所有操作,如(插入、更新、选择等)

集合中为每个成员创建文档的最佳方法是什么,这种方法对使用mongoDB是正确的还是错误的


谢谢。

文档存储数据建模中的两个主要注意事项:

  • 数据将如何随时间增长和变化,以及
  • 应用程序将执行的查询类型
  • 您提供了有关数据预期增长方式的信息。基于此,我建议选择1

    但是,了解要执行的查询类型以及打算如何在应用程序中使用这些数据也很重要

    其他可能的选择包括:

    • 每个成员一个文档,每个文档中有一个提要数组
    • 按内容或活动id对文档进行分组,如果这是应用程序查询数据的方式
    总之,要想得出一个最优模型,回答上面的问题2也很重要

    PS:考虑到您所描述的数据将如何增长,您问题中的选项2听起来绝对是个坏主意


    您还可以参考此链接了解一些其他指导原则:

    感谢您的回答Anurag,感谢您的回答Anurag,在我的系统中,我使用beanstalkd为我的成员提供bush提要,因此我的表中每秒都有大量插入记录,因此MongoDB表中也会有相同的记录,因此,数据将大量增长,在成员配置文件中,我为成员显示所有信息,所以我有选择查询和更新查询,您认为使用第一个选项吗。谢谢againOk,所以查询类似于-获取一个成员的所有提要,以便您可以在个人资料页面上显示它?另外,对于同一成员,插入的大致速率是多少?最后,如果每个成员都有一个文档,您认为文档会有多大?是的,查询会是这样的,对于每个成员,我每天至少有50个新的提要,我现在不知道如果每个成员都有一个文档会发生什么(第二个选项),我认为当每个成员有一个文档时,对于性能来说是最好的,并选择查询(您认为如何),所以请建议我,因为我需要将1.2亿条记录从MySQL表迁移到新集合。好的,这是相当主观的。但根据您到目前为止所描述的,我倾向于每个现有mysql表行一个文档。这种偏差主要基于这样一个事实,即在“每个成员一个文档”选项中,文档大小将不断增加,并可能随着时间的推移变得非常大。
    {  "member_id: 1" , "content_id: 10" , "activity_id: 1" }