Php 在MongoDB中创建集合内部文档的最佳方法是什么
我正在使用PHP和MySQL作为社交网络系统 我有一个名为member\u feed的MySQL表,在这个表中我为每个成员保存feed,我的表结构是: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提要表构建我的集合
|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是正确的还是错误的
谢谢。文档存储数据建模中的两个主要注意事项:
- 每个成员一个文档,每个文档中有一个提要数组
- 按内容或活动id对文档进行分组,如果这是应用程序查询数据的方式
您还可以参考此链接了解一些其他指导原则:感谢您的回答Anurag,感谢您的回答Anurag,在我的系统中,我使用beanstalkd为我的成员提供bush提要,因此我的表中每秒都有大量插入记录,因此MongoDB表中也会有相同的记录,因此,数据将大量增长,在成员配置文件中,我为成员显示所有信息,所以我有选择查询和更新查询,您认为使用第一个选项吗。谢谢againOk,所以查询类似于-获取一个成员的所有提要,以便您可以在个人资料页面上显示它?另外,对于同一成员,插入的大致速率是多少?最后,如果每个成员都有一个文档,您认为文档会有多大?是的,查询会是这样的,对于每个成员,我每天至少有50个新的提要,我现在不知道如果每个成员都有一个文档会发生什么(第二个选项),我认为当每个成员有一个文档时,对于性能来说是最好的,并选择查询(您认为如何),所以请建议我,因为我需要将1.2亿条记录从MySQL表迁移到新集合。好的,这是相当主观的。但根据您到目前为止所描述的,我倾向于每个现有mysql表行一个文档。这种偏差主要基于这样一个事实,即在“每个成员一个文档”选项中,文档大小将不断增加,并可能随着时间的推移变得非常大。
{ "member_id: 1" , "content_id: 10" , "activity_id: 1" }