Я создаю многопользовательскую игру «Найди отличия».
Характеристики игры:
- В каждой игре может быть до 10 игроков.
- Пользователь не должен видеть одно и то же изображение дважды.
(изображение состоит из
четыре изображения, и пользователь должен «заметить разницу» между ними) .
У меня есть коллекция тысяч и, возможно, даже десятков тысяч из
картинки на выбор. Проблема, с которой я сталкиваюсь, чрезвычайно
неэффективный и не масштабируемый метод поиска изображения, которое ни один из
Игроков еще не видели.
В моей базе данных есть usage table
со следующими полями:
- picture_id
- user_id
Мое текущее решение выглядит следующим образом:
Пользователь входит в игру, приложение выбирает изображение из базы данных, которое не отображается в таблице использования для этого пользователя, и для каждого входящего пользователя я запускаю ту же функцию, только добавляя значения изображений, которые есть у других пользователей в той же игре уже видел.
Я обеспокоен тем, что как только база данных будет состоять из десятков тысяч картинок на выбор, а таблица использования уже заполняется предыдущими играми, эта функция просто займет слишком много времени, что повредит ходу игры.
Этот метод не очень масштабируемый, и я ожидаю довольно стабильного потока постоянного трафика, что означает, что во многих играх играют.
У кого-нибудь есть предложения по улучшению этой логики или предложения по улучшению структуры базы данных?