超並列DWHとユーザー定義関数
速さの秘訣その2:分散並列処理によって処理時間を短縮
大量データの検索や書き込みはとかく時間が長くかかるものです。それなら、少量データに小分けして並列に処理すれば、時間を短縮できます。
データベースにおいては、もし、1テーブルに1億件のデータが格納されていても、100個のディスクに分散されていて100並列に処理できれば、1つ当たりは100万件の処理量ですむのです。
Netezzaは、データ処理専用のプロセッサと専用メモリ、および各ハードディスクを担当するFPGA上で動く「スニペット・プロセッサ」といういわば小型の「高機能DB専用エンジン」を多数搭載しており、SQL処理やデータロードを並列に処理します。
以下の対照的な2つのアーキテクチャを併せ持つのが、NetezzaのDWHアプライアンスです。
- 大量データを複数ディスクに分散して格納し、スニペット・プロセッサがそれぞれの担当するディスクを処理する「シェアード・ナッシング式のMPPアーキテクチャ」
- ユーザーからのリクエストを1つのホストで受け、複数のスニペット・プロセッサに分かれて処理が行われていることを意識させることがない「SMPアーキテクチャ」
SMPホストは、データロード命令を受け付けると、データをハッシュ分散してスニペット・プロセッサへ渡し、データが各ディスクに格納されます。また、SQL命令を受け取ると、コンパイルしたバイナリを各スニペット・プロセッサに配布し、各スニペット・プロセッサが並列に処理した結果を受け取りユーザーへ返します。利用者がシステム構造やシステム管理を気にすることなく、並列処理が行える仕組みになっています。
DWHアプライアンスの活用とOnStream
複数台のサーバで並列に処理する「MPPアーキテクチャ」のデータベースはほかにも存在しますが、Netezzaは先に紹介したSQL処理を行うハードウエア「FPGA」が組み込まれたスニペット・プロセッサが動くブレード「S-Blade(スニペット・ブレード)」の形で、非常に省エネで、コンパクトな1ラックのハードウエア構成となっています。
冷蔵庫を自宅に運び入れて電源を入れたらすぐ使えるといった家電製品のように、Netezzaも搬入設置してネットワークにつないだらすぐにデータ・ウエアハウスとしてテーブル作成、データロード、検索ができるカンタンDWHアプライアンスです。パフォーマンスチューニング作業やディスク管理、CPU管理に時間を取られる必要はなく、どういうデータを入れて、どういう検索を行うかという分析業務ロジックを考えるほうに注力すれば良いわけです。
それでは最後にDWHアプライアンスの活用編として、OnStream機能を紹介します。OnStream機能は、標準SQLでは記述できない問合せやアプリケーションを、ユーザがC++で作成してNetezzaで並列処理させることができるというものです。
この機能の活用例として、金融業界において必要とされるリスク計算のためのシミュレーション処理などの事例があります。データベースから取得した結果をシミュレーション計算するのではなく、データベースから取り出す時点でシミュレーション計算させるというしくみです。
Netezzaのデータ取り出し部分ですから、計算処理が並列に処理できます。これにより、シミュレーション精度を高めるために十分な大量データの計算が高速に行えるのです。
並列コンピューティングを実現するため、複数台の分散サーバやロジックの並列化などを常に意識しながらプログラミングを進める事に比べると、すでに分散並列アーキテクチャが実装されているNetezza上でシミュレーション計算のロジックのみに思考が集中できることは、時間やコストを大幅に削減できることになります。