2023/01/13

データストアの選択

世の中には データを保存しておく製品にも、いろいろと選択肢が用意されています。GCPでも目的に応じて特徴の異なる複数のサービスが用意されています。その中でもBigQueryって特徴的で判りやすいと(個人的には)思っていたのですが、最近になってGCPにかかわりながらもBigQueryがどういうものなのかを未だに知らない人に遭遇しました。

ここでGCPのデータの保存目的に使えるサービスを比較しておきたいと思います。


一覧

GCPに用意されたサービスの一覧です。
名称略称概要スケーラブルマネージド
Firestore(特になし)NoSQL、ドキュメント指向データベース。
Cloud SQL(特になし)SQLのリレーショナルデータベース。
Cloud SpannerSpannerSQLのリレーショナルデータベース。
Cloud BigtableBigtableNoSQL・低レイテンシのデータベース。
MemorystoreMemstoreオンメモリで高速動作。
BigQuery(特になし)検索に特化したデータウェアハウス。
Cloud StorageGCS非構造化データ用のストレージ。

「略称」はGoogleが決めた正式なものではないですが、開発者の間でよく使われている呼称です。
「マネージド」の〇はフルマネージド、△はフルではないマネージドを表します。

これら以外にもFirebaseのサービスもあるのですが、それらに関しては割愛します。

各サービスの特徴

サービスを比較・選択するうえで参考としていただけるように、ざっくりと説明します。詳細はGoogleの各サービスをご覧ください。

Firestore

スケーラブルなので負荷が増えても重くなる心配がありません。むしろアクセスが少ないと優先順位が下げられて待ちが長くなる感じさえあります。フルマネージドなのでメンテナンスフリーです。
スキーマレスでドキュメント指向です。自分で各ドキュメントの構造を同じにして使えば、テーブルとして使えます。検索用のインデックスが付いた連想配列の様な感じですが、インデックスによる検索機能は貧弱です。柔軟な検索が必要なら、ElasticSearchやGAEのSearch APIと組み合わせる必要があります。
強整合性でトランザクションにも対応しています。
費用は主に保存容量に対して発生し、無料枠もあるので、ランニングコストは低めです。
SQLしか経験のない方には理解しにくいかもしれませんが、「Not only SQL」なデータベースです。
過去には似たようなDatastoreというサービスがありましたが、それが廃止されてFirestoreのDatastore互換モードとなりました。Firestoreにはネイティブモードもあり、こちらはドキュメントを階層構造にすることもできます。

Cloud SQL

MySQL/PostgreSQL/SQL Serverのいずれかから選んで使用します。これらを自分でGCEに乗せなくても、予めGoogleが用意してくれていると理解すればいいと思います。
なので利点も欠点もMySQL/PostgreSQL/SQL Serverを引き継ぎます。スケーリングに関しては設定した範囲内に限定され、無限ではありません。幸いフルマネージドでメンテフリーで使えます。
費用は主に保存容量とCPUに対して発生します。CPUはGCEと同等なので、ランニングコストはそれなりに発生します。

Cloud Spanner

スケーラブルなので負荷が増えても重くなる心配なし、フルマネージドでメンテナンスフリー、強整合性と、ここまではFirestoreと同じです。こちらはドキュメント指向でありません。SQLでリレーショナルデータベースを使いたい人にとっては、Cloud SQLとFirestore/Bigtableの「良いとこ取り」の様な感じになります。GCPではコスト以外はほぼ最強ではないでしょうか。
費用は主に保存容量とコンピューティングインスタンスに対して発生します。「Cloud Spanner vs Cloud SQL」も参考になると思います。

Cloud Bigtable

スケーラブル、フルマネージド、NoSQLと、ここまではFirestoreと同じです。低レイテンシが最大の売りでしょうか。
GCPに昔からあるサービスで、他のデータベース/ストレージの基盤となるサービスだと聞いたことがあります。(今GoogleのWeb上のドキュメントを探してもそのような説明は見当たらないのですが、当時詳しい人だったかGoogle日本法人の人から聞いた話なので、嘘ではないはず)
費用は主に保存容量とコンピューティングに使われるノードに対して発生します。ノードは事実上GCEと同じなので、たぶんそこそこかかるはず。

Memorystore

Redis/Memcachedのいずれかから選んで使用します。たぶんそれらをGCPに乗せただけと思います。オンメモリなので速いはず。しかもスケーラブル。
速さを活かしてキャッシュや書き換えの集中するデータの保存に向きます。

2022/10/18

円安の影響

2022年に入ったあたりから円安による物価高が、いろいろなところに影響していると思います。わかりやすいのはガソリン・軽油、灯油、電気代、ガス代、食品あたりでしょうか。そのほかにもいろいろな商品がいつの間にか値上げされていてびっくりしたり。


