在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

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

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

关注

评论

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

架构实战营-毕业设计

En wei

架构实战营

Rust从0到1-模式-使用场景

rust 模式 Patterns Matching

FastApi-01-初识

Python研究所

FastApi 8月日更

具备货币属性的比特币,会成为一种货币吗?

CECBC

Linux中Shell重定向

入门小站

Linux

Pandas入门教程-开篇之作

Peter

Python pandas 数据分析师 #python

缓存使用的一些问题

旺仔大菜包

redis

【Vue2.x 源码学习】第二十二篇 - dep 和 watcher 关联

Brave

源码 vue2 8月日更

Pandas入门教程-Series类型数据

Peter

Python 数据分析 数据 pandas

外包学生管理系统架构设计文档

君子意如何

架构师训练营第 1 期 「架构师训练营第 1 期」

招商银行信用卡卡号识别项目(第一篇),Python OpenCV 图像处理取经之旅第 53 篇

梦想橡皮擦

8月日更

Git的基本操作

卢卡多多

git flow git reset 8月日更

大数据训练营 -0725 课后作业

cc

从 Druid 控制台(Druid console)中进行查询

HoneyMoose

波宝TronLink钱包APP系统开发介绍

Geek_23f0c3

钱包系统开发 DAPP智能合约交易系统开发 波宝钱包

服装生产流程管理在明道云的实现

明道云

02-架构图

Lane

Seldon 使用 (五): engine & graph

托内多

tensorflow kubeflow seldon

分布式存储系统可靠性:系统量化估算

vivo互联网技术

分布式存储

架构实战营毕业总结

En wei

架构实战营

【Flutter 专题】79 图解 Android Native 集成 FlutterBoost 小尝试 (二)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 8月日更

几百行代码写个Mybatis,原理搞的透透的!

小傅哥

Java spring 源码 mybatis 代理

在线短视频缩略图剪切工具

入门小站

工具

啊哈!这段时间的学习感受

Nydia

8月日更

docker部署redis记录,楼主亲测无异常

小鲍侃java

8月日更

ECMAScript 2020(ES11)新特性简介

程序那些事

JavaScript ecmascript nodejs ES11 程序那些事

pyinstaller 打包

橙橙橙橙汁丶

【LeetCode】矩阵中战斗力最弱的 K 行Java题解

Albert

算法 LeetCode 8月日更

做行业的底层架构者 为区块链+提供更多可能

CECBC

解密NFT,进军元宇宙,区块链与价值实体将如何链接?

CECBC

☕️【系统设计】如何设计出优雅且实用的API接口

李尚智

Java 架构设计 架构设计实战

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