Как правильно дублировать данные в Firebase? - PullRequest
1 голос
/ 27 мая 2020

Я недавно реорганизовал свой код, чтобы попытаться денормализовать свою базу данных Firebase. Я понимаю, что необходимо некоторое дублирование и избыточность, но мне трудно выбрать правильный уровень дублирования.

Например, в моем проекте у меня есть outfits и items, где outfit может содержать много тегов items.

В настоящее время у меня есть такая настройка:

outfits
  outfitId
    outfitName
    outfitDescription

items
  itemId
    itemName
    itemDescription
    itemBrand

itemsByOutfit
  outfitId
    itemId
      itemName
      itemDescription
      itemBrand
    itemId
      itemName
      itemDescription
      itemBrand

В пользовательском интерфейсе мне часто нужно получить список outfit объекты и отмеченные объекты. itemsByOutfit - удобный индекс в этом смысле, потому что я могу получить название, описание и бренд в одном go.

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

Было бы лучше оставить itemsByOutfit ограниченным только itemId стоимость? Примерно так:

itemsByOutfit
  itemId: true
  itemId: true

Это кажется более простым в обслуживании, но больше работы при загрузке. Предположительно, мне пришлось бы сделать второй запрос, используя все значения itemId, чтобы получить имя, бренд и т. Д. c.

У меня также есть другой индекс - itemsByBrand - который следует за аналогичным дублированием шаблон. Все данные дублируются и упорядочиваются по брендам - ​​например:

itemsByBrand
  Nike
    itemId
      itemName
      itemDescription
      itemBrand

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

1 Ответ

1 голос
/ 21 июля 2020

Я считаю, что вы храните данные об элементе (название, описание, бренд) только один раз ie. в узле товаров. Все остальные списки itemby'x 'являются списками itemId: bool, которые вы читаете, чтобы получить необходимые элементы, а затем просматриваете возвращенный список для получения данных элемента. Не должно быть больших накладных расходов на производительность, а объемы данных минимальны.

...