In Silico

データ基盤

保存と計算の分離で、クラウドの分析は何を得て何を払ったか

2026/10/6 シリーズ「データ基盤はなぜ作り直されてきたか」 第5回 / 全6回

  • 保存と計算の分離
  • データ基盤
  • クラウド
  • Snowflake
  • BigQuery
  • Amazon Redshift
  • Dremel
  • Amazon S3
  • オブジェクトストレージ
  • キャッシュ
  • シェアードナッシング
  • 従量課金
  • データウェアハウス
  • レイテンシ
  • OLX
  • TPC-H
  • ネットワーク帯域
目次
背景・問い・要点
背景

列ごとに保存する分析用のデータベース(データウェアハウス)も、生のデータを大量に置く分散処理の仕組みも、計算する機械のディスクにデータを置き、その機械で処理する点では同じだった。データを置く場所と計算する場所が同じなので、データが増えれば計算の機械も増やし、計算を増やしたければデータも動かす必要がある。

自社の機械を何年も使う間は、この結び付きはあまり問題にならなかった。ところがクラウドでは、機械を数分で借りて数分で返せる。昼間の集計のために多くの機械を動かし、夜は止める、という使い方ができるはずである。データが計算の機械のディスクにある限り、機械を止めることも台数を変えることも、データの移動を伴う。

保存する場所と計算する機械を分ければ、「データを計算する機械に置く」という前提が外れる。列ごとに保存するデータベースにもデータレイクにも共通していた前提である。本稿は、この設計を採った三つの会社が自社の仕組みについて書いた論文と文書、独立した研究者による測定、利用企業の公開記事を例に取る。

問い

分析用のデータベースが、データを共有の保存先に置き、計算する機械を別に動かす形へ移ったとき、何を得て、何を払ったのか。

要点

クラウドの分析用データベースは、データを共有のオブジェクトストレージに置き計算を別に動かすことで、保存と計算を別々に増減し止めれば払わずに済む形を得たが、遠い保存先の遅さをキャッシュで補い、使った分の料金を自分で管理する負担を負った。 オブジェクトストレージは、ファイルを丸ごと書き、必要な範囲を読み出す、安くて壊れにくい保存先である。保存と計算を分けると、計算の台数を変えてもデータは動かない。その代わりに、ネットワークの向こうの保存先は手元のディスクより遅く、計算を止めると手元のキャッシュも消える。

モデル・例示

昼だけ集計する会社が、機械を何時間借りるか

※ この節の数値は説明のための仮定で、測定値ではありません。

ある会社が 100 TB のデータを分析しているとする。集計は平日の 9 時から 18 時に集中し、その間は 32 台の機械が要る。夜と週末は集計がない。一台の機械のディスクには 4 TB が入る。

データを計算する機械のディスクに置く形では、100 TB を置くだけで 25 台が要り、昼の集計には 32 台が要る。機械を止めるとデータを保存する場所が無くなるので、32 台を一週間ずっと動かす。一週間は 168 時間なので、借りる時間は 32 × 168 = 5,376 台時間になる。データが 40 TB 増えて 140 TB になると、32 台のディスクの合計 128 TB に入らず、計算が足りていても保存のために 3 台を足して 35 台にする。

データを共有の保存先に置く形では、保存先にはデータの量に応じて払い、計算の機械は動かす時間だけ借りる。平日 5 日の 9 時間だけ 32 台を動かすと、32 × 9 × 5 = 1,440 台時間になる。データが 40 TB 増えても、計算の台数は変わらない。ただし、朝に機械を動かし始めた直後は、手元のディスクにデータが無いので、最初の集計は保存先からネットワーク越しに読むことになり遅くなる。

この比べ方から、三つのことが言える。

  1. データを計算する機械のディスクにだけ置く形では、動かす台数はデータの量と計算の量の大きいほうで決まり、機械を止められないので使わない時間の分も払う。
  2. 分ける形では、計算の機械は動かす時間の分だけ払い、データが増えても計算の台数は変わらない。
  3. 止めた機械は手元のキャッシュを失うので、再開した直後の問い合わせは遅い。

データを計算する機械に置くと、保存と計算を別々に増やせない

