Если ваш проект использует бесплатный тарифный план Spark , то с вас не взимается плата за использование Realtime Database . Вы получаете бесплатное использование, включающее 1 ГБ хранилища данных и 10 ГБ данных для загрузки в месяц.
Если вы перейдете на тарифный план Blaze с оплатой по факту использования , вы сохраните бесплатный доступ (1 ГБ хранилища данных и 10 ГБ данных в месяц для загрузки), а за использование сверх этого объема будет взиматься плата. Если ваш проект работает по тарифному плану Blaze, мы рекомендуем настроить оповещения о расходах .
Остальная часть этой страницы содержит более подробное описание процесса выставления счетов.
Как Realtime Database рассчитывает стоимость услуг
Firebase bills for the data you store in your database and all outbound network traffic at the session layer (layer 5) of the OSI model. Storage is billed at $5 for each GB/month, evaluated daily. Billing is not affected by the location of your database. Outbound traffic includes connection and encryption overhead from all database operations and data downloaded through database reads. Both database reads and writes can lead to connection costs on your bill. All traffic to and from your database, including operations denied by security rules, leads to billable costs.
К распространённым примерам платного трафика относятся:
- Загруженные данные: Когда клиенты получают данные из вашей базы данных, Firebase взимает плату за загруженные данные. Как правило, это составляет основную часть ваших расходов на пропускную способность, но это не единственный фактор, влияющий на ваш счет.
- Protocol overhead: Some additional traffic between the server and clients is necessary to establish and maintain a session. Depending on the underlying protocol, this traffic might include: Firebase Realtime Database's realtime protocol overhead, WebSocket overhead, and HTTP header overhead. Each time a connection is established, this overhead, combined with any SSL encryption overhead, contributes to the connection costs. Although this isn't a lot of bandwidth for a single request, it can be a substantial part of your bill if your payloads are tiny or you make frequent, short connections.
- SSL encryption overhead: There is a cost associated with the SSL encryption overhead necessary for secure connections. On average, this cost is approximately 3.5KB for the initial handshake, and approximately tens of bytes for TLS record headers on each outgoing message. For most apps, this is a small percentage of your bill. However, this can become a large percentage if your specific case requires a lot of SSL handshakes. For example, devices that don't support TLS session tickets might require large numbers of SSL connection handshakes.
- Данные консоли Firebase : Хотя обычно это не составляет значительную часть затрат на Realtime Database , Firebase взимает плату за данные, которые вы читаете и записываете из консоли Firebase .
Оцените объем потребляемых вами ресурсов, указанный в счете.
Чтобы просмотреть текущие подключения Realtime Database и объем использованных данных, перейдите на вкладку « Использование» в консоли Firebase . Вы можете проверить использование за текущий расчетный период, за последние 30 дней или за последние 24 часа.
Firebase отображает статистику использования по следующим показателям:
- Подключения: Количество одновременных, открытых в данный момент, подключений к вашей базе данных в режиме реального времени. Сюда входят следующие типы подключений в режиме реального времени: WebSocket, длительное опросное соединение и HTML-события, отправляемые сервером. В это число не входят RESTful-запросы.
- Хранилище: Объем данных, хранящихся в вашей базе данных. Сюда не входят данные, хранящиеся на хостинге Firebase или данные, хранящиеся с помощью других продуктов Firebase.
- Загрузки: Все байты, загруженные из вашей базы данных, включая протокольные и шифровальные накладные расходы.
- Нагрузка: Этот график показывает, какая часть вашей базы данных используется для обработки запросов за заданный 1-минутный интервал. При приближении загрузки базы данных к 100% могут возникнуть проблемы с производительностью.
Optimize usage
Существует несколько передовых методов, которые вы можете использовать для оптимизации использования базы данных и снижения затрат на пропускную способность.
- Используйте нативные SDK: по возможности используйте SDK, соответствующие платформе вашего приложения, вместо REST API. SDK поддерживают открытые соединения, снижая затраты на SSL-шифрование, которые обычно возникают при использовании REST API.
- Check for bugs: If your bandwidth costs are unexpectedly high, verify that your app isn't syncing more data or syncing more often than you originally intended. To pinpoint issues, use the profiler tool to measure your read operations and turn on debug logging in the Android , Objective-C , and Web SDKs. Check background and sync processes in your app to make sure everything is working as you intended.
- Сократите количество подключений: по возможности постарайтесь оптимизировать пропускную способность вашего соединения. Частые, небольшие REST-запросы могут обходиться дороже, чем одно непрерывное соединение при использовании нативного SDK. Если вы используете REST API, рассмотрите возможность использования HTTP keep-alive или событий, отправляемых сервером , что может снизить затраты на SSL-рукопожатия.
- Используйте TLS-билеты сеанса: сократите накладные расходы на шифрование SSL при возобновлении соединений, выдавая TLS-билеты сеанса . Это особенно полезно, если вам требуются частые и безопасные соединения с базой данных.
- Индексирование запросов: Индексирование данных снижает общий объем трафика, используемого для запросов, что дает двойную выгоду: снижает затраты и повышает производительность базы данных. Используйте инструмент профилирования, чтобы найти неиндексированные запросы в вашей базе данных.
- Оптимизируйте ваши обработчики событий: добавьте запросы для ограничения объема данных, возвращаемых операциями прослушивания, и используйте обработчики, которые загружают только обновления данных — например,
on()вместоonce(). Кроме того, размещайте обработчики как можно дальше по пути, чтобы ограничить объем синхронизируемых данных. - Сократите расходы на хранение: периодически запускайте задачи очистки и уменьшайте количество дублирующихся данных в вашей базе данных.
- Используйте правила: Предотвратите любые потенциально дорогостоящие несанкционированные операции с вашей базой данных. Например, использование Firebase Realtime Database Security Rules может предотвратить ситуацию, когда злоумышленник многократно загружает всю вашу базу данных. Узнайте больше об использовании правил Firebase Realtime Database Rules .
Наилучший план оптимизации для вашего приложения зависит от конкретного сценария использования. Хотя это не исчерпывающий список лучших практик, вы можете найти больше советов и рекомендаций от экспертов Firebase на нашем канале Slack или на Stack Overflow .