上記イベントのJP Simardさんのプレゼンのメモです。
また、Realmの使い方の詳細はこちらです。
http://qiita.com/okitsutakatomo/items/9134c5fa8bd4384a2acf
Realm概要
- クライアントサイド向けデータストア。SQLiteに置き換わる可能性のあるプロダクト
- 8ヶ月前ぐらいに公開。iOS/Androidバインディングのみ公開。Coreは非公開
- サーバサイドのDBイノベーションはここ数年かなり活発なのに対し、クライアントはSQLiteがリリースされて以降、全くイノベーションが起こっていない
- JPさんは、SQLiteのコミッターとしてしばらく活動してきたが、SQLiteよりもいいものが作れる気がしたのでRealmを作りはじめた。開発期間:4年
- 発音は「レルム」
CoreData
- 10年以上前のもの
- 遅い
- 学習コストかかる
- アップルしかつかえない
SQLite
- CoreDataより早い
- iOSに最適化されている
- クロスプラットフォーム
- 14年以上の開発期間
- 悪いユーザ体験
- 手動のデータマッピングとクエリ
Other Options
- FMDB
- YapDatabase
- CouchbaseLite
- LevelDB
パフォーマンス
- Insert
- 生SQLite > Realm > FMDB > CoreData > YapDatabase
- Realm は、生SQLiteよりも遅いが、コードのメンテナンス性や書き易さの面を考慮して作っている -Count, Query
- Realmダントツ
- デーブルからRowデータを引っ張るのではなく、ディスクから直接データを引っ張っているので早い
モデルオブジェクト
- クラスがそのままテーブルになる。モダン
Thread
- 別スレッドでも書き方は同じ。ただし、オブジェクトがThreadを超えることはできない。
Notification
- Fine-grain Notifications Coming Soon!!
Work In Progress
- MultiProcess (appとwatch appでとか)
- Fine-grain Notification
- Async Queries
- Cascading deletes
- Nullable types
- null入れられないからいられるようにしたい
- Sync
- Open source Code - データベース自体のCoreのオープン化
Where is Realm used?
- Groupon
- Coinbase
- Buzzfeed
- Macaroni(made in Japan)
- Aplos(made in Japan)
Q&A
-
FetchedResultsControllerみたいなものを用意する予定はあるか?
- sectionとrowを便利に使える部分は、Realmでもすでにsampleがある。
- 更新オブジェクトの通知部分は、Fine-grain Notificationで対応される予定。
-
Realmはディスクに書き込むから早いと何度か言っていたが、感覚的にはメモリのほうが早いイメージ。どういうこと?
- 大きな理由は、早くなるから。
- SQLiteは、一回メモリに展開している。Realmではそのあたり省いて直接ディスクに書いている。
-
もし、SQLiteとか似たようなライブラリよりも遅くなるケースはあるか?
- 一般的な仕様はベンチマークの通り
- クエリ文の組み立てはRealmが早い
- SQL次第でパフォーマンスが逆転する可能性もある。
- Realmは、 IN句は遅い 。日々改善している。
-
AutoIncrementはないか?
- 現状ではサポートする予定はない。