Realm Blog

Realm 移动端平台发布:实时同步的 Realm 和完全开源的数据库实现

自 2014 年我们推出 Realm 以来,我们就一直秉持着一个目标:提供一款强大的、用以替代 SQLite 和 Core Data 的产品,从而帮助移动开发者们更好、更快地搭建移动应用。时光荏苒,两年半之后,我们已经拥有了十万以上的活跃开发者,并且在全球范围内,使用 Realm 的应用下载量已经突破了十亿次。我们非常感激开发者社区的支持和反馈,正是如此才使得我们能有今日的成就。但我们需要做的还有很多。

今天,我们推出了 Realm 移动端平台 (Realm Mobile Platform, RMP),这是一款全新的产品,它集成了我们完全开源的(参见下文)iOS 和 Android 客户端数据库,并且借助新的服务端技术,它还能够提供实时同步 (Realtime Synchronization)、冲突处理 (Conflict Resolution) 以及响应式事件处理 (Reactive Event Handling)。 RMP 让移动开发者们能够实现此前难以构建的功能,比如说提供实时协作 (Realtime Collaboration)、实时通信、离线缓存体验 (Offline-first) 等诸如此类的功能。

 

新平台现已推出了两种类型的 beta 版本,现在即可使用!开发者版本 (Developer Edition) 将永久免费,它适用于绝大多数简单的适用情形,业余爱好者到小型商业应用都可以使用这个版本。企业版 (Enterprise Edition) 提供了一段试用期,能够完全支持大型产品。具体详情将在下文进行介绍。虽然目前平台只支持 Java、Objective-C 和 Swift,但是 React Native 和 Xamarin 版本也即将上线。

我们同时还做了一个重大的决定:我们非常自豪地宣布 Realm Core 模块现已开源,这让我们的 Realm 移动平台将全面拥抱开源——您可以在这个 repo 当中找到相应的源码。无论是作为新平台的一个重要组成部分,还是作为移动开发者的一个独立数据库选择,移动数据库这个领域对我们来说是非常重要的,因此我们的工程团队将继续致力于维护和改善 Realm Java、Realm Objective-C、Realm React Native、Realm Swift 和 Realm Xamarin。

The Realm Mobile Platform

无处不「对象」

即便是长期使用 Realm 的用户,都很可能没有意识到,Realm 是一个内核级别的嵌入式对象数据库,但是这只是其中一个我们与其他数据库的主要区别。实际上,是因为开发者喜爱 Realm 的易用和高速才成就了这一切。开发者们不用去处理复杂的对象关系映射,他们只需要处理对象即可——也就是说,数据库 即是 数据模型。

我们在新的对象服务器 (Object Server) 当中扩大了我们这方面的设计理念,也就是我们平台内部的一个非常重要的神奇概念——我们称之为「实时对象」(Live Objects)。实时对象意味着设备上的数据对象总是能与服务器上的数据对象完全 保持同步。这个同步操作将会自行完成,并且是无缝的——这意味着开发者不必去撰写网络层代码——并且只有当对象发生变化时才会进行网络同步,而不是所有的数据对象都去进行网络同步,这使得这个同步操作非常地高效。Realm 平台同样也会进行冲突处理,因此对某个共享的实时对象进行同时修改也能确切地得到解决。平台将会自动执行默认的预设处理规则,而这种模式对于绝大多数情况来说都是适用的;然而,您也可以轻松地创建自定义冲突解决规则。

借助 Realm,您完全不需要考虑网络层的工作。您只需要大胆地构建与实时对象进行交互的应用即可。这意味着所有那些难以构建的特性,例如实时协作、实时通信将会变得无比容易。试想,如果要允许用户通过不同的设备在一块共享的白板上进行协同工作的话,最难的部分在于要确保所有的更改操作都要立即反应在每个用户的 UI 上面,而且如果发生了冲突——例如用户同时对某个地方进行了绘制或者擦除操作,那么这个冲突会很优雅地被处理掉。Realm 平台都为您提供了现成的解决方案。

使用 Realm 移动平台构建离线缓存体验

Realm 平台对于带有离线缓存的应用来说,同样也提供了良好的解决方案,因为在网路连接断开或者时断时续的情况下,第一要务是要提供一个无缝的用户体验。Realm 移动平台正好为设备提供了一个非常高效的嵌入式数据库,因此即便网络连接丢失,您的应用仍然能够保持良好的用户体验。这正是使用 Realm 移动数据库的一个重要优势所在。

但是如果您使用了整个 Realm 平台——Realm 数据库加上对象服务器的话——那么您能够实现的功能将会更多。首先,由于双向的同步操作会在后台自动进行,因此您可以确保设备上的数据对象在网络连接丢失之前,是完全与服务器同步了的。当网络连接恢复之后,同步操作又会自动进行,而这个时候任何可能发生的冲突都将被自动解决——实时对象又再一次地完全同步。您的用户就可以继续工作了,甚至他可能都没有意识到网络连接出现了异常。

事件处理

Realm 平台的企业版同样也包含了另一个关键特性:服务器端事件处理框架,这个框架提供了一个需求管道 (plumbing),每当对象发生改变,就可以轻易地触发服务器端的逻辑操作。您可以对这个框架进行配置,让其能够监听移动端上的对 象变化情况,然后立即在服务器端运行某些代码作为回应。例如,当用户填写订购单的时候,他/她在输入框中键入了优惠券代码。这个时候,设备端的优惠券对象所发生的变化将会被框架所捕获,接下来这个变化就会立刻同步到服务器当中 。这个特定的变化将会致使事件处理框架触发对优惠券代码的检查操作,以确保这是一个合法的代码,随后检查之后的合法性将会更新到服务器端的优惠券对象当中。再然后这个网络回应便会同步回客户端的优惠券对象,随后触发一个通知,进行 UI 的更新操作。

Event handling

您可以使用事件处理来与现有的 API 或者基础功能进行集成,这使得 Realm 对象服务器将作为 API 桥接器 (Bridge) 或者作为移动中间件 (Mobilization Middleware) 来使用。这个功能同样也允许您基于「无服务器 (serverless)」的计 算原则来设计应用——您可以为每一个单独的函数编写特定的触发操作。

如何入门

Realm 移动平台现已推出了两个版本。开发者版本将永久免费,现已推出了 beta 测试版。开始使用这个版本是非常容易的,我们非常期待您的反馈。企业版则包含了事件处理框架、简单集成等其他重要的功能。它目前正在内测当中,但是只需简单填写一个表单 ,便能够加入到我们的内测计划当中来。


Alexander Stigsen

Alexander is CEO & co-founder of Realm, a mobile platform that makes it easy to build modern reactive apps with sophisticated features. He’s driven by the mission to build a data layer that can deliver the full potential of the mobile internet. Alexander was a former Nokia systems engineer before launching Realm out of Y-Combinator with co-founder Bjarne Christiansen.

Bjarne Christiansen

Bjarne is COO & co-founder of Realm, a mobile platform that makes it easy to build modern reactive apps with sophisticated features. He’s driven by the mission to build a data layer that can deliver the full potential of the mobile internet. Bjarne was a former Nokia systems engineer before launching Realm out of Y-Combinator with co-founder Alexander Stigsen. He hails from Denmark and loves hang gliding, mountain biking, and all outdoor adventures.