BigtableはNoSQLサービスになります。
Googleの検索エンジンやGmailもBigtableで構築されているようなので、実績については問題無いでしょう。
Cloud Bigtableの概要
NoSQLデータベースの為、基本はKey-Valueデータを扱うことになります。ドキュメント上はデータサイズを10MB以下にするように記載されています。
バイナリデータを扱わなければ、そこまで大きなデータサイズになることは無いでしょう。
各データ(行データ)は単一の行キーでインデックス化されています。列データは「列ファミリー」という形でグループ化されます。各列の名称は列修飾子と呼ばれています。
特定のデータは「行」「列」を指定しアクセスすることになりますが、データは複数設定することが可能です(セル/バージョンと呼んでいます)
なぜなら、列は1つではなく複数の列修飾子で構成されていますので、1つの列に複数の値(列修飾子事)を設定することが可能となります。
列をオブジェクトと考えると中に複数の変数を持つことができるイメージに近いでしょうか。
CloudBigtableは結合や複数行トランザクションをサポートしていない為、これらの機能が必要な場合は他のデータベースサービスを使用することになります。
インフラ構成
Cloud Bigtableは3つの階層で構成されます。
上位から「インスタンス」「クラスタ」「ノード」になります。
実際のデータは「インスタンス」に格納され「クラスタ」「ノード」は負荷分散及び冗長構成の為に構成されます。
インスタンスはCloud Bigtableのストレージと考えることができます。インスタンスはクラスタに紐付きます。
インスタンスではストレージタイプとアプリケーションプロファイルを指定します。
アプリケーションプロファイルはプログラムからの接続方式指定となります。
クラスタはCloud Bigtableへのインターフェースと考えることができます。インスタンスには最大4つのクラスタを指定することができます。
クラスタはゾーンに属します。複数のクラスタを指定する場合は異なるゾーンに属させる必要があります。
ノードはクラスタとインスタンスの間でデータ管理を行います。
CPUやメモリのリソースを消費するのはノードとなります。
Cloud Bigtableへの接続
クライアントとしてcbt(Cloud Bigtable CLI)を使用して接続します。
スキーマ設計方針
ドキュメントでは、一般的なスキーマと時系列データ用の2種類のスキーマ設計方針が記載されています。
一般的なスキーマを設計する場合は制限事項に気を付けましょう。
「1つのデータを10MB以下にし、1行のデータは100MB以下にする」
「列ファミリは100まで作成可能」
「テーブルは1インスタンスあたり1000」
また、データベースのようにインデックスを自由に作成することができません。そのため、行キーに指定する値に注意しましょう。
インスタンス設計
インスタンスはデータを格納するストレージの役割になります。
SSD/HDDを選択できますが、途中で変更することができません。
ガベージコレクション
データと一緒に「再々存続時間」「最大保持バージョン(世代)」を指定し、期間切れのデータを自動的に削除してくれる機能です。
データの保持期間などが決まっているデータについて使用します。
Gmailのゴミ箱も30日経過すると自動的にメールが削除されますが、この機能を使用しているのでしょうか?
コメント