iOS 數據庫比較:SQLite vs CoreData vs Realm
來自: http://www.oschina.net/translate/ios-databases-sqllite-vs-core-data-vs-realm
如果你想開發一個能夠快速運行并沒有Bug的偉大應用,你就必須得仔細的考慮一下你的應用的各個方面。有這么一個你必須解決的方面是怎樣存儲和查詢大數據,那么你就很可能會使用到數據庫。在大多數情況下,IOS 數據庫都會選擇SQLite和Core Data,還有一個相對較新的數據庫Realm。
這篇文章講述了每種選擇的優缺點,并討論了如果你已經使用了SQLite 或 Core Data,那么怎么轉換到Realm的過程。
</div>
SQLite
SQLite是在世界上使用的最多的數據庫引擎,并且還是開源的。它實現了無配置,無服務要求的事務數據庫引擎。SQLite可以在Mac OS-X, iOS, Android, Linux, 和 Windows上使用.
由于它是使用ANSI-C開發的,因此它提供了一個簡單的,方便使用的編程接口。SQLite也是一個小的,輕量級的,可以被存儲在跨平臺磁盤文件的完善的數據庫。
SQLite之所以這么流行的原因是:
-
獨立于服務器
-
零配置
-
多進程和線程下安全訪問。
-
在表中使用含有特殊數據類型的一列或多列存儲數據。
Core Data
Core Data 是App開發者可以使用的第二大主要的IOS存儲技術。你需要根據數據類型和數據量進行管理和存儲,SQLite和Core Data都有它們各自的優缺點。Core Data 更加關注于對象而不是傳統的表數據庫方法。使用Core Data,你可以存儲一個Objective-C類的對象。
盡管它們從本質上不相同,但是Core data::
-
比SQLite使用更多的內存。
-
比SQLite使用更多的存儲空間。
-
比SQLite在取數據方面更快。
Realm
Realm 是個新技術。Realm天生比前面提到的數據庫解決方案更快,更高效。新的解決方案就叫做Realm,它是一個跨平臺的移動數據庫。它可以在Objective-C 和Swift中使用,并且它是專門為 iOS 和 Android設計的數據庫。
Realm最主要的優勢是:
-
絕對免費
-
快速,簡單的使用
-
沒有使用限制
-
為了速度和性能,運行在自己的持久化引擎上。
最棒的是你通過兩行代碼就可以處理所有的工作。Realm相比于SQLite和Core Data而言,更易于安裝并且運行的更快。不僅如此,數據庫文件還可以在iOS和Android上通用。
如果你正在設計一款面向很多用戶,有很多記錄的程序,那么你從設計的一開始就需要特別注意它的可擴展性。Realm在這方面非常出色,并且能夠讓你快速的操作大量數據。
想要開始使用Realm,你所需要的僅僅是最低iOS 8或者OS X 10.9的系統。早期版本的系統并不支持本地存儲與數據庫的全新的簡單解決方案。
</div>
切換到Realm
如果你已經使用了Core Data,并且你想轉換到Realm,過程很簡單。很多開發者用了一兩小時就完成了。注意Core Data 和 Realm 都是以對象的形式處理數據的,因此你只需要重構Core Data 代碼,使用Realm就可以了。
Realm已經 概括了切換的過程 , 這里是我對它的總結:
-
移除 Core Data 框架。 定位你代碼中包含Core Data 代碼的部分,然后重構。它們總結了一個很好的方法來幫助使用 Core Data的每一行代碼拋出編譯錯誤。
-
移除 Core Data 安裝部分的代碼。 你的應用里的某個地方一定有Core Data 安裝代碼的部分,你必須徹底的移除掉Core Data 。Realm在你第一次訪問Realm對象的時候就會立馬自動配置。你可以選擇你想存儲Realm數據文件的位置,但在運行時,你仍然可以選擇。
-
遷移你的模型文件 。 你可以可容易的轉換管理對象的子類到Realm。Realm為了讓類標頭看起來更小些,在內部管理屬性關鍵詞(你不必自己指定它們)。你可以安全的去掉所有NSNumber的東西,因為Realm支持簡單的數值類型(NSInteger和CGFloat)。但是Realm也有一些限制。不像Core Data的數據對象使用NSManagedObjectID來確定對象的唯一性,Realm把這個交給開發人員來管理。第二,當前版本的Realm還不能處理含有nil值的對象屬性。這是一個小問題,但是在下一個版本里開發人員有望解決這個問題。
-
遷移你的寫操作。Realm的保存操作和Core Data 有一點不相同的地方,你得了解這個問題,一旦把Realm數據對象添加到Realm對象,就不能被修改了。這確保了數據在不同線程下的一致性。為了能夠修改屬性。這些被保存的對象必須在’寫’的事務里。
-
遷移你的查詢,讓你的查詢,在需要時可以檢索到你的數據。在Core Data里,為了取一個文件,你需要寫將近10行的代碼。但是在Realm里僅僅需要一行就夠了。
-
遷移用戶在Core Data里產生數據,你可以在應用里重新連接Core Data框架,然后用它去數據,傳遞給Realm。對于那些可替代的用戶數據有一個簡單的解決方案就是刪除所有的Core Data 保存文件,下次應用啟動的時候重新開始。
關鍵是要在使用最好的技術和工具的時候保持你設計的流程簡單。一旦你花費時間在建立了你的行之有效的流程,就不要讓“新的吸引力”帶你走。讓“新的”成為你的流程的一部分,然后讓時間決定是否值得。