Google App Engineを勉強し直しているところ。
正直プログラム的な所はどうでもよくて、
目玉は何と言ってもBigtableと言われるデータストア。
RDBMSではなく、KVSという分散型でのデータ格納方法で
ちょっとどころか か な り 特殊な構造をしている。
そんな時、たまたま興味本位で手に取ったSlim3の本が凄かった。
- オープンソース徹底活用 Slim3 on Google App Engine for Java/ひが やすを
- ¥2,730
- Amazon.co.jp
まだ半分読むか読まないか…というところだけど、
感想としては、
趣味でGAEを遊ぶ分には、別に無くてもいいけど、
ビジネスとしてやるなら、
必 須
じゃないかと。
これまで買った技術書の中では
ワクワクレベルがかなり高い方。
(技術的にも新しい分野だからかもしれないけど・・・。)
Google App Engineで用いるデータ格納方法は
データストアといわれるクラウド環境による分散ストレージなんだけど、
死ぬほど厄介な制約が一つ(ここでも何回か挙げているけど
リクエストが30秒でタイムアウトする。
これは本当に天敵。
何が一番危険かというと、
30秒経ったら、タイムアウトしてしまう
ということではなく、
30秒が実際に経って、タイムアウトする現象が頻発する
ということ。
普通に考えたらリクエストで30秒かかるなんて論外でしょ。
でも、独特の特性を持つデータストアの使い方を間違えると
び っ く り する位簡単に、制約に引っかかる
もう何度目だよってくらいここで文句言ってるけど
実際引っかかるのだからしょうがない。
原因の一つとして、標準で推奨されている
JDOというデータストアにアクセスするフレームワーク?
というのが、
信 じ ら れ な い 位 遅 い
適当にやってた時は
おっせーなー
おっせーおっせー
おっっっせーーーーーーーーー
とか思うくらいだったけど、
ユーザをつかみ取るようなサイトを作るとしたら、
おっっっせーーーー・・・
なんて言ってられない。
JOINが使えないならリクエスト何回でも送ってやるー
とかやってみようものなら
タイムアウトのExceptionが出まくる。
んで、
延ばし過ぎたんだけど、
その冒頭で述べたひがやすおさんが書いたSlim3の本が凄い(2回目
主にGoogle App Engineの"キモ"と思われるデータストアの構造について
細かく解説している。
長くなったけど、今回はその一部分のまとめ。というか復習。(細かくは本を見てちょ
■データストアのインデックスについて
エンティティを自動生成すると自動で生成されるビルトインデックスというモノがある。
自動生成されるものは
・カインドインデックス
→カインドとはRDBMSにおけるテーブルの概念に近く、エンティティ単位のインデックス
・シングルプロパティインデックス
→エンティティが持つプロパティ全てに張られるインデックス(例外除く)
(その他にはカスタムインデックス等がある)
これが結構重要で、データストアはインデックスがないと検索が出来ない。
また、複雑な問い合わせを行う時に
インデックスのせいでクエリの発行の仕方によっては問い合わせが出来ない
事がある。
ex.
select * from hoge where foo = 'foo' or fuga > 20;
とか
select * from hoge where foo != 'foo' and fuga > 20;
がダメ。
これは、データストアが「連続したインデックス」しか検索対象として抽出出来ないため。
どうしてそうなってしまうのか、
どのような原理なのかはここでは書きませんが、
意味わかんない制約とか出来ない事が多過ぎだろ・・・とか思っていたのに
データストアのインデックス構造を知ると、
残念なことに納得出来てしまう。。。
それくらい、データストアにおいて、
インデックスは特殊であり、重要なのです。
Google App Engine for Javaを極めようと考えている人は
まず、データストアのインデックスの理解から入ると良さそうです。