Ценообразование базы данных Firebase в реальном времени с помощью Query - PullRequest
1 голос
/ 15 марта 2020

У меня вопрос по поводу цены базы данных firebase. У меня есть около 400 000 строк в таблице лидеров моей базы данных, но в моем приложении я просто хочу загрузить последние 500 строк, поэтому мой вопрос будет ли я платить за 500 строк, загруженных при выполнении запроса, или я получу плату за все 400 000 строк.

Плата за базу данных в реальном времени составляет 5 $ за хранимый ГБ и 1 $ за загруженный ГБ. Я провел расчеты с Firestore и обнаружил, что база данных реального времени будет намного дешевле, если я получу плату за 500 строк, а не за 400 000 строк.

Я искал всю документацию и не нашел ничего о запросах: https://firebase.google.com/pricing https://firebase.google.com/docs/database/usage/billing

Может кто-нибудь сказать мне, если я получу плату только для 500 строк в моей коллекции или для всех данных в коллекции, и если есть способ взимать плату только за 500 строк, может быть с правилами безопасности?

Вот мой код запроса:

let queryRef = ref.child("Leaderboard").queryOrdered(byChild: "totalStars").queryLimited(toLast: 500)

Как выглядит база данных. (Он будет иметь примерно 500 000 дочерних элементов, таких же, как эти, и загружаться по 200 000 в день. Но я просто хочу, чтобы цена была на 500 лучших, которые я загружаю, а не на все 500 000 каждый раз, когда пользователь загружает таблицу лидеров, возможно ли это?)

enter image description here

Ответы [ 2 ]

3 голосов
/ 15 марта 2020

С вас будет взиматься плата только за количество Firestore Документы, соответствующие результату вашего запроса (не за количество документов в коллекции).

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


С другой стороны, обратите внимание, что запросы к базе данных реального времени не мелкие (в то время как запросы Firestore ) и поэтому, если вы запросите узел JSON, вы получите все дерево под этим узлом .

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

ответ Рено правильный , но позвольте мне добавить некоторую дополнительную информацию и повторить, что:

С помощью базы данных Firebase Real Time для загрузок вы платите за то, что загружено а не сколько узлов вы запрашиваете.

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

Вы всегда можете получить ключ узла с помощью snapshot.key и удалить этот дочерний узел. Так что это выглядело бы как

uid
   fullName: "Logan Paul"
   stars: 40

Кроме того, я думаю, что ваши расчеты немного не соответствуют Похоже, что каждый узел будет иметь около 100 байт данных, а строки Firebase кодируются в UTF-8, поэтому, если вы загружаете 500 узлов на пользователя в день и у вас есть 200 000 пользователей, то есть около 38 ГБ в день (в двоичном виде).

Примерно 400 байтов * 500 узлов * 200 000 пользователей * 0,000000000931322574615479 байт на Гб = 38 Гб

и около 38 долларов в день, если я правильно выполнил свою математику.

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