安卓应用开发中,数据库用于存储和管理本地或远程数据,根据需求不同,可选择多种数据库方案,包括:
特性 | SQLite | Room | Realm | Firebase |
---|---|---|---|---|
类型 | 嵌入式关系型数据库 | SQLite 封装框架 | 对象数据库 | 云数据库(NoSQL/SQL) |
操作复杂度 | 高(需手写SQL) | 中(注解+API) | 低(对象化操作) | 低(SDK封装) |
性能 | 中等 | 接近SQLite | 高(内存优化) | 依赖网络 |
实时同步 | 不支持 | 不支持 | 不支持 | 支持(Firestore) |
跨平台支持 | 仅Android | 仅Android | 多平台(iOS/Android) | 多平台 |
最佳场景 | 简单本地存储 | 复杂本地存储+LiveData | 高频读写+多平台 | 实时数据同步+无服务器 |
离线优先应用
WorkManager
实现数据同步。复杂查询需求
高性能IO密集型
跨平台+实时同步
需求 | Room方案 | Firestore方案 |
---|---|---|
数据模型 | @Entity 定义Task表(ID、标题、状态) |
Firestore文档(map结构) |
本地查询 | @Query("SELECT FROM Task WHERE status=:status") |
客户端离线缓存+查询(whereEqualTo ) |
同步机制 | 需手动实现网络同步逻辑 | 自动监听云端数据变更 |
优势 | 完全离线可用、类型安全 | 实时同步、无需服务器搭建 |
@Database
注解中递增version
。Migration
接口处理数据迁移。 static final Migration MIGRATION_1_2 = new Migration(1, 2) { @Override public void migrate(SupportSQLiteDatabase database) { database.execSQL("ALTER TABLE Task ADD COLUMN priority INTEGER"); } };
enableIndexedFilters(false)
优化查询性能。DocumentReference.set(source, SetOptions.merge())
合并冲突数据。解答:
@Index
。PagingSource
配合ContrivedPagingSource
。LiveData
或Flow
监听数据变化,减少重复查询。解答:
service cloud.firestore { match /collectionName/{document=} { allow read: if request.auth != null; allow write: if request.auth.uid == request.resource.data.ownerId; } }
FirebaseAuth
完成用户登录,确保规则生效