ITコンサルの日常

ITコンサル会社に勤務する普通のITエンジニアの日常です。

Google App Engine for Java使ってみた

以前書いた、読書ポートフォリオを表示するのをWebアプリ化できないかと思って、
せっかくなのでGAE/Jを使ってみました。
一応できたのがこれ。
http://ssbstat.appspot.com/ssbstat/taka_2
が、むちゃくちゃ遅いです。
(2009/7/29追記)
遅い上に、Amazon Advertising APIにも対応していないので、アプリ殺しました。


最初考えたのが、こんな感じ。

  • Stack Stock Booksから読書データを取得
  • 各ISBN(ASIN)に対して、Amazon Web Serviceよりカテゴリを取得
  • ISBNとカテゴリの対応を集計して、Google Chart APIでグラフ化する


一応これで目的は達成できるわけですが、
さすがに毎回AWSに問い合わせると負荷がすごそうだし、処理の無駄も大きいので、次にこうしました。

  • Stack Stock Booksから読書データを取得
    • 各ISBN(ASIN)がBigTable上にある場合
    • 各ISBN(ASIN)がBigTable上にない場合
      • Amazon Web Serviceよりカテゴリを取得
  • ISBNとカテゴリの対応を集計して、Google Chart APIでグラフ化する


こうすると、AWSに行かなくて良い代わりに、BigTableへのアクセス回数が増えます。
しかも、ISBNの数だけBigTableに行くので、非常に効率が悪いです。
で、今度はこうしてみました。

  • Stack Stock Booksから読書データを取得
  • BigTableをメモリに全て読み込む
    • 各ISBN(ASIN)がメモリ上のBigTable上にある場合
    • 各ISBN(ASIN)がメモリ上のBigTable上にない場合
      • Amazon Web Serviceよりカテゴリを取得
  • ISBNとカテゴリの対応を集計して、Google Chart APIでグラフ化する


こうすると、AWSへのアクセスも最小に抑えつつ、BigTableへのアクセスも1回で済むのですが、
BigTableから取得できる件数は1,000件に制限されているので、
1,000以上の書籍をStack Stock Booksに登録している場合は、対応できません。
うーむ。


そもそもStack Stock Booksのデータと、BigTableのデータを、アプリ上でJOINするという発想がマズいらしい。
Stack Stock BooksのデータもBigTableに載せてしまえば良さそう。
と思ったけど、結局1,000件制限には引っかかるのか。。
うーむ。


やっぱり1,000件制限がある限り、Google App Engineを集計系のアプリで使うのはムリっぽい。