滑动/匹配的后端如何在基于滑动的应用程序中使用?

时间:2018-01-29 13:41:41

标签: mongodb redis tinder

我正在尝试开发一个复制类似tinder的滑动式Feed的应用程序。该应用程序的想法与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

但是这种方法的问题在于我无法跟踪用户是否已经刷过了饲料中需要的特定人。可以为此问题做的一件事是我可以更新集合并维护已刷过的用户列表。

如果还有其他数据库/方式可以帮助我完成此过程,请同时提出建议。

修改:

我没有打任何瓶颈。我只是想确认一下我做得对不对。通过列表迭代以找出用户是否被另一个人正确滑动是线性时间解决方案。我想知道我是否能做得更好,无论是通过数据库还是其他我应该尝试的东西。

1 个答案:

答案 0 :(得分:1)

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

  • 有一个单独的布隆过滤器来检查它是否匹配......可能存在误报,但由于大多数人尚未匹配'这将节省大量的数据库查询
  • 如果它还不匹配并且您需要存储刷过的数据条目,请在内存/ redis中保留多个此类条目一段时间,然后在数据库中批量插入
  • 实时更新bloom过滤器(注意:在批量插入完成之前,bloom和数据库之间可能会出现短暂的不匹配。)