Ответ
Да, работал с Firebase Firestore и Realm. Firestore — документоориентированная NoSQL БД, где данные хранятся в коллекциях документов (JSON-подобные структуры). Realm — локальная NoSQL БД для мобильных устройств с поддержкой реактивных запросов.
Пример Firestore:
// Чтение данных
Firebase.firestore.collection("users")
.document("user123")
.get()
.addOnSuccessListener { document ->
val name = document.getString("name")
}
Пример Realm:
// Сохранение объекта
realm.executeTransaction { r ->
val user = r.createObject(User::class.java, "id123")
user.name = "Alex"
}
Преимущества: горизонтальная масштабируемость, гибкая схема данных, высокая производительность для определенных сценариев.
Ответ 18+ 🔞
А, ну ты про эти базы данных спрашиваешь? Да, сталкивался, конечно. Firestore и Realm — это как два разных зверя, хотя оба вроде как NoSQL. Но, ёпта, разница между ними — просто овердохуища.
Firestore — это такая штука от Гугла, облачная. Представь себе огромный шкаф с кучей ящиков-коллекций, а в каждом ящике лежат бумажки-документы. И на каждой бумажке — куча ключей и значений, как JSON. Всё просто, пока не начнёшь выстраивать связи между этими бумажками — вот тут уже можно мозг сломать, если архитектуру криво продумать. Зато масштабируется нахуй хорошо, это плюс.
А Realm — это уже локальная история, прямо в телефоне живёт. Штука мощная, реактивная — то есть подписался на данные, и они сами к тебе обновляются прилетают, не надо постоянно дергать базу. Удобно, но иногда такая хитрая жопа с миграциями схемы, что волосы дыбом встают.
Вот, смотри, как в Firestore данные тащить:
// Чтение данных
Firebase.firestore.collection("users")
.document("user123")
.get()
.addOnSuccessListener { document ->
val name = document.getString("name")
}
Всё вроде просто, ага. Только не забудь про слушатели ошибок, а то прилетит исключение — и приложение накрылось медным тазом. Доверия к сети, блядь, ноль.
А вот в Realm уже по-другому, более по-домашнему:
// Сохранение объекта
realm.executeTransaction { r ->
val user = r.createObject(User::class.java, "id123")
user.name = "Alex"
}
Тут уже внутри транзакции работаешь, всё аккуратненько. Главное — не забывать realm закрывать, а то память сожрёт, ядрёна вошь.
В общем, преимущества у обеих — гибкость, скорость на своих сценариях. Но выбирать надо по задаче: если нужно облако и синхронизация между пользователями — Firestore. Если локальный кэш, оффлайн-работа и реактивность в самом приложении — Realm. А можно и вместе использовать, но это уже высший пилотаж, тут без поллитры не разберёшься. Сам от такой архитектуры порой охуевал.