Firebase: уменьшить количество операций чтения для большой коллекции. - PullRequest
1 голос
/ 05 марта 2020

После долгих поисков я обнаружил много «чего не делать», когда дело доходит до чтения коллекций Firebase (главным примером является инцидент с банкнотой в 30 тысяч долларов), однако я изо всех сил пытаюсь найти подходящее решение для нашей проблемы.

Наш сайт содержит каталог продукции. Каталог заполняется из коллекции Firestore под названием «products» со структурой JSON:

"products"{
   "productId"{
      "name":
      "price":
      "brand":
       ...
  }
}

Для загрузки коллекции я использую следующее:

this.products = this.db.collection('products').valueChanges({idField: 'productID'});

На пике мы ожидаем, что коллекция будет содержать до 2000 товаров. Я обеспокоен тем, что, поскольку веб-сайт масштабируется, это станет чрезвычайно дорогостоящим. Я заметил, что каждый раз при переходе на страницу каталога каталог загружается снова. Поэтому, если взять несколько немыслимый пример, если страница загружалась 5000 раз в день и загружала всю коллекцию, как это происходит в настоящее время, это приведет к 10 000 000 чтений документов (как минимум).

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

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

Ответы [ 2 ]

2 голосов
/ 05 марта 2020

Сколько продуктов увидит средний посетитель вашей домашней страницы? Скажем, что вы показываете 5-10 продуктов выше сгиба, поэтому перед тем, как их прокрутить. Если 50% посетителей сразу же покидают страницу (что является довольно оптимистичным значением c для этого так называемого отказов), вам нужно всего лишь загрузить 5000 посещений в день * 10 продуктов = 50 000 просмотров, чтобы удовлетворить половину ваших посетителей.

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

Загрузка всех 2000 продуктов, вероятно, расточительна для подавляющего большинства ваших посетителей, поэтому Даг рекомендует разбивать данные на страницы (или в настоящее время более распространено: загружать их в режиме бесконечной прокрутки) ).

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

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

Чтобы узнать все об этом и многих других соображениях при использовании Cloud Firestore, я бы порекомендовал отличное видео серия Знакомство с Cloud Firestore .

2 голосов
/ 05 марта 2020

Вы можете:

  1. Реализовать собственный локальный кеш, используя локальное хранилище браузера , и справиться с этим, как вам удобно.
  2. Включить офлайн постоянство и направить наши запросы в кэш, используя параметры источника .
  3. Используйте нумерацию страниц , чтобы избежать загрузки всего набора результатов сразу.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...