最近项目中要用到数据库相关的知识,就在网上查了下Android平台上的数据库框架,目前比较热门有GreenDAO和Realm,这两个都是使用者都比较多,并且都在持续发布更新,就对这两个框架进行了一些探索。
两者的官网和github链接:
GreenDAO:
http://greenrobot.org/greendao/
https://github.com/greenrobot/greenDAO
Realm:
https://realm.io/cn/
https://github.com/realm/realm-java
简单介绍
GreenDAO
greenDao是一款Android平台上的开源框架,提供将对象映射到SQLite数据库中的轻量且快速的ORM解决方案。greenDAO对安卓进行了高度优化,提供了出色的性能和最小的内存消耗。它减轻开发人员处理低级数据库需求,同时节省开发时间,使SQLite数据库的开发变得有趣。
SQLite是一个令人敬畏的嵌入式关系数据库。不过,编写SQL和解析查询结果是相当乏味和耗时的任务。greenDAO通过将Java对象映射到数据库表(称为ORM ,对象关系映射)将您从其中解脱出来。通过简单的面向对象API,你就可以来存储,更新,删除和查询Java对象。
功能一览:
高性能(可能是Android最快的ORM):开源的基准
易用:功能强大的API涵盖关系和联接
最小的内存消耗
精简的库(<100KB):维持较少的编译时间,并避免65k方法数量的限制
数据库加密:greenDAO支持SQLCipher,以保护用户的数据安全
强大的社区:GitHub上超过5000个Star(现在已经超过8000了)表明有一个强大和积极的社区
Realm
Realm是一款可直接运行在手机,平板电脑或可穿戴设备上的移动数据库。Realm 移动端数据库快速、易用、开源且完全免费,深受开发者和亿万用户喜爱。Realm 是 SQLite 和 Core Data 的替代者,得益于其零拷贝的设计,Realm 比任何 ORM 都要快很多。Realm简单、快速,节约数周的开发时间。几分钟内就能学会使用 Realm。
功能一览:
离线优先:即使在离线状态下应用也可正常工作
查询快速:复杂查询也只需要几纳秒,查询结果与新数据实时同步
线程安全:多线程访问同一数据毫无问题
跨平台支持:多个平台不同应用使用同一数据库
加密:无需额外代码,就能保证你的数据安全
响应式架构:让Realm连接到UI,及时将数据更新反馈给用户
使用方法
我比较懒,贴一下别的博主的博客好了。
这里需要说明的是,greenDAO在github上说
// In your root build.gradle file:
buildscript {
repositories {
jcenter()
mavenCentral() // add repository
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.1'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
}
}
// In your app projects build.gradle file:
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin
dependencies {
compile 'org.greenrobot:greendao:3.2.2' // add library
}
这里的root应该是project级的,app project是module级的
我看很多文章里都没搞对。
后面有时间的话自己再总结吧
速度对比
这里使用的版本是
greenDAO 3.2.2
Realm 3.1.1
速度在不同机型上不同的使用方法肯定会有偏差,这里仅作参考,但还是可以看出Realm在速度上的优势。
||增|删|改|查|
|--|
|GreenDAO(1条)|10ms|17ms|12ms|1ms|
|Realm(1条)|5ms|6ms|7ms|1ms|
|GreenDAO(10条)|47ms|55ms|100ms|2ms|
|Realm(10条)|6ms|11ms|8ms|1ms|
|GreenDAO(100条)|402ms|377ms|398ms|3ms|
|Realm(100条)|10ms|20ms|16ms|1ms|
|GreenDAO(1000条)|3959ms|3326ms|3297ms|3ms|
|Realm(1000条)|28ms|71ms|94ms|1ms|
END
框架的选择应该结合项目的需求,对比功能,稳定性,拓展性,易用性等多个方面。我也只是个小白,提不了什么有价值的建议。
最后贴上自己的代码,我只进行了最简单的使用:
https://github.com/xiaoniu/Database
需要的可以参考一下,有问题可以评论一下,欢迎探讨。