Оптимальная реляционная модель данных в Firestore - PullRequest
0 голосов
/ 30 апреля 2018

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

В данный момент я использую карту элемента todo, которая указывает, кто из пользователей выполнил задание. Моя модель данных на данный момент выглядит так:

- todos (collection)
  - todoA (document)
    - title, description etc
    - completedBy {
       uid1: true,
       uid2: true,
       uid3: false
      }

Это позволяет мне легко устанавливать задачи как завершенные / не завершенные для каждого пользователя, и я могу легко фильтровать / запрашивать. У него есть два недостатка:

  1. Один документ Firestore может «только» иметь 20 000 свойств. Если мое приложение станет большим, это будет проблемой.
  2. Размер документа

Я думал о том, чтобы, возможно, создать аналогичную карту в моем пользовательском документе, установив идентификаторы todo как true / false. Это избавило бы от двух недостатков, описанных выше, но мне нужно было бы два запроса к базе данных всякий раз, когда я получаю свои задачи, один для задачи и один, чтобы проверить, завершено ли это.

Есть ли лучший способ достичь желаемой функциональности в Firestore?

1 Ответ

0 голосов
/ 30 апреля 2018

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

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

Нет единой лучшей модели данных в базах данных NoSQL. Все зависит от ваших сценариев использования, компромиссов и некоторых личных предпочтений. Для хорошего ознакомления прочитайте Моделирование данных NoSQL и посмотрите Познакомьтесь с Cloud Firestore .

...