Ответ
Firebase — это платформа для разработки мобильных и веб-приложений (BaaS), которая включает множество сервисов: аутентификацию, хостинг, облачные функции и две основные облачные базы данных.
Cloud Firestore и Firebase Realtime Database (RTDB) — это две разные NoSQL облачные БД в экосистеме Firebase.
Сравнительная таблица:
| Характеристика | Cloud Firestore | Firebase Realtime Database (RTDB) |
|---|---|---|
| Модель данных | Документы в коллекциях (более структурированная) | Единое JSON-дерево |
| Запросы | Сложные составные запросы с сортировкой и фильтрацией по нескольким полям. Индексирование автоматическое. | Базовые запросы. Сортировка/фильтрация обычно по одному ключу. |
| Масштабирование | Автоматическое горизонтальное. Нет необходимости в шардинге. | Требует ручного шардинга при очень высоких нагрузках. |
| Оффлайн-работа | Поддержка из коробки с персистентным кэшем. | Требует явного включения персистентности (.persistenceEnabled). |
| Стоимость | Оплата за операции (чтение, запись, удаление) и объем хранимых данных. | Оплата за объем переданного трафика и одновременных подключений. |
| Надежность | Многорегиональная репликация, гарантии консистентности. | Базовая репликация внутри региона. |
Пример кода для Firestore:
import FirebaseFirestore
let db = Firestore.firestore()
// Добавление документа
let userRef = db.collection("users").document("user123")
try await userRef.setData([
"name": "Anna",
"age": 30,
"city": "Berlin"
])
// Сложный запрос: пользователи из Берлина старше 25
let querySnapshot = try await db.collection("users")
.whereField("city", isEqualTo: "Berlin")
.whereField("age", isGreaterThan: 25)
.order(by: "age")
.getDocuments()
Пример кода для Realtime Database:
import FirebaseDatabase
let ref = Database.database().reference()
// Запись данных в дерево
ref.child("users/user123").setValue([
"name": "Anna",
"age": 30,
"city": "Berlin"
])
// Чтение данных и подписка на изменения
ref.child("users/user123/name").observe(.value) { snapshot in
if let name = snapshot.value as? String {
print(name) // "Anna"
}
}
Рекомендация по выбору:
- Выберите Firestore для новых проектов. Он предлагает более мощные запросы, удобную структуру данных и лучшее масштабирование.
- Рассмотрите Realtime Database если нужна минимальная задержка (чаты, игры в реальном времени) или проект уже использует RTDB.