外部連携の問題
このように、開発生産性とその処理性能という点では画期的な仕組みでしたが、問題がないわけではありませんでした。
一番の問題点は、データの2次利用を含む外部連携でした。
当然ながら、すべてのアプリケーションをこの仕組みで全部作り変えることは、いくら生産性が高くても不可能なため、旧来の仕組みで作られたアプリケーションとなんらかの連携を行う必要がでてきます。Cachéのデータベースは、Cachéのプログラム言語でしかアクセスできなかったため、外部連携するには、その連携に合う形にデータを抽出するプログラムをその都度作らなければなりませんでした。
今風に言えば、データベースから抽出したデータを使って、EXCELで分析するといった使い方の場合もそうです。EXCELにデータをロードするためのCSVファイルを出力する際に、違うデータ、違う形式で出力する度に、毎回プログラミングしなければならないというのは、すごく手間がかかりすぎます。リレーショナルデータベースが主流の地位を獲得した大きな理由が、この2次利用の柔軟性を提供した点にあったのではないかと思います。
さらにデータのファイル交換だけではなく、違うプログラム同士で自由にデータを交換する仕組み(異機種プラットフォーム間、異なるプログラミング言語間、ネットワーク間でのリモートプロシジャコール)が必要になった場合も、非常に苦労してその仕組みを実装する必要がありました。
インターシステムズは、1990年代にこれらの問題をどう解決したらよいか検討を始めました。
2次利用の問題は、リレーショナルデータベースの概念を適用することで、解決できそうでした。アプリケーション連携の問題は、そんなに単純ではありませんが、オブジェクト指向によるインターフェイスの概念を適用することにより、解決できるのではないかと考えました。
オブジェクトとリレーショナル ~ 統一データアーキテクチャ
残った問題は、オブジェクトとして見えるデータとリレーショナルなデータをどう調停するかという問題でした。
オブジェクトのデータ構造は、比較的単純にCachéが持っている多次元データ構造にマッピングできそうでした。リレーショナルのテーブル構造も実は、その多次元データ構造を次元単位に横串にスライスすると、その1つ1つの構造をテーブル構造にマッピングできることが分かりました。
この様なアイデアのもと、開発されたのが統一データアーキテクチャとそれを支えるCachéオブジェクトモデルです。
統一データアーキテクチャにより、1つのスキーマ定義(クラス定義)からオブジェクトアクセスおよびSQL(リレーショナル)アクセスをするための実行コードを自動生成します。
Caché開発者は、そのオブジェクトフレームワークが定めたセマンテックス、シンタックスに基づいてプログラムを書きます。 それを実行すると、自動生成された実行コードが動作し、その実行コードの中で、適切な多次元データを操作します。
Caché開発者は、SQLが定めたセマンテックス、シンタックスに基づいてプログラムを書くこともできます。それを実行すると、自動生成された実行コードが動作し、その実行コードの中で、適切な多次元データを操作します。
そのオブジェクトフレームワークのセマンティク、シンタックスとSQLのセマンティック、シンタックスはまったく異なるもののように見えますが、最終的には、それらに対応する多次元データにアクセスしますので、見かけとは関係なく同じデータを扱うことができます。
さらなる進化
そして、Cachéオブジェクトモデルに基づき、さまざまなものが追加されてきました。
各種言語バインディング(Java、.NET、Perlなど)、Web Services対応、他リレーショナルデータベースをCachéからアクセス可能にするSQL Gateway、Webアクセス用フレームワークCSP、さらにそれを拡張したコンポーネントベースのZenなどなど(詳しくは、連載各章で記述していますのでご参照ください)。
そして、これらは、首尾一貫したCachéオブジェクトモデルの上に成り立っていますので、心地よい統一感があります。
このCachéオブジェクトモデルは、複数回にわたる製品のバージョンアップによって、内部的なリファクタリングが行なわれ、年々完成度、安定度を増しています。さらに、このモデルに基づき、さまざまなものが追加されてきています。
インターシステムズは、InterSystems Ensembleというアプリケーション統合プラットフォームも提供していますが、これも実は、Cachéのオブジェクトモデルの上にアプリケーション統合に必要な機能を付け加えたものです。
InterSystems HealthShareという製品(日本では未発表)もありますが、これはEnsembleの上にさらに国レベル、リージョンレベルの医療連携に求められる機能を付け加えたもので、やはり、Cachéのオブジェクトモデルの上に成り立っています。
今後もいろいろなものがこのオブジェクトモデルの上に構築されて製品化および製品に組み込まれることと思います。
さらに開発者の皆さんの開発効率を上げるためのコード自動生成、コード入力アシスト、さまざまな便利なクラスライブラリの追加など、さまざまな機能拡充が予定されています。
当然、データベースの処理速度の向上、スケーラビリティ向上、可用性の向上の面でもさまざまな性能拡充が予定されています。
アプリケーション開発にかかわるすべてのことがCachéでまかなえる、そんな日が来るのもそんな遠い日ではないかもしれません。
今後のインターシステムズ製品の進化にご期待ください。