10 月 23 - 25 日,QCon 上海站即将召开,现在大会已开始正式报名,可以享受 8 折优惠 了解详情
写点什么

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

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

关注

评论

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

2023 年最全面的 DevOps 工具列表,你用过几个?

Java架构历程

DevOps 三周年连更

《API加速优化方案:多级缓存设计》

后台技术汇

三周年连更

C# 之 字符串前加@(逐字字符串标识符)

陈言必行

C# 三周年连更

用友BIP助力中国领先企业数智化国产替代

用友BIP

国产替代

语雀-使用指南

六月的雨在InfoQ

在线文档 在线协同文档 三周年连更 语雀

关于 SaaS 软件销售领域中的 Renewal 和 linearity

汪子熙

SaaS Cloud Studio 三周年连更

DockerSwarm实践及原理

乌龟哥哥

三周年连更

Prometheus实战-从0构建高可用监控平台(一)

小毛驴的烂笔头

Prometheus

测试需求平台9-Table组件应用产品列表优化

MegaQi

测试平台开发 三周年连更

Retrofit 在 JSON 反序列化的时候提示 UnrecognizedPropertyException 异常

HoneyMoose

跨平台应用开发进阶(五十六):应用渲染异常问题分析及解决

No Silver Bullet

跨平台应用开发 三周年连更 问题分析及解决 渲染异常

你如何看待,“国内ChatGPT还没成熟,但ChatGPT的付费模式已经成熟了?”

小傅哥

人工智能 小傅哥 ChatGPT 人工智能ChatGPT 吗? ChatGPT4

Mac哪款系统性能软件好用呢?Performance Index 64 Pro mac版推荐~

真大的脸盆

Mac Mac 软件 系统性能监测

易观千帆 | 2023年3月证券APP月活跃用户规模盘点

易观分析

证券 经济

执行个 DEL 竟然也会阻塞 Redis?深挖一下果然不简单

架构精进之路

redis 缓存 后端 bigkey 三周年连更

迪斯克Disrupt DEX众筹挖矿系统开发技术

薇電13242772558

dapp

Java如何获取@ApiModelProperty(value = “序列号“, name = “uuid“)注解中的value值name值?

bug菌

三周年连更 获取注解值

【Linux】之Centos7安装KVM虚拟化及相关命令

A-刘晨阳

Linux 虚拟化 kvm 三周年连更

如何优雅的处理异常

京东科技开发者

异常处理 java 抛出异常 企业号 4 月 PK 榜 throwale

复旦MOSS大模型开源了!Github和Hugging Face同时上线

Openlab_cosmoplat

人工智能 开源项目 ChatGPT

最常用的从A到Z的Linux命令,真的很好记,三分钟刷完!

wljslmz

Linux 三周年连更

Python项目实战│ Python实现线程池工作模式

TiAmo

Python 线程池 三周年连更 工作模式

大数据之Hadoop图解概述

袁袁袁袁满

三周年连更

一些常见的字符串匹配算法

京东科技开发者

字符串 字符串匹配算法 企业号 4 月 PK 榜 文本处理

代码优雅之道——如何干掉过多的if else

小小怪下士

Java 程序员 后端 代码

突破传统监测模式:业务状态监控HM的新思路

京东科技开发者

系统架构 监控系统 数据监控 业务监控 企业号 4 月 PK 榜

如何建设一个用于编译 iOS App 的 macOS 云服务器集群?

京东科技开发者

ios 编译 CI/CD 企业号 4 月 PK 榜 云服务集群

一种新的流:为 Java 加入生成器(Generator)特性

阿里巴巴云原生

Java 阿里云 云原生

数字北京城,航行在联通2000M的“大运河”

脑极体

联通

高效易用的C++单元测试框架:轻松构建高质量代码

万木春

c++ GitHub 单元测试

Matlab实现遗传算法

Shine

三周年连更

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