【问题标题】:How does Tinder know who's been seen? (Backend)Tinder 怎么知道谁被看见了? (后端)
【发布时间】:2019-10-09 04:08:36
【问题描述】:
我有一个 dynamodb 模型源。
现在我通过 ElasticSearch 查询它们,所以我可以进行地理搜索。
给我 30 公里圈内的所有模型。
现在用户拥有了一个 Tinder 系统。所以可以擦。我如何知道哪些模型不再需要检索?做这个的最好方式是什么?
一张已经看过地图的桌子?
然后我从 ElasticSearch 中减去,得到一个包含 100 张卡片的数组并进行比较?如果他已经看到了全部 100 个,那么再问 ElasticSearch?
这没什么意义。用户看到的越多,请求的时间就越长。你是怎么做到的?
【问题讨论】:
标签:
node.js
aws-lambda
nosql
amazon-dynamodb
tinder
【解决方案1】:
这是一个基于意见的问题,因此我是基于意见的答案。
一种方法是预热必须向用户显示的内容。
解决方案:
后台作业每 x 小时运行一次,该作业使用具有给定参数(如年龄、性别、兴趣、位置等)的搜索查询从 Elastic Search 中获取所有可能的结果。有关用户已查看内容的信息可以存储在 @987654321 中@。所有尚未看到的记录都可以存储在缓存中,当用户获取下一条记录时,将返回缓存的实体。每当用户看到一个人时,该人就会被添加到布隆过滤器中,这样就不会再次显示同一个人。
然而,这是一种非常静态的方法,需要一些额外的思考
-
加入超级明星功能
每当 A 将 B 标记为超级喜欢时,无论 A 是否添加到 B 的待显示列表中。
-
每当查询弹性搜索时批处理作业将运行,很可能前几个结果将与前一个相同
这是一个很难解决的问题,我们可以添加某种随机化或参数(例如上次更新,或者保留一个指针,说明我们在上一个作业中已经遍历了多少用户,这次从 +1 开始计数器。)这可以确保每当我们查询弹性搜索结果时几乎是随机的,并且前几个并不总是相同的。
-
可以在需要时触发批处理作业。
假设用户更改了他的偏好/位置,我们应该能够使缓存无效并用新结果重新加热缓存。