Google App Engine for Java実践クラウド・プログラミング(清野克行)学習、、Bigtableの使いどころ。
引き続きGAEj本でGoogleクラウドを学習、、まずは肝となるBigtableとRDBの名称差異(P.72)。
Bigtable | RDB |
kind | table |
entity | record |
property | column item(列項目) |
こうした対応関係はあっても、以下の制約がある(P.74)、、なるほど。
- データベース検索では列(プロパティ項目)すべてが対象となり、列項目の並びを指定した検索はできない。
- !=とINはPythonでは使用できるがJavaでは使用できない。
- 検索での制約条件に対して論理積(「&&」)を使用することはできるが、論理和(OR)や否定(NOT)を使用することはできない。
- 1つのデータ項目(プロパティ)に対して、複数の不等式制約(<<==>=>)指定はできないが、異なるプロパティにチアする複数の不等式制約は可能。
- 昇順降順ソートや検索範囲の指定などは可能。
で、一番気になるトランザクションについての解説があったのが嬉しい(P.140)。
なんといっても分散ストレージ。グローバルなトランザクションに対応しているのかどうかは気になっていたのだけど、基本、ACID特性のトランザクションはサポートしていないとのこと。
ただし、「複数データオブジェクト(Kind)間に所有・被所有の関係を持たせた場合、それらのデータオブジェクトは分散ネットワーク上の同じエリアに格納されることになり」、トランザクション処理でのデータ操作が可能になるよう、、JDOという仕様を使うみたい。ちなみにトランザクション中に対象に更新が入るとエラーになる排他がかからない楽観的ロック仕様。。アプリ側でリトライを作り込む必要ありとのこと。
それからSQLでは可能だけど、Bigtableではできないこと(P.226)、、コレも大事。特にPL/SQLとかの関数群は便利だけど、Bigtableではまだまだ。
- エンティティ間のJOINはできない。
- トランザクション処理は所有、被所有関係にあるエンティティ(NEARY=レコード)間のみ可能。
- countなど集計関数は使用できない。
- プロパティ(NEARY=列項目)どうしの比較はできない。
- 比較演算子は==,<,>,<=,>=のみ使用可能。
- (5)で==以外の演算子は複数のプロパティに適用できない。
- 不等式フィルタ(<,<=,>=,>)が使用できるのは1つのプロパティに限られる。
- クエリに不等式比較のフィルタと1つ以上の並び替え順序がある場合、クエリは不等式に使用されるプロパティの並び替え順序を含んでいる必要があり、この並び替え順序は他のプロパティに対する並び替え順序より先に出現擦る必要がある。
- 検索結果は最大1,000件が上限。
- 他に時間的なものとして、Bigtableをアクセスしてからレスポンスが返るまで30秒以内で終了しなければならないという制限(30秒ルール)がある。
本書は、上記のような制約(こうした制約も徐々に取り払われていくのだろうなぁ)を整理してくれてる良本で、他にも画像操作、メモリキャッシュ、BLOBといった各種機能の実装例を紹介してくれる。
Javaがあまりわかってないのでつらいながら、GAEjの可能性と成長性が恐ろしいのはよくわかった。。
あと気になったのは概要紹介のみだった「Secure Data Connector(SDC)」機能。
アプリケーションデータは企業システム側に置いておけながら、処理はGAEを使えるセキュリティ機能(2009年4月リリース)について、、こいつの実装例がすごく気になる。
データ本体をクラウドプロバイダに人質にとられないのはわかっているとしかいいようがない。。