#ajn5 へ行ってきた

今回で4回目

内容を詳しくまとめたサイトは誰かが作ってくれると思うので、メモった内容を書く。

モデルを正規化しすぎない

Datastoreへの問い合わせ回数が多いと、それだけ時間がかかるよということ。RDBMSだと正規化してもJOINできるから問題ないけど。
これに関連して、内容に変更が発生した場合にどうやってデータの整合性をとるか?という話があったけど、バッチ処理などで対処するってことでした。(これはまだ正解がないっぽい)

クエリは時間がかかる

なので、キーで取得すること。
これは以前から聞いていたので検証をしてみた。で、2〜3倍程度時間がかかることがわかった。
あと、SDK 1.3.1になってクエリが早くなったらしい。

モデルのプロパティ名が長いと、その分データがでかくなる

これはtwitterのTLでも流れてたなと。検証はしてないけど。

インデックスがあるとputに時間がかかる

pythonだとプロパティのインデックスを作らない指定ができるんだなと。
また、インデックスをfalse⇒trueにした場合、putしなおさないとインデックスは作られないとのこと。
で、知ったのだけど、

  • インデックスが無いと、検索結果に出ない
  • また、ソートしたら検索結果に出ない

とのこと。これは、検索・ソートにインデックスを利用するから当たり前といったらそうだけど。
ちょっとハマりそうなポイントかなと。

またまた、大量にデータを登録した場合にインデックスが作成されないことがあるらしい。
これに関しては、トランザクション内でget/putしなおせばOKらしい。

スピンアップは10秒以内

だそうです。レスポンスは30秒とあるけど、スピンアップされる場合を考慮すると、限度は10秒と考えておいたほうがよい。

SDK 1.3.1

上でクエリが早くなったと書いたけど、ほかにも

  • トランザクショナルキュー
  • カーソルのサポート

とかがあるそうだ。使ってないから詳細は不明。
ページングとか必要になったらカーソル使ってみるか。

Global Transaction

恥ずかしながら2フェーズコミットなんて知らなかった。なので、そのあたりから理解しないとなと。
エンティティ・グループを考えずにトランザクションが使えるけど、その分時間がかかったりで、よいことだけではないらしい。
また、エンティティ・グループのロックを行うらしいので、エンティティ・グループの設計はやはり気をつけないとだめらしい。

モデルのKeyは事前に準備しておく

putしてエラーが発生したけど実は登録されていた場合とかに(←こんなことがあるらし)、putをリトライすると同じデータが重複して登録されてしまうから。Datastoreでは0.1〜0.2%程度エラーが発生するらしい。
タスクキューも、2回以上実行されてしまうことがあるらしいので、その場合を想定したコーディングが必要かも。

最後に、モデルのバージョンが上がったときの話があった。
で、認識の間違いに気づいたんだけど、後から追加したプロパティの値はnullでもないらしい。
また、上でも書いたけどインデックスされていないので、クエリやソートで検索結果に出ない。


今回も楽しかった。経験をつまれた方々のお話は、知識が少ないので非常に役立つ。
次回も是非参加したい!!!