写点什么

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

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

关注

评论

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

华为云云原生专家入选全球顶级开源组织CNCF技术监督委员会

Geek_2d6073

RDS for MySQL Serverless公测上线:弹性伸缩,最高可降成本超80%

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 华为云Serverless

【FAQ】HarmonyOS SDK 闭源开放能力 —Account Kit

HarmonyOS SDK

HarmonyOS

详解Python中sys模块的功能与应用

华为云开发者联盟

Python 开发 华为云 函数 华为云开发者联盟

请认真对待你的简历

老张

面试 简历优化 简历

探索Terraform实践:优化基础设施管理

SEAL安全

架构 运维 Terraform

AI大模型的发展趋势与应用前景

百度开发者中心

AI 大模型 人工智能、

读TiDB源码聊设计:引子

泊浮目

分布式数据库 TiDB HTAP

QCN9274/Super WiFi 7: Explore the unlimited potential of next-generation networks

wallysSK

LED户外广告屏寿命的关键因素及解决方案

Dylan

广告 维护 系统维护 LED显示屏 户外LED显示屏

Python黑科技揭秘:多窗口操作不再是难题,这些技巧让你轻松搞定

测试人

Python 软件测试 自动化测试 测试开发

大神玩花:借助WASM在浏览器中运行数据库

张文平

数据库 postgresql 前端 应用开发 Supabase

企业要想构建 AI 竞争力,就必须“私藏”大模型

极狐GitLab

Dapp/DeFi/Swap交易所代币质押项目挖矿系统开发详情

l8l259l3365

Selenium帮助你轻松实现浏览器多窗口操作

霍格沃兹测试开发学社

教你用Ubuntu快速搭建饥荒服务器

华为云开发者联盟

开发 华为云 华为云开发者联盟 华为云服务器 饥荒

请查收!“全国大学生智能汽车竞赛”线上赛备赛指南

飞桨PaddlePaddle

人工智能 百度 AI BAIDU 百度飞桨

EthSign联合创始人 POTTER LI 确认出席Hack .Summit() 香港区块链开发者大会!

TechubNews

✅被百度追着项目问,上亿数据,限制1G内存,如何去重?

派大星

Java 面试题 互联网大厂面试 数据去重

OpenAI文生视频大模型Sora:重塑视频内容生产

百度开发者中心

视频 大模型 人工智能、

掰扯掰扯需求分析:从工程到生活中的4个case

泊浮目

系统设计 需求分析

华为云命令行工具KooCLI—高效云端管理的秘诀

华为云PaaS服务小智

云计算 API 华为云

JavaScript之structuredClone现代深拷贝

南城FE

JavaScript 前端 深拷贝

深入了解手机App开发:从构思到上线的全过程

天津汇柏科技有限公司

数字化转型 低代码开发 定制软件开发 软件开发定制

春招开始,面试也多起来了

王磊

Java 面试

Python黑科技揭秘:多窗口操作不再是难题,这些技巧让你轻松搞定

测吧(北京)科技有限公司

测试

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