大量データの「圧縮率」と「ロード時間」を改善したSAP Sybase IQ16の技術解説


こんにちは、SAPジャパンの境です。先日6月12日に行われたプレスリリースでSAP Sybase IQ16が発表されました。このブログではプレスリリースの中で紹介したSAP Sybase IQ16の新機能のいくつかを詳細に解説したいと思います。

速さの根幹:データ格納方法の変更による圧縮効率の改善

ビッグデータを解析するデータウェアハウスのパフォーマンスを向上させるには、大量のデータのスキャン時に発生するディスクI/Oをいかに減らすかが重要です。SAP Sybase IQではこれまでデータを圧縮して保管することでディスクI/Oの削減を行い、パフォーマンス向上に繋げてきました。SAP Sybase IQはディスクベースの列指向データベースです。データはカラム単位にディスク上に格納されています。この際にそのまま格納せず「FP(Fast Projection)インデックス」という形式で格納しています。以下がFPインデックスを概念化した図となります。

図1

FPインデックスは内部的にカラムの値をユニーク化したものが格納される「ルックアップテーブル」とそれへのポインタが格納される「論理配列」の2つで構成されます。

IQ15.4までは論理配列のデータ長は3種類あり、ルックアップテーブルのエントリー数、カラムのカーディナリティ(カラムに格納される値の種類の数)により1byte、2byte、3byteと変換されてディスク上に格納します。運用を開始してカーディナリティが増加し、1byteに収まりきらなくなった場合は変換が発生し、ルックアップテーブルと論理配列のポインタ部分のデータ長を2byteや3byteに拡張します。(注:3byteを超えるとFlat FPインデックスという別形式になります。)

この構造によりデータは圧縮されて格納されることになり、更にカラムをスキャンする際はポインタとなる論理配列へのスキャンが主となり、結果ディスクI/Oが削減され超高速パフォーマンスを実現しています。他社RDBMS(Relational Database Management System)で使用していたスキーマ構成のままSAP Sybase IQへ移行しただけでディスクの使用量が1/5になった、締めのレポート作成や夜間バッチの速度が100倍以上速くなったという数々の事例はこのようなちょっと地味なデータ格納構造がベースとなり実現されています。

さてSAP Sybase IQ16ではこのFPインデックスが「n-Bit FPインデックス」という新しいFPインデックスに置き換えられました。論理配列の管理単位がbyte単位ではなくbit単位となります。

図2

上記までの説明でお気づきの方もいらっしゃるのではないでしょうか?

実はSybase IQ15.4(まで)ではデータ型、データ長と挿入されるデータのカーディナリティにおいてデータの圧縮率の低下、あるいはデータの圧縮自体が構造上行われないというパターンが存在しました。一番簡単な例は1byteのカラムです。CHAR(1)やVARCHAR(1)はデータのカーディナリティなどにかかわらずデータ圧縮ができないのです。これは、FPインデックスの論理配列の最小が1byteで、データも1byteですので同じサイズとなり、FPインデックスの形式をとることで逆に大きくなってしまうということが原因です。(注:この場合でもSAP Sybase IQは列指向アーキテクチャにより他のRDBMSを圧倒するパフォーマンスを提供することができます。)

SAP Sybase IQ16からは、論理配列の管理単位がbitとなりこのようなパターンへの対処、並びに圧縮率が改善されています。また、これまでカーディナリティが現在のFPインデックスのbyte数を超えた場合、例えば1byteから2byteへ切り替わる際には、既存のFPインデックスの変換(自動で行われます)が必要でしたが、これは不要となりました。n-Bit FPインデックスは31bitまで対応しているためFPインデックス形式で対応できるカーディナリティ数が大幅に増加したことも特長の1つです。Sybase IQ15.4と比較しSAP Sybase IQ16はデータの圧縮率、パフォーマンス共に向上し、ペタバイトクラスのデータウェアハウスを考慮した改良がされています。

ロードパフォーマンス向上:デルタマージ

図3

SAP Sybase IQ16ではデータロード時の動作が変更されています。HGインデックスが付与された既存のテーブルにデータを追加ロードする場合はロードしたデータから小型のインデックスを作成し、その後バックグラウンドで既存のインデックスとマージするという動作になりました。大きなテーブルにデータを追加した場合、テーブルへのデータ追加処理ではなくインデックスへのデータ追加処理に時間がかかるという現象があります。RDBMSに対しての作業で

  • 同じデータ量なのにロード時間が違う
  • 日次バッチ等で毎日ほぼ同じデータ量をロードしているにも関わらず、だんだんとロード時間が長くなっていく

という現象などが該当します。SAP Sybase IQ16ではこのような現象を改善し、データ量に比例したデータロード時間でロードが完了するようになりました。ロード完了直後は1つのテーブルに同一のインデックスが2つ存在するイミングタイミングが存在するということになりますが、オプティマイザーはそれをきちんと考慮しますのでご安心ください。インデックスのマージも小型のインデックスになった時点で追加分のデータは内部的にソートされていることになりますのでロードしながらのインデックスの追加と比較し高速に行うことができます。

この機能を何処かで聞いたことがある方もいらっしゃるのではないでしょうか?そうです、これはSAP HANAが採用している「デルタマージ」という機能です。

SAP Sybase IQ 16は”SAP”として提供するSAP Sybase IQの最初のメジャーリリースとなります。SAPとSybaseの統合によりSAPとSybaseの開発者の連携・交流も進んでいます。SAP Sybase IQ16にはこのようにSAP HANAに由来するテクノロジーが搭載されました。(余談ですがSybaseデータベースからSAP HANAに提供したテクノロジーもあったりしますよ。)

次回はOLTP系の処理にも対応させることが出来るインメモリーローレベルストアとマルチプレックスによるスケールアウト構成での機能拡張を解説する予定です。

ご質問はチャットWebからも受け付けております。お気軽にお問い合わせください。

●お問い合わせ先
チャットで質問する
Web問い合わせフォーム
電話: 0120-554-881(受付時間:平日 9:00~18:00)