LoginSignup
1
0

More than 1 year has passed since last update.

GCP: Bigtable

Last updated at Posted at 2020-10-03

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

Security

  • Audit Logで誰がいつアクセスしたか監視できる
  • LogEntry
    • logName, resource, timeStamp, protoPayload
  • Googleの暗号化鍵、CMEK

Pricing

  • Bigtable and number of nodes
  • amount of storage
  • amount of network bandwidth

終わり

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0