Performance 在一个文档MongoDB中存储多个大型数组
我正在创建一个具有类似Tinder功能的应用程序。目前,Im将用户的喜欢、不喜欢和匹配项存储在3个单独的集合中,这些集合的结构是这样的Performance 在一个文档MongoDB中存储多个大型数组,performance,mongodb,gridfs,Performance,Mongodb,Gridfs,我正在创建一个具有类似Tinder功能的应用程序。目前,Im将用户的喜欢、不喜欢和匹配项存储在3个单独的集合中,这些集合的结构是这样的 { "_id" : "user1_ID", "matches" : [ { "matchID" : "user2_ID", "time" : "2015-01-16 21:19:50 America/Los_Angeles" } ] } “_id”字段保存我们正在存储的匹配项的用户i
{
"_id" : "user1_ID",
"matches" : [
{
"matchID" : "user2_ID",
"time" : "2015-01-16 21:19:50 America/Los_Angeles"
}
]
}
“_id”字段保存我们正在存储的匹配项的用户id,“matches.matchID”字段保存某个用户已匹配的用户id。“matches.time”字段保存与该用户匹配的时间戳
“喜欢”和“不喜欢”集合和“匹配”集合完全相同,只是它们包含某个用户不喜欢或喜欢的用户的ID
我目前面临的问题是,我需要查询所有3个集合,以确保我不会向用户发送他们已经喜欢、不喜欢或匹配的其他用户,因此,将这3个集合合并为一个集合并按如下方式进行结构会更容易:
{
"_id" : "user1_ID",
"matches" : [
{
"matchID" : "user2_ID",
"time" : "2015-01-17 15:47:15 America/Los_Angeles"
}
],
"likes" : [
{
"likeeID" : "user3_ID",
"time" : "2015-01-17 15:47:15 America/Los_Angeles"
}
],
"dislikes" : [
{
"dlikeeID" : "user4_ID",
"time" : "2015-01-17 15:47:15 America/Los_Angeles"
}
]
}
虽然这可能会使查询更容易,但我担心这些数组可能会变得太大,使文档太大
存储这些数据的正确方法是什么?我读过gridFS有助于分解大型文档,这是一种方法吗?如果是这样的话,我该如何着手实施这一点?我还不太熟悉gridFS的工作原理。这是一个非常有趣的问题。虽然我认为可能有不止一个解决方案,但我想特别说明一个。我会考虑只使用一个文档,正如你所说的,但是把文档中存储的数据量降到最小。 例如,您可以重写您的示例,这样可以节省大量字节:
{
"_id" : "user1_ID",
"matches" : [
{
"id" : "user2_ID",
"ts" : "1421544095534"
}
],
"likes" : [
{
"id" : "user3_ID",
"ts" : "1421544095534"
}
],
"dislikes" : [
{
"id" : "user4_ID",
"ts" : "1421544095534"
}
]
}
通过这种方法,您可能可以举行数千场比赛。我会计算最大值,并验证是否足够匹配给定用户
编辑:假设每个edditional条目如下所示(就已使用的字符数而言):
大约是44字节。我们可以将最多50个字节取整。那个一个BSON文档中可以容纳大约320000条条目 如果你使用sharding,MongoDB的力量,文集会变得更大。课程可于
{"id" : "user2_ID", "ts" : "1421544095534"},