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 件のコメント:
コメントを投稿