Firestore моделирование данных для меньшего количества запросов - PullRequest
0 голосов
/ 24 декабря 2018

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

Контекст:

У меня есть *Коллекция 1005 *.

{
  exercises: {
     abc123: {
       name: "Squat",
       vidUrl: 'https://example.com'
     },
     bcd234: {
       name: "Push Up",
       vidUrl: 'https://example.com'
     }
  }
}

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

{
  workouts: {
    uniqueId: {
      name: 'Strength',
      circuits: [{
        steps: [
          {
            duration: 45,
            exerciseId: 'abc123'
          },
          {
            duration: 30,
            exerciseId: 'bcd234'
          }
        ]
      }]
    }
  }
}

Это лучший способ сделать это?Или я должен сначала сопоставить данные упражнения с шагами?

Кроме того, приводит ли это моделирование данных к трудностям при обновлении circuits.steps, потому что это вложенный массив?

1 Ответ

0 голосов
/ 27 декабря 2018

Я понимаю, что текущий способ приведет к большому количеству запросов к серверу.

Запросы в Firestore мелкие, что означает, что они получают только элементы из коллекции, к которой относится запрос.бежать против.Нет возможности получить документы из двух коллекций верхнего уровня за один запрос.Так что в вашем случае вам нужно запросить базу данных дважды, один раз, чтобы получить каждый exerciseId из массива steps, а второй, на основе этого идентификатора, вам нужно получить каждое конкретное упражнение.

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

Согласно вашему комментарию:

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

Чтобы уменьшить количество операций чтения, которые вы можете разместить под массивом steps всего объекта exercise.Это означает, что вам нужно запрашивать базу данных только один раз, потому что все, что вам нужно, уже есть.Эта практика называется denormalization и является обычной практикой, когда дело доходит до Firebase.Если вы новичок в базах данных NoQSL, я рекомендую вам посмотреть это видео, Денормализация нормальна с базой данных Firebase для лучшего понимания.Это для базы данных реального времени Firebase, но те же правила применяются к Cloud Firestore.

Кроме того, когда вы дублируете данные, есть одна вещь, которую нужно иметь в виду.Точно так же, как вы добавляете данные, вы должны поддерживать их.Другими словами, если вы хотите обновить / обнаружить упражнение, вы должны выполнять его в каждом месте, где оно существует.

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