GCPの利用料金は、使用しているリージョンに関係なく、米ドルで計算されます。そのため円相場は運用費用に大きく影響します。LotteryServの価格を決めた2021年は1ドル=110円くらいでした。多少レートが変動してもすぐには価格に影響させなくていいように考えて価格を決めたつもりなのですが、とうとう145円を超えてしまいました。それどころか150円にも届きそうな勢いです。わずか1年ちょっとでこんなに変わるなんて。


LotteryServの応募ページのレスポンスを向上では、ランニングコストも下がったはずなので、それを反映させたいと思っています。特に応募数が多い場面で効果が大きいはずです。

しかし今の円安は、この効果を見事に打ち消してしまっています。そのため今は価格改定の時期を検討しています。


2022/08/31

BigQueryの料金について

BigQueryの基本的な料金

GCPの中でも BigQueryは特徴あって魅力的なサービスだと思いますが、実際に使ってみると「利用料金がいつの間にかとんでもない金額になっていた」ことで有名です。料金がかるのは、基本は以下の2つです。(実際にはストリーミングとかの別料金もありますが、あまり使われないはずなので割愛します)

価格は東京/大阪リージョン、$1=¥135換算です。


ストレージ:

$0.023=¥3.105/月/GB
$0.016=¥2.16/月/GB(長期保存:90日以上連続して変更されなかったテーブル/パーティション)
1TBまでは無料。

検索:

$6.00=¥810/TB (検索対象になったデータに対して課金)
1TBまでは無料。


BigQueryの検索が速い仕組み=料金が高騰する仕組み?

この章は私の主観や予想を含みます。

検索が速いのがBigQueryの最大の魅力と思いますが、実は裏では結構な大規模なインスタンスが動いているのではないかと思います。その根拠は「クエリジョブ」の以下の記載です。

オンデマンド料金では、プロジェクトで最大 2,000 個の同時実行スロットを設定できます。

ここで「スロット」が何なのか問題になりますが、「コミットメント」に以下の様に説明されています。

スロットは、BigQuery で使用される仮想 CPU を表しています。

つまりGCEのvCPUやGKEのノードと同等のもの? でしょうか。

GCEでvCPUを2000予約する費用を試算してみます。どのようなタイプのvCPUを選ぶかにもよりますが、n2-standard-80(vCPU=80、メモリ320GB、$4.9835/時間)だと、以下のとおり。

$4.9835*2000/80=$124.5875≒¥16,819/時間

ちょっと微妙だったような... GCEのvCPUと同じという予想はハズレかもしれません。


検索の料金を安くする仕組み

がっつりBigQueryを使いながらも検索の料金をそれなりに抑えられるかもしれない仕組みが用意されています。一覧にすると以下のとおり。ちょこっと使いたい方は蚊帳の外です。

名称概要料金
月定額契約購入した瞬間から、30日間の定額料金です。$2,400=¥324,000/月/100スロット
年定額契約購入した瞬間から、1年間の定額料金です。$2,040=¥275,400/月/100スロット
Flex Slots指定した短期間だけ、秒単位で定額にします。$4.80=¥648/時間/100スロット
BI Engineオンメモリ検索で高速化。$0.0499/GB/時間


定額料金

文字どおりの定額料金です。最初の1か月または1年は、途中で止められないので注意が必要です。また上記の料金は100スロットであることにも注意が必要です。通常のオンデマンド検索は2000スロットなので、スロットが少ないと「契約してみたけど検索遅い」ということになりそうです。オンデマンドでは2000スロット以上を使用する手段が用意されていませんが、定額契約では2000スロットを超えて予約できるそうです。東京リージョンでは最大1000スロットまでしか予約できないようです。

年定額契約をある程度のスロット以上購入すると、おまけとして下記のBI Engineの容量もついてきます。年定額契約するなら、これも使わない手はないです。


Flex Slots

瞬間だけ定額という、変則的な料金プランです。使用する都度開始/終了を指定するようなので、定期的に決まった検索を行うなどの用途に向いています。購入するスロット数が多すぎると、購入に失敗することがあります。購入に成功すると解除するまで、秒単位で使っていても使わなくても課金されます。

上手く使えば費用と速度の両面で効果があるはずです。他プランとの組み合わせも可能です。


BI Engine

料金体系というより機能なのですが、別の料金体系を持っています。

Business Intelligence(以下BIと略)ツールのデータソースとしてBigQueryのテーブルを使用する場合に、レスポンスの改善や利用料金の低減の目的で使用します。BIツールとBigQueryを接続すると、ちょっとBIツールを操作しただけで何度も検索が発生していて、いつも間にかとんでもない金額を使ってしまうという悲劇を防げます。なんかのBIツールと組み合わせなければならないわけではないので、常時使うことも可能です。

検索をオンメモリで行うので非常に速いそうです。その検索用のメモリの予約した容量に応じて料金が決まります。素のBigQueryよりいろいろと制限が厳しく、BI Engineで検索できない場合、通常のBigQueryで検索され、料金もそちらのものとなります。