スティルハウスの書庫の書庫

はてなダイアリーで書いてた「スティルハウスの書庫」を移転してきました。

BigtableによるDatastoreの実装

Bigtableにできること

  • Bigtableは「ソート済みのExcel表」のようなデータ構造
    • 個々のセルは過去の履歴を残せる
    • 巨大なkey-value store。個々の行の「キー」があれば「値」を高速に取得できる
    • キーの辞書順でソートされている
    • スキーマレス(各行ごとにカラムの数や種類を変えられる)


Bigtableの構造:引用元

  • Bigtableにできること
    • キーを指定した行単位のCRUD
      • 行単位のACID特性が保証される
    • 2種類のスキャン:
      • prefix scan: キーの前方一致検索で複数行を一括取得
      • range scan: キーの範囲指定検索で複数行を一括取得
      • ソート済みなので高速に実行できる
    • Bigtableではカラムの値に基づく検索は一切実行できない!


<prefix scanとrange scan:引用元

Datastoreのエンティティテーブル

  • Datastoreのエンティティテーブルとは
    • Datastoreのエンティティを保存するBigtableのテーブル
    • 個々のエンティティは、「エンティティキー」で識別される
    • 個々のエンティティのプロパティ内容は、すべて1つのカラムにシリアライズされて格納される
      • よってインデックスを作らない限りプロパティ内容に基づくクエリ、フィルタ、ソートなどは実行できない
    • Datastoreではセルの履歴保存を使えない
  • エンティティキー
    • エンティティキーは、「エンティティが所属するエンティティグループのルートエンティティまでのパス」を含む
    • 辞書順でソートされている
/Grandparent:Alice
/Grandparent:Alice/Parent:Sam
/Grandparent:Ethel
/Grandparent:Ethel/Parent:Jane
/Grandparent:Ethel/Parent:Jane/Child:Timmy
/Grandparent:Ethel/Parent:Jane/Child:William
/Grandparent:Frank
  • プロパティの特徴
    • variable properties
      • エンティティごとにプロパティの数や種類を変えることができる
    • heterogenous property types
      • エンティティごとにプロパティの型を変えることができる
      • (JDO経由でこれらを使えるか不明)
    • multi-value properties (List Property)
      • 1つのプロパティに複数の値を保存できる

Datastoreのソフトスキーマ

  • ソフトスキーマとは
    • アプリケーション層のみが制約を受けるスキーマ
      • 開発が簡単。タイプセーフなプロトタイピングをすばやく実施
      • 従来は、JavaSQLのそれぞれに個別の設計や実装、デプロイメント、テストが必要だった
      • ソフトスキーマではすべてがJavaでの作業に統一される
  • Datastoreのソフトスキーマサポート
    • 既存のAPI(JDO/JPA)を通じて利用できる
      • 移植が簡単
      • もしGAEが適さないと分かった場合でも、そのまま他の環境に移植できる。GAEにロックインされない