QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

Shark, 用于 iOS 的开源 ORM,力图以高性能、多线程的 App 开发去替代 Core Data

  • 2016-07-04
  • 本文字数:2788 字

    阅读完需:约 9 分钟

Shark 是一种新近出现的用于 iOS 的开源 ORM 框架,目的在于通过提供高性能与线程安全功能,成为 Core Data 框架的易用替代者。InfoQ 访谈了 Spark 的创立者,Adrian Herridge。

正如 Herridge 所述,Shark 源于对 DBAccess 的开发经验。DBAccess 是 Herridge 前期开发的一种用于 iOS 的 ORM,并得到了 InfoQ 至始至终的关注。Herridge 谈及,Shark“具有与DBAccess 近乎一致的操作规范”,仅是由于版权的原因,Shark 大范围地重构了其代码库。尽管DBAccess 是非开源的,但它还是得到了一定规模的应用。Herridge 根据开发人员间的相互交流情况、CocoaPod 的度量情况和Stack Overflow 的提问情况,估计当前大概有700 个左右的App 使用了DBAccess,这些应用合计约有12,000 次下载。

据其创建者所言,Shark 的一个强大之处在于其易用性。下面的代码段展示了如何去创建对象,执行查询并通过ORM 更新对象,这也是使用Shark 的 FLUENT API 的一个典范。

