Realm,一個跨平臺、高效能的資料庫
為什麼要使用Realm?
1、簡單易用
Realm並不是一個建立在SQLite之上的ORM,而是一個基於自己的持久化引擎,簡單並且快速的物件導向移動資料庫。我們的使用者們說分分鐘就學會了怎樣使用Realm,遷移App到Realm也不過只需要花幾個小時,方便的Realm為他們省卻了數週的開發工作。
2、跨平臺
Realm支援iOS、OS X(Objective-C和Swift)以及Android。Realm檔案可以跨平臺共享,讓Java、Swift和Objective-C使用相同的抽象模型訪問,從而讓您在各個平臺上使用盡可能相似的業務邏輯。
3、快速
得益於zero-copy的設計,Realm比普通的ORM要快很多,甚至比單獨無封裝的SQLite還要快。請參考iOS benchmark和Android benchmark,或者看看我們的使用者們在Twitter上怎麼說。
4、支援
您可以通過以下渠道獲得迅速的官方支援:Github、StackOverflow、Twitter、微博。
安裝
系統要求
1、使用 Realm 構建應用的基本要求:iOS >= 7, OS X >= 10.9,並且支援 WatchKit;
2、需要使用 Xcode 6.4 或者以後的版本;
3、程式支援Objective-C, Swift 1.2 & Swift 2.x。
動態框架
注意:動態框架與 iOS 7 不相容,要支援 iOS 7 的話請使用"靜態框架"。
1、下載最新的Realm發行版本,並解壓;
2、前往Xcode 工程的"General"設定項中,從ios/dynamic/、osx/、tvos/或者watchos/中將"Realm.framework"拖曳到"Embedded Binaries"選項中。確認Copy items if needed被選中後,點選Finish按鈕;
3、在單元測試目標的”Build Settings”中,在”Framework Search Paths”中新增Realm.framework的上級目錄;
4、如果希望使用Swift載入Realm,請拖動Swift/RLMSupport.swift檔案到 Xcode 工程的檔案導航欄中並選中Copy items if needed;
5、如果在 iOS、watchOS 或者 tvOS 專案中使用 Realm,請在您應用目標的”Build Phases”中,建立一個新的”Run Script Phase”,並將這條指令碼複製到文字框中。 因為要繞過APP商店提交的bug,這一步在打包通用裝置的二進位制釋出版本時是必須的。
bash "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/Realm.framework/strip-frameworks.sh"
靜態框架
1、下載 Realm 的最新版本並解壓;
2、將 Realm.framework 從 ios/static/ 資料夾拖曳到您 Xcode 專案中的檔案導航器當中。確保 Copy items if needed 選中然後單擊 Finish;
3、在 Xcode 檔案導航器中選擇您的專案,然後選擇您的應用目標,進入到** Build Phases** 選項卡中。在 Link Binary with Libraries 中單擊 + 號然後新增 libc++.dylib;
4、如果你在用 Swift 來使用 Realm,那麼將位於 Swift/RLMSupport.swift 的檔案拖曳進您 Xcode 專案中的檔案導航器當中,確保 Copy items if needed 選中。
從這裡開始
Objective-C版本的 Realm 能夠讓您以一種安全、耐用以及迅捷的方式來高效地編寫應用的資料模型層,如下例所示:
// 定義模型的做法和定義常規 Objective-C 類的做法類似
@interface Dog : RLMObject
@property NSString *name;
@property NSInteger age;
@end
RLM_ARRAY_TYPE(Dog)
@interface Person : RLMObject
@property NSString *name;
@property NSData *picture;
@property RLMArray<Dog *><Dog> *dogs;
@end
//-------------------------------------------
// 使用的方法和常規 Objective-C 物件的使用方法類似
Dog *mydog = [[Dog alloc] init];
mydog.name = @"大黃";
mydog.age = 1;
mydog.picture = nil; // 屬性的值可以為空
NSLog(@"狗狗的名字: %@", mydog.name);
//-------------------------------------------
// 檢索 Realm 資料庫,找到小於 2 歲 的所有狗狗
RLMResults<Dog *> *puppies = [Dog objectsWhere:@"age < 2"];
puppies.count; // => 0 因為目前還沒有任何狗狗被新增到了 Realm 資料庫中
//-------------------------------------------
// 資料持久化操作十分簡單
RLMRealm *realm = [RLMRealm defaultRealm];
[realm transactionWithBlock:^{
[realm addObject:mydog];
}];
//-------------------------------------------
// 檢索結果會實時更新
puppies.count; // => 1
//-------------------------------------------
// 可以在任何一個執行緒中執行檢索操作
dispatch_async(dispatch_queue_create("background", 0), ^{
Dog *theDog = [[Dog objectsWhere:@"age == 1"] firstObject];
RLMRealm *realm = [RLMRealm defaultRealm];
[realm beginWriteTransaction];
theDog.age = 3;
[realm commitWriteTransaction];
});
相關資料
https://github.com/realm/realm-cocoa
https://realm.io/cn/docs/objc/latest/#section
Clang的技術部落格:https://chenhu1001.github.io
相關文章
- 跨平臺資料庫 Realm 整合實踐資料庫
- 5個免費、跨平臺的SQLite資料庫視覺化工具SQLite資料庫視覺化
- .NET 8 高效能跨平臺影像處理庫 ImageSharp
- 一個高效能跨平臺基於Python的Waitress WSGI Server的介紹!PythonAIServer
- 利用Flutter寫一個跨平臺的果核APP(4)——資料儲存FlutterAPP
- 基於canvas實現的高效能、跨平臺的股票圖表庫--clchartCanvas
- 資料庫平臺資料庫
- 4個.Net跨平臺圖形開源庫
- 使用docker建立和執行跨平臺的容器化的mssql資料庫DockerSQL資料庫
- JetBrains DataGrip 2024.2 (macOS, Linux, Windows) - 資料庫和 SQL 跨平臺 IDEAIMacLinuxWindows資料庫SQLIDE
- Azure data studio 跨平臺資料庫管理工具試用資料庫
- Realm資料庫 從入門到“放棄”資料庫
- long資料型別跨平臺問題資料型別
- 一個浮點數跨平臺產生的問題
- oracle資料庫跨平臺(AIX)從RAC恢復至(linux)下的單例項Oracle資料庫AILinux單例
- 跨平臺資料庫工具:DbVisualizer Pro 10 for Mac v10.0.20啟用版資料庫Mac
- Apache Wayang :跨平臺資料處理系統Apache
- 搭建一個強大的資料平臺,讓你的資料分析事半功倍!
- 【資料庫學習】資料庫平臺:mysql,sql server資料庫MySqlServer
- 利用Flutter寫一個跨平臺的果核APP(0)——介紹FlutterAPP
- Go 跨平臺 UI 庫來了 fyneGoUI
- 移動資料庫 Realm 在 React-Native 的使用詳解資料庫React
- C++跨平臺庫boost和Poco的編譯C++編譯
- .NET跨平臺繪圖基礎庫--SkiaSharp繪圖
- .NET 8 跨平臺高效能邊緣採集閘道器
- JAVA的跨平臺原理Java
- rust跨平臺Rust
- 資料分析平臺哪個好
- 資料平臺、大資料平臺、資料中臺……還分的清不?大資料
- 用傳輸表空間跨平臺遷移資料
- 全平臺資料(資料庫)管理工具 DataCap 管理 Rainbond 上的所有資料庫資料庫AI
- 一個簡單而美觀的跨平臺播客應用程式
- 推薦一個可以讓 go 程式跨平臺簡單部署的包Go
- 資料安全的下一個風口:SASE雲服務平臺
- Flutter - 不一樣的跨平臺解決方案Flutter
- efcore 跨表查詢,實現一個介面內查詢兩個不同資料庫裡各自的表資料資料庫
- 高手過招不用滑鼠,一款超好用的跨平臺命令列介面庫命令列
- CloudQuery(統一資料操作平臺)Cloud
- 一個基於.NET Core開源、跨平臺的倉儲管理系統