Cloud Onr
Cloud OnAir
Cloud OnAir
Bigtable に迫る!
基本機能も含めユースケースまで丸ごと紹介
2018 年 8 月 30 日 放送
Cloud OnAir
Cloud Bigtable ってなんですか??
はじめに
Cloud OnAir
Google のコアサービスを支える
大規模分散 NoSQL データベース
はじめに
Agenda
Cloud OnAir
1
3
2
4
Cloud Bigtable とは
Cloud Bigtable Deep-Dive
Cloud Bigtable ユースケース
お客様事例のご紹介
Cloud OnAir
Cloud OnAir
Cloud Bigtable とは
Cloud OnAir
Google Cloud Platform のデータベースソリューション
Cloud
SQL
Cloud
Bigtable
Cloud
Datastore
Cloud
Spanner
Cloud
Memorystore
for Redis
ベータ版
Cloud OnAir
● スケーラブル
○ 数テラバイト〜数ペタバイトの
データを格納可能
● 低レイテンシ、高スループット
○ 数ミリ秒のレイテンシを 99% 実現
● フルマネージド
○ Google の Bigtable 運用チームが
サービスを監視
Cloud Bigtable の特徴
SSD 10,000 QPS @ 6 ミリ秒
HDD 500 QPS @ 200 ミリ秒
読み取り
Cloud OnAir
● NoSQL データベース
● ユニークな Row Key を
指定してデータを取り出す
● スパースなデータに対応
Cloud Bigtable の特徴
User ServiceAccess
Row Key Name Device Shopping Video
UserID_1 A PC 10
UserID_2 B 20
UserID_3 C mobile 3
UserID_4 D mobile 11 15
Row Key を指定してデータを取得
例:ユーザデータの保存
Cloud OnAir
Cloud Bigtable の得意領域・注意点
得意領域
低レイテンシーが求められる
大容量データの読み書きが必要なケース
● 時系列データ
○ サーバーの CPU の使用状況など
● マーケティングデータ
○ 購入履歴や顧客の好みなど
● 金融データ
○ 取引履歴、株価など
● IoT データ
○ センサー情報など
注意点
● SQL クエリが使えない
● 各テーブルのインデックスは 1 つ
● 複数行トランザクションは非対応
Cloud OnAir
Cloud OnAir
Cloud Bigtable Deep-Dive
Cloud OnAir
Cloud Bigtable のアーキテクチャ
Cloud OnAir
● リクエストは各ノードに分散処理される
○ 行キーをもとにノードに分散
● ノードを追加することで処理できる
リクエストの数やスループットを
増やすことが可能
● クラスタを追加しレプリケーションを
有効にするとクラスタごとに処理する
内容を分けることが可能
Cloud Bigtable のアーキテクチャ
Cluster
Cloud OnAir
● データはノード自体に格納されない
○ Google のファイルシステムである
Colossus に格納
● 各ノードはデータに対するポインタを保持
● このアーキテクチャのメリット
○ ノード間のデータ移動が高速
○ ノードの障害復旧が極めて高速
○ ノードで障害が発生してもデータが失わ
れることがない
Cloud Bigtable のアーキテクチャ
Colossus
Cloud OnAir
Cloud Bigtable の便利な機能
Cloud OnAir
● 関連する列はカラムファミリとしてグ
ループ化が可能
● 指定したカラムファミリに絞ってデータ
を取り出すことも可能
● 通信量やアプリケーション側での
処理を最低限に抑えられる
Cloud Bigtable の便利な機能
Cloud Bigtable ストレージ モデル
例:ユーザデータの保存
Column Family
User ServiceAccess
Row Key Name Device Shopping Video
UserID_1 A PC 10
UserID_2 B 20
UserID_3 C mobile 3
UserID_4 D mobile 11 15
Cloud OnAir
● 保存する値はタイムスタンプを
基にして複数の値を格納可能
○ データの時間の経過に伴う
変更履歴としても利用可能
● スパースなデータに対応しているためデー
タが格納されていないセルが
容量を消費しない
Cloud Bigtable の便利な機能
15
14
13
Timestamp 3
Timestamp 2
Timestamp 1
Cloud Bigtable ストレージ モデル
例:ユーザデータの保存
User Service
Row Key Name Device Shopping Video
UserID_1 A PC 10
UserID_2 B 20
UserID_3 C mobile 3
UserID_4 D mobile 11 15
Cloud OnAir
Cloud Bigtable のスキーマ設計
Cloud OnAir
スキーマ設計の前に確認するポイント
● アプリケーションのアクセスパターンの理解
○ 読み込みが多いのか追記または更新が多いのかなど
● 利用するクエリの明確化
○ どのような条件でどのようなデータを取得したいのか
Cloud Bigtable のスキーマ設計
Cloud OnAir
● 各テーブルのインデックスは 1 つのみ
● 行は行キーの辞書的順番で並べ替えられる
● すべての操作は行レベルでアトミックに実行される
● 基本的に特定のエンティティの情報はすべて 1 行にまとめる
● 関連するエンティティは隣接する行に格納する
  など様々な点で異なる部分がある
