3

我正在尝试开发一个应用程序来复制类似火种的基于滑动的提要。该应用程序的想法与 tinder 非常相似,并且具有向右滑动和向左滑动的匹配功能。

到目前为止我所做的 - 我在 MongoDB 中创建了一个滑动集合,它将用户的滑动存储在以下模式中 -

swipedBy : {type:Schema.ObjectId},
swipedUser : {type:Schema.ObjectId},
status: {type:String, default:"left"}

当用户向右滑动时,我正在调用 DB。对于每次滑动插入,我都会尝试查找用户是否已被其他用户向右滑动,然后再说出匹配或将其存储在数据库中。一定有更好的方法。

可能的解决方案

我希望使用 Redis 之类的内存数据库来存储类似信息并根据滑动查找用户之间的匹配项。如果有人可以阐明火种是如何做到的,那么它也会有所帮助。我在 Redis 中的架构如下所示 -

HSET for each user with 
- userId as field, and 
- status as swipe status

但是这种方法的问题是我将无法跟踪用户是否已经刷过提要期间需要的特定人。对于这个问题可以做的一件事是我可以更新集合并维护一个已经刷过的用户列表。

如果有任何其他数据库/方式可以在此过程中帮助我,请也提出建议。

编辑:

我没有遇到任何瓶颈。我只是想确认我是否做得对。遍历列表以找出用户是否被其他人向右滑动是一个线性时间解决方案。我想知道我是否可以做得更好,无论是通过 DB 还是其他我应该尝试的方法。

4

1 回答 1

1

我不知道这是否真的解决了您的问题,但您可以尝试一下

  • 有一个单独的布隆过滤器来检查它是否匹配......可能会出现误报,但由于大多数将“尚未匹配”,这将节省大量数据库查询
  • 如果还不是匹配项,并且您需要存储向上滑动的数据条目,请在 memory/redis 中保留多个此类条目一段时间,然后将其批量插入数据库中
  • 实时更新布隆过滤器(注意:在完成批量插入之前,布隆和数据库之间可能会暂时不匹配。)
于 2018-01-30T06:19:25.870 回答