Realm World Tour后记

上周有幸参加了Realm全球行北京站的大会分享,大会的氛围很轻松,有很多Realm周边(包括一件纪念T恤😊)可以拿,还有很多免费的小食和啤酒,与其说是大会,不如说是一个party🍺。总的来说感觉非常的兴奋,尤其是Realm的新产品,Realm Mobile Platform。唯一比较遗憾的是中途家中有事离场,没能完整的参加整个大会。

Realm Mobile DataBase

第一场演讲是由Realm研发团队中唯一的国人陈牧龙,陈老师为我们带来的,主要的内容是 Realm Mobile DataBase的使用,以及常见问题的原因和解决方法。说全称大家可能不太习惯,不过Realm Mobile DataBase就是当初那个让你入坑realm的开源免费的产品。如果你使用过realm的话你一定明白为什么官方敢于说出自己是SQLite和CoreData的代替者。如果你没用用过,那么让我们来简单体验一下realm是多么的方便。

创建对象

class Dog: Object {
  dynamic var name = ""
  dynamic var age = 0
}

let dog = Dog()
dog.name = "Rex"
dog.age = 1

Realm致力于尽可能让对象的操作无限接近与普通的对象,比如上面的代码就非常简单清晰的定义创建了一个Dog对象,有两个属性 name 和 age。没有一句sql语句,也不需要我们像CoreData那样去.xcdatamodeld文件中创建实体再生成模型文件。

写入

let realm = try! Realm()
try! realm.write {
  realm.add(dog)
}

通过这个闭包,我们就成功的将刚刚创建的dog对象添加到了Realm中。当然这个闭包中其实做了很多事情比如开启结束事务(transaction),创建新版本的镜像realm文件等,但是我们完全不需要在意,只需要一个简单的闭包,就可以将我们的对象写入realm文件,进行持久化操作。

查询

let pups = realm.objects(Dog.self).filter("age < 2")

Swift的福,即使是原本要写三四行的查询操作,我们也可以很清爽的使用一行代码写完🎉。上面的代码中查询出了当前realm文件中所有的Dog对象,并且过滤掉出了age < 2的部分。

为什么Realm更快

个人理解Realm速度更快,主要体现在两个方面,一个是线程操作时的加锁机制MVCC,另一个就是懒加载。

MVCC

先声明一下MVCCMVC的关系就跟JavaScriptJava一样🙄
MVCC全称为 Multi-Version Concurrency Control 多版本并发控制,属于数据库的一种机制,在解释MVCC之前我们先来了解以前普通的SQLite在遇到多线程读写的时候是怎么处理的吧。

传统的SQLite在面对写入操作的时候为了避免因为多线程操作到时读取到只写入了一部分的信息,采取了有写入操作的时候就会对数据库文件加锁,这样可以很好的避免因为多线程导致的信息读取错误问题,但是也会带来一个很明显的问题,那就是会阻塞当前的读取操作所在线程,如果当前读取操作是在UI线程中进行的,那么就会表现为APP卡顿。
而Realm则是会在有数据写入的时候创建一个新版本的文件V2,并且在V2中进行写入,此时如果有读取操作进入的话,realm会将读取操作指向原来的版本V1。当wirte操作结束的时候,realm会销毁掉原来的V1,并用新版本的V2来代替原来的V1。这样读取操作就永远不会被写入操作所阻塞。同时还可以避免读取到错误的信息。

当然,这个特性的背后其实还有一个大坑,那就是V1版本的销毁实际依赖的是事件循环,也就是说如果我们在运行循环没有打开的子线程进行写入操作的话,V1版本将不会被销毁。也就是说写入操作结束后,没有任何用处的V1也会一直保存在你的磁盘中,结果就是APP所占的空间会越来越大。解决方案就是把realm对象放到autoreleasepool里面。

除了MVCC,Realm还做了十分接地气的一件事情,那就是把所有的操作就尽可能的放在后台线程去执行,而不是占用你的UI线程。这是很符合移动开发习惯的一点👍

懒加载

个人认为Realm另一个可以战胜SQLite的地方就是Realm的读取信息为懒加载。比如当你查询Dog对象结束的时候,你的内存中是不会存在Dognameage的信息的。只有当你真正调用了Dogname字段,Realm才会用磁盘中读取name信息,并且加载到内存中,这一个特性极大的提高了Realm的查询速度。

此外Realm还有很多其他让人兴奋的特性,比如细粒化通知,数据库文件加密等等,大家可以再官网看到更详细的说明。

Realm Mobile Platform

这是Realm的一个新的产品,负责介绍它的是一个韩国欧巴,我并没有使用过,但是听过它的介绍以及演示之后,我也是决定下一个项目一定要尝试使用它。Realm Mobile Platform简单来讲就是将你原来的模型与本地realm文件的映射关系扩展为模型对象与服务端server的映射关系。也就是说,我们甚至可以抛弃AFNetworking之类的网络请求框架,只是执行类似于查询的操作,就可以从server端不同到数据,而且一旦server端的数据发生了变化,你可以通过通知得到这些改变,本地的数据有了改动一样也可以自动提交到server端。不得不说这是非常cool的一件事情。当然,这种类似查询的网络请求也是https的,而且Realm Mobile Platform是离线优先的,所以你不用担心因为没有网络导致的种种问题。原本的IM模块,数据即时推送,用户信息统计等等模块可能需要接入很多三方,现在,你只需要一个Realm Mobile Platform就可以轻松的完成这些内容,并且只需要很少的代码。🤠

顺便提一下韩国欧巴还是挺可爱的,讲话也很风趣,自己分享完还在碎碎念因为当前的国际形势,很担心自己能不能入境之类的 :D
总之很开心能够参加这次大会,希望能参加更多类似的大会吧。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,332评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,930评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,204评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,348评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,356评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,447评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,862评论 3 394
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,516评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,710评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,518评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,582评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,295评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,848评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,881评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,121评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,737评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,280评论 2 341

推荐阅读更多精彩内容