Open4
GoogleCloudでは結果整合性を踏まえたクエリの実装は必要か?

素朴な疑問
「同じSQLクエリでも実行タイミングで出力が変わることがあるのはなぜ?」と思っていた。
Courseraのこの講座で結果整合性の概念を知り、4年越しに疑問が再浮上したのがきっかけ。

2020年11月までのAWS S3
AWSのS3のデータで分析をしていた頃、PySparkやSQLクエリの実行タイミングによって集計結果が微妙に異なることがあった。
例えば、パーティション分割テーブルで同じ日付のデータを参照しレコード数を表示した所、11/1実行時には5,000件だったが11/3実行時には5,124件になるという状況が起きた。
これはS3のデータのRead/Write処理に、2020年11月30日までは結果整合性モデルを採用していたために起きていた。新しいバージョンのデータがWriteされても、古いバージョンのデータをReadできることがあるためだ。
2020年12月1日以降、S3では強力な整合性が採用されるようになったとのこと。
不勉強な自分は4年越しにやっと理解することができた。(p24)
今の疑問
ではGoogleCloudではどうだろう?
例えば、SQLでクエリを書く際に、結果整合性を踏まえてクエリを書くべきか、強整合性を踏まえてクエリを書くべきかはデータ品質を担保するレビューに関わるため明らかにしたい。

前提知識
結果整合性という概念にさわれた記事はこれ
強整合性 | 結果整合性 | |
---|---|---|
データのロック | あり | なし |
スケーラビリティ | 低い | 高い |
一貫性 | 担保される | すぐには担保されない |
ちなみにGoogle Cloud Storageでは、昔から強整合性モデルを利用していたらしい。
GCSはS3より前に「強力な整合性」モデルを採用していたそうで、その方法としてはメタデータ(データのためのデータ)のみやり取りするオペレーションを実行することで即時最新情報を取得できるようにしているそうな。