iOS 資料庫比較:SQLite vs. Core Data vs. Realm
如果你想開發一個能夠快速運行並沒有Bug的偉大應用,你就必須得仔細的考慮一下你的應用的各個方面。有這麼一個你必須解決的方面是怎樣儲存和查詢大資料,那麼你就很可能會使用到資料庫。在大多數情況下,IOS 資料庫都會選擇SQLite和Core Data,還有一個相對較新的資料庫Realm。
這篇文章講述了每種選擇的優缺點,並討論了如果你已經使用了SQLite 或 Core Data,那麼怎麼轉換到Realm的過程。
SQLite
SQLite是在世界上使用的最多的資料庫引擎,並且還是開源的。它實現了無配置,無服務需求的交易資料庫引擎。SQLite可以在Mac OS-X, iOS, Android, Linux, 和 Windows上使用.
由於它是使用ANSI-C開發的,因此它提供了一個簡單的,方便使用的編程介面。SQLite也是一個小的,輕量級的,可以被儲存在跨平台磁碟檔案的完善的資料庫。
SQLite之所以這麼流行的原因是:
- 獨立於伺服器
- 零配置
- 多進程和線程下安全訪問。
- 在表中使用含有特殊資料類型的一列或多列儲存資料。
如何在 Ubuntu 15.04 上安裝帶 JSON 支援的 SQLite 3.9.1
SQLite3簡單操作
SQLite3中儲存類型和資料類型結合文檔解析
SQLite3 安裝、基本操作
Ubuntu 12.04下SQLite資料庫簡單應用
Ubuntu 12.04下安裝 SQLite及其使用方法
SQLite 資料庫入門基礎教程
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的系統。早期版本的系統並不支援本機存放區與資料庫的全新的簡單解決方案。
切換到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 儲存檔案,下次應用啟動的時候重新開始。
關鍵是要在使用最好的技術和工具的時候保持你設計的流程簡單。一旦你花費時間在建立了你的行之有效流程,就不要讓“新的吸引力”帶你走。讓“新的”成為你的流程的一部分,然後讓時間決定是否值得。
英文原文:iOS Database Comparison: SQLLite vs. Core Data vs. Realm
本文永久更新連結地址: