Структура данных пожарного хранилища

Я создаю приложение с помощью android studio-java, firestore и firebase auth. Мне нужна помощь в том, как сохранить данные.

В приложении 3 игры, цель - спасти пользователей. счет+дата (ДД/ММ/ГГ для каждого счета) и высокий балл для каждой игры. мне нужно сохранить последние 5 баллов для каждой игры. Моя первая попытка - сделать это с 1 коллекцией под названием «пользователи».

класс пользователя:

private String name;
private String email;
private HashMap<Integer, Date> game1_Scores;
private HashMap<Integer, Date> game2_Scores;
private HashMap<Integer, Date> game3_Scores;
private int game1_HighScore;
private int game2_HighScore;
private int game3_HighScore;

мой вопрос:

  1. каков наилучший способ переопределить старую оценку новой оценкой?
  2. я хочу иметь возможность показать в приложении список рекордов, от большего к меньшему от всех пользователей. как мне это сделать ?
  3. я должен сделать "счетов" коллекции. как подключить счет к пользователю?

Любая помощь будет оценена.

Обновлено: мой скриншот БД

p.s. Как управлять порядком полей при добавлении нового документа пользователя.

Вам нужна схема базы данных или структура класса? Если это последний, отредактируйте свой вопрос и добавьте структуру своей базы данных в виде снимка экрана.

Alex Mamo 05.01.2023 09:08
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
51
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я рекомендую вам моделировать его следующим образом:

private String name;
private String email;
// If the number of games grows too much, new modeling will be necessary.
private List<GameScore> game1Scores;
private List<GameScore> game2Scores;
private List<GameScore> game3Scores;
private int game1HighScore;
private int game2HighScore;
private int game3HighScore;

GameScore будет классом с полем GameName или GameId, счетом и, возможно, createdAt для установки времени игры.

После этого рекомендую сохранить все совпадения в коллекцию. Может так:

Коллекция: спички
В этой коллекции вы будете сохранять GameScore и идентификатор игрока для каждого матча.

Всякий раз, когда документ вставляется в коллекцию матчей, вы запускаете облачную функцию для обновления рейтинга игрока и глобального рейтинга.

Глобальный рейтинг можно обновлять каждые несколько минут, чтобы не писать много в одном и том же документе.

Не забывайте правильно запрашивать, чтобы избежать большого количества чтений.

  1. каков наилучший способ переопределить старую оценку новой оценкой?

В текущей структуре данных на вашем снимке экрана вы можете просто сравнить оценку выходов в клиенте и посмотреть, нужно ли обновлять оценки.

  1. я хочу иметь возможность показать в приложении список рекордов, от большего к меньшему от всех пользователей. как мне это сделать ?
  2. я должен сделать "счетов" коллекции. как подключить счет к пользователю?

Вы можете поместить оценку и идентификатор пользователя в один и тот же документ, а затем поместить все документы в одну и ту же коллекцию «оценок», как вы сказали. Если конкретному пользователю нужно получить три лучших результата, просто запустите запрос в этих двух полях. Вы также можете использовать группу сбора для достижения этого в зависимости от вашего случая.

Другие вопросы по теме