Snowflake の開発者は 2016 年の論文で、各機械が自分のディスクにデータを持つシェアードナッシングの形を、計算と保存を強く結び付ける形と呼び、クラウドで問題になる点を三つ挙げた1。読み込みの多い仕事と計算の多い仕事では向く機械の構成が違い、一つの構成では平均の使用率が低くなる。機械が壊れたり台数を変えたりするたびに大量のデータを配り直す必要があり、その作業を問い合わせと同じ機械が担うので性能が落ちる。全部の機械が結び付いているので、止めずに一台ずつ更新するのが難しい。論文は、自社の機械の上ならこれらは我慢できたが、クラウドでは台数の変化は例外ではなく日常になると書く。

Google も、自社の分析の仕組み Dremel で同じ問題にぶつかった。2020 年の振り返りの論文によれば、Dremel は当初、データを各機械のディスクに分けて置いていた。2009 年の初めからは、表の一部を三つの機械の手元のディスクに複製して置くようになった2。手元のディスクに複製して置くこの形では、データを移さずに台数を変えられず、保存の量を増やすには計算の機械も一緒に増やす必要があり、データは Dremel の外からは読めない状態に閉じ込められてもいた。論文は、どれも解ける問題だったが、解いた先の形が社内の分散ファイルシステムに似てきたと書く。

Amazon Redshift の初期の設計も、計算する機械が自分のディスクのデータを処理する形だった。2015 年の論文によれば、台数を変えるときは新しいクラスタを用意し、元のクラスタを読み取り専用にして、全部のデータを機械どうしで写していた3。同じ論文は、S3 に取ったバックアップから必要な部分を読みながら戻せる機能を説明し、無視できない割合の利用者が毎週金曜日にクラスタを消し、月曜日に戻していたと書いている。止めれば払わずに済む使い方は、この時点で一部はできていた。

利用企業の側の記録もある。OLX Group は 2023 年に AWS のブログで、Redshift の旧型のクラスタでほぼ毎日ディスクの空きが無くなる警告を受けていたと書いた4。対処はいつも機械の台数を増やすことで、18 台まで増やしたが、計算の能力は余っていたのにディスクのために計算の機械を足していたという。この記事は AWS の担当者との共著で、利用企業自身の報告である。

共有の保存先に置けば、計算を必要なときだけ動かせる

Snowflake は、データを Amazon S3 に置き、問い合わせを処理する機械の集まり(仮想ウェアハウス)を別に動かす形を採った1。仮想ウェアハウスは計算だけを担い、いつでも作り、消し、大きさを変えられる。論文は、問い合わせが無いときは全部止めることを勧めている。論文は、4 台で 15 時間かかる読み込みが 32 台なら 2 時間で済むかもしれず、払う機械の時間はほぼ同じだという例を挙げているが、これは測定ではなく説明のための仮定である。論文は運用の教訓として、利用者が調整するのは、どれだけの性能を求め、それにいくら払うかの一点になったと書く。

Redshift も後に同じ方向へ移った。2022 年の論文によれば、新しい型の Redshift はデータを S3 に置き、計算の機械の SSD を手元のキャッシュとして使う5。台数の変更は、データを動かさずに管理用の情報を書き換えるだけの作業になり、台数の変更と別の型への復元を合わせて、月に 15,000 回を超えて使われているという。Google は社内の分散ファイルシステム、Snowflake と Redshift は S3 と、保存先は違うが、三社とも保存を計算の機械の外に置く形にたどり着いている。三社の論文はどれも自社の仕組みについての報告である。

Snowflake の研究者と大学の研究者は 2020 年に、2018 年 2 月の 14 日間に Snowflake で動いた約 7,000 万件の問い合わせを分析した6。この期間に大きさを一度も変えなかった仮想ウェアハウスは 82% で、大きさを変える機能を使ったのは約 2 割だった。論文はこれを、多くの顧客がすでに使っていると表現している。使ったものの中には、台数を 100 倍ほど変えたものもあった。

その後、ネットワークの速さがこの形の不利を小さくした。ミュンヘン工科大学の Durner らは 2023 年の論文で、AWS が 2018 年に 100 Gbit/s のネットワークを持つ機械を出し、一台あたりのネットワーク帯域が 4 倍になったことを、オブジェクトストレージで分析する障害が小さくなった理由に挙げた7。

遠い保存先は遅く、各社は手元のキャッシュで補った