复制代码
class Employee: SRKObject {
var name: String?
var age: Int?
}
var newEmployee = Employee()
newEmployee.name = "Steve"
newEmployee.age = 54
newEmployee.commit()
let youngest = Employee.query()
.whereWithFormat("age
{1}
<p>Shark 的后台数据库使用 SQLite,支持开发人员执行带有连接和子查询的 SQL 语句。Herridge 指出,这对于开发人员优化应用性能而言是一个十分重要的特性。</p>
{1}
<p> 线程安全性将会是另一个受 Core Data 开发人员欢迎的特性。该特性使得在“任何场景下”,Shark 所返回的对象得以跨线程使用。</p>
{1}
<p>Shark 提供的其它卓越特性包括:</p>
{1}
{1}
  • 事务;
  • 时间模型;
  • 列级加密;
  • 支持批处理操作;
  • 对象域,支持对对象管理方式的控制。

为对 Shark 具有更深的了解,InfoQ 与 Herridge 进行了如下访谈。

你是如何实现从 DBAccess项目向 Shark项目的转变的?

“我们想要开源 DBAccess 的动机,纯粹因为我们只有有限的开发时间。越来越多的开发人员联系到我们,并提出在 DBAccess 项目中添加一些新特性的需求。这些特性我们认为是完全合理的,但是在项目之初并未被我们所考虑到。鉴于项目主版本的开发已经作为一个阶段而结束了,并且该主版本已对我们的所有项目可用了,因此对于项目改进工作我们只能分配很少的时间,而且这些改进对于我们的产品而言并没有任何明显的收益。当前,已有一个足够规模的社区愿意为该项目做出贡献。相对于原项目,我们希望能向更好的方向推进该产品。自开源项目发布以来,我可每周花费至少 8 个小时在其中,当前对项目的服务支持请求已经显著减少了。

但是我们无法获准去发布我们已经编写好的代码。因而在与我们的 CEO 讨论之后,我们确定了一个合适的变通方案,就是重写该 ORM 的代码,并给予新项目一个完全不同的名字。就这样代码重写工作启动了。起始我们将原始代码拿来并重构到不同的源文件中,这使得代码更加模块化。然后对于代码中相对复杂的部分,我们将这些部分从源代码中剥离出来,并在稍后的工作中对这些部分进行重写(例如查询缓存管理器和共享内存系统)。令我们失望的是,这样做的结果对性能改进甚微。

其后,当我们已完成了代码库重构,就开始重写每个函数,并使其与原函数的代码完全不同。这个工作看上去是对每个人的个人时间的一种浪费,但这样做是十分必要,这使得 Shark 项目与原始项目完全不同,避免了将来可能导致的任何问题。但是在工作复审时,我们发现相对于原来的代码库,新项目依然存在着一些细微的相似之处。注意这里我说的不是一样,而是相似。进而我们做了更进一步的协同开发,去实现代码的模块化,以及有易于二次开发的代码分割。大约在此后一年,尽管还是存在相似之处,新项目已经成为了一个完全不同的代码库。我们已具有了持续测试新方法输入输出的能力,可确保项目的完整性及与 DBAccess 的兼容性。”

为什么没有选择 Swift

“这个问题很难回答。Swift 很明显是未来的发展方向,并且 Swift 具有足够丰富的特性去完成一个开发任务。但溯本追源,DBAccess 需要是静态库,这使得如有必要 App 可以向后兼容到在 iOS6 上使用。

在我们启动项目移植时,且就我当时所知,Swift 是不能被包含在静态库中的。但是这个原因与我们没有选择 Swift 是毫不相关的。因为我们当时还达成一个共识,就是开发中只是去使用 XCode 7 提供的项目模板,而避免去“破解”使用框架所提供的对象。这里 XCode 模版是生成面向 iOS 8 及以上版本的动态框架。

该做法中仍然存在的问题是,如果项目是用 Swift 编写的话,那么 Objective-C 对象就不能继承于 Swift 基础类,该基础类从本质而言在我们的项目开发中是无法回避的。

现在代码库已经很好地重构了,我们也面对用 Swift 编写其中大部分,并最终整个代码库的工作,尤其是考虑到 Swift 已经是很明显是可取的发展趋势。当前我们已在顶层 Swift 对象实现上启动了工作,以启用对所有 Swift 标准数据类型的持久化。”

与 DBAccess项目相比,Shark当前的成熟度如何?

“由于 Shark 采用了按函数依次迁移和模块化的方法构建,我们可对其进行持续测试,整个代码库很少处于不可编译的状态。考虑到 Shark 项目是基于前期已构建的代码,并且实现了覆盖面更广的测试,虽然它是一个新的项目,但是在很多方面比原 DBAccess 项目更加可靠。Shark 已在文档上比 DBAceess 更进一步,并且我们正尽可能地对其所有的特性给出更多的例子程序,更加清晰的用法。”

在 Shark**** 中,还有哪些你想要强调的高级功能吗?

"对象域管理系统是 Shark 的一个高级特性。一般情况下,所有对象是各自独立的,并且保存在不同的内存空间中,因而对一个实体的实例所产生的改变只能作用于单一对象上,不能跨越到其它实例中。我们发现在我们的应用开发中,通常情况下这种经深思熟虑的设计决是十分有用的。但是在简单添加了对象域管理功能后,与被改变实例在相同域中的实例就可同时发生改变。域仅是一个字符串值,可在任何时候发生改变,这样设计的强大之处在于,当一个网络线程完成后,为实现对绑定控制的更新而更改其原有的网络域为用户界面域时,你可以同时拥有对包含有对象的网络域和用户界面域的控制。

优化是 Shark ORM 的另一个关键特性;我们具有用于查询优化的常规工具。为实现更快的数据集检索,可添加索引以及 COUNT、SUM 和 DISTINCT 操作到任何类中。为减少查询时间并降低内存使用,可使用限制查询中检索到的属性个数的功能。这样其余的属性值可不急于进行加载,直至有必要之时。为允许在开发中截断慢的查询,并查看查询计划,可添加委派代理的方法。这样开发人员可以调整和估量任何已做改进的情况。”

查看英文原文 Open-Source Shark ORM for iOS Aims to Replace Core Data for High-Performance, Multi-Threaded Apps


感谢张龙对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-07-04 19:003323
用户头像

发布了 227 篇内容, 共 76.0 次阅读, 收获喜欢 28 次。

关注

评论

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

食品行业MES系统

万界星空科技

mes 食品MES 食品行业 食品加工

【YashanDB知识库】要有好的跑批性能,有哪些参数要注意

YashanDB

数据库 yashandb

BBEdit for Mac v15.1.3 多功能代码编辑器

小玖_苹果Mac软件

ACDSee Photo Studio 11 for Mac(苹果电脑数字图像处理软件)

小玖_苹果Mac软件

AutoMQ热招岗位,等你来投!

AutoMQ

Java 云计算 招聘 岗位 AutoMQ

重塑未来:Cloud Studio引领云端开发与学习的新纪元

代码忍者

Native Instruments Komplete Kontrol for mac(音源制作软件)v3.3.4免激活版

小玖_苹果Mac软件

AI英语作文练习APP的功能

北京木奇移动技术有限公司

AI教育 软件外包公司 AI英语作文

作业帮T30和步步高S7的区别

妙龙

作业帮 学习机 步步高

LLM 分布式训练六大关键技术介绍

Baihai IDP

AI gpu LLMs Baihai IDP

杭州乘云联合中国信通院等单位正式发布《云计算智能化可观测性能力成熟度模型》标准

乘云数字DataBuff

云计算 可观测性 智能运维

2024华为云开源开发者论坛召开,20+技术大咖解读开源生态发展

华为云开发者联盟

边缘计算 kubeedge Karmada #云原生 AI 大底座

学而思二代精准学Pro怎么样

妙龙

学习机 学而思

去哪儿KAFKA性能优化-如何节省2000核CPU?

Qunar技术沙龙

性能优化 后端

Premiere Pro 2024 for mac(pr2024 视频编辑器)

Mac相关知识分享

Steinberg WaveLab 12 Pro for Mac(母带制作工具) v12.0.50激活版

小玖_苹果Mac软件

淘宝买家秀数据接口(taobao.item_review_show)丨淘宝API实时接口指南

tbapi

淘宝API接口 淘宝买家秀接口

Steinberg SpectraLayers Pro for mac(Mac音频频谱编辑器)v11.0.50激活版

小玖_苹果Mac软件

Screen Wonders for Mac(3D壁纸屏保软件)v3.2.0激活版

小玖_苹果Mac软件

iTubeGo YouTube Downloader for Mac(YouTube 下载器)v9.2.4激活版

小玖_苹果Mac软件

作业帮学练机S30怎么样,功能介绍

妙龙

作业帮 学习机

Axure RP 10 for Mac(交互式原型设计)

Mac相关知识分享

AI智能体的开发流程

北京木奇移动技术有限公司

AI教育 AI智能体 软件外包公司

跬智信息(Kyligence)获评钛媒体2024“年度 AI 应用”

Kyligence

#人工智能 企业 AI 应用

Cookie for Mac(浏览器缓存清理工具)v7.4.6免激活版

小玖_苹果Mac软件

大模型安全 | “创造未来,安全同行” 北京站·第九期「度安讲」 技术沙龙开放报名

百度安全

唯品会Vip商品详情 API 接口:开发应用与收益深度剖析

科普小能手

API 接口 API 测试 唯品会商品数据接口 唯品会 唯品会商品数据采集

Audio Hijack for Mac(强大的音频录制软件)v4.4.5直装版

小玖_苹果Mac软件

WinX HD Video Converter for Mac(高清视频转换软件)v6.8.3激活版

小玖_苹果Mac软件

YT Saver for Mac(视频下载和转换器)v9.2.4激活版

小玖_苹果Mac软件

AI英语作文陪练APP的技术难点

北京木奇移动技术有限公司

AI教育 软件外包公司 AI作文

Shark, 用于iOS的开源ORM,力图以高性能、多线程的App开发去替代Core Data_数据库_Sergio De Simone_InfoQ精选文章