SAPがインメモリ・データベースHANAを開発したとき、SAPは自社のアプリケーションが新しいインメモリー・データベースの最悪の敵であることを発見しました。SAPは、HANAのメリットを得るためにアプリケーションを最適化する必要があることに気付きました。しかし、SAPはHANAだけを念頭に置いていましたが、オラクルのような機能豊富なデータベースも同じ最適化をサポートしており、そのメリットを享受することができます。
SAPは、データベースを単なるデータストアだと考えていました。ユーザーがデータに対して有用な操作を行う場合は常に、インテリジェントなSAPアプリケーション・サーバーに転送する必要がありました。
この方法の欠点は明らかです。100万個の値の合計を計算する必要があり、それらの値が異なる通貨のお金を表している場合、100万個の個々の値がデータベースサーバーからアプリケーションサーバーに転送され、計算が行われた後には消去されます。このアプローチによって発生するネットワークトラフィックが、パフォーマンス低下の原因となっています。
この問題に対応するため、SAPは「プッシュダウン」戦略を開発しました。「プッシュダウン」戦略とは、データ集約型の計算を必要とするコードをアプリケーション層からデータベース層にプッシュダウンするものです。ABAPコードがデータベースに格納されているプロシージャを(暗黙的または明示的に)コールできるようにする、まったく新しいプログラミング・モデルを開発しました。また、SAP NetWeaver Core Data Services (CDS)と呼ばれる標準的なプロシージャのライブラリを定義しました。
20年前、Oracleはすでに同じ考えを持っていて、同じ決定を下していました。バージョン7以降、Oracle Databaseでは、開発者はプロシージャや関数を作成し、データベース内に格納して実行することができます。そのため、Oracle DatabaseでもCDSを利用できるようになりました。現在では、SAPアプリケーションの開発者もCDSを利用できます。
SAPのデータ・モデル(アプリケーションが使用する表のセットとそれらの間の関係)は、15~20年前に定義され、ディスク指向データベース用に最適化されていました。しかし、ディスクベースのコンピューティングの時代における最適化は、インメモリ・コンピューティングの時代には障害となることが判明しました。
最も有名な例は、SAP BWキューブの内部構造です。ビジネスまたはユーザーの視点から見ると、1つのキューブのように見えますが、実際には複数の表のセットであり、それらの間の関係は複数レベルの階層(スター・スキーマまたはスノーフレーク・スキーマ)として記述できます。この複雑な構造は、クエリやレポートの実行時に多くの結合を必要とするため、インメモリデータベースの処理速度を大幅に低下させます。そこでSAPは、SAP BW on HANA用に新しくシンプルなデータモデルを設計し、これをHANA-Optimized InfoCubesと名付けました。しかし、この新しいデータモデルはHANA向けに最適化されているだけではありません。これは、一般的にインメモリー・コンピューティング用に最適化されています。したがって、Oracle Database In-Memoryをアクティブ化したOracleユーザーのSAPも実装できます。唯一の違いは名前(Flat InfoCubesまたはシンプルにFlat Cubes)です。
あまり有名ではありませんが、重要な最適化が表のデクラスタ化です。クラスタ表では、完全な(論理)レコードが1つの(物理)表列に格納されます。このような複雑な値は、SAP Application Serverでは解釈できますが、データベース・サーバーでは解釈できません。つまり、クラスタ表が含まれている場合、コードのプッシュダウンはできません。したがって、SAPでは、HANAおよびOracle DatabaseのTable Declusteringがサポートされるようになりました。
前述したCDSフレームワークの利点は、SAPアプリケーション(SAP開発者によって作成された標準アプリケーション)に限定されるものではありません。顧客にとって、自社開発アプリケーションはSAPランドスケープの重要な一部です。これらのアプリケーションの多くは、CDS機能を使用することで大きなメリットを得ることができます。
CDSビューは、ODataを使用して公開できます。CDSのOData公開に基づいて、開発フレームワークSAP WEB IDEを使用してSAP Fioriアプリケーションを作成することは比較的簡単です。詳細は、レポートABAP Core Data Services on anyDBを参照してください。