2011年8月9日火曜日

GAE Bigtable基礎


GAEでデータベースを扱うにはBigtableしか使えない、ということでBigtableについてまとめてみた。

説明
Bigtableとは、Google App Engine(GAE)のデータストアーのこと。
主な特徴としては以下。
  • RDB(リレーショナルデータベース)と異なるキーバリュー型データベース
  • 呼び出し方法には、SQL系とメソッド系の2種類あり
  • RDBほどトランザクション制御に長けてない

またRDBとの主な違いは以下。
  • テーブル ⇒ カインド
  • レコード ⇒ エンティティ
  • データフィールド ⇒ プロパティ
  • 1レコードに「Key」「Value」の1組を格納
  • スキーマ定義は行わない(代わりにデータクラス定義を作成)
実装
説明はこのぐらいで次は実装について。
Bigtableにアクセスするのに必要となるクラスファイルは以下の2つ。
  • データクラス定義ファイル
  • 永続化マネージャクラスファイル

データクラス定義ファイル=RDBでいうTable定義。このクラスを作ることでスキーマ定義とかを行わなくてもBigtableにデータを格納することが可能(なんと便利!!)。
また実際のデータをBigtableに格納したり取り出したりするのに永続化マネージャクラスを介して行うのでそれを作る。

■ データ定義ファイル記載ルール
  • データ項目には@Persistentアノテーションをつける
  • プライマリキーは@PrimaryKeyアノテーションをつける
  • コンストラクタでメンバ変数に値を設定する
  • データ項目にアクセッサを作成する
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Greeting {
	@PrimaryKey
	@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
	private Long id;
	@Persistent
	private String content;

	public Greeting(String content){
		this.content = content;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}
	public Long getId() {
		return id;
	}
}

■ 永続化マネージャ
  • PersistenceManagerクラスをインスタンス生成するためのFactoryクラスとして生成する
  • 一度だけでよいのでSingletoneで実装する
public class PMF {
	private static final PersistenceManagerFactory pmfInstance =
		JDOHelper.getPersistenceManagerFactory("transactions-optional");

	private PMF(){}
	public static PersistenceManagerFactory get(){
		return pmfInstance;
	}
}


あとはこれらを使用するところの修正
  • データ定義ファイルインスタンス生成
  • 永続化マネージャファクトリでマネージャクラス生成
  • makePersistentで永続化実行
  • 永続化マネージャclose
		String content = req.getParameter("content");

		// データクラス生成
		Greeting greeting = new Greeting(content);

		PersistenceManager pm = PMF.get().getPersistenceManager();
		try{
			pm.makePersistent(greeting);

		} finally {
			pm.close();
		}
なれれば簡単!?
今度は画像ファイルの扱いをやってみよ。

0 件のコメント:

試験結果

昨日の夜、CGーArtsエンジニアのベーシック、エキスパートの自己採点をした。 実は日曜日には回答が出ていたけど、自信がなく採点するのもやめようかと思っていたがタイミング&勢いでやってしまった。 <結果>  ベーシック:85点  エキスパート:72.5点 70点以上で合格なので...