appengine ja night #5に行ってきた。 #appengine #ajn5 - あおうさ@日記(情報元のブックマーク数)

メモメモ。ひがさんに一度お会いしたいな!

ajn5ではpythonは松尾さん、javaはひがさん。お二人とも有名なフレームワーク開発者という超豪華メンバーだった。その影響かATNDの申し込みは24時間たたずに定員オーバー、申し込みが軽く100人を超えて定員を10人増やすという事になりました。AppEngine人気ですね。

appengine ja night #5に行ってきた。 #appengine #ajn5 - あおうさ@日記

このあたりは良く読んでおこう。

アンチパターンの紹介でした。アンチパターンとその解決策をコードで紹介して頂けるという濃い内容でした。自分の知らないアンチパターンが見つかると事前に問題を回避できるのですごくためになりますね。

  • 非正規化
    • 正規化しすぎないで冗長にデータを保持しようという話。しかし、セッション中に今は検索も早くなっているので変更が入りそうな場合は正規化してもいいかもという話だった。この辺りはバランスですね。
  • 不要なインデックス
    • 検索に使用しないインデックスは作成しないようにindexed=Falseを指定した方がいいよという話。インデックスを作成するとその分Datastoreの容量を消費してしまう。また、可能であればプロパティ名も短いほうが容量節約にはいいとの事。
appengine ja night #5に行ってきた。 #appengine #ajn5 - あおうさ@日記

Transaction Task Queueってのが実装されたのか!

スキーマレスなのでレコード毎にインデックスが存在したり、しなかったりという事が発生します。これは要注意ですね。この場合は過去のレコードをget,putをし直してインデックスを作成しましょう。

  • AppEngineではソートにもインデックスが必要になる時がある
    • 「where contents = 'hoge' order by created」みたいなwhere句と異なるキーでorderする場合はインデックスが必要になる。セッション中では可能であればソートはインメモリでするのがいいんじゃないかと言う事だった。
  • Index爆発
    • ListPropertyでコンポジットインデックスを作成するとListに保持している値の組み合わせ分インデックスが作成されてしまう。その結果インデックスの最大件数5000を超えてエラーになってしまうよという話。
      • この辺りの話Big Entities and Exploding Indexes (Slim3)
  • モジュールロードの遅延
    • 通常はモジュールのロードはプログラムのはじめに宣言して使用するが、AppEngineではspin upの時間もあり可能な限りロードを遅らせた方がいいとの事。
  • SDK1.3.1の新機能 紹介
    • Transactional Task Queue
      • Datastoreでコミットできた場合にのみTask Queueを実行する機能。
appengine ja night #5に行ってきた。 #appengine #ajn5 - あおうさ@日記

screenshot