安卓开发常用数据库:SQLite(本地)、Room(SQLite封装)、Realm(对象存储)、Firebase Firestore(云数据库)。
安卓开发中常见的数据库类型
SQLiteAndroid 内置的轻量级关系型数据库,基于 SQL 语法,无需额外依赖。
- 特点:
- 本地存储,数据持久化。
- 支持事务、索引、主键等关系型数据库特性。
- 单线程访问(需手动处理多线程安全)。
- 适用场景:简单本地数据存储(如用户设置、缓存)。
- 优点:
- 系统原生支持,无需第三方库。
- 成熟稳定,兼容性好。
- 缺点:
- 操作繁琐(需手写 SQL 语句)。
- 缺乏对象映射,需手动处理数据转换。
RoomGoogle Jetpack 组件,基于 SQLite 的抽象层,提供对象关系映射(ORM)。
- 特点:
- 编译时生成代码,减少运行时错误。
- 支持 LiveData 和 Flow 实现数据观察。
- 自动处理 SQLite 的多线程问题。
- 适用场景:需要结构化本地存储且追求开发效率的场景。
- 优点:
- 简化 SQLite 操作,降低学习成本。
- 与 Android Architecture Components 无缝集成。
- 缺点:
- 依赖 Gradle 编译配置,项目体积稍增。
- 复杂查询仍需手写 SQL。
Realm高性能移动端数据库,支持对象存储和实时更新。
- 特点:
- 零拷贝技术,提升读写性能。
- 支持跨平台(iOS/Android)。
- 数据变更可监听(类似 LiveData)。
- 适用场景:复杂对象存储、高频读写操作(如 IM 应用)。
- 优点:
- 性能优于 SQLite/Room。
- 支持嵌套对象和列表字段。
- 缺点:
- 学习曲线较高(需理解 Realm 特定概念)。
- 部分功能需付费授权(如加密)。
Firebase FirestoreGoogle 提供的云数据库,支持离线同步和实时数据更新。
- 特点:
- 无服务器架构,数据存储在云端。
- 支持离线缓存和同步。
- 数据以文档形式存储(NoSQL)。
- 适用场景:需要云端数据同步的应用(如社交、协作工具)。
- 优点:
- 实时监听数据变化(类似 WebSocket)。
- 全球分布式存储,高可用性。
- 缺点:
- 需网络请求,本地存储依赖缓存。
- 计费模式可能增加成本(按读写量收费)。
数据库对比表格
特性 |
SQLite |
Room |
Realm |
Firestore |
类型 |
关系型 |
关系型(ORM) |
对象数据库 |
NoSQL(文档型) |
本地/远程 |
本地 |
本地 |
本地/跨平台 |
云端 |
ORM 支持 |
无 |
编译时生成 |
自动映射 |
无 |
实时性 |
无 |
需手动实现 |
数据变更监听 |
实时同步 |
性能 |
中等 |
接近 SQLite |
高(零拷贝) |
依赖网络 |
学习成本 |
低 |
低(SQLite 基础) |
中 |
低(Firebase SDK) |
适用规模 |
小型数据 |
中小型应用 |
中大型应用 |
中大型应用 |
相关问题与解答
问题 1:如何选择 Room 和 Realm?

解答:

- 选 Room:若项目以 SQLite 为基础,需与 Android Architecture Components 深度集成,或追求开发效率(编译时检查)。
- 选 Realm:若需要高性能对象存储(如频繁读写)、跨平台支持,或数据结构复杂(嵌套对象)。
注意:Realm 的学习成本更高,且部分功能需付费;Room 更轻量且与 Android 生态融合更好。
问题 2:Firebase Firestore 是否适合纯本地存储?
解答:
- 不适合,Firestore 设计为云数据库,依赖网络请求,本地操作需通过缓存实现。
- 纯本地存储建议:使用 SQLite/Room(关系型)或 Realm(对象数据库),它们专为本地持久化优化,且支持离线访问