強火で進め

このブログではプログラム関連の記事を中心に書いてます。

「Realm Tech Talk with JP Simard #1」に参加してきました

募集ページ

Realm Tech Talk with JP Simard #1 - connpass
http://realm.connpass.com/event/11814/

Realm とは?

Realm の読み方は「レルム」。最近、その動作速度の面などで話題に成っている主にモバイル向けを想定した DB 。想定される活用シーンは現在、 SQLite を使っている様な場面。

Realm: a mobile database that replaces Core Data & SQLite
http://realm.io/

iOS - 次世代mobile版データベース"Realm"を使ってみた - Qiita
http://qiita.com/moriyaman/items/1a2916f4c2b79e934370

Swift + Realm DB をCocoaPodsで導入する手順 - Qiita
http://qiita.com/matscube/items/3ed7de879f4efd460c44

Togetter まとめ

Realm Tech Talk with JP Simard #1 - Togetterまとめ
http://togetter.com/li/786086

セッション

Tech Talk with JP Simard from Realm 登壇者:JP Simard @simjp

※開発者の一人 JP Simard によるセッション

環境は iOS/Android をサポート(筆者注: Mac にも対応)

完全に新規作成されたもの

エンジン部分は C++

マルチプロセスをサポート予定

ライセンスは Apache 2

CocoaJava バインディングが有る

新しい DB は2007年から急増

PC では KVS やマルチプロセスなど新しいイノベーションを含んだ実装が出てきている

その辺りをモバイルに持って来たかった

Core Data の特徴

SQLite の特徴

その他の DB

  • FMDB

本体の変更が有った時に修正が必要

ccgus/fmdb
https://github.com/ccgus/fmdb

  • YapDatabase

クエリーベースでオブジェクトが取得出来ない。 O/R マッピングを自分で作る必要が有る

Views · yapstudios/YapDatabase Wiki
https://github.com/yapstudios/YapDatabase/wiki/Views

  • Couchbase Lite

Couchbase Lite | Couchbase - Mobile Developers
http://developer.couchbase.com/mobile/develop/guides/couchbase-lite/

  • LevelDB

google/leveldb
https://github.com/google/leveldb

LevelDB入門 (基本編) - from scratch
http://yosuke-furukawa.hatenablog.com/entry/2014/05/05/095207



■ 200k 個のデータを Insert した時のベンチマーク



■ Count のベンチマーク



■ Query に一致したレコードを反復処理した時のベンチマーク

GUI を使ったエディタからコードを生成するツールがある

オブジェクト指向で DB を使いたいという思想で実装


配列はマクロで実装

DB カラム == Objective-C のプロパティ

ignore プロパティを設定すると使わないカラムを指定する事も可能


swift で書く場合にはプロパティに dynamic 属性を指定


他の DB の場合には複数のステップが必要なものが多いが、 Realm では1ステップで直ぐに書き込まれる

ドットチェインで条件を複数指定可能

DB の処理をプログラムの中に自然な形で書くことが可能


バックグラウンド処理

トランザクション機能も有る


通知が有る度に Notification が呼ばれ、その時に行う処理を実装可能


現状、 NSDate は秒までしか処理出来ない(ミリ秒部分が無視される)。これはマルチプラットフォームを為に発生している。改善予定

代わりに NSTimeInterval を使って欲しい

通常は独自の Getter/Setter は使えない。定義しても上書きされる


スレッド間のデータのやりとりは今は出来ない

現状クローズドの Core の部分もこれからオープンソースにする予定


■Realm が使われている日本のアプリ

macaroni [マカロニ]
https://itunes.apple.com/jp/app/gurumenotorendomatome-dumi/id871722891?mt=8

Aplos
https://itunes.apple.com/jp/app/aplos/id910000043?mt=8



■Where to find us
Facebook : j.mp/realmjp
Twitter : twitter.com/realm
GitHub : github.com/realm
StackOverflow : stackoverflow.com/questions/tagged/realm


■QA
Q : 言語で複数のプラットフォーム向けに書く事は出来ないか?
A : CocoaJavaバインディングが有るのが… これから統一化できないか頑張ってる


Q : クエリをチェックするコマンドラインツールは有る?
A : 今はない。デスクトップアプリの Realm Browser というツールが公式ページからダウンロード可能


Q : コア部分は SQLite ベースかオリジナルか?
A : SQLite では無い TightDB という実装
※独自実装のエンジンの名前が TightDB みたい

CoreDataはもう古い?新しいモバイルデバイス向けデータベース「Realm」を使ってみた (Swift/Objective-C) - Qiita
http://qiita.com/caesar_cat/items/632d1e85a67f2c65a473



Q : Android の対応状況はこれからも iOS とも足並みを揃えて行く予定ですか?
A : 基本的はどちらも一緒にしていく予定。でも iOS の方が先に実装されるものも出て来るかも


Q : Android ではビルドした時にエラーがでてビルドに失敗したんだけど…
A : 後でコード見ます


Q : インメモリでの実行はサポートされるか?
A : 既に有ります

Cocoa Docs ― Realm: a mobile database that replaces Core Data & SQLite
http://realm.io/jp/docs/cocoa/0.87.1/



Q : 未対応のシンタックスはこれから対応される?
A : 対応済みのものはチュートリアルに記載。サポートしない予定のものはブログにて公開していく予定


Q : Facebook の Parse と比較した事が有るならベンチマークを教えて下さい
A : ロールDBの為だけに Parse を使うのはオススメ出来ない。 Parse 自体は良いもの(ベンチマークについては具体的な話は無し)

realm-javaを使ってみての発表 登壇者:Chatwork 宮下さん @ryugoo_

他の同様のライブラリ



マッパーの比較

マルチスレッドには対応してないのでオブジェクトの ID を渡して、それを元にオブジェクトを生成する処理として実装する必要有り。

アップデートが恐い。 0.01 レベルのアップデートで互換性が無い事が有った






■QA
Q : Realm 使ってて一緒に使うと相性の悪いパッケージは有る?
A : Butter Knife だけはぶつかった事が有る


A : toString や = がオーバーライド出来ないのでデバッグが大変だけどどうしてる?
Q : 別途Dumpする処理を準備している

イベント告知

最後に Realm 関連のイベントの告知が有りました。

Realm meetup #1 - connpass
http://realm.connpass.com/event/12028/

他の参加者のブログ記事

Realm Tech Talk with JP Simard 1 に行ってきました #realm_jp - やらなイカ
http://nowsprinting.hatenablog.com/entry/2015/02/21/191139

関連情報

次世代モバイル向けデータベースRealmを使ってみる-Realm Tech Talkに行ってみた!- | Geekroid(仮)
http://mynavi-agent.jp/it/geekroid/2015/03/realm-realm-tech-talk-.html