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