SlideShare a Scribd company logo
Google App Engineとその影響 2009/11/13 きしだ なおき Javaコミュニティ@九州 例会
自己紹介 きしだです。
なぜクラウドか
初期のネットワーク
構造化されたネットワーク サーバーごとに役割を決める
データの内容でも構造化 ex:はてなはidごとに サーバーをわける
ex:2chは板ごとに サーバーをわける
ネットワークへ携帯端末の参加
端末の大きさと通信頻度
端末の大きさと端末の数
つまり全体の通信量
構造化されたネットワーク 再配置が追いつかない
爆発する通信に対応できない
WEB+DB PRESSのヤフオクみたいなことを今はできない。
クラウド 構造化しない
すべてのサーバーですべての処理
Google App EngineとAmazon EC2
Amazon EC2は仮想サーバー貸し サーバーを存在させただけ課金
なんでもできる
アクセスがなくても課金される
サーバーの設定は自分で
サーバーの構成は自分で
つまり、クラウド上の構造化サーバー
Google App Engineはリソース貸し リソースを使っただけ課金
アクセスがなければ課金されない
制約が大きい スレッドが起動できない
リレーショナルデータベースではない
データをまたがるロックができない データは複数サーバーに配置されるので、複数サーバーがロックされる
Google App Engineの機能
分散key-value-store 各データはどこかのノードに配置される
データはProtocolBuffersでシリアライズされて格納される Protocol Buffers ・・・ Googleのシリアライズ仕様 RDBとの設計思想の転換 RDB:データをストレートに格納して抽出時に処理
GAE:データを処理して格納してストレートに抽出
Google App Engineでのデータストア データは分散して配置される
JDOとネイティブAPI JDO コード書きやすいけど制約
GAEのすべてを使い切れない
実装が未熟 クエリー最適化
バグ ネイティブAPI(low level API) 仕様が小さい
GAEのすべてを使える
コードめんどくさい
JDO
準備 PersistenceManagerFacoryを取得するコード Googleのドキュメントに書いてあるコード public final class PMF { private static final PersistenceManagerFactory pmfInstance = JDOHelper.getPersistenceManagerFactory("transactions-optional"); private PMF() {} public static PersistenceManagerFactory get() { return pmfInstance; } }
エンティティ定義 アノテーションでいろいろ指定 @PersistenceCapable(identityType = IdentityType.APPLICATION) public class Member { @PrimaryKey @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) private Key id; @Persistent // @javax.jdo.annotations.Unique unique属性は効かない private String screenName; @Persistent private String name;
登録 オブジェクトを生成してmakePersistentする //データベース登録 PersistenceManager pm = PMF.get().getPersistenceManager(); Member m = new Member(screenName, name); try{ pm.makePersistent(m); }finally{ pm.close(); }

More Related Content

Google App Engineとその影響(補足)