Open4

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

ひばふぁんひばふぁん

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)
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/Welcome.html#ConsistencyModel

今の疑問

ではGoogleCloudではどうだろう?
例えば、SQLでクエリを書く際に、結果整合性を踏まえてクエリを書くべきか、強整合性を踏まえてクエリを書くべきかはデータ品質を担保するレビューに関わるため明らかにしたい。

ひばふぁんひばふぁん

前提知識

結果整合性という概念にさわれた記事はこれ

強整合性 結果整合性
データのロック あり なし
スケーラビリティ 低い 高い
一貫性 担保される すぐには担保されない

https://cloud.google.com/storage/docs/consistency?hl=ja#strongly_consistent_operations

ちなみにGoogle Cloud Storageでは、昔から強整合性モデルを利用していたらしい。

GCSはS3より前に「強力な整合性」モデルを採用していたそうで、その方法としてはメタデータ(データのためのデータ)のみやり取りするオペレーションを実行することで即時最新情報を取得できるようにしているそうな。

https://blog.quickguard.net/?p=4130