gpt4 book ai didi

mysql - 优化 mysql 查询以获取每个用户 "unseen"个条目

转载 作者:IT老高 更新时间:2023-10-28 23:27:37 25 4
gpt4 key购买 nike

这个标题相当令人着迷,但我想不出更清晰的东西。

长话短说,我们正在创建一个连接到与 mySql 数据库通信的 node.js 服务器的移动应用程序。很常见的设置。现在,我们连接了多个用户,可以将“时刻”上传到我们的服务器。所有其他用户只能看到这些时刻一次。

一旦用户 x 看到另一个用户 y 的时刻,x 就永远无法看到这个 y 的时刻。可能有点像 Snapchat,只是现在是单用户对多用户,而不是单对单。时刻也根据当前用户的位置按距离排序。

现在,我正在寻找一种仅从数据库中获取“未见”时刻的智能方法。目前,我们使用的是用户和 friend 圈之间的关系表。

假设一个用户 (ID = 20) 看到了一个时刻 (ID = 30320),然后我们将 20 和 30320 插入到这个表中。我知道。这很难扩展,可能是一个糟糕的主意。

我想过也许检查最后一次看到的日期,只获取超过这个日期的时刻,但同样,时刻在按日期排序之前按距离排序,因此可以看到一个 3 分钟前的时刻,然后一个 30 秒前的时刻。

有没有更聪明的方法,还是我注定要使用 friend 圈和用户之间的关系表,在查询时加入它?

非常感谢。

编辑 -

这个逻辑总共使用了 3 个表。

  • 用户
  • 时刻
  • MomentSeen

MomentSeen 仅包含用户在什么时刻以及何时看到的内容。由于时刻未按日期排序,因此我无法获取在最后一次看到的时刻之后上传的所有时刻。

编辑 -

我刚刚意识到移动应用程序 Tinder 必须使用类似的逻辑来确定哪个用户“喜欢”了哪个其他用户。由于您无法及时返回并看到用户两次,因此他们可能使用与我正在寻找的非常相似的查询。

考虑到他们有很多用户,而且他们是按距离和其他一些未知标准排序的,所以肯定有比“UserSawUser”关系表更聪明的处理方式。

编辑

我无法提供整个数据库结构,所以我只留下重要的表和其中的一些字段。

Users { 
UserID INT UNSIGNED AUTO_INCREMENT PRIMARY KEY
}

Moments {
MomentID INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
UploaderID INT UNSIGNED, /* FK to UserID */
TimeUploaded DATE /* usually NOW() while insertion */
}

MomentSeen {
/* Both are FK to Users and Moments */
MomentID INT UNSIGNED,
UserID INT UNSIGNED
}

最佳答案

您可以考虑实现布隆过滤器。它被广泛用于减少磁盘寻道并提高性能。

Medium正在使用它来检查用户是否已经阅读过帖子。

更多细节在这里-
https://medium.com/the-story/what-are-bloom-filters-1ec2a50c68ff https://en.wikipedia.org/wiki/Bloom_filter

关于mysql - 优化 mysql 查询以获取每个用户 "unseen"个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31686094/

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