2011/05/29
GAE/J用のBigtableのバックアップツールが無い
なんでBigtableのバックアップ/リストアツールって用意されて
無いんだろと思ってたら Python版 のみ用意されてたのね orz.
仕方が無いので Java版を自力で作る方向を考えてみる。
まずデータ形式はJSONとする。
Python版は XML or CSV のようだがJSONの方が軽いので。
CSVは簡易形式としては便利だけどBigtableを完全に表現できないので
直接は扱わない。
CSV->JSONのフィルタを別ツールで用意すれば良い。
データの仕様を決めてみる。
基本仕様{__key__:{type:"Key", id:1234}, data1:123, data2:{type:"Date",value:1234567890},...}
各データ種別毎の仕様
てな感じかな。
クライアントは CUI でやるしか無いね。 30秒ルールが有るから分割して Upload/Download するしかないだろうし。
- 1つの Entity は 1つのJSONオブジェクト({〜})として表す。
- Entity のプロパティ名がそのままJSONのプロパティ名となる。
- プロパティ名 "__key__" は Entity の Key として元々予約である。
- プロパティ名の文字列化は省略可能。JavaScript互換仕様。
- プリミティブ以外のデータはプロパティ type を必須とするJSONオブジェクトで表す。
クラス | JSON表現 | 説明 |
---|---|---|
null | null | |
Long | 123 | |
Double | 123.0 | '.' or 'e' を含める事でLongと区別する。 |
Boolean | true | true or false |
String | "文字列" | 日本語はUTF8 or \uXXXX。改行は \n にエスケープ。 |
Key | {type:"Key", name:"key名"} | 文字列Keyの場合 |
{type:"Key", id:keyID} | LongKeyの場合 | |
{type:"Key", name:"key名" or id:keyID, parent:{再帰的にKey}} | 親を持つ場合 | |
Date | {type:"Date", value:経過ミリ秒} | valueはgetTime()の値 |
{type:"Date", fmt:"書式", value:"日時"} | SimpleDateFormat形式で表現 | |
ShortBlob | {type:"SBlob", value:"16進文字列"} | |
Blob | {type:"Blob", value:"16進文字列"} | |
Text | {type:"Text", value:"文字列"} | Stringに同じ |
User | {type:"User", email:"メールアドレス", authDomain:"ドメイン名"} | |
Link | {type:"Link", value:"URL文字列"} | |
Collection | [data1,data2,...] | 配列で表現 |
クライアントは CUI でやるしか無いね。 30秒ルールが有るから分割して Upload/Download するしかないだろうし。
この投稿へのコメント

コメント・フォーム