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

Posted

技术标签:

【中文标题】在一个文档MongoDB中存储多个大数组【英文标题】:Storing multiple large arrays in one document MongoDB 【发布时间】:2015-01-18 00:19:35 【问题描述】:

我正在创建一个具有类似 Tinder 功能的应用程序。目前,我将用户的喜欢、不喜欢和匹配项存储在 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”字段保存他们与该用户匹配的时间戳

Likes 和 Dislikes 集合与 match 集合相同,只是它们包含某个用户不喜欢或喜欢的用户的 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 的工作原理还不是很熟悉。

【问题讨论】:

文集合变大你使用分片,MongoDB的力量。 docs.mongodb.org/manual/sharding 和课程可在 university.mongodb.com 【参考方案1】:

这是一个非常有趣的问题。虽然我想可能有不止一种解决方案,但我想特别说明一种解决方案。我会考虑只使用您所说的一个文档,但将存储在文档中的数据量降至最低。

例如,您可以这样重写您的示例并节省大量字节:


  "_id" : "user1_ID",
  "matches" : [
        
          "id" : "user2_ID",
          "ts" : "1421544095534"
        
   ],
   "likes" : [
        
          "id" : "user3_ID",
          "ts" : "1421544095534"
        
   ],
   "dislikes" : [
        
          "id" : "user4_ID",
          "ts" : "1421544095534"
        
   ]

通过这种方法,您可能能够容纳数千场比赛。我会计算最大值并验证对于给定用户是否足够匹配。

编辑:假设每个 edditional 条目看起来像这样(就用完的字符数而言):

"id" : "user2_ID", "ts" : "1421544095534",

大约 44 个字节。我们最多可以舍入 50 个字节。你可以在一个 BSON 文档中容纳大约 320,000 个条目。

【讨论】:

以上是关于在一个文档MongoDB中存储多个大数组的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB索引

mongo 介绍

用 php 和 mongo 处理巨大的数组

mongodb Aggregation聚合操作之$facet

MongoDB 的功能

高可用的MongoDB集群