写点什么

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

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

关注

评论

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

国家第一梯队!开物入选特色专业型工业互联网平台

百度大脑

人工智能 百度 智能云

Java核心基础——注解

老农小江

注解 java

阿里P8爆肝三月!最新出土SQL手册:收获不止SQL优化,抓住SQL的本质

Java 编程 程序员 IT 计算机

#1024我在现场# 征集线索引爆大奖!

InfoQ写作社区官方

1024我在现场 热门活动

微博评论高性能高可用计算架构

Imaginary

山东移动用明道云赋能一线,打通业务创新最后一公里

明道云

面对疾风吧,如何搭建高协同的精准告警体系?

阿里巴巴云原生

阿里云 产品 云原生 Arms 告警运维中心 告警体系

太香了!Github疯传的阿里分布式设计实录让面试进阶齐飞!

Java 程序员 架构 面试 后端

Zookeeper配置详解

Regan Yue

zookeeper 配置 10月月更

从Android系统架构学习设计模式

轻口味

android 架构设计原则 10月月更

Webrtc Rtp/rtcp (2)

webrtc developer

WebRTC rtp/rtcp

一篇神文让你"一夜封神"Mycat中间件(最详细讲解)

程序员小呆

Java 程序员 架构师 mycat

用区块链技术打造AEO高信用国际贸易生态圈的创新实践

CECBC

NFT商业落地中的思考:区块链

CECBC

绝绝子!美团大牛吐血整理总结“消息队列核心知识笔记”是真的吊

进击的王小二

分布式 MQ 消息队列 java

重学 Java 之 5种字符流读取方法

进击的王小二

java基础 字符流 java

极光笔记丨iOS 15推送新特性

极光GPTBots-极光推送

ios 消息推送 移动端

“区块链+物联网”融合 推动产业创新发展

CECBC

明道云APaaS在保险业中的应用场景例举

明道云

索信达助力国有大行提升监管报送质量

索信达控股

大数据 数据治理 金融监管 金融行业 银行业

直接霸榜Github!阿里内网流传P8大牛的“满级”分布式架构笔记,

程序员小呆

Java 程序员 面试 架构师

一口气面试7家大厂,已拿下4家offer,其实大厂没有你想象中难!

程序员小呆

Java 程序员 面试 架构师 资料

怎么阅读 Linux 内核源码

程序员小呆

Java Linux 程序员 架构师

真香!在Github一夜爆火的面试题库,被各大厂要求直接下架

程序员小呆

Java 程序员 面试 架构师

模块五作业

potti

架构实战营

服务业CRM软件能为你提供哪些服务?

低代码小观

企业管理 CRM 管理系统 管理工具 管理软件

金九银十吃透这份Spring Boot实战文档,让你超过90%的Java面试者

Java 编程 架构 面试 springboot

WeTest自助压测1折起,最低1分钱参与Q币抽奖

WeTest

架构实战营 设计微博系统中”微博评论“的高性能高可用计算架构

💤 ZZzz💤

架构实战营

健身房CRM软件帮你寻找更多客户

低代码小观

企业管理 管理系统 健身房 管理软件 行业

内卷把同事逼成了“扫地僧”,把 Github 上所有面试题都整理了一遍~ 足足 24W 字!

编程 程序员 IT 计算机 java

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