gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 10:29:50 27 4
gpt4 key购买 nike

我正在创建一个具有类似 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 集合与 matches 集合相同,只是它们包含特定用户不喜欢或喜欢的用户的 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 个条目。

关于performance - 在一个文档中存储多个大型数组 MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28005827/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com