Realm的了解

1>Realm架構(gòu)

Realm是一個移動端數(shù)據(jù)庫,專門針對移動APP設(shè)計睹耐,不僅適用于iOS,也適用于Android部翘,目前最新版本是1.0.2赎瑰,我這用的是0.9.8版本除抛。它底層并不依賴SQLite,有自己的一套存儲引擎肮之。官網(wǎng)地址https://realm.io/cn/刮刑,有非常詳細的中文文檔挡逼,也支持CocoaPods污抬,所以在項目中只要在Podfile中加入Realm然后pod install就行沐悦。以下代碼描述都是針對iOS,其他語言請參照官方文檔崔兴。

Realm是一個類MVCC數(shù)據(jù)庫,每個連接的線程在特定的時刻都有一個數(shù)據(jù)庫的快照蛔翅。MVCC在設(shè)計上采用了和Git一樣的源文件管理算法敲茄,也就是說你的每個連接線程就好比在一個分支(也就是數(shù)據(jù)庫的快照)上工作,但是你并沒有得到一個完整的數(shù)據(jù)庫拷貝山析。Realm和一些真正的MVCC數(shù)據(jù)庫如MySQL是不同的堰燎,Real在某個時刻只能有一個寫操作,且總是操作最新的數(shù)據(jù)版本笋轨,不能在老版本操作秆剪。

?2>Realm,多線程混合使用

零拷貝架構(gòu)也使得Realm可以自動更新對象和查詢。在一個查詢中更新對象爵政,在另外一個查詢中可以馬上讀取到更新的內(nèi)容仅讽。多線程同時更新數(shù)據(jù)也是一樣,可以即時更新對象的內(nèi)容钾挟。正是因為對象的自動更新洁灵,所以Realm中也是不允許多線程之間的對象共享,因為如果多線程共享Realm對象掺出,會導(dǎo)致數(shù)據(jù)的不一致性徽千,雖然通過加鎖是可以保證數(shù)據(jù)一致性的,但是會增加開銷汤锨。

因此双抽,在使用Realm的時候,不要在多個線程之間共享對象闲礼。如果要在另外一個線程獲取同樣的數(shù)據(jù)牍汹,請重新執(zhí)行查詢铐维。多線程更新數(shù)據(jù)的操作后面會有例子演示。

3>Realm的幾個基本類型

Realm Objective-C支持的數(shù)據(jù)類型有BOOL柑贞、bool方椎、int、NSInteger钧嘶、long棠众、long long、float有决、double闸拿、NSString、NSDate书幕、NSData 以及 被特殊類型標記的 NSNumber新荤,注意:Realm不支持auto_increment類型。Realm中涉及的幾個類和概念如下:

RLMRealm

這是Realm數(shù)據(jù)庫框架的核心台汇,它是一個訪問底層數(shù)據(jù)庫的指針苛骨,有點類似CoreData中的ManagedObjectContext對象。在代碼中可以通過[RLMRealm defaultRealm]獲取苟呐。

RLMObject

這是Realm的對象模型痒芝。自己定義的對象要繼承該類,然后可以定義自己的屬性牵素。也可以定義主鍵(覆寫+ (NSString *)primaryKey方法)和索引(覆寫+ (NSArray *)indexedProperties方法)等严衬。

4>?總結(jié)

1.涉及數(shù)據(jù)更新的操作必須在transactionWithBlock中完成(或者用

[realm beginWriteTransaction]和[realm commitWriteTransaction])。

2.注意一對多關(guān)系中的協(xié)議的宏定義以及反向鏈接中的變量定義笆呆。

3.多線程不能共享Realm對象请琳。多線程調(diào)用transactionWithBlock更新數(shù)據(jù)時,后調(diào)用的線程會阻塞直到前一個線程完成數(shù)據(jù)更新赠幕,如果是查詢數(shù)據(jù)則不受影響俄精。

3.一個線程的transacWithBlock如果沒有執(zhí)行完成,則數(shù)據(jù)更新并沒有寫到磁盤上劣坊,因此這個時候在其他線程中看到的數(shù)據(jù)還是它的快照版本嘀倒,并不是新的數(shù)據(jù)。見多線程例子局冰。

5>代碼

本文示例的代碼地址:

https://github.com/shishujuan/ios_study/tree/master/realm/RealmStart

參考資料3的Objective-C實現(xiàn)的代碼地址:

https://github.com/shishujuan/ios_study/tree/master/realm/RealmDemo

6>參考資料

深入理解 Realm 的多線程處理機制

Realm官方文檔

raywenderlick的RealmTutorial

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末测蘑,一起剝皮案震驚了整個濱河市康二,隨后出現(xiàn)的幾起案子碳胳,更是在濱河造成了極大的恐慌,老刑警劉巖沫勿,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挨约,死亡現(xiàn)場離奇詭異味混,居然都是意外死亡,警方通過查閱死者的電腦和手機诫惭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門翁锡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人夕土,你說我怎么就攤上這事馆衔。” “怎么了怨绣?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵角溃,是天一觀的道長。 經(jīng)常有香客問我篮撑,道長减细,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任赢笨,我火速辦了婚禮未蝌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘茧妒。我一直安慰自己树埠,他們只是感情好,可當我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布嘶伟。 她就那樣靜靜地躺著,像睡著了一般又碌。 火紅的嫁衣襯著肌膚如雪九昧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天毕匀,我揣著相機與錄音铸鹰,去河邊找鬼。 笑死皂岔,一個胖子當著我的面吹牛蹋笼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播躁垛,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼剖毯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了教馆?” 一聲冷哼從身側(cè)響起逊谋,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎土铺,沒想到半個月后胶滋,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體板鬓,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年究恤,在試婚紗的時候發(fā)現(xiàn)自己被綠了俭令。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡部宿,死狀恐怖抄腔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情窟赏,我是刑警寧澤妓柜,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站涯穷,受9級特大地震影響棍掐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拷况,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一作煌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赚瘦,春花似錦粟誓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至揽咕,卻和暖如春悲酷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背亲善。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工设易, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蛹头。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓顿肺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親渣蜗。 傳聞我的和親對象是個殘疾皇子屠尊,可洞房花燭夜當晚...
    茶點故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容