7

我将PHPMySQL用于社交网络系统

我有一个名为member_feed的MySQL表,在这个表中我保存了每个成员的提要,我的表结构是:

    |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-具有成员 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-通过 member_id从mongoDB中的文档中获取所有id$contentIdsFromMongo

2- 在 MySQL 中运行查询以获取类似的内容

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

$contentIdsFromMongo我有10000 个 ids,所以这对 MySQL 性能有影响。

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

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

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

谢谢。

4

1 回答 1

3

文档存储数据建模中的两个主要考虑因素:

  1. 数据将如何随时间增长和变化,以及
  2. 您的应用程序将执行的查询类型。

您提供了有关数据预计如何增长的信息。仅在此基础上,我建议选项#1。

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

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

其他可能的选项是:

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

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

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

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

于 2013-08-30T13:38:22.030 回答