Я пытаюсь разработать приложение, которое воспроизводит ленту на основе Tinder. Идея приложения очень похожа на Tinder, а также есть свайп вправо и влево с функцией сопоставления.
Что я сделал до сих пор: я создал коллекцию свайпов в MongoDB, в которой хранятся свайпы пользователя в следующей схеме:
swipedBy : {type:Schema.ObjectId},
swipedUser : {type:Schema.ObjectId},
status: {type:String, default:"left"}
Когда пользователь проводит пальцем вправо, я звоню в БД. Для каждой вставки салфетки я пытаюсь определить, был ли пользователь пропущен правильно другим пользователем, прежде чем сказать, что это совпадение, или сохранить его в БД. Там должен быть лучший способ.
Возможное решение
Я хотел использовать базу данных в памяти, такую как Redis, для хранения аналогичной информации и поиска совпадений между пользователями на основе свайпов. Если кто-то может пролить свет на то, как это делает трут, это тоже будет полезно. Моя схема в Redis выглядит так:
HSET for each user with
- userId as field, and
- status as swipe status
Но проблема с этим подходом в том, что я не смогу отследить, пролистнул ли уже пользователь конкретного человека, который нужен во время фида. Единственное, что можно сделать для решения этой проблемы, — обновить коллекцию и сохранить список уже удаленных пользователей.
Если есть какая-либо другая база данных/способ, которая может помочь мне в этом процессе, пожалуйста, предложите и ее.
Изменить:
Я не натыкаюсь на узкое место. Я просто хочу убедиться, правильно ли я делаю или нет. Итерация по списку для выяснения того, был ли пользователь пролистнут вправо другим человеком, является решением с линейным временем. Мне было интересно, могу ли я сделать лучше, либо через БД, либо что-то еще, что я должен попробовать.