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

时间:2013-08-30 13:07:01

标签: php mongodb nosql

我正在使用 PHP MySQL 用于社交网络系统

我有名为 member_feed MySQL 表,在此表中我为每个成员保存了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-一个文档的所有成员Feed ,其成员ID和此成员的所有Feed

{
        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 - 将所有 ID 从mongoDB中的文档中获取$contentIdsFromMongo by member_id

在MySQL中运行查询以获取类似

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

$ contentIdsFromMongo 我的 10000 ids ,这对MySQL性能有影响。

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

并且在每一秒钟中系统为每个成员插入大量记录,因此我需要该文档能够执行所有操作,如(插入,更新,选择,...)

在每个成员的集合中创建文档的最佳方式是什么,使用mongoDB是对还是错

感谢。

1 个答案:

答案 0 :(得分:3)

文档商店数据建模的两个主要考虑因素:

  1. 数据如何随着时间的推移而增长和变化,
  2. 您的应用程序将执行的查询类型。
  3. 您提供了有关数据如何增长的信息。就在此基础上,我建议选择#1。

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

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

    可能的其他选项包括:

    • 每个成员一个文档,每个
    • 包含一组Feed
    • 按内容或活动ID对文档进行分组,如果这是您的应用程序查询数据的方式。

    总而言之,要想出一个最佳模型,回答上面的问题2也很重要。

    PS:鉴于您描述的数据将如何增长,您的问题中的选项2肯定听起来不错。

    您也可以参考此链接获取一些其他指南:http://docs.mongodb.org/manual/core/data-modeling/