Overview
- Key Value Store: row key
- 低レイテンシー
- 高いRead/Writeスループット
- 行が多いデータに向いている
- HBaseをはじめとするアプリケーションと連携できる
- 1行は10MBいかないくらい
- 時系列、マーケティング、財務、IoT、グラフデータに向いている
- row/columns > column family > column qualifier
- Tabletという隣接する列ごとにシャードされる
- TabletsはColossusというGoogleのファイルシステムに格納される
- row keyがノードで分散するようにするのがコツ
- 関連する行は近くに置く,
WashingtonDC#201803061617
- データ圧縮は自動で行われる、ただし1MBを超えるものはしない
- インスタンスやテーブルレベルでのセキュリティ管理ができる、行レベル以下ではできない
- encripted at rest
Instances, clusters and nodes
- 1インスタンスは8リージョンまで配置できる
- 各クラスターはユニークなゾーンに配置される
- クラスターを増やしてフェイルオーバーに備えることができる
- クラスターは1つ以上のノードを持つ
- cpu usageやstorage utilizationをモニターできる
schema
- 1インデックス、セカンダリーはない
- row keyで辞書順
- 行レベルでアトミック、行ごとに成否が決まる
- 空の列が多いスパースなテーブルでもよい
- テーブルはたくさん作らない
- セルは10MBまで、行は100MBまでを目安に
- row key
- 複数行を同時に変更するような操作を避ける
- リバースドメイン名, com.googleみたいな
- string identifier
- timestamp, アクセスの仕方によるが, 何かの名前の後のほうがいい
- aaa#bbb, みたいな複数の値を格納したもの
- ニューメリックなユーザーidは避ける
- 短くする
- 頻繁に更新が入るものは避ける
- ハッシュ値は使わない
- columns
- 関連するcolumnsはfamilyにまとめる
- familyの名前は短くする
- バージョンが変わりやすいcolumnは独立させる
- 不必要にqualifierを分けない
- qualifierをデータとして使う
- 1行のcolumnを多くしすぎない
- データがまとまっているときはprotocol bufferを使う
- マルチテナント
- 同じデータモデルだがクライアントごとに分けたい場合
- クライアント名をrow key prefixにする
- Security
- PIIをキーやファミリーにするのは避ける
Key Visualizer
- Bigtableの利用パターンを分析できる
- row keyに対するアクセスを分析できる
- ホットスポットの発見
- 肥大化した行の発見
- アクセスの分散化
- key rangeでバケット化した分析
Replication
- クラスターを増やす
- クラスターのゾーンやリージョンを分ける
- クラスターが複数になると結果整合性モデルになる
- single cluster routingで強整合性モデルにできる
- last write wins
Backups
- データをバックアップして復旧できる
- ゾーンレベルの障害にはレプリケーションで対応するべき
- 自動削除できる
- クラスターレベルでテーブルがバックアップされる
- 別のテーブルに移動するときにも有用
Manage data
- Avro, Parquet, Sequenceファイルが可能
- HBaseやcsvからBigtableにインポートできる
- cbtというcliが便利
- client libraryで4種のwriteができる
- simple write: ある行を変更する
- incremental and append: 行を追加したり、値を増やしたりする
- conditional write: 条件に合う行を変更する
- batch write: 複数の行を変更する
- read
- single row
- scan
- filtered
Migration
- HBase
- Cassandra
Performance
- SSD or HDD
- スループットかレイテンシーか
- 高リードか高ライトか
- トラフィックがグローバルかどうか
- アクセスされないとコールド状態になるため、ダミーのリクエストを送ることも考慮
Autoscaling
- target
- cpu
- storage
- number of nodes
App profiles
- single cluster routing: リクエストを一つのクラスターに割り振る
- Multi cluster routing: リクエストを近いクラスターに割り振る
- Cluster group routeing: リクエストを同じクラスターグループで近いものに割り振る
cbt
https://cloud.google.com/bigtable/docs/cbt-overview
https://cloud.google.com/bigtable/docs/managing-tables
Integration
- BigQuery
- https://cloud.google.com/bigquery/docs/external-data-bigtable
- external tableとしてクエリ
- permanent / temporary
- Cloud Function
- https://cloud.google.com/bigtable/docs/use-cloud-functions
- Bigtableにアクセスできる
- Dataproc
- https://cloud.google.com/bigtable/docs/creating-hadoop-cluster
- Bigtableにアクセスできる
Security
- Audit Logで誰がいつアクセスしたか監視できる
- LogEntry
- logName, resource, timeStamp, protoPayload
- Googleの暗号化鍵、CMEK
Pricing
- Bigtable and number of nodes
- amount of storage
- amount of network bandwidth