Глобальный и только для друзей рейтинг рейтинга с помощью Cloud Firestore - PullRequest
0 голосов
/ 02 декабря 2019

Мне нужно выполнить два разных запроса в моем приложении.

  1. Показать глобальную таблицу лидеров (ранжировать всех пользователей по баллам)
  2. Показать таблицу лидеров только среди друзей в настоящее времязарегистрированный пользователь.

В настоящее время я структурировал свою базу данных следующим образом.

Users (collection):
    user_id (document):
        ...
        points: number
        ...

        Friends (sub-collection):
            user_id (document):
                name: string
                points: number

Этот подход работает для заполнения глобальной таблицы лидеров , поскольку он просто:

db.collection("Users")
            .orderBy("points", Query.Direction.DESCENDING)
            .limit(10)
            .get()

Отображение списка лидеров среди друзей пользователя также работает в этом случае, но обновление точек пользователя становится дорогой операцией из-за многократного дублирования.

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

1 Ответ

0 голосов
/ 02 декабря 2019

Я думаю, что то, что вы делаете сейчас, вероятно, лучший путь. Дублирование данных является нормальным явлением для баз данных типа NoSQL, и ожидается, что вы сделаете несколько обновлений, чтобы все синхронизировалось, если что-то изменится. Это абсолютно нормально.

Альтернатива - как-то хранить все релевантные данные в одной коллекции (не использовать вложенную коллекцию для хранения друзей), но тогда вы столкнетесь с другой проблемой, которая в конечном итоге превыситемкость документа, содержащего все данные для каждого пользователя.

Суть в том, что базы данных NoSQL, такие как Firestore, обеспечивают лучшую масштабируемость и более быстрые запросы в больших масштабах за счет менее гибких запросов и большей работы. поддержание дублированных данных в актуальном состоянии. Если вы предпочитаете более гибкие запросы и более простые обновления, то Firestore может оказаться не лучшей базой данных для вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...