Google App Engine/DataStoreを知る/BigTableとは

Top > Google App Engine > DataStoreを知る > BigTableとは

アクセス総数:8915



BigTableとは?

 

リレーショナルデータベース(以下、RDB)ではなく「分散Key-Value Store(以下、KVS)」
→プログラミング言語の連想配列やMapと同様に
 「Key(キー)」と「Value(値)」で構成される

得意なこと
・アプリケーションの分散・拡張

不得意な事
・テーブルとテーブルを結合
・複雑な条件検索や集計処理を一発でこなす
・トランザクションによる「ACID特性」の確保

できることは二つだけ

BigTable.jpg

Keyを基にしたスキャンとは?

  • キーの前方一致検索
  • 範囲指定検索により、複数の行を一括取得
     
    テーブル「Emp」の例
    keynameagedept_key
    011佐藤40A1
    020山田18D5
    021鈴木35D1
    045吉川5D2
    061坂田20D1
     
    スキャンの例1(「02」で始まるキーを前方一致検索)
    020山田18D5
    021鈴木35D1
     
    スキャンの例2(「040」~「070」のキーを範囲指定検索)
    045吉川5D2
    061坂田20D1
     

Key以外のプロパティのデータを条件に検索する

 
Query query = pm.newQuery("select from Emp " +
                              "where age >= _startAge & age <= _endAge " +
                              "order by age asc " +
                              "parameters int _startAge, int _endAge");
List<Emp> results = (List<Emp>) query.execute(20, 40);
 

テーブル「Emp」のシングルプロパティインデックス

keyemp_key
Emp/age/05047
Emp/age/18020
Emp/age/20061
Emp/age/35021
Emp/age/40011
Emp/name/坂田061
Emp/name/佐藤011
Emp/name/鈴木021
Emp/name/山田020
 

検索例(age >= 20 & age <= 40)

061坂田20D2
021鈴木35D1
011佐藤40D1
 

エンティティに対して、すべてのプロパティ(テーブルのカラムに相当)の値をキーとして並べた
「シングルプロパティインデックス」と呼ばれるインデックステーブルが自動的に作成。

シングルプロパティインデックスを用いることにより、
アプリケーションが実行するクエリを「インデックスとスキャンの組み合わせ」に背後で変換。

複数のプロパティを対象に検索する

 
Query query = pm.newQuery("select from Emp " +
                              "where age >= _startAge & age <= _endAge " +
                              "and dept key = D1 " +
                              "order by age asc " +
                              "parameters int _startAge, int _endAge");
List<Emp> results = (List<Emp>) query.execute(20, 40);
 

カラムdept_keyとageを対象としたコンポジットインデックス

keyemp_key
Emp/D1/05047
Emp/D1/35021
Emp/D1/40011
Emp/D2/20061
Emp/D5/18020
 

検索例(dept_key = D1 & age >= 30 & age <= 40)

 
021鈴木35D1
011佐藤40D1
 

シングルプロパティインデックスによるクエリでは、「あるプロパティを対象に、
不等号(>、>=、<、<=)を使って範囲指定してしまうと、同じクエリ上でほかのプロパティを条件指定に含められない。

App Engineの開発者がXML設定ファイルを通じて明示的に
「コンポジットインデックス」を作成することで解決。

 

etc

メリット・デメリット

 

メリット

  • 負荷分散や可用性に悩まないでいい
  • データを効率よく集約できる
    • テーブルの規模が100件でも、数千万件でも、個々の行の読み書きは数10ms(ミリ秒)程度で完了
    • 膨大な数のユーザーがBigtableに同時にアクセスしても、レスポンスの低下は発生しない

デメリット

  • トランザクション制御が限定されるため、
    勘定系などのデータの保全性が求められるシステムには向かない
     

利用上の注意

 
  • RDBのACID特性やテーブル結合、洗練された検索・集計機能の利用をあきらめ、
    アプリケーション側でそれらの不足を補うさまざまな工夫や追加のコーディングが必要

クラウド上では・・・

 

クラウド上ではRDBからKVSへの移行が始まっている

AmazonAmazon Dynamo
MixiTokyo Tyrant
MicrosoftAzure Storage Services
楽天ROMA

最終更新日: 2010-02-19 (金) 12:05:07 (2804d)

添付ファイル: fileBigTable.jpg 1352件 [詳細]

このページをブックマーク:

このページのURL(コピペして利用下さい):

TOP