Performance 在一个文档MongoDB中存储多个大型数组

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

我正在创建一个具有类似Tinder功能的应用程序。目前,Im将用户的喜欢、不喜欢和匹配项存储在3个单独的集合中,这些集合的结构是这样的

{
  "_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"},