在一个文档中存储多个大型数组 MongoDB
Storing multiple large arrays in one document MongoDB
我正在创建一个具有类似 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" 字段包含他们与该用户匹配时的时间戳。
“喜欢”和“不喜欢”集合与匹配集合相同,只是它们包含某个用户不喜欢或喜欢的用户的 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"
}
]
}
通过这种方法,您可以举行数千场比赛。我会计算最大值并验证它是否足够匹配给定用户。
编辑:假设每个编辑条目看起来像这样(就用完的字符数而言):
{"id" : "user2_ID", "ts" : "1421544095534"},
这大约是 44 个字节。我们可以四舍五入到 50 个字节。一个 BSON 文档可以容纳大约 320,000 个条目。
我正在创建一个具有类似 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" 字段包含他们与该用户匹配时的时间戳。
“喜欢”和“不喜欢”集合与匹配集合相同,只是它们包含某个用户不喜欢或喜欢的用户的 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"
}
]
}
通过这种方法,您可以举行数千场比赛。我会计算最大值并验证它是否足够匹配给定用户。
编辑:假设每个编辑条目看起来像这样(就用完的字符数而言):
{"id" : "user2_ID", "ts" : "1421544095534"},
这大约是 44 个字节。我们可以四舍五入到 50 个字节。一个 BSON 文档可以容纳大约 320,000 个条目。