写点什么

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:5712385
用户头像

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

关注

评论

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

迄今为止最完整的DDD实践

阿里技术

DDD 经验分享

寻找海量数据集用于大数据开发实战(维基百科网站统计数据)

程序员欣宸

大数据 数据集 8月月更

云原生(二十) | 深入了解Kubernetes(k8s)Service

Lansonli

云原生 k8s 8月月更

悟了,应该都了解分布式架构下负载均衡器吧

知识浅谈

负载均衡 8月月更

什么是文件存储?与对象存储有什么区别?

wljslmz

文件存储 8月月更

GitHub标星139K的:“嵌入式Linux系统开发教程”

收到请回复

Java Linux 程序员 嵌入式 #运维

借我 1 小时,与 1000 人一起参与开源

腾源会

开源 腾源会

预约直播 | 基于预训练模型的自然语言处理及EasyNLP算法框架

阿里云大数据AI技术

深度学习 阿里云 算法框架

CSS

武师叔

8月月更

腾讯发布第二季度财报,腾讯云数据库收入同比增长超过30%

科技热闻

阿里云鲍文乐:基于事件的自动化运维最佳实践

阿里云弹性计算

事件 自动化运维 CloudOps

Promise.allSettled 的 Polyfill 处理

汪子熙

JavaScript Promise Async 8月月更 web编程

【LeetCode】课程表Java题解

Albert

LeetCode 8月月更

计算机网络(二、物理层)

计算机网络 8月月更

Web登录很简单?开玩笑!

TimeFriends

8月月更

3 分钟温故知新 RxJS 【创建实例操作符】

掘金安东尼

前端 函数式编程 8月月更

Go-Excelize API源码阅读(十三)—— GetSheetVisible、SetSheetFormatPr

Regan Yue

Go 开源 源码解析 8月日更 8月月更

设备管理|风机的日常运行与维护

PreMaint

企业设备管理 预测性维护 设备健康管理 风机的日常运维

【React源码系列】React Context原理,为什么我建议尽可能少的使用React Redux管理状态 审核中

爱切图的木子老师

react源码 react context react redux

低代码实现探索(四十八)后端服务

零道云-混合式低代码平台

直播商城系统——直播和电商的合理有效结合

开源直播系统源码

软件开发 直播系统源码 直播带货系统 直播商城系统 直播app系统

应用缺少POI数据,如何开发地点深度信息?

HarmonyOS SDK

AntDB基于WAL日志的DML数据闪回实现

亚信AntDB数据库

AntDB 国产数据库 AISWare AIDB

我眼中的无影云桌面‖云桌面使用者角度

乌龟哥哥

8月月更

我做了个《联机桌游合集: UNO+斗地主+五子棋》无需下载,点开即玩!叫上朋友,即刻开局!不看广告,不做任务,享受「纯粹」的游戏!

HullQin

CSS JavaScript html 前端 8月月更

Kubernetes Kruise Rollout

CTO技术共享

开源 签约计划第三季 8月月更

付费会员之我见(43/100)

hackstoic

商业模式

五分钟给你的 gRPC 服务加上 HTTP 接口

万俊峰Kevin

Go 微服务 gRPC web开发 go-zero

组件解析:基础组件button的实现

独来独往

大前端 低代码 可视化 组件化 低代码平台

基于CC2530(ZigBee)设计的景观照明控制系统+配套手机APP

DS小龙哥

8月月更

圣庭医疗联合创始人谷红仓:高通量基因测序在药物研发和靶向治疗中的应用

阿里云弹性计算

HPC 高性能计算 生命科学 基因测序

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