我正在使用PHP和MySQL进行社交网络系统
我有MySQL表名为member_feed,在这个表中我为每个成员保存了feed,我的表结构是:
|member_feed_id | member_id | content_id | activity_id |
Run Code Online (Sandbox Code Playgroud)
在这张表中我有超过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" }
Run Code Online (Sandbox Code Playgroud)
所以这个系列将有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 }
]
}
Run Code Online (Sandbox Code Playgroud)
因此,当我需要在他的仪表板上查看用户Feed时,我会这样做:
1 - 通过member_id 从mongoDB中的文档获取所有ID$contentIdsFromMongo
在MySQL中运行2-运行查询来获取内容
select * from content where content_id in($contentIdsFromMongo);
Run Code Online (Sandbox Code Playgroud)
和$ contentIdsFromMongo我有10000个ID,这对MySQL性能有影响.
我在服务器上安装了mongoDB,在另一台服务器上安装了MySQL
并且在每一秒系统为每个成员插入大量记录,所以我需要文档能够执行所有操作,如(插入,更新,选择,...)
在每个成员的集合中创建文档的最佳方法是什么,这对于使用mongoDB是对还是错
谢谢.
文档存储数据建模的两个主要考虑因素:
您提供了有关数据预计如何增长的信息。在此基础上,我建议选择#1。
{ "member_id: 1" , "content_id: 10" , "activity_id: 1" }
Run Code Online (Sandbox Code Playgroud)
但是,了解您将执行哪种查询以及您打算如何在应用程序中使用这些数据也很重要。
可能的其他选项有:
所以总而言之,要提出一个最佳模型,回答上面的问题 2 也很重要。
PS:考虑到您所描述的数据增长方式,您问题中的选项 2 听起来绝对是一个坏主意。
您还可以参考此链接以获取一些其他指南:http://docs.mongodb.org/manual/core/data-modeling/
归档时间: |
|
查看次数: |
247 次 |
最近记录: |