なぜSAP HANAは列志向型なのに処理が速いのか?主要技術「デルタバッファ」とは?
—————————————-
【コラム監修者 プロフィール】
クラウドコンサルティング代表取締役 岸仲篤史
新卒でSAPジャパン株式会社に入社。
SAPジャパン在籍中にCOコンサルとして従事したことで、会計コンサルの面白さに目覚め、
大和証券SMBC株式会社 投資銀行部門、新日本有限責任監査法人、アビームコンサルティングにて、
一貫して約10年間、会計金融畑のプロフェッショナルファームにてキャリアを積む。
その後、2017年クラウドコンサルティング株式会社を設立し、SAPフリーランス向けSAP free lanceJobsを運営し、コラムの監修を手掛ける。
https://www.facebook.com/atsushi.kishinaka#
X
—————————————-
INDEX LINK
はじめに
SAP HANAは、SAP S/4HANAをはじめとするSAPソリューションの基盤として、企業のリアルタイムなデータ処理を支えるDBです。
その中でも、SAP HANAが採用する列指向型データベース(カラムストア)は、従来の行指向型データベースとは異なるアーキテクチャを持ち、分析処理や検索速度において優れた性能を発揮します。
しかし、一般的に列指向型データベースは「データの追加・更新・削除といったトランザクション処理が遅い」とされていることも事実。
本記事では、SAP HANAがなぜ列指向型にもかかわらず高速処理を実現できるのか、またそのカギを握る技術である「デルタバッファ(Delta Buffer)」について詳しく解説します。
SAP HANAの構造を深く理解することで、システム設計やパフォーマンスチューニングの精度を向上させ、より実践的なスキルを身につけることができるでしょう。
1.SAP HANAの主要技術「列指向型DB」とは
SAP HANAはインメモリデータベースであり、データをメモリ上に保持することで高速な処理を実現しています。
さらに、SAP HANAの大きな特徴の一つとして列指向型(カラムストア)データベースを採用している点が挙げられます。
一般的なリレーショナルデータベース(RDB)は行指向型(ロウストア)であり、Oracle、MySQL、DB2、SQL Serverといった主要なデータベースもこの形式を採用しています。
行指向型データベースは、1つの行をひとまとまりのデータとして扱い、データの追加・削除・更新・検索などの処理を行う方式です。
トランザクション処理(OLTP)に適しており、新しいデータの追加や更新が頻繁に発生する業務システムで広く利用されています。
これに対し、SAP HANAのような列指向型データベースでは、データは「列単位」で格納・処理されます。
同じ列(縦方向)には同一項目(例えば「売上額」や「顧客ID」など)のデータが集まるため、データの性質にバラつきがありません。
この特性を活かし、SAP HANAは高いデータ圧縮率を実現し、検索・集計処理を高速化しています。
特に、OLAP(オンライン分析処理)においては、不要な列のデータを読み込む必要がなく、メモリ帯域の効率的な活用が可能です。
つまり、本来のSAP HANAは列指向型であるがゆえに、分析系の処理に特化したDBと言えるわけです。
2.列指向型DBの弱点
しかし、列指向型データベースには弱点もあります。
それは「データの追加・削除・更新などのオンライン処理(OLTP)が遅い」という点です。
SAP HANAはこの課題を解決するために「デルタバッファ(Delta Buffer)」という仕組みを導入しています。
列指向型データベースの最大の課題は、データの追加・削除・更新処理の遅さです。
これは、データの格納方法による構造的な問題に起因しています。
列指向型データベースでは、新しいデータを追加・更新する際に、複数の列のデータをそれぞれ個別に書き換える必要があります。
行指向型のように1レコード単位で連続して書き込むことができません。
そのため、更新処理や削除処理の際にはデータの書き換えコストが高くなり、トランザクション処理(OLTP)には不向きとされてきました。
さらに、データの圧縮が効率的に行われることで検索処理は高速化されるものの、更新処理ではこれが仇となるケースもあります。
更新処理では圧縮されたデータを解凍し、変更を加えた後に再圧縮するという手順が必要となり、処理のオーバーヘッドが大きくなるためです。
3.列指向型の弱点を補うデルタバッファ
SAP HANAでは、列指向型データベースの「書き込みの遅さ」という弱点を克服するために、デルタバッファ(Delta Buffer)を導入しています。
デルタバッファは、新しく追加・更新されたデータを一時的に格納する領域であり、SAP HANAでは「L1デルタ」と「L2デルタ」という2種類のデルタバッファを使用しています。
3-1.L1デルタ(行指向型)
L1デルタは行指向型(ロウストア)で管理されるため、新しいデータの追加・更新・削除を高速に処理できます。
データベースに対して更新が発生すると、新しいデータはまずL1デルタに書き込まれます。
この時点で、ユーザー側から見た処理は完了しているため、リアルタイムのOLTP処理において速度低下を感じることはありません。
3-2.L2デルタ(列指向型)
L1デルタに一定量のデータが蓄積されると、バックグラウンドでL2デルタへと変換されます。
L2デルタは列指向型(カラムストア)で管理され、検索や集計処理の最適化が行われます。
このプロセスにより、リアルタイム処理の高速性と、分析処理のパフォーマンスを両立することが可能になります。
3-3.メインストア(カラムストア)への統合
L2デルタに格納されたデータは、一定のタイミングで最終的にメインストア(本来の列指向型データベース領域)に統合されます。
この統合処理(マージ処理)により、データ全体が最適な形で圧縮され、検索や分析処理の効率を最大限に高めることができます。
このように、SAP HANAは2つのデルタバッファを活用することで、OLTPとOLAPの両方に対応したハイブリッドなデータベース構造を実現しているのです。
4.デルタバッファの類似技術は他のDBでも使われている
ちなみにデルタバッファのように「一時的にデータをバッファに退避し、別の形式で格納する」という技術は、他のDBでも採用されています。
以下はその具体例です。
4-1.Write-Ahead Logging(WAL) – PostgreSQL, MySQL, Oracle
多くのリレーショナルデータベース(PostgreSQL、MySQL、Oracleなど)では、Write-Ahead Logging(WAL)と呼ばれる仕組みを採用しています。
WALは、トランザクションが発生した際に、一時的にログファイル(WALログ)に記録し、一定の間隔で実際のデータベースへ反映する方式です。
ダイレクトに書き込みを行わないことで書き込みのオーバーヘッドを削減し、データの整合性を保ちながら性能を向上させています。
SAP HANAとの違い
WALはログを利用して変更を記録しますが、SAP HANAのデルタバッファは行指向のバッファ領域(L1デルタ)を使用します。
また、WALはクラッシュリカバリーに活用されるのに対し、デルタバッファは主に書き込みの高速化と分析処理の最適化を目的としています
4-2.MemTableとSSTable – Apache Cassandra, Google Bigtable
NoSQLデータベースであるApache CassandraやGoogle Bigtableでは、MemTableとSSTableという構造を用いた書き込み最適化を行っています。
書き込み時には、まずMemTable(メモリ上のバッファ)にデータを保存し、一定のタイミングでディスク上のSSTable(Sorted String Table)へ書き出します。
この方法により、書き込みを高速に処理しつつ、ランダムアクセスを減らしてデータ検索の効率を高めています。
SAP HANAとの違い
MemTableはメモリ上にデータを一時保存し、最終的にSSTableへ書き込みます。
一方でSAP HANAのデルタバッファはL1デルタ(行指向)→ L2デルタ(列指向)→ メインストア(列指向)の流れを持ちます。
MemTableとSSTableは主にログ構造化ストレージ(LSM-Tree)を用いたデータ管理のための技術です。
4-3.Undo/Redoログ – Oracle, SQL Server
Oracle DatabaseやMicrosoft SQL Serverでは、UndoログとRedoログを活用してデータの一貫性と書き込みパフォーマンスを向上させています。
更新や削除が発生した際には、元のデータ(Undoログ)と変更後のデータ(Redoログ)を記録し、バッチ処理でデータを反映する仕組みになっています。
これにより、トランザクションのロールバックやクラッシュリカバリーを効率的に行うことが可能です。
SAP HANAとの違い
Undo/Redoログはトランザクションの一貫性と耐障害性を確保するためのものです。
SAP HANAのデルタバッファは、主にパフォーマンス最適化とOLTP/OLAPの両立を目的としているため、この点が異なりますね。
4-4.SAP HANAのデルタバッファの独自性
SAP HANAのデルタバッファは、従来のWALやMemTableとは異なり、「行指向→列指向の変換を行う2層のバッファ構造(L1デルタ & L2デルタ)」を持つ点が特徴です。
異なる形式のバッファ領域を通すことで、OLTP(書き込み処理の高速化)とOLAP(検索・分析の高速化)を両立できる設計となっています。
SAP HANAのデルタバッファが特に優れている点
・トランザクション処理と分析処理の両立:
行指向のL1デルタで高速なデータ追加・更新を実現しつつ、L2デルタを経由して列指向のメインストアへ統合。
・インメモリ技術との組み合わせ:
データをディスクではなくメモリ上に保持するため、従来のWALやUndo/Redoログに比べても圧倒的に高速。
・バッチ処理による最適化:
バックグラウンドで自動的にデータを圧縮・統合することで、ユーザーの操作感を損なわずにシステムを最適化。
まとめ
本記事では、SAP HANAの特徴である列指向型データベースの仕組みと、それを補完するデルタバッファの技術を紹介しました。
SAP HANAのデルタバッファのように、一時的な書き込み領域を活用する技術は、PostgreSQLのWAL、CassandraのMemTable、OracleのUndo/Redoログなど、多くのデータベースで採用されています。
ただしSAP HANAのデルタバッファは、単なる書き込み最適化の仕組みではなく、OLTPとOLAPを両立するためのハイブリッドな設計です。
SAP業界で働くエンジニアやコンサルタントにとって、SAP HANAのデータ処理の仕組みを理解することは、システム設計の最適化やパフォーマンスチューニングの精度を向上させる上で不可欠なスキルとなります。
特に、S/4HANA環境の最適化やパフォーマンス改善に関わる場面では、SAP HANA独自の仕組みを理解し、適切な運用を行うことが求められます。
今後のキャリアを強化するためにも、SAP HANAのアーキテクチャを深く理解し、技術習得を進めていきましょう。