Cloud Spanner FAQ
@pchatsu
1
What’s Cloud Spanner ?
2
Goal
3
Contents
4
FAQを通して、これらのトピックを理解していきましょう
Cloud SpannerはRDBですか?
5
Cloud SpannerはRDBですか?
6
RDBの顔
KVSの顔
RDBの皮をかぶったKVS
Cloud SpannerはRDBですか?
7
RDBの顔
KVSの顔
RDBの皮をかぶったKVS
Cloud SpannerはRDBですか?
8
Entry Point
Node
Node
Node
コンピューティング層
ストレージ層
Split
Split
Split
Split
Split
Split
Split
Split
Split
1 - 100
101 - 200
201 - 250
※Colossus 分散ファイルシステム上にある
251 - 300
301 - 400
401 - 500
501 - 600
601 - 700
701 - 800
Cloud SpannerはRDBですか?
9
Entry Point
Node
Node
Node
コンピューティング層
ストレージ層
Split
Split
Split
Split
Split
Split
Split
Split
Split
1 - 100
101 - 200
201 - 250
※Colossus 分散ファイルシステム上にある
251 - 300
301 - 400
401 - 500
501 - 600
601 - 700
701 - 800
Cloud SpannerはRDBですか?
10
Entry Point
Node
Node
Node
コンピューティング層
ストレージ層
Split
Split
Split
Split
Split
Split
Split
Split
Split
1 - 100
101 - 200
201 - 250
※Colossus 分散ファイルシステム上にある
251 - 300
301 - 400
401 - 500
501 - 600
601 - 700
701 - 800
Cloud SpannerはRDBですか?
11
company_id (PK) | name | tel |
1 | hoge | 001-0000 |
2 | fuga | 002-0000 |
3 | piyo | 003-0000 |
... | | |
101 | foo | 101-0000 |
102 | bar | 102-0000 |
103 | baz | 103-0000 |
... | | |
company_id: 1 ~ 100 のSplit
company_id: 101 ~ 200 のSplit
Cloud SpannerはRDBですか?
12
Entry Point
Node
Node
Node
コンピューティング層
ストレージ層
Split
Split
Split
Split
Split
Split
Split
Split
Split
1 - 100
101 - 200
201 - 250
251 - 300
301 - 400
401 - 500
501 - 600
601 - 700
701 - 800
Split
Split
Split
1 - 50
51 - 100
101 - 200
テーブルごとに分割の範囲は異なる
Cloud SpannerはRDBですか?
13
GCP Databaseの系譜 (sinmetalの主観)
14
Bigtable
Datastore
Spanner
Realtime DB
Firestore
2006年
論文公開
2011年
リリース
2013年
論文公開
2017年
リリース
引用
https://gcpug.jp
既存のDDL/SQLやテーブル設計のノウハウは使えますか?
15
既存のDDL/SQLやテーブル設計のノウハウは使えますか?
16
既存のDDL/SQLやテーブル設計のノウハウは使えますか?
17
既存のDDL/SQLやテーブル設計のノウハウは使えますか?
18
company_id (PK) | name | tel | employee_id (PK) | name |
1 | hoge | 001-0000 | | |
1 | | | 1 | Taro |
1 | | | 2 | Jiro |
2 | fuga | 002-0000 | | |
2 | | | 3 | Saburo |
3 | piyo | 003-0000 | | |
... | | | | |
company_id (PK) | employee_id (PK) | name |
1 | 1 | Taro |
1 | 2 | Jiro |
2 | 3 | Saburo |
company_id (PK) | name | tel |
1 | hoge | 001-0000 |
2 | fuga | 002-0000 |
3 | piyo | 003-0000 |
Companyテーブル
Employeeテーブル
Splitでの物理的な配置
親子関係にあるレコードが同じSplitにあることが保証される
その結果、JOIN処理が安定して速くなる
既存のDDL/SQLやテーブル設計のノウハウは使えますか?
19
既存のDDL/SQLやテーブル設計のノウハウは使えますか?
20
既存のDDL/SQLやテーブル設計のノウハウは使えますか?
21
Entry Point
Node
Node
Node
コンピューティング層
ストレージ層
Split
Split
Split
Split
Split
Split
Split
Split
Split
1 - 100
101 - 200
201 - 250
251 - 300
301 - 400
401 - 500
501 - 600
601 - 700
701 - 800
(1, “hoge”, “001-0000”)
(2, “fuga”, “002-0000”)
(3, piyo, “002-0000”)
…
とシーケンシャルなPKが連続で挿入された
このNodeだけに集中して負荷がかかる
= ホットスポット
PKの戦略
22
引用
https://gcpug.jp
既存のDDL/SQLやテーブル設計のノウハウは使えますか?
23
company_id (PK) | name | tel |
1 | hoge | 001-0000 |
2 | fuga | 002-0000 |
3 | piyo | 003-0000 |
key | PK |
fuga | 2 |
hoge | 1 |
piyo | 3 |
ベーステーブル
nameカラムに貼ったセカンダリインデックス
インデックスを使った参照
既存のDDL/SQLやテーブル設計のノウハウは使えますか?
24
Productionで使うDBの選択肢としてどうですか?
25
Productionで使うDBの選択肢としてどうですか?
26
どういうサービスに向いてますか?
27
どういうサービスに向いていますか?
28
どういうサービスに向いていますか?
29
どういうサービスに向いていますか?
30
どういうサービスに向いていますか?
31
ランニングコストは高いの?
32
ランニングコストは高いの?
33
運用面のサポートはどうなっていますか?
34
運用面のサポートはどうなっていますか?
35
運用面のサポートはどうなっていますか?
36
運用面のサポートはどうなっていますか?
37
新規/既存サービスでの選択肢としてアリですか?
38
新規/既存サービスでの選択肢としてどうですか?
39
新規/既存サービスでの選択肢としてどうですか?
40
company_id (PK) | name | tel | employee_id (PK) | name |
1 | hoge | 001-0000 | | |
1 | | | 1 | Taro |
1 | | | 2 | Jiro |
2 | fuga | 002-0000 | | |
2 | | | 3 | Saburo |
3 | piyo | 003-0000 | | |
... | | | | |
再掲)Splitでの物理的な配置
インターリーブを使った場合、
子レコードだけのレンジスキャンは遅い
新規/既存サービスでの選択肢としてどうですか?
41
新規/既存サービスでの選択肢としてどうですか?
42
まとめ
43