オブジェクトストレージは、手元のディスクより遅い。Snowflake の論文は、S3 は手元の保存先よりアクセスの遅れ(レイテンシ)がずっと大きく、ファイルは丸ごと書き換えるしかなく末尾への追記もできないと書いた1。Snowflake は、一度書いたファイルを書き換えない設計と、手元のディスクへのキャッシュでこれに対応した。Durner らの測定では、S3 への一回の要求には中央値で約 30 ミリ秒の基本の遅れがあり、100 Gbit/s の帯域を使い切るには 200 から 250 の要求を同時に出す必要があった7。Durner らによれば、帯域では手元の SSD との差はほぼ埋まり、残る不利は一回ごとの要求の遅れと、ネットワーク越しに読むための CPU の負荷である。同じ論文は、要求を多数同時に出す仕組みを著者らのデータベースに組み込むと、キャッシュを使わずに、手元の SSD にキャッシュする製品と同程度の速さが出たとも報告している。

Google の経験は、移行の最初の段階が遅かったことを示している。共有の分散ファイルシステムの上で Dremel を動かした最初の実験では、性能が 1 桁落ちた2。数十万のファイルを開くだけで数秒かかったという。保存の形式、管理用の情報の持ち方、処理を割り当てる場所、先読みを調整し続けた結果、最終的には典型的な仕事で手元のディスクを使う形より速くなったと論文は書くが、その差の数字は示していない。同じ論文は、分離を含む設計の原則は対話的な速さとは本来相性が悪いという通念を認めたうえで、それを補う工夫に一つの節を割いている。

キャッシュは小さくても効いた。先の Snowflake の分析では、手元のキャッシュの大きさは顧客のデータの平均約 0.1% だったが、平均のヒット率は読むだけの問い合わせで約 80%、書き込みも含む問い合わせで約 60% だった6。ただし同じ論文は、ヒット率が 75% を超える読むだけの問い合わせが件数で 80% あっても、それらが読んだデータの量は全体の 60% 余りにとどまると注記している。

独立した研究者の比較もある。Tan らは 2019 年に、1 TB の TPC-H(分析の性能を比べる業界標準の測定)で複数の分析用データベースを AWS の上で比べた8。S3 のようなオブジェクトストレージは、データベースの保存に使われてきたブロックストレージより 1 桁安く、混ざった仕事では大きな性能の不利もなかった。一方で、データを手元の SSD に置く旧型の Redshift は、一人で問い合わせる条件では他より桁違いに速かった。ただし著者らは、その主な理由を手元の SSD ではなく、一つの問い合わせを多くの CPU に分ける処理と機械語への変換に求め、同時の利用者が増えると Redshift が不利になることも測っている。旧型の Redshift は、動かし始めてデータを手元に読み込むまでに約 12 分かかり、他の仕組みの 5 分から 7 分より長かった。

使った分を払う従量課金では、止めれば速さを失い、料金の管理は利用者に移る

計算を止めれば料金はかからないが、手元のキャッシュも消える。Snowflake の文書は、仮想ウェアハウスを止めるとキャッシュが消え、再開後の最初の問い合わせが遅くなることがあると書き、止めて料金を節約するかキャッシュを保つかの兼ね合いを考えるよう勧めている9。Tan らも、S3 から計算の機械の保存先へキャッシュする方式は、冷えた状態から始める場合には不利になると報告している8。

使った分を払う形では、料金の上限も利用者が決める。Google が Dremel をもとに外部に提供している BigQuery の文書は、使った分だけ払う料金体系では、プロジェクトか利用者ごとの一日の上限で費用を抑えられ、上限に達すると問い合わせは止まると書く10。同じ頁は問い合わせごとに課金される量の上限も勧めており、見積もった読む量が上限を超える問い合わせは、課金されずに失敗する。枠を予約する料金体系を選べば、使える枠の数で上限を決める。並べ替え(クラスタ化)をしていない表では、問い合わせに LIMIT を付けて返す行を減らしても読む量は減らず、参照した列を全行読んだ分が請求される。

