Как Firebase взимает плату за запрос агрегации count()

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

.where("country", isEqualTo: "United States")
.where("age", isGreaterThan: "100")

где первое предложениеwhere находит 100 000 совпадений, а второе предложениеwhere уменьшает количество совпадений до 900, возвращаемое значение равно 900. По словам Фрэнка, с вас взимается плата за одно чтение (900 разделить на 1000 плюс одно). Однако, поскольку было прочитано 100 000 индексов, мне интересно, взимается ли с вас плата за 100 000, разделенная на 1000 чтений, то есть с вас взимается плата за 100 чтений.

Кроме того, документация Firebase здесь https://cloud.google.com/firestore/pricing#index-reads говорит это

За запросы, содержащие до одного поля диапазона, плата за индекс не взимается. записи прочитаны.

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

  1. Фрэнк прав: с вас взимается плата за одно чтение.
  2. Плата взимается за 100 прочтений
  3. С вас вообще ничего не взимается

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

Frank van Puffelen 08.06.2024 06:35

Спасибо за ответ. Несмотря на то, что я несколько раз прочитал эту страницу (cloud.google.com/firestore/docs/query-data/queries), я совершенно не знал, что такое составной индекс и что его нужно создавать вручную. Мой вариант использования заключается в том, что у меня есть потенциально большая коллекция «пользовательских документов», содержащая поля фамилии, имени, полного имени и имени пользователя, и я надеялся позволить кому-то искать пользователя, введя частично или все его фамилию и часть. или все их имена, однако теперь я понимаю, что это не сработает.

Alpha 08.06.2024 09:29

Кроме того, на этой странице (cloud.google.com/firestore/pricing#index-reads) приведен пример db.collection("employees").whereEqualTo("age", 35).whereGreaterThanOrEqualTo("start_date", new Date(2020, 1, 1)) и говорит, что в этом примере с вас не взимается плата за чтение записей индекса, а далее ниже говорится, что это относится и к запросам агрегации.

Alpha 08.06.2024 09:37

Я думаю/предлагаю, чтобы эта страница объяснила, что такое составные запросы cloud.google.com/firestore/docs/query-data/…, а также объяснила, что количество чтений индекса для запроса подсчета равно возвращаемому количеству значение как для запросов с одним полем, так и для составных запросов.

Alpha 08.06.2024 09:57

Документация на этой странице cloud.google.com/firestore/docs/query-data/queries подразумевает, что мне не нужен составной индекс для выполнения комбинации «== AND array-contains», что, я думаю, будет позвольте мне выполнить запрос по имени и фамилии, используя array-contains для фамилии и несколько явных полей префикса для имени, например если пользователь ввел 5 символов для части имени .where("FN-prefix5", isEqualTo: "abcde") .where("surname-prefixes", arrayContains: surname-prefix)

Alpha 08.06.2024 13:25

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

Frank van Puffelen 08.06.2024 14:27
Интеграция Angular - Firebase Analytics
Интеграция Angular - Firebase Analytics
Узнайте, как настроить Firebase Analytics и отслеживать поведение пользователей в вашем приложении Angular.
0
6
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Если запрос подсчета с вашим условием возвращает значение 900, он сканирует 900 элементов индекса на предмет этого количества, и за это с вас взимается плата за чтение 1 документа.

Итак, для запроса AND с одним полем, такого как этот .where("surname", isGreaterThan: "will") .where("surname", isLessThan: "wilk"), если возвращаемое значение счетчика равно 900, означает ли это, что было отсканировано 900 индексировать элементы, и с вас будет взиматься плата за одно прочтение документа?

Alpha 08.06.2024 10:32

Другие вопросы по теме