在 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

总结

对于本地应用一般需要根据以下项目性质来定:

  1. 默认选择:Room(官方维护、开发高效、生态完善)。
  2. 高性能需求:ObjectBox(本地 NoSQL 王者)或 Realm(跨平台)。
  3. 简单键值对:MMKV(性能极致)或 DataStore(协程集成)。
  4. 历史项目/底层控制:SQLite(灵活但需手动优化)。

个人一般会选择MMKV、Realm、ObjectBos,因为这三个库的读写相对都还不错。

Logo

一站式 AI 云服务平台

更多推荐