はじめに
re:Invent2019でRA3インスタンスとともに発表されたAQUAのGAが待ち遠しいですが、以前に「AQUAはNetezzaのFPGAと同じ」というコメントを聞き、恥ずかしながら「FPGA・・?」というレベルだったため、私の頭の中をまとめるための記事になります。
AQUAとは
ざっくりいうと、Redshiftのコンピュートとストレージ(S3)の間のキャッシュレイヤ的な機能です。
クラメソさんの記事がわかりやすいのでそちらを参照ください。
【速報】 AQUA (Advanced Query Accelerator) for Amazon Redshift がついにプレビュー開始になりました!
FPGAとは
Field Programmable Gate Arrayの略で、Wikipediaさんだと、
製造後に購入者や設計者が構成を設定できる集積回路であり、広義にはPLD(プログラマブルロジックデバイス)の一種である。現場でプログラム可能なゲートアレイであることから、このように呼ばれている。
と書いてあり、ほぼ理解できないですが、書き換え可能なCPUというイメージでしょうか。
NetezzaのFPGA
「超並列DWHとユーザー定義関数」の記事が非常にわかりやすいので、そこから抜粋しています。
“SQL処理をするハードウエア”だなんてまったく想像がつかないかもしれませんが、『FPGA』というものを知っていただくと実態が理解できると思います。FPGA(Field Programmable Gate Array)は任意の論理回路の書き込み/書き換えができるLSIであり、近年ではDVDプレーヤーや画像処理ボードなど、少し複雑な処理が必要でかつ高速に動作する必要がある機器に多く採用されています。
一般的なデータベースの検索処理は、ディスクから共有メモリにデータを読み込み、メモリ上でクエリを実行します。メモリに読み込まれるデータはクエリ(SELECTやWHERE)でカラムとレコードを絞り込む前のデータブロックですので、サイズが大きいままです。データ・ウエアハウスではシステム内部で大量の「データの移動」が発生し、処理時間が遅い原因の1つとなります。
Netezzaは、このデータ自体を極力移動させないことでCPUが処理すべきデータ量を最小限に抑えています。ディスクI/Oコントローラのところで、レコードの可視化制御やSELECT句のカラム、WHERE句など条件の絞り込みを行ってしまい、メモリ上にデータブロックすべてを読み込まなくても良い仕組みとなっています。ここに使用されているのが『FPGA』です。
Netezza社はディスクからデータを読み込みながら不要なデータをフィルタリングする機能をFPGAに実装しました。さらに、圧縮してディスクに格納されているデータの解凍もこのFPGAで行われます。普通の解凍はOSの上のソフトウエアがサーバのCPUを使って処理しますが、Netezzaのデータの解凍はFPGAで行うため非常に高速なのです。
つまり、メモリにデータを持ってきてから絞り込むのではなく、ディスクから抜く時点でデータを絞ってしまおうという発想の仕組みということですね。
RedshiftのAQUAとNetezzaのFPGA
AWSさんの記事で明確に共通点として記載されていました。
Netezza データウェアハウスの Amazon Redshift への移行
Netezza では、CPU に到達する前のデータに対し、FPGA を使ってシンプルな計算処理を行っています。この、Netezza における FPGA 機能を適用するように設計されたアプリケーション (特定の集約関数やデータフィルタリングに強く依存するクエリなど) は、AQUA を使う Amazon Redshift クラスターに効率良く変換できます。