- Android主流数据库基础特点
- 核心数据库特性与性能对比维度
- 总结
在 Android 开发中,数据库选型直接影响应用的性能、开发效率和可维护性。不同数据库的存储限制,比如常用的SharedPreferences、SQLite、还有基于SQLite封装的greenDao等,这些似乎都不是在开发安卓应用时最优的存储介质的选择;所以今天我们就把常见的数据库选项列出来,分析它们的优缺点,性能特点,适用场景,然后给出选型建议,帮助小伙伴们在实际开发应用中做出适合自己项目的正确决策。
Android主流数据库基础特点
- SQLite:系统内置,无需依赖第三方库,支持复杂 SQL 查询和事务(ACID);需要手动管理 Cursor 和 SQL 语句,开发效率低,多线程情况下也需要手动处理;
- Room:基于 SQLite 的官方 ORM 库,在编译时进行SQL校验减少开发时不必要的错误;对LiveData、RxJava和Kotlin支持比较好;
- Realm:对象直接存储,无需 ORM 映射,读性能极高;需要继承RealmObject主要是对模型的侵入会有一点;
- MMKV/DataStore:key-value存储介质,体积较小且使用很简单,读写速度也达到微秒级;对复杂查询和表存储并不支持;
- ObjectBox:本地 NoSQL 数据库,读写性能远超 SQLite;零拷贝设计,低内存占用,支持自动数据同步(ObjectBox Sync);
核心数据库特性与性能对比维度
数据库 | 存储模型 | 读性能 | 写性能 | 并发能力 | 适用场景 | APK体积影响 |
---|---|---|---|---|---|---|
SQLite | 表结构 | 高 | 高 | 中(需优化) | 结构化数据,复杂查询 | 无(系统内置) |
Room | 表结构 | 高 | 高 | 高 | 结构化数据,MVVM架构 | 低 |
Realm | 对象模型 | 极高 | 高 | 高 | 高并发读,跨平台 | +4MB~6MB |
ObjectBox | 对象模型 | 极高 | 极高 | 高 | 高性能本地存储 | +1MB~2MB |
MMKV | 键值对 | 极高 | 极高 | 高 | 简单配置,高频读写 | +100KB |
DataStore | 键值对/Proto | 高 | 高 | 高 | 替代 SharedPreferences | 低(Jetpack) |
根据上面指标对比,读写性能排序指标
- 10k次读性能由快到慢依次是:ObjectBox ≈ Realm > MMKV > Room/SQLite > DataStore
- 10k次写性能由快到慢依次是:MMKV ≈ ObjectBox > Realm > Room/SQLite > DataStore
- 对于内存的占用情况(由大到小):Realm > SQLite > ObjectBox > Room > MMKV/DataStore
总结
对于本地应用一般需要根据以下项目性质来定:
- 默认选择:Room(官方维护、开发高效、生态完善)。
- 高性能需求:ObjectBox(本地 NoSQL 王者)或 Realm(跨平台)。
- 简单键值对:MMKV(性能极致)或 DataStore(协程集成)。
- 历史项目/底层控制:SQLite(灵活但需手动优化)。
个人一般会选择MMKV、Realm、ObjectBos,因为这三个库的读写相对都还不错。