在一个文档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中存储多个大数组的主要内容,如果未能解决你的问题,请参考以下文章