Как сохранить дубликаты данных в firestore?

Я использую firebase RTDB, и я собираюсь перенести его в firestore.

У меня были userIds, связанные со многими другими узлами.

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

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

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

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

Всего 2 ответа


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

Что-то на линии -

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

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


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

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

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

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

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

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


Есть идеи?

10000