写点什么

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

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

关注

评论

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

AddressSanitizer 技术初体验

焱融科技

内存泄露 存储 文件存储 分布式文件存储

ORACLE进阶(四)表连接讲解

No Silver Bullet

oracle 7月月更 表连接

终于可以一行代码也不用改了!ShardingSphere 原生驱动问世

SphereEx

数据库 ShardingSphere ShardingSphere-JDBC

redisson bug分析

wgy

Java redis redisson

小程序在产业互联网中的作用

Geek_99967b

小程序 小程序容器

beegfs高可用模式探讨

姚华

HPC beegfs 并行文件系统

BP神经网络(算法整体思路及原理+手写公式推导)

秃头小苏

7月月更

设计你的安全架构OKR

I

安全架构师 安全架构 企业安全 安全治理

用Java写学生登陆认证系统

魏铁锤

Java多线程案例之阻塞队列

未见花闻

7月月更

如何提高网站权重

源字节1号

微信小程序 软件开发 网站开发

C#/VB.NET 给PDF文档添加文本/图像水印

在下毛毛雨

C# .net PDF 添加水印

视频化全链路智能上云?一文详解什么是阿里云视频云「智能媒体生产」

阿里云CloudImagine

人工智能 媒体 音视频

A5000 vGPU显示模式切换

姚华

显卡、gpu

【鲲鹏BoostKit】OminiRuntime ——高效统一的大数据分析Runtime底座

极客天地

CSS 基于文字的图片马赛克你见过吗

南城FE

CSS 前端 马赛克 7月月更

LSF 集群全面监控!浅析 HPC 基于龙蜥操作系统的迁移替代解决方案

OpenAnolis小助手

开源 解决方案 龙蜥操作系统 常青藤开源科技 HPCinsights

提前解锁 2 大直播主题!今天手把手教你如何完成软件包集成?|第 29-30 期

OpenAnolis小助手

云原生 直播 龙蜥大讲堂 SIG 双周会 CSI 与 open-local

SAP Fiori 应用索引大全工具和 SAP Fiori Tools 的使用介绍

汪子熙

SAP Fiori SAP UI5 ui5 7月月更

Scala 基础 (五):面向对象(上篇)

百思不得小赵

scala 大数据 oop 7月月更

“整洁架构”和商家前端的重构之路

得物技术

架构 前端 重构

三步就能在OpenHarmony中实现车牌识别

OpenHarmony开发者

OpenHarmony

基本磁盘与动态磁盘 RAID磁盘冗余阵列区分

Albert Edison

7月月更

Python|数据结构——字典和集合

AXYZdong

Python 7月月更

CRMEB 商城系统如何助力营销?

CRMEB

渲大师携手向日葵,远控赋能云渲染及GPU算力服务

Finovy Cloud

渲染 GPU算力

《数字经济全景白皮书》保险数字化篇 重磅发布

易观分析

保险数字化

案例 ①|主机安全建设:3个层级,11大能力的最佳实践

青藤云安全

网络安全 主机安全 网络安全、攻防演练

node の SQLite

空城机

sqlite Node 7月月更

Android 查看签名

沃德

程序员 7月月更

关于静态类型、动态类型、id、instancetype

NewBoy

前端 移动端 iOS 知识体系 7月月更

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