Какие базы данных используются в Android кроме Room
Что проверяют
Знаете ли вы, что лежит под Room, и можете ли выбрать хранилище под задачу, а не по популярности. Следом обычно спрашивают, почему бы не взять Realm, или что делать с синхронизацией и шифрованием.
Как отвечать
Начните с того, что Room это не отдельная база, а слой над SQLite с проверкой запросов на этапе компиляции, поддержкой Flow и миграциями. Дальше варианты:
- SQLite напрямую:
SQLiteOpenHelperиз фреймворка. Сегодня так пишут редко, но это основа всего остального; - SQLDelight: генерирует типобезопасный Kotlin из обычных
.sql-файлов, работает в Kotlin Multiplatform. Выбирают, когда хочется писать SQL руками и делить слой данных с iOS. Room тоже умеет KMP начиная с версии 2.7; - ObjectBox: объектная NoSQL-база без SQL, быстрая на запись и чтение объектов, умеет синхронизацию и векторный поиск;
- Realm: объектная база с «живыми» объектами. Важная оговорка: в 2024 году её Device SDK объявлен устаревшим, облачная синхронизация закрыта, брать её в новый проект рискованно;
- Couchbase Lite: документная база с синхронизацией, для приложений, которые должны работать офлайн;
- Firestore и Realtime Database: облачные базы с локальным кешем. Это не замена локальной базе, а синхронизация с сервером;
- DataStore: не база, а хранилище ключ-значение и замена
SharedPreferences, для настроек, а не для списков.
Если данные чувствительные, упомяните SQLCipher: шифрование файла SQLite, которое подключается и к Room через свою фабрику.
Сильный ответ заканчивается критерием выбора: реляционные данные и сложные запросы ведут к Room или SQLDelight, объектная модель без SQL к ObjectBox, общий код с iOS к SQLDelight или Room KMP.
Где спотыкаются
Противопоставляют Room и SQLite, будто это разные базы. Room работает поверх SQLite, и знание самого SQLite (индексы, транзакции, WAL) нужно и с ним.
Советуют Realm как лучший выбор и не знают о его нынешнем статусе.
Складывают списки объектов в SharedPreferences или DataStore в виде JSON. Это медленно, без запросов и без миграций, для таких данных нужна база.