Cloud Bigtable のスキーマ設計
Cloud Bigtable のスキーマ設計は RDB の
スキーマ設計とは大きく異なる
Cloud OnAir
格納されるデータの並びを考慮
● 行が行キーをもとにソートされる
特性を考慮して行キーに
Timestamp など含めて時系列に
データを保存
● 行キーのレンジをしてしたクエリも可
能となる
Cloud Bigtable のスキーマ設計
偏りが発生しないような行キーを選択
● 処理を分散したい場合、
UUID など偏りが発生しにくいものを
行キーとして選択
● 必要に応じてHash値を利用
● Timestamp、UserID などを
組み合わせた行キーを選択
スキーマの設計ポイント
例:UUID + UserID
  Hash(UserID) + UserID
Row key Value
UUID+2018083000 1
UUID+2018083001 2
UUID+2018083023 9
Cloud OnAir
Cloud Bigtable のスキーマ設計
Cloud Bigtable での避けたい使い方
● シーケンシャル数値の行キー
● 特定の列の繰り返し更新
Cloud OnAir
● シーケンシャル数値の行キー
○ 新規のユーザーのほうがアクティブなユーザーになる可能性が高いため、
大半のトラフィックがごく少数のノードに集中する可能性がある
避けたい使い方
User ServiceAccess
Row Key Name Device Shopping Video
1000 A PC 10
1001 B 20
1002 C mobile 3
1003 D mobile 11 15
Cloud OnAir
● 特定の列の繰り返し更新
○ 毎秒データを格納する場合に特定の行キーを使用して
列を繰り返し更新するオペレーションは避ける
○ 負荷が偏り性能が出なくなる
○ 直前の値が領域を消費し行のサイズ上限を超えてしまう可能性がある
避けたい使い方
Row Key Value
memusage 256MB
Cloud OnAir
● Cloud Bigtable のアクセスパターンなどを可視化するツール
● 以下の解析のための情報として活用可能
○ 書き込み、読み込みで HotSpot が発生していないかの確認
○ 一行に多すぎるデータを保存していないかの確認
○ アクセスパターンがテーブル内で均一になっているかの確認
Key Visualizer
HotSpot:
アクセスが集中しているノード
Cloud OnAir
Cloud Bigtable のストレージの選択
Cloud OnAir
● Cloud Bigtable はインスタンスの作成時にクラスタでの
データの保存先を SSD または HDD のどちらかを指定
● レイテンシやデータサイズなどアプリケーションの要件に合わせて
ストレージを選択することが重要
● 注意点
○ インスタンスやクラスタを作成した後に SSD または HDD の
選択を変更することはできません
Cloud Bigtable のストレージの選択
Cloud OnAir
Cloud OnAir
Cloud Bigtable ユースケース
Cloud OnAir
● IoT でのユースケース
○ インテリジェント電力メーター
● システム要件
○ 10,000,000 台の電力メーターが稼働
○ 各メーターはセンサーの計測値を 15 分ごとに送信
○ 各メーターに UUID で生成された ID がある
● サービス機能
○ アプリで指定した日、指定したメーターのデータの閲覧
Cloud Bigtable ユースケース
Cloud OnAir
Cloud Bigtable ユースケース
2,0W
Cloud
Pub/Sub
Cloud IoT
Core
Cloud
Dataflow
Cloud
Bigtable
BigQuery
App
Engine
2,0W
解析用
アプリケーションへの
リアルタイムなレスポンス対応
Cloud OnAir
● 行キーの設計
○ METER_ID + DATE の行キーを選択
■ 同じメーターのデータは近い場所に保存
■ METER_ID を先頭にすることでノードを分散
● 列の設計
○ 各行に 1 台のメーターの 1 日分のデータを保存
Cloud Bigtable ユースケース
METER
Row Key ID 0000 0015 ... 2330 2345
METER_ID#20180730 METER_ID 5.07 5.00 6.05 5.57
: : : : : :
METER_ID#20180830 METER_ID 4.99 5.01 5.95 5.79
20180830#METER_ID1
Point
DATE + METER_IDの行キーだと
DATE部分が先頭で一致するため
行キーの分散がうまくできずに
HotSpot が発生する可能性が高い
20180830#METER_ID2
Cloud OnAir
Cloud OnAir
お客様事例のご紹介
Cloud OnAir
会社概要
テキスト
□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■
Location: GINZA SIX 10F
From: 2011/10
Member: 80
Cloud OnAir
KARTE
テキスト
□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■
Web サイトの訪問者の行動を 顧客ごとに リアルタイムに解析
一人一人に合わせた CX 顧客体験 を提供
2015/03 -
Cloud OnAir
”知る”と”合わせる”
Cloud OnAir
あらゆるサービスの顧客体験の向上に
Cloud OnAir
あらゆるサービスの顧客体験の向上に
For App (SDK)
Cloud OnAir
大量のリアルタイムデータ
22,000 events / sec (MAX)
1,000,000,000 events / day
1 event ≒ 2KB
Cloud OnAir
大量データをさばくアーキテクチャ
Region
#ECEFF1
Batch Layer
Track
Cloud Load
Balancing
Track
Compute Engine
Autoscaling
Distributed Queue
Cloud
Pub/Sub
End User
Devices
Redis
Analyze
Analyze
Compute Engine
Autoscaling
Batch
Cloud
Bigtable
Cloud
Bigtable
BigQuery
Stride
Compute Engine
Cloud
Storage
Admin
Admin
Compute Engine
Autoscaling
Client
Tracker.js
Cloud
CDN
Realtime Layer
or
Cloud
Front
JS/
SDK/
API
AWS
Redislabs
...
Stackdriver
Stride
Cloud OnAir
全面的に GCP
Compute
Compute
Engine
Kubernetes
Engine
Cloud
Functions
Big Data
BigQuery
Cloud
Dataflow
Cloud
Pub/Sub
Management Tools
Stackdriver Monitoring Logging
Networking
Virtual
Private Cloud
Cloud Load
Balancing
Cloud
Routes
Storage & Databases
Cloud
Storage
Cloud
Bigtable
Cloud
Spanner
Developer Tools
Cloud SDK
Container
Registry
Cloud Build
Heavy Use
Cloud OnAir
Bigtable 超使ってます
Avg. 300 Nodes
数GB/sec のRead/Write
MAX 100,000 req / sec
240 TB
Cloud OnAir
Bigtable の使い所
とにかくレイテンシが低いことが保証される必要があるところ
- 〜 2, 30 msec
- リアルタイムに処理結果を返す必要がある
大量にデータを読み書きする必要があるところ
- データ量
- 特にスループット
スキーマレスデータ
BigQuery
Cloud
Bigtable
Cloud
Spanner
Cloud OnAir
Bigtable をどう使っているか
パターン①
数百億単位のユーザー単位の行動データ
キーの設計
< Hash( user_key ) >_< user_key >
e.g. 45431346435_testproject-USERA
行レベルのアトミックな処理
スキーマレス
- 必要に応じてカラムを足す(スパース)
key event
Row key project_id user_id view buy hoge ...
435324_p
rojecta-US
ERA
projecta USERA
{...}
435325_p
rojectx-US
ER2341
projectx USER23
41
{...} {...}
...
984372_te
stprojecrt-
USERB
projecta USERB
{...} {...}
もともと隣
Cloud OnAir
Bigtable をどう使っているか
パターン②
数百億単位のユーザー行動の イベント単位の時系列データ
ユーザーごとに新しいデータから順にスキャン
キーの設計
< Hash( user_key ) >_< user_key >_< Long.MAX - timestamp >
カラムファミリーをパターンで分ける
- 特定の種類のデータだけ取得
- 時間、行動の種類
<Hash>_<key>_922337057251..
Row
Scan
...
<Hash>_<key>_922337057252..
<Hash>_<key>_(Long.MAX - time)
<Hash>_<key>_922337057260..
Cloud OnAir
Bigtable をどう使っているか
パターン③
バッチインポートのカスタムテーブル
e.g. 顧客データ、商品データ
スケジュールでテーブル単位で大量インポート
テーブルの事前分割が重要
-> ノード間に負荷を分散可
e.g. cbt createtable [TABLE_NAME] [SPLITS]
(cbt createtable my-table 10,20)
key
Row key product_id name ... price
435324_item_a item_a A 5000
593201_item_b item_b B 3000
894013_item_c item_c C 8000

[Cloud OnAir] Bigtable に迫る!基本機能も含めユースケースまで丸ごと紹介 2018年8月30日 放送