2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

Android 上替代 SQLite 的选择:Realm

  • 2014-10-29
  • 本文字数:1219 字

    阅读完需:约 4 分钟

Realm 是一个开源的面向对象移动数据库。上个月,Realm 的 Android 版本发布了,比 iOS 版本晚了三个月。

我们之前已经报道过,Realm 没有使用 SQLite 作为它的引擎,而是用 C++ 写了自己的引擎,他们的目标是提供一个聚焦移动领域的 SQLite 的替代者。现在它的 Android 版本已经发布了。

当前 Android 上的 Realm 的 API 和 iOS 版本有点不同,这也反映了 Objective C 和 Java 的差别。Java 版本的 API 有更高的强类型(strong-typed)要求,也更连贯(fluent)。

比如,在 iOS 上,查询是通过静态方法如"objectWhere"来进行的,这将返回一个 RLMArray。这里的谓词都是基于字符串的。以下就是基于 Object C 的查询方法:

RLMArray *tanDogs = [Dog objectsWhere:@"color = 'tan' AND name BEGINSWITH 'B'"];另一方面,在 Android 下进行相同的查询却是这样的:

复制代码
RealmResults<Dog> tanDogs = realm.where(Dog.class)
.equalTo("color", "tan")
.beginsWith("name", "B")
.findAll();

当然,这有可能会被一种跨 iOS、Android 和其他平台的文本查询语言所替代。 Tim Anglade 是 Realm 的产品主管,他在一封邮件中指出,未来 API 的发展方向很大程度取决于社区的反馈。

虽然 Realm 是一个面向对象的数据库,但它和其他同类产品还是有一些明显的不同。Tim 解释道,当它用原生对象格式(native object format)来存储数据时,这些对象不会带着其语言特有的格式原封不动地存在磁盘上,而是通过 C++ 引擎存储在一个全局的表中。这使得 Realm 可以通过各种语言来访问数据,还包括各种即时查询(adhoc query)。

相比关系数据库,这种混合了对象和表的方式的优势在于它使图查询(graph query)更高效——甚至在相对老旧的智能手机上,查询深度嵌套的对象图也不会影响系统反应速度。Realm 发布的基准测试(benchmark)结果称,在普通操作上,Realm 的速度最快要达到原始的SQLite 的10 倍。

如果你现在有一个应用程序使用CoreData(iOS 上)或SQLite(Android 上),并且想迁移到Realm,肯定有一些事要做。这不是随便拿来就能用的——Tim 解释说,CoreData 和SQLite 倾向于使用一种非常标准化的形式,这种做法在Realm 上行不通。你最好从对象的角度重新思考你的模式(schema)和模型(model)。

一旦你修改了你的模式,使之适用于Realm,接下来把现有数据从CoreData/SQLite 迁移过来就简单了。只要配置一次迁移操作(从Realm 数据库版本0 到版本1),在迁移过程中,把你的SQLite 数据加载到Realm 对象中并保存它们。

或者,如果你的数据保存在远程服务器上,你可以从头新建Realm 数据库。

在采用Realm 之前,必须要考虑到它是一个最前沿的软件,这意味着将来它的API 有可能做出和以前不兼容的修改。

你可以通过 Android 版本的 Realm 来了解更多,或者查看 Github 上的代码

参考英文原文: Realm Brings SQLite Alternative to Android

2014-10-29 00:5712441
用户头像

发布了 77 篇内容, 共 40.1 次阅读, 收获喜欢 26 次。

关注

评论

发布
暂无评论
发现更多内容

Neo4j APOC 使用

wkq2786130

neo4j apoc

jqGrid表格封装和使用方法

Seven_xw1213

Java 大前端 封装 jqgrid

手撕设计模式

Peision

Java 后端 设计模式 23种设计模式

蚂蚁金服上市了,我不想努力了

YourBatman

IPO 财务自由 蚂蚁金服 财富自由

百万并发「零拷贝」技术系列之初探门径

码农神说

Java 架构 零拷贝

前后端统一结果集封装

Peision

Java json 前后端分离 springboot

解决 Harbor 启动失败故障

FeiLong

Docker Harbor Docker-compose

neo4j 批量 导入 数据 的 几种方式

wkq2786130

neo4j

canal 笔记

wkq2786130

MySQL canal

jvm-config

wkq2786130

Java JVM

Cmder 使用 笔记

wkq2786130

cmder tools

性能优化-架构师体现技术全面性的时刻

LEAF

写在《SRE生存指南》出版之际

冯文辉

DevOps SRE

专访英特尔唐炯:对旗下产品性能及未来路线图充满信心

最新动态

C++ 线程安全的单例模式总结

小林coding

c++ 设计模式 单例模式 线程安全

为什么 Flink 无法实时写入 MySQL?

Apache Flink

flink

前后端分离跨域问题解决方案

Peision

Java 前后端分离 springboot

架构师训练营第七课总结

曾祥斌

架构师训练营第七周作业

王铭铭

职业吐槽与反思(一)

石君

职场 吐槽

vcenter 5.5故障处理

小小文

vcenter

JVM性能调优监控工具 jps jstat jinfo jmap jhat jstack

wkq2786130

Java JVM

OrientDB etl 工具 导入 rdbms数据

wkq2786130

一张PDF了解JDK11 GC调优秘籍-附PDF下载

程序那些事

Java jdk GC 秘籍 JDK11

GoF设计模式 | 工厂方法模式

Peision

Java 23种设计模式

Java的异常处理

Bruce Duan

java异常处理

玩转混合加密 | 精美配图

阿宝哥

安全 加密解密 数据加密

记一次bem命名规范使用优化方案

前端有的玩

Vue npm React bem

elasticsearch-restful-api笔记

wkq2786130

elasticsearch

GoF设计模式 | 单例模式

Peision

Java 后端 23种设计模式

创业使人成长系列 (5)-申请国家高新企业

石云升

高新企业

Android上替代SQLite的选择:Realm_移动_Roopesh Shenoy_InfoQ精选文章