Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Slim3事例報告

8,057 views

Published on

  • Be the first to comment

Slim3事例報告

  1. 1. GAE/Slim3 実案件での事例報告
  2. 2. <ul>自己紹介 </ul><ul>石井賢司(いしいけんじ) http://twitter.com/knj77 http://d.hatena.ne.jp/knj77 株式会社Prophet所属 </ul>
  3. 3. <ul>プロジェクト概要 </ul><ul>運送料金オンライン見積りシステム <ul>http://giga-dokuji.appspot.com/ http://www.mixcargo.jp/ </ul><li>管理者:運送業者様
  4. 4. 利用者:荷主様
  5. 5. 2つのバージョン </li><ul><ul><li>複数の運送業者のサイトに Iframe 表示
  6. 6. 1サイトに複数業者が出展(準備中) </li></ul></ul></ul>
  7. 7. <ul>全体設計 </ul>TQで作成 検索
  8. 8. <ul>体制/期間 </ul>3 人で約 3 週間 <ul><ul><li>石井と新人2人
  9. 9. 経験としては、 </li><ul><ul><li>Slim3 のチュートリアル実施
  10. 10. 自社サイト ( 静的 ) を GAE/J に移行
  11. 11. お問い合わせフォーム作成 </li></ul></ul></ul></ul>
  12. 12. <ul>GAE/Slim3 を選んだ理由 </ul><ul><li>やりたかったから!
  13. 13. Seasar ( SAStruts )の経験
  14. 14. ほぼ完成の時期( 1get !?) </li><ul><li>gtx 初回実装直後、ただし本案件では未使用 </li></ul></ul>
  15. 15. <ul>( GAE で ) 苦労した点 </ul><ul><li>エンティティグループ
  16. 16. インデックス爆発
  17. 17. Datastore の分間制限
  18. 18.  ->つまりは Model の設計 </li></ul>
  19. 19. <ul>エンティティグループ </ul><ul>わかってなかった! 公式ドキュメントから読み始めため、 JDO とごっちゃに。 -> ドキュメント読み直し -> Twitter( #appengine ) 偉大 </ul>-> 「 EG は tx の為だけに存在する。 <ul>  RDB 的な小綺麗さは必要ない。」   by ひがさん </ul>
  20. 20. <ul>インデックス爆発 </ul><ul>重要な問題 <li>インデックス爆発=サービス停止
  21. 21. 検索条件が複雑なため検索用 Entity 設計の見極めが必要だった。 [図解インデックス爆発] </li><ul><li>都道府県 List
  22. 22. 距離範囲検索
  23. 23. ランキング表示(ソート)
  24. 24. -> Slim3 の filterInMemory 、 sortInMemory で解決 </li></ul></ul>
  25. 25. <ul>Datastore の分間制限 </ul><ul><li>原則「 SELECT は頑張らない。 INSERT 超頑張る!」 ->頑張るにも限度がある!! </li><ul><li>Datastore の制限は課金設定時も最大約 2,500 件 / 分間。課金上げても上限は増やせない。
  26. 26. 検索用 Entity 数十万件の場合 TQ で PUT すると、分間の OverQuota 発生(=サービス停止)
  27. 27. QverQuota 時の TQ リトライで CPU バカ喰い
  28. 28. TQ を 1 分置きにすると消化まで数時間!
  29. 29. 差分更新はできない。
  30. 30. -> Entity 減らして SELECT 時も頑張る! </li></ul></ul>
  31. 31. <ul>Slim3 すごい </ul><ul><li>xxxInMemory でインデックス爆発回避
  32. 32. 更に filter,sort と xxxInMemory は分離できる! </li></ul>ModelMeta m = new ModelMeta(); List<Model> result = Datastore.query(Model.class) .filter(m.aaa.equal(param1)) .filterInMemory(m.bbb.equal(param2)) .asList(); if (result != null) { // 処理を中断してゴニョゴニョできる! for(;;) { } // “クエリ”を再開 result = Datastore.filterInMemory(result, m.ccc.equal(param3)); result = Datastore.sortInMemory(result, m.ddd.asc) .subList(0, 10); }
  33. 33. <ul>GAE の課題 </ul><ul><li>Spin-up 問題 </li><ul><li>Iframe だと特に気になる
  34. 34. -> 「アクセスが多ければ遅くならない」と </li></ul></ul> 暗に責任転嫁するライフハック <ul><li>Quota の警告メール欲しい
  35. 35. SDK のバージョンアップ怖い
  36. 36. <Slim3 の課題 > </li><ul><ul><li>マスコットキャラが必要!? </li></ul></ul></ul>
  37. 37. <ul>GAE の良かった点 </ul><ul><li>コスト </li><ul><li>課金設定するだけで Quota 上がる
  38. 38. 実際はゼロ円 </li></ul><li>うっかりヒット上等
  39. 39. 一度経験すれば、そんなに難しくない?! </li></ul>
  40. 40. ご清聴ありがとうございました おわり

×