Gopherdojo #課外学習 2 Spanner memo
KVS っぽい特性 + RDB の要素
開発当初は kvs
2017 年に GCP で使えるようになった
水平方向へスケールするのが得意
Spanner Component
Instance
Region
Node 数
production は 3以上推奨
DB
ロール毎に権限を設定できる
Table
Read Only レプリカは存在しない
Supanner Architecture
Root Server
Spanner へのリクエストに応答する node を決める
Node
Query の実行するレイヤー
Split
table, index が保存されるレイヤー
PK の順番に分割
1つの split の負荷が増加すると、他の sprit に分割される
PK の戦略
バッドパターン
シーケンシャルナンバー
タイムスタンプ
公式のベストプラクティスは UUID
順番がバラける値がよい
ローンチの前にデータを大量に突っ込んでおき、ローンチ前に消すと sprit が増えた状態でサービスインできる
spanner の暖気だ
グッドパターン
ハッシュ
逆順
Shard
複数カラムを PK に設定
INDEX の仕組み
INDEX もテーブル
KVS で RDB の機能が使えるイメージ
Query
FORCE_INDEX
自分で index を指定してあげる
Spanner は分散することだけを考えているので、クエリの実行は人間が頑張る
Pagination
WHERE で頑張る
INTERLEAVE
親子関係がある table を同じ場所に保存しておく昨日
ほとんどのケースで JOIN して一緒に利用する Table を作る場合に使う
Spanner は UnitTest がつらい
Emulator がない
GCP に実際につなぎに行く