Realm 是什么?
官網(wǎng):https://realm.io/? 中文:?https://realm.io/cn/
個(gè)人推薦看英文的文檔,一個(gè)是慢慢習(xí)慣英文的文檔,而是中文的更新不一定及時(shí)。
官網(wǎng)介紹:
Realm,為移動(dòng)設(shè)備而生
替代 SQLite 和 Core Data。
為你省下數(shù)周的時(shí)間和數(shù)千行的代碼,
幫你創(chuàng)造出更棒的用戶體驗(yàn)。
為什么用Realm?
因?yàn)楣?5年6月準(zhǔn)備開發(fā)一個(gè)新軟件,本地?cái)?shù)據(jù)要求很高,數(shù)據(jù)在獲取回來之后要離線使用,而且需要增量更新、刪除等等。所以就對(duì)現(xiàn)有的數(shù)據(jù)庫框架做了一個(gè)調(diào)查,速度、加密、存儲(chǔ)路徑、學(xué)習(xí)的簡(jiǎn)易程度等。發(fā)現(xiàn)realm完全符合目前的需求,一下是具體情況:
DBFlow:不支持分庫處理,不支持加密(當(dāng)時(shí))
GreenDAO:不支持分庫,官方不支持加密
ActiveAndroid、ORMlite:相對(duì)上面來說,速度較慢,同樣不支持分庫
注:數(shù)據(jù)比較多,同一個(gè)表里面數(shù)據(jù)太多影響查詢速度,在sqlite數(shù)據(jù)達(dá)到上萬條的時(shí)候速度明顯受到影響,如果表里數(shù)據(jù)比較大速度更慢。
Realm性能如何?
具體性能信息:realm-for-android、realm-for-ios,下面我摘取了Android的一些信息。
?插入操作:在同一個(gè)事務(wù)里,每秒插入100K條記錄(越高代表性能越好)

統(tǒng)計(jì)操作:每秒能在100K條數(shù)據(jù)中進(jìn)行查詢后count的次數(shù)(越高代表性能越好)

查詢操作:在100K中進(jìn)行一次遍歷查詢(越高代表性能越好)

在集成的時(shí)候有一個(gè)需要注意的地方,官方提供的gradle是自帶全平臺(tái)支持的,會(huì)引起安裝包比較大,所以使用google推薦的ndk abifilter去除不需要的架構(gòu),減小apk的體積。
Realm不足的地方
數(shù)據(jù)關(guān)聯(lián):
這個(gè)是一般的ORM框架一樣,需要提前建立好關(guān)系,如果你需要臨時(shí)按照一定條件去查詢,只可以分開多次查詢,不可以像sqlite連表查詢。
穩(wěn)定性:
這個(gè)可能和我自己的需求有關(guān),應(yīng)用有一些數(shù)據(jù)是先準(zhǔn)備好的,軟件把數(shù)據(jù)下載下來使用,現(xiàn)在realm還有新的功能在添加,數(shù)據(jù)保存的格式也會(huì)改動(dòng),數(shù)據(jù)庫需要升級(jí)對(duì)我來說比較痛苦。
更新操作:
需要按照條件查詢出來,寫代碼更新,不像sqlite一個(gè)語句搞定。
不支持分頁:
查詢結(jié)果不支持分頁,但是相對(duì)速度快來說應(yīng)該不是個(gè)事情,25k數(shù)據(jù)查詢出來也是在毫秒級(jí)的。
如果你感覺以上都不是問題,歡迎使用。
FAQ:
更多問題可以看官網(wǎng)的FAQ:https://realm.io/cn/docs/java/latest/#faq