Android 常用开源数据库简单比较

142 阅读3分钟

如果把 ​​数据库​​ 比作一个 ​​智能仓库​​,数据就是仓库里的货物,而数据库框架就是管理这些货物的 ​​仓库管理员​​。不同的管理员(数据库框架)有不同的管理策略,我们来看看几个常见的“管理员”是如何工作的:


1. ​​SQLite(Android 内置)​

​定位​​:最基础的仓库管理员,所有其他管理员都基于它工作。
​原理​​:

  • ​存储方式​​:数据以 ​​二维表格​​ 形式存在(类似 Excel 表格)。
  • ​操作指令​​:用 ​​SQL 语句​​ 指挥管理员,比如 SELECT * FROM table(查所有货物)。
  • ​性能优化​​:直接操作文件,轻量但需要手动优化(比如索引、事务)。
    ​缺点​​:需要手写大量 SQL 代码,容易出错。

2. ​​Room(Google 官方库)​

​定位​​:SQLite 的 ​​高级管家​​,帮开发者自动生成 SQL 代码。
​核心原理​​:

  • ​注解魔法​​:用 @Entity 定义表格,@Dao 定义操作接口,编译时自动生成 SQL 代码。

    kotlin
    Copy
    @Entity  
    data class User(val id: Int, val name: String) // 自动生成 user 表
    
    @Dao  
    interface UserDao {  
        @Query("SELECT * FROM user")  
        fun getAll(): List<User>  // 自动实现查询
    }  
    
  • ​事务管理​​:通过 @Transaction 注解保证多个操作原子性(要么全成功,要么全失败)。

  • ​性能优化​​:编译时检查 SQL 语法错误,避免运行时崩溃。
    ​优点​​:安全、高效,适合复杂业务场景。


3. ​​Realm​

​定位​​:直接操作对象的 ​​魔法仓库​​,抛弃 SQL。
​核心原理​​:

  • ​对象映射​​:数据以 ​​对象​​ 形式存储,直接读写对象属性(不用写 SQL)。

    kotlin
    Copy
    // 定义 Realm 对象  
    open class User : RealmObject {  
        var id: Int = 0  
        var name: String = ""  
    }  
    
    // 写入数据  
    realm.executeTransaction {  
        val user = it.createObject(User::class.java)  
        user.name = "张三"  
    }  
    
  • ​实时更新​​:数据修改后,其他线程或设备 ​​立刻感知​​(类似 LiveData)。

  • ​存储引擎​​:自己实现了一套存储引擎(非 SQLite),通过内存映射文件提升性能。
    ​优点​​:适合实时性要求高的场景(如聊天应用)。
    ​缺点​​:APK 体积增大,对象需要继承 RealmObject


4. ​​GreenDAO​

​定位​​:极速仓库管理员,追求极致性能。
​核心原理​​:

  • ​预编译代码​​:开发阶段生成 Java 代码(如 UserDao),绕过反射提升速度。
  • ​对象缓存​​:频繁访问的数据缓存在内存中,减少磁盘读写。
  • ​轻量化​​:相比 Room,GreenDAO 生成的代码更简洁,APK 体积更小。
    ​优点​​:适合性能敏感型应用(如高频数据读写)。
    ​缺点​​:需要学习自定义注解,灵活性较低。

5. ​​ObjectBox​

​定位​​:为移动端定制的 ​​超高速仓库​​。
​核心原理​​:

  • ​扁平化存储​​:数据以二进制形式存储,读写时无需转换格式。
  • ​无 SQL 解析​​:直接通过 ID 访问数据(类似 Key-Value 存储),比 SQLite 快 5~10 倍。
  • ​自动同步​​:内置数据同步功能(类似 Firebase)。
    ​优点​​:适合 IoT 设备或高频数据采集场景。
    ​缺点​​:复杂查询能力较弱。

对比总结

数据库核心原理优点缺点
​SQLite​直接操作文件+SQL轻量、通用需手写 SQL,易出错
​Room​注解生成 SQL安全、易维护学习成本略高
​Realm​对象映射+自有引擎实时性强增大 APK,对象需继承
​GreenDAO​预编译代码+缓存性能极致灵活性低
​ObjectBox​二进制存储+无 SQL速度最快,内置同步复杂查询弱

如何选择?

  • ​简单场景​​:直接用 Room(官方维护,安全省心)。
  • ​高频读写​​:GreenDAO 或 ObjectBox。
  • ​实时同步​​:Realm 或 ObjectBox。
  • ​极致轻量​​:手写 SQLite(不推荐,除非有特殊需求)。

​一句话记住​​:

  • ​Room​​ 是 SQLite 的“自动编程版”。
  • ​Realm​​ 是“直接操作对象的魔法箱”。
  • ​GreenDAO​​ 是“极速赛车手”。
  • ​ObjectBox​​ 是“为速度而生的二进制战士”。