CTC 教育サービス
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes
前回に続いて、2024年に公開された論文「Vortex: A Stream-oriented Storage Engine For Big Data Analytics」に基づいて、BigQueryのStorage APIを支えるストレージエンジンであるVortexのアーキテクチャーを解説します。今回は、Storage Optimization Serviceの処理内容と実環境での性能データを紹介します。
前回の記事の図1で説明したように、Write APIを用いて、Streamを経由して書き込まれたデータは、Streamごとに分かれたStreamletとして保存されます。Streamletの実体は、データの書き込み順で追記されたログファイル(Fragment)の集まりです。一方、BigQuery標準のデータ保存形式は、カラム型データストアを用いた「BigQuery Managed Storage Tables」です。そこで、バックグラウンドで動作するStorage Optimization Serviceは、定期的にFragmentのデータを集めて標準のデータ保存形式に変換します(図1)。図1の右にあるROSが、標準形式のテーブルデータを表します。
図1 WOSからROSへのデータ変換(論文より抜粋)
ただし、この変換は一度で終わるわけではありません。複数のROSのパーティションをさらにマージして最適化する処理を段階的に実施することで、新しく追加されたデータを既存のパーティションに組み込んでいきます。
また、BigQueryには、ユーザーが指定した特定のカラムの値でテーブル内のデータをソートすることで、フィルタや集計のクエリを高速化するクラスタリング機能があります。ROSのパーティションの最適化にあわせて、クラスタリングを考慮したROSの再構成も自動的に行われます。図2の左上のBaselineでは、ROS A → ROS B →・・・→ ROS C の順にデータがソートされた状態になっています。その右のNew Deltaは、後からFragmentに書き込まれた新しいデータです。これらのデータをBaselineのROSにマージする際は、クラスタリングを考慮した形でデータが挿入されて、必要に応じてROSの再分割が行われます。
図2 ROSの最適化にあわせたクラスタの自動再構成(論文より抜粋)
Colossus上の追記型ログファイルとして実装されたFragmentは、書き込み処理に最適化された形式と説明しましたが、読み込み処理を高速化する工夫もなされています。BigQueryでは、Big Metadataと呼ばれる専用のメタデータ管理システムによって、それぞれのFragmentに保存されたデータの範囲を表すメタデータを管理しており、クエリー実行時は、クエリー処理に関連するFragmentを特定して、実際に必要なデータだけを読み込みます。また、前回の記事の図2で見たように、Write APIを通じてデータを書き込む際、Vortex Client Libraryは、Stream Serverを経由して書き込みます。一方、Read APIを通じてデータを読み込む際は、Colossus上のFragmentに直接アクセスすることで、高速にデータを読み出します。
前々回の記事では、Vortexの特徴として、ストリーミングでのデータ挿入で、「数ペタバイトのサイズのテーブルに対して数十ミリ秒のレイテンシでの書き込みを実現する」点を紹介しました。冒頭の論文では、これを実証する実環境での性能データが公開されています(図3)。
図3 実環境における書き込み処理のレイテンシー(論文より抜粋)
左のグラフは、特定の2週間における書き込み処理のレイテンシーの分布を表します。50パーセンタイル(水色)で常に10ミリ秒以下、99パーセンタイル(緑色)でも常に3ミリ秒以下のレイテンシーを実現していることがわかります。また、右のグラフは書き込みのスループットごとにレイテンシーの分布を示したものです。1GB/sを超える書き込みでも、99パーセンタイルで30ミリ秒以下のレイテンシーが保たれています。
今回は、2024年に公開された論文「Vortex: A Stream-oriented Storage Engine For Big Data Analytics」に基づいて、BigQueryのStorage APIを支えるストレージエンジンであるVortexについて、Storage Optimization Serviceの処理内容と実環境での性能データを紹介しました。この論文では、BigQuery標準の「BigQuery Managed Storage Tables」を前提とした解説がなされていますが、現在のBigQueryは、その他の形式のテーブルや外部ストレージも使用することができます。次回からは、BigQueryのこれらの新しい機能を解説した論文を紹介する予定です。
Disclaimer:この記事は個人的なものです。ここで述べられていることは私の個人的な意見に基づくものであり、私の雇用者には関係はありません。
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes