【问题标题】: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 中@。所有尚未看到的记录都可以存储在缓存中,当用户获取下一条记录时,将返回缓存的实体。每当用户看到一个人时,该人就会被添加到布隆过滤器中,这样就不会再次显示同一个人。

    然而,这是一种非常静态的方法,需要一些额外的思考

    1. 加入超级明星功能

      每当 A 将 B 标记为超级喜欢时,无论 A 是否添加到 B 的待显示列表中。

    2. 每当查询弹性搜索时批处理作业将运行,很可能前几个结果将与前一个相同

      这是一个很难解决的问题,我们可以添加某种随机化或参数(例如上次更新,或者保留一个指针,说明我们在上一个作业中已经遍历了多少用户,这次从 +1 开始计数器。)这可以确保每当我们查询弹性搜索结果时几乎是随机的,并且前几个并不总是相同的。

    3. 可以在需要时触发批处理作业。

      假设用户更改了他的偏好/位置,我们应该能够使缓存无效并用新结果重新加热缓存。

    【讨论】:

      猜你喜欢
      • 2015-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-06
      • 1970-01-01
      • 2011-12-16
      • 2015-12-31
      • 2021-09-18
      相关资源
      最近更新 更多