greenDAO与Realm的探索

来源:互联网 发布:琉璃神社新域名 2017 编辑:程序博客网 时间:2024/06/07 12:49

最近项目中要用到数据库相关的知识,就在网上查了下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,及时将数据更新反馈给用户

使用方法

我比较懒,贴一下别的博主的博客好了。

GreenDao3.0简单使用

这里需要说明的是,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 plugindependencies {    compile 'org.greenrobot:greendao:3.2.2' // add library}

这里的root应该是project级的,app project是module级的


我看很多文章里都没搞对。

Realm For Android详细教程

后面有时间的话自己再总结吧

速度对比

这里使用的版本是

greenDAO 3.2.2
Realm 3.1.1

速度在不同机型上不同的使用方法肯定会有偏差,这里仅作参考,但还是可以看出Realm在速度上的优势。

增 删 改 查 GreenDAO(1条) 10ms 17ms 12ms Realm(1条) 5ms 6ms 7ms GreenDAO(10条) 47ms 55ms 100ms Realm(10条) 6ms 11ms 8ms GreenDAO(100条) 402ms 377ms 398ms Realm(100条) 10ms 20ms 16ms GreenDAO(1000条) 3959ms 3326ms 3297ms Realm(1000条) 28ms 71ms 94ms

END

框架的选择应该结合项目的需求,对比功能,稳定性,拓展性,易用性等多个方面。我也只是个小白,提不了什么有价值的建议。

最后贴上自己的代码,我只进行了最简单的使用:
https://github.com/xiaoniu/Database
需要的可以参考一下,有问题可以评论一下,欢迎探讨。