sola's note -15ページ目

sola's note

日ごろのメモを書いていきます。何か新しいものを作るために。

改めて本気でWeb開発をしていこうということで、
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を極めようと考えている人は
まず、データストアのインデックスの理解から入ると良さそうです。
さくらインターネットというレンタルサーバでSVN設定を行い、
クライアント側でTortoiseSVNを使用するため設定してみました。

以下はクライアント側の設定手順。
(※サーバで設定していない場合は設定が必要)

1.TortoiseSVNをDL及びインストールする。
2.PC再起動
3.Languageパック(Japanese)をDL及びインストールする。
4.TortoiseSVNの設定画面を開き、GeneralのLanguageで「日本語」を選択する。
5.ローカル任意のディレクトリでTortoiseSVN→ここにリポジトリを作成でローカルのリポジトリ領域を用意
6.TortoiseSVNの設定画面を開き、ネットワークを選択、SSHクライアントに以下のように入力する。
 「"[TortoiseSVNインストールディレクトリパス]\TortoiseSVN\bin\TortoisePlink.exe" -C -l [ユーザ名] -i "[秘密鍵の配置パス]\privete_key.ppk"」
7.TortoiseSVNのチェックアウトでリポジトリのURLに「svn+ssh://[ドメイン]/」を指定して実行。
8.puttyというツールを入れる必要があるかは、未検証。
 (puttyが入った状態でやってしまった。。。)

以上。
これで、SVNを用いてファイルのバージョン管理が出来ます。
GAEでSlim3(GAE用のフレームワーク)を使ってみようという試みの第一歩
EclipseでSlim3を使えるようにする。

・ブランクプロジェクトの入手
 →(http://code.google.com/p/slim3/downloads/list)からslim3-blank-1.0.5.zipを取ってくる。

・Eclipseに↑をインポートする

・次のページに従って初期設定をする
 →http://sites.google.com/site/slim3documentja/getting-started-with-gwt/getting-a-blank-project

・プロジェクトを実行(「実行」から「Webアプリケーションで実行」)
 →http://127.0.0.1:8888/index.html?gwt.codesvr=127.0.0.1:9997が出てくるのでコピー。
 
・コピーしたURLにアクセス
 →Google Web Toolkit Developer Pluginをインストールしていない場合、インストールを要求される。
 (インストールしてからもう一度やると、EclipseのDevelopment ModeコンソールにModule main has been loadedなんて出てくる。
 
・http://127.0.0.1:8888/index.htmlにアクセス
 →「GWT module 'jp.gae.slim3.hoge.Main' may need to be (re)compiled」とかいうポップアップが出てくる。今は無視。
 
ここで環境設定に関してはひと段落。
次はJSPと裏で動くConrollerを用意する。