OLX Group の記録は、得たものと払ったものを一社で示している4。OLX Group は、データを S3 に置く新しい型の Redshift の 7 台へ移った。移行の翌朝、クラスタは遅かった。記事は、用意していた三つの対策を数日のうちにすべて打ったと書く。一台を足しても効果は小さく、混雑したときに自動で計算を足す機能を一日最大 4 時間まで使うことにした。そのうち 3 時間分は有料で、料金は機械を一台足すのとほぼ同じだったという。さらに、移行前に手で細かく調整していた負荷の割り振り(WLM)の設定が新しいクラスタでは効率が悪かったので、割り振りを自動に切り替えた。追加の計算と自動の割り振りを当ててから、一週間安定したという。一年後、ディスクの空きの問題は無くなり、性能も旧型より全般に良くなったが、新しい型の機械と追加の計算のためにクラスタの費用は増えたと書いている。同じ記事は、月に使う利用者が 250 人から 300 人に増えたことと、当面は台数を変えずに済む見込みも併せて書き、題では費用の効率が上がったとしている。

出典10件
  1. Dageville ほか「The Snowflake Elastic Data Warehouse」SIGMOD, 2016. https://info.snowflake.net/rs/252-RFO-227/images/Snowflake_SIGMOD.pdf — 結び付きの三つの問題、S3 の性質、仮想ウェアハウス(§2, §3、開発元)。 ↩ ↩2 ↩3

  2. Melnik ほか「Dremel: A Decade of Interactive SQL Analysis at Web Scale」PVLDB 13(12), 2020. https://www.vldb.org/pvldb/vol13/p3461-melnik.pdf — 手元のディスクに複製した時期の不利、最初の1桁の低下、分離の逆効果(§3.1, §7、開発元)。 ↩ ↩2

  3. Gupta ほか「Amazon Redshift and the Case for Simpler Data Warehouses」SIGMOD, 2015. https://15721.courses.cs.cmu.edu/spring2023/papers/24-redshift/p1917-gupta.pdf — 手元のデータの処理、元を読み取り専用にして全データを写す台数変更、金曜に消し月曜に戻す利用者。 ↩

  4. Chin, Greenshtein「How OLX Group migrated to Amazon Redshift RA3…」AWS Big Data Blog, 2023. https://aws.amazon.com/blogs/big-data/how-olx-group-migrated-to-amazon-redshift-ra3-for-simpler-faster-and-more-cost-effective-analytics/ — 移行前後、三つの対策、費用と利用者の増加(自社報告・AWS 共著)。 ↩ ↩2

  5. Armenatzoglou ほか「Amazon Redshift Re-invented」SIGMOD, 2022. https://cdn.amazon.science/4b/37/223ac61e450898244a31bed53734/amazon-redshift-re-invented.pdf — S3 に置き SSD をキャッシュに、台数変更は管理情報だけ、月15,000回超(§3)。 ↩

  6. Vuppalapati ほか「Building An Elastic Query Engine on Disaggregated Storage」NSDI, 2020. https://www.usenix.org/system/files/nsdi20-paper-vuppalapati.pdf — 2018年2月の約7,000万件、82%が大きさを変えず約2割が使う、キャッシュ約0.1%でヒット率60〜80%。 ↩ ↩2

  7. Durner, Leis, Neumann「Exploiting Cloud Object Storage for High-Performance Analytics」PVLDB 16(11), 2023. https://www.vldb.org/pvldb/vol16/p2769-durner.pdf — S3 の遅れ約30ms・同時200〜250要求、帯域差の解消と CPU 負荷、無キャッシュで同程度(§1–2)。 ↩ ↩2

  8. Tan ほか「Choosing A Cloud DBMS: Architectures and Tradeoffs」PVLDB 12(12), 2019. https://www.vldb.org/pvldb/vol12/p2170-tan.pdf — S3 は1桁安い、旧型 Redshift は一人なら速いが主因は SSD でない、起動約12分、冷えた状態ではキャッシュが不利(1TB TPC-H)。 ↩ ↩2

  9. Snowflake「Warehouse considerations」2026年10月6日取得. https://docs.snowflake.com/en/user-guide/warehouses-considerations — 止めるとキャッシュが消えるという兼ね合いの説明(開発元の文書)。 ↩

  10. Google Cloud「Estimate and control costs」2026年10月6日取得. https://cloud.google.com/bigquery/docs/best-practices-costs — 費用の上限は一日の上限と問い合わせごとの上限、LIMIT でも参照列の全行分を請求(開発元の文書)。 ↩

この記事はAIが執筆しています。内容には誤りが含まれる可能性があります。ご注意ください。