Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

Impression of realm java

Presentation for Realm Tech Talk #1, #2

  • Sé el primero en comentar

Impression of realm java

  1. 1. RealmRealm Tech Talk #1, #2 / Realm Meetup #1 Impression of Realm Java / ver.2
  2. 2. Realm 1. ChatWork 2. Android and SQLite 3. SQLite to Realm 4. Realm impression 5. Advertise
  3. 3. Ryutaro Miyashita Mobile Application Engineer ChatWork, Android Team
  4. 4. ビジネス向けのコミュニケーションサービス テキスト, ボイス, ビデオ, タスク, ファイル共有
  5. 5. 導入社数 57,000 を突破 弁護士事務所や工務店など、非 IT 系にも広がる
  6. 6. ChatWork for Android 2011/06 First Version (Titanium) 2014/04 “Harukas” (Titanium) 2014/12 “The Shard” (Native) 2015/xx Future version (Native)
  7. 7. “The Shard” 会社初のネイティブアプリ Realm を使用 (一部) ChatWork for Android
  8. 8. Android Persistent SharedPreferences か SQLite か
  9. 9. SharedPrefs SQLite XML KVS Easy to use Slow RDBMS SQL Hi-Speed
  10. 10. Select ORM SQLite wrapper library
  11. 11. greenDAO ハイパフォーマンス, 準備が面倒 ActiveAndroid ActiveRecord パターン, 分かりやすい
  12. 12. Select ActiveAndroid 簡単に使えることをまずは重視
  13. 13. @Table(name="rooms") public class Room extend Model { @Column(name="_id", index=true, unique=true) public long _id; @Column(name="name") public String name; } Define
  14. 14. Use Room room = new Room(); room._id = 100l; room.name = "Room name"; room.save();
  15. 15. MAGICAL BUT INSERT is slow 魔法のようだけど、インサートが遅め
  16. 16. 5,000 rooms 1,000 users インサートが遅いと辛い Initialize state……
  17. 17. I need more SPEED! ボトルネックを解消したい!
  18. 18. Realm a replacement for SQLite & Core Data @wasabeef_jp さんの記事と出会えて良かったです
 http://qiita.com/wasabeef_jp/items/92bb700e37a0a57fc765
  19. 19. ActiveAndroid → Realm AA から Realm への置き換えの流れ
  20. 20. 1. AA Model → Realm Bean AA Model から Realm 指定の Bean に http://ja.wikipedia.org/wiki/ネジレフサマメノキ#mediaviewer/File:Parkia_speciosa.JPG
  21. 21. AA @Table(name="rooms") public class Room extend Model { @Column(name="_id", index=true, unique=true) public long _id; @Column(name="name") public String name; }
  22. 22. public class Room extend RealmObject { @PrimaryKey private long roomId; private String name; public void setRoomId(long roomId) { this.roomId = roomId; } public long getRoomId() { return this.roomId; } // name も同様に getter / setter を準備 } Realm
  23. 23. AA Room room = new Room(); room._id = 100l; room.name = "Room name"; room.save();
  24. 24. Realm realm = Realm.getInstance(CONTEXT_OBJECT); realm.beginTransaction(); Room room = realm.createObject(Room.class); room.setRoomId(100l); room.setName("Room name"); realm.commitTransaction(); Realm
  25. 25. 2. Logic → Service Layer RealmObject にはロジックを置けない http://ja.wikipedia.org/wiki/海老名サービスエリア#mediaviewer/File:Ebina-SA-Nobori.JPG
  26. 26. @Table(name="rooms") public class Room extend Model { @Column(name="name") public String name;
 …… public void sendChat(String message) { // Send chat logic } } // room.sendChat("Your message"); AA
  27. 27. Realm public class RoomService {  …… public static void sendChat(long roomId, String message) { // Send chat logic } } // RoomService.sendChat(100, "Your message");
  28. 28. 3. Thread をまたがない Realm X は Thread ごとに参照する http://upload.wikimedia.org/wikipedia/commons/2/21/Naisten_400_m_aidat.jpg
  29. 29. long roomId = 100; Room room = new Select().from(Room.class) .where("_id = ?", roomId) .executeSingle(); …… new Thread(() -> { // RetroLambda // room を使った何か }).start(); AA
  30. 30. Realm final long roomId = 100; Realm realm = Realm.getInstance(CONTEXT_OBJECT); Room room = realm.where("id", roomId).findFirst(); …… new Thread(() -> { Realm realm = Realm.getInstance(CONTEXT_OBJECT); Room room = realm.where("id", roomId).findFirst(); …… }).start();
  31. 31. 4. Realm を close する 使い終わったらお片付け! http://upload.wikimedia.org/wikipedia/commons/b/b6/A_Photograph_of_an_Original_Door_from_the_Bolduc_House_in_Ste_Genevieve_MO.png
  32. 32. new Thread(() -> { Realm realm = Realm.getInstance(CONTEXT_OBJECT); try { Room room = realm.where("id", roomId).findFirst(); …… } finally { if (realm != null) realm.close(); } }).start(); Realm
  33. 33. Realm impression 何が良くて, 何に気をつけたいか
  34. 34. Awesome 良いと思ったところ
  35. 35. 1. Fast 納得いくスピード http://upload.wikimedia.org/wikipedia/commons/f/f0/Ferrari_Formula_1_lineup_at_the_N%C3%BCrburgring.jpg
  36. 36. “RealmCW” ChatWork API を使用 LogCat に処理時間を出力 Realm を使ったデモアプリ
  37. 37. 初期化時間[ms] 0 400 800 1200 1600 ActiveAndroid Realm Nexus 4 / Android 5.0.1 https://api.chatwork.com/v1/rooms INSERT 件数 619 件 1551 414
  38. 38. 2. Fluent API 流れるように使える API http://commons.wikimedia.org/wiki/File:%E5%B2%B7%E5%8E%BF%E6%B4%AE%E6%B2%B3%E6%B9%BF%E5%9C%B0.jpg
  39. 39. RealmResults<Room> results = realm.where(Room.class) .contains( "name", // 検索カラム "YOUR SEARCH TERM", // 検索語 RealmQuery.CASE_INSENSITIVE // 大文字小文字区別なし ) .findAllSorted( "sticky", false, // ソート1, 降順 "lastUpdateTime", false // ソート2, 降順 ); Realm
  40. 40. 3. New choice SharedPreferences, SQLite に次ぐ選択肢 http://upload.wikimedia.org/wikipedia/commons/7/7e/BalanceMineralPachuca.JPG
  41. 41. iOS Android Object archive Property list NSUserDefaults Core Data * SQLite base / Raw SQL = FMDB SharedPreferences SQLite * Plain SQL, Content Provider Realm +
  42. 42. Be careful 気をつけたいところ
  43. 43. 1. Multi-thread environment マルチスレッドでの取り扱い http://upload.wikimedia.org/wikipedia/commons/a/a7/Colourful_thread_in_Chinatowns_market_streets_%286491930649%29.jpg
  44. 44. 2. Drastic update 0.01 のアップデートも要注意! http://upload.wikimedia.org/wikipedia/commons/1/10/Various_cutter_knives.jpg
  45. 45. 0.77 1. In-memory Standalone Object 2. “executeTransaction” method // Realm.createObject(MyRealmObj.class) MyRealmObj obj = new MyRealmObj(); …… realm.executeTransaction(_realm -> { _realm.copyToRealm(obj); }); 2015/1/16
  46. 46. 0.78 1. Enable encryption byte[] key = new byte[64]; new Random(365762536).nextBytes(key); // Encrypt realm Realm realm = Realm.getInstance(CONTEXT, key); 2015/1/22
  47. 47. 0.79 1. Primary key 2. Insert or Update = Replace public class MyRealmObj extends RealmObject { @PrimaryKey private long id; } realm.copyToRealmOrUpdate(REALM_OBJECT); 2015/2/16
  48. 48. 3. Read the docs! 迷ったら 英語の ドキュメントを読もう! http://ja.wikipedia.org/wiki/%E6%9C%AC#mediaviewer/File:Livre_Ouvert.jpg
  49. 49. 0.79 0.72
  50. 50. 4. Read the GitHub! “changelog” ファイルを読もう!
  51. 51. まだリリースされていない
  52. 52. Conclusion 結び
  53. 53. 高速, 綺麗な API / 継続的なウォッチ必須 Realm My recommendation Ultra Fast Searchable Cache
  54. 54. Demo apps https://github.com/ryugoo/RealmCW http://qiita.com/ryugoo/items/b2dea8ad4a24fdd620b6 My Qiita article
  55. 55. Advertise 宣伝
  56. 56. エンジニア "大" 募集中です Web apps engineer ReactiveCocoa, Mantle iOS apps engineer Realm, RxJava, RxAndroid Android apps engineer Scala, spray, DDD✎ ✎ ✎
  57. 57. Thank you おしまい :)

×