Tinder 如何只向我提供新的个人资料? 【数据库设计】

问题描述 投票:0回答:1

我可能已经向左或向右滑动了 10k 个个人资料。 如果我明天打开应用程序,我将获得 10 份我从未见过的个人资料。 如何高效查询这些资料?

可以肯定,“给我所有排除 x、y、z、……”类型的 SQL 查询(其中 x、y、z 是我已经见过的大量配置文件)是不可行的

我在网上收集的一些想法

  1. “每个用户配置文件可能都有元数据,指示已与其交互的用户。这可以帮助快速排除您刷过的个人资料。”这看起来很疯狂,想象一下洛杉矶地区的一个女孩,可能有一系列 100 万个 uuid 的用户,与她互动或不互动,这似乎不现实
  2. 某种倒排索引,但我还没有真正理解它在这种情况下如何提供帮助,而无需为每个用户创建多个 MB 的元数据(!!!)

我确实理解这个问题的解决方案可能不是最佳的,要么需要一些繁重的查询,要么需要存储一些重要的元数据,但我想到的解决方案仍然看起来效率太低

sql database performance mobile nosql
1个回答
0
投票

这是一个非常有趣的问题。我一直在网上寻找一些清晰的信息,但正如你所说,这只是猜测,因为大多数约会应用程序都不会在线分享其结构设计。

您的第一个选项确实解决了问题,但正如您所说,它每天都会呈指数级增长(考虑到每天都会创建x个新帐户) 但我认为答案仍然在那里。 关键在于你的问题,想象一下一个来自洛杉矶的女孩,在过去的一个月里大约有 10 万个个人资料与她进行了互动,如果我们确实以这种方式解决问题 (n°1) 10 万个新的“互动”表,其中最有可能只有interactedID(女孩的个人资料)、interactorID(通过个人资料交换的男孩/女孩)以及指示交互的Flag。 该解决方案再次确实仅在理论上解决了问题,但考虑到用户数量,确实会产生扩展问题,数据库将是数据的垃圾。

但是我们可以限制这种交互,创建尽可能少的表。 而不是遵循这种模式:

--创建一个新的配置文件: --对于每个现有的个人资料,都会创建一个专门用于与我互动的新表

我们可以限制创建的表的数量:

1-创建一个新的配置文件: 2-根据您的起始兴趣(位置、性别、年龄等)查询的新配置文件组已创建并标记为 GroupOfInterest 3-您现在已经查询到了链接到您帐户的可能匹配项的数组(这可以在本地保存) 4-每次您对某人不感兴趣时,您都可以开始浏览这些个人资料并滑动它们(向右/向左我不记得了),然后将个人资料 ID 放入新的 DenyList 组中。

--任何时候您想要寻找新的人,您都可以按照步骤 2 清除现有的 GroupOfInterest 并用新的兴趣填充它,但是在 GroupOfInterest 内部,不能有具有您个人 DenyList 中的 profileId 的人。

这样,您只需创建一个链接到您不感兴趣的用户的表。 每次创建新查询并寻找新人时,您都会循环浏览该内容。

我可能弄错了,但这似乎是一个更可行的解决方案,可以为平台上的每个人绑定一个表给我

© www.soinside.com 2019 - 2024. All rights reserved.