MongoDB:是有一个大的集合更好,还是有很多小的集合和连接更好?
我有一个MongoDB:是有一个大的集合更好,还是有很多小的集合和连接更好?,mongodb,meteor,Mongodb,Meteor,我有一个Meteor.users收藏。由于每个用户“类型”都有不同的配置文件,因此用户集合可能会变得相当大。这是我正在做的一个例子 { profiles: { player: "someplayerid", admin: null, battlenet: null }, roles: { "somegroupid": [ 'player' ], "someothergroupid": [ 'admin',
Meteor.users
收藏。由于每个用户“类型”都有不同的配置文件,因此用户集合可能会变得相当大。这是我正在做的一个例子
{
profiles: {
player: "someplayerid",
admin: null,
battlenet: null
},
roles: {
"somegroupid": [
'player'
],
"someothergroupid": [
'admin',
'player'
]
}
}
然后在我的查询中,我将执行一个伪连接,以查询组、角色和概要文件。例如:
Meteor.publish('players', function () {
// all _ids of those with role "player" in "somegroupid"
var profileIds = Roles.getUsersInRole('player', 'somegroupid').map(function (doc) {
return doc.profiles.player;
});
return Players.find({
_id: {
$in: profileIds
}
})
});
在这种情况下,直接将对象添加到Meteor.users集合是否更好?在mongo文档中,它说:
写入时进行连接,而不是读取时进行连接
mongodb认为哪种方法更好
是有一个大的集合更好,还是有许多较小的集合与联接更好
在你的情况下,我会使用大量的收集。连接是昂贵的,因为这意味着您需要多次往返数据库,并且需要在代码中连接这些数据库
也考虑线:
var profileIds = Roles.getUsersInRole('player', 'somegroupid').map(function (doc) {
return doc.profiles.player;
});
假设你有1000000名玩家。你真的想获取所有这些玩家的所有信息,去掉他们的ID,在1000000大小的内存中创建一个数组,然后将这个数组“上传”回Mongo进行另一个查询吗?这在内存和CPU方面非常昂贵
对于大型集合,您只需要创建一个查询,然后迭代该查询的游标响应(非常节省内存)。连接还有一个您没有提到的问题:由于MongoDB没有事务,您必须准备好让外部引用在两个查询之间消失。