Структура документа Firestore - PullRequest
0 голосов
/ 08 января 2020

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

При следующей структуре размер документа будет около 90 000 байтов. Это нормально или я должен структурировать свой документ по-другому?

Если у вас есть предложения, пожалуйста, дайте мне знать:)

{
  name: "Acme",
  date_added: "November 5, 2020 at 3:12:16 PM UTC+1",
  id: "f9hh9tvkEd9dgjf3r",
  bg_color: "333333",
  sections: [ // Max 8 sections like the one below
    {
      section_type: "color",
      label: "user defined label",
      description: "some description",
      grid: 4,
      items: [
        {
          cmyk: { c: "0", m: "39", y: "100", k: "20" },
          hex: "C20D19",
          rgb: { r: "194", g: "13", b: "25" },
          name: "Rouge",
          date_added: "November 5, 2018 at 3:12:16 PM UTC+1"
        }
        // ... ~20 of these items
      ]
  ],
  users: [
    {
      name: "John Appleseed",
      email: "john@appleseed.com",
      id: "Kf3ghxS52fZ9G6Y1b8BD5pv6Cfn5",
      role: "member",
      date_added: "November 10, 2020 at 09:33:27 PM UTC+1"
    },
    // Let's say there's 300 users
  ]
}

Ответы [ 2 ]

1 голос
/ 08 января 2020

При следующей структуре размер документа будет около 90 000 байт. Это нормально?

Пока вы остаетесь в пределах максимального размера , допустимого для документа размером 1 МБ (1 048 576 байт) , вы можете go вперед с ваша схема. Не имеет значения, если ваш документ имеет размер 90 000 байт (0,09 МБ) или максимум 1 МБ, ваше приложение будет работать и отлично масштабироваться.

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

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

или я должен структурировать свой документ по-другому?

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

1 голос
/ 08 января 2020

Максимальный размер документа в Firestore составляет 1 МБ. При этом вы в безопасности, но ...

  • Если этот документ часто меняется, каждый пользователь будет загружать весь документ при каждом изменении, которое может увеличить выход вашей сети и оказать некоторое влияние на вашего пользователя. мобильные тарифные планы. Тем не менее, исходя из моего опыта, гораздо проще достичь предела чтения, чем данных.
  • Если вам нужно, чтобы пользователи могли изменять этот документ, вы не можете управлять им с помощью правил безопасности Firestore, но вам придется использовать функции, которые также есть ограничение на количество прогонов.
  • Я вижу потенциальную проблему конфиденциальности. В вашей текущей настройке все пользователи будут иметь доступ к личным данным других пользователей (имя, фамилия, адрес электронной почты и т. Д. c). Возможно, стоит поместить пользователей в два отдельных документа. Один опубликованный c документ, который доступен всем, в то время как у вас будет один личный документ, если данные доступны и доступны для редактирования только вам. Если пользователям необходимо отредактировать свои собственные данные, то вам необходимо иметь для каждого пользователя личный и общедоступный документ c и один общедоступный индекс c, который будет содержать данные, которые должны видеть все. Вам нужно будет обновить этот опубликованный индекс c с помощью функций.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...