Как вы храните дубликаты данных в FireStore? - PullRequest
0 голосов
/ 22 октября 2018

Я использовал RTDB для Firebase и собираюсь перенести его в Firestore.

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

Например, у меня есть users, messages, purchases.

Чтобы связать пользователя с другими коллекциями, у меня было users_messages/$date/$userId/$messageId, purchases/$date/$userId/$purchaseId, поскольку RTDB не поддерживал сложные запросы, и я хотел иметь возможность запрашивать сообщения между диапазонами дат дляконкретный пользователь.

Теперь я понял, что FireStore намного лучше, чем RTDB с точки зрения запросов данных, и собирается иметь коллекцию messages, purchases с date и user.

В этом случае я должен хранить userId или весь user документ в коллекции messages и purchases?

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

В самом общем смысле лучший способ хранения дублированных данных в базе данных NoSQL полностью зависит от требований вашего проекта.Не существует единого правильного решения для всех.

Вам нужно задать несколько вопросов о данных, которые вы хотите дублировать:

  1. Это статично или со временем изменится?
  2. Если это изменится, нужно ли обновлять каждый дублированный экземпляр данных, чтобы они все оставались синхронизированными?
  3. Оптимизируете ли вы производительность или затраты?

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

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

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

0 голосов
/ 22 октября 2018

Вы можете просто вставить userId и определить новую коллекцию users, которая содержит описание каждого userId как документа и связанных с ним данных.

Что-то в строках -

  1. сообщения -> дата -> идентификатор пользователя -> идентификатор сообщения
  2. покупки -> дата -> идентификатор пользователя -> идентификатор покупки
  3. пользователи -> идентификатор пользователя -> подробности

PS: Просто совет, документ также может относиться к коллекции.Например, коллекция -> документ -> коллекция -> документ .. и т. Д.

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