Q. Cache'ってなに?
MUMPSは19
69年(!)、
Massachusetts
General Hospitalで開発され、FORTRAN, COBOLに続いて3番目に
ANSIに制定された言語です。その後1992年
ISOに制定され、これを受けて1995年
JISにも制定されたそうです。
医療の現場で実際に使えるよう開発されたこともあってか、MUMPSはその当時の言語にはないいくつかの特徴をもっています。
配列のキーに文字列が使える
配列のキーに数字だけでなく文字列を使用することができます。
Set Array(1)="Hello"
Set Array(2)="World"
Set Array("abc")=123
今では別に珍しくもなんとも無いことですが、1969年からコレです。
もちろん多次元配列も扱えます。
Set Array(1,"Japanese")="こんにちは"
Set Array(2,"Japanese")="世界"
配列をメモリ上だけでなくディスク上にも配置できる
これがMUMPSの鍵だと思います。
Set
Array(1)="aaa", Array(2)="bbb"
とするとメモリ上に格納されますが、プログラムを立ち上げ直すとこの配列は消えてしまいます。当然ですよね。
ところが、Arrayの前に ^
記号を付けて
Set ^Array(1)="aaa", ^Array(2)="bbb"
とするとディスク上に書かれ、そのプロセスのいかなるスコープから見えるのはもちろん、プログラムを立ち上げ直そうが、コンピューターを再起動しようが残っています。
このディスク上に保存された配列のことを「グローバル」と呼びます。他の言語でも変数のスコープうち広いものをグローバルと呼ぶものがありますが、ここまでスコープが広いものは他に見たことがありません
データベースとして使える
データベースと言ってもSQLとかRDBとかではありません。それらが世に出てくるのはもう少し後になってからです。
ここでいうデータベースとは、wikipediaにもある次の定義のことです。
データベースは、特定のテーマに沿ったデータを集めて管理し、容易に検索・抽出などの再利用をできるようにしたもの。 狭義には、コンピュータによって実現されたものを言う。
配列をディスク上に記録でき、キーに文字列が使えるということから、例えば次のようにデータを記録していくことでデータベースとして使えると考えられました。
Set ^患者("山本太郎","性別") = "男"
Set ^患者("山本太郎","生年月日") = "1987/06/05"
Set ^患者("山本太郎","初診") = "2004/08/12"
Set ^患者("山本太郎","履歴","2004/08/12") = "外科 右肩脱臼 不完全外傷性
"
Set
^患者("山本太郎","履歴","2004/08/19") = "外科 右肩脱臼 経過観察"
Set ^患者("鈴木花子","性別") = "女"
Set ^患者("鈴木花子","生年月日") = "1986/04/02"
こういった構造のデータベースを
階層型データベースと呼び、MUMPSも階層型データベースの1つです。
そのMUMPSを受け継ぎつつ、必要とされる機能を追加した製品がCache'です。強化された点としてオブジェクト機能・SQL機能・Web機能などが挙げられます。
インターシステムズ社の「Cache'とは?」というページにある下の絵のうち、

中心と下の青い部分がMUMPS由来のコアとなる部分で、多次元データ・エンジンと呼ばれています。
この多次元データエンジンにWebからのアクセスを実現するCSP(Cache Server Pages)。更にそれを拡張してWebService
オブジェクトのデータは、JSONのように文字列をキーとした配列に格納することで表現されたりしますが、それはまさにMUMPSの配列とドンピシャなわけです。
ということでオブジェクトのデータストアとしてJava, C++, COM, .NET, Pythonといった言語とのインターフェイスが用意されています。
言語とのインターフェイスだけでなく、内部で動作するスクリプトもオブジェクト化されており、継承やカプセル化などオブジェクトモデリング技術は大抵サポートされています。
そしてSQLが使いたいという要望に答えるため、SQLでのアクセスもできるようになっています。ODBCやJDBCを経由してアクセスすることが可能です。
体験版(シングルユーザーライセンス版)はIntersystems社のサイトから無料でダウンロードできます。 ダウンロード手順のページ
製品版は国内代理店各社から購入できます。
昔はコンパックのサイトに価格表がありましたが、今はヒューレット・パッカードのサイトも載せてないですね。
価格表 http://www.compaq.co.jp/solution/package/cache/downloads/cache_price.pdf
カタログ http://www.compaq.co.jp/solution/package/downloads/cache.pdf
Intersystemsのブレスリリースに価格について触れられていました。(2006年時点)
Windows、Linux、Mac、 UNIX 、OpenVMSで稼動。
1ユーザ2万8千円より(税抜き価格)。
http://www.intersystems.co.jp/press/2006/061116-2.html
Cache'の開発元のインターシステムズが、
Globalsという製品を無償で公開しています。
サーバー上でObjectScriptが使えないとのことなので、データストアとしての用途に使えるようです。
また、オープンソースでのMUMPS実装としてGT.Mというものもあるようです。
広く見るとNoSQLのKVS(キーバリューストア)もツリー型データベースの一例なので
似たものといえます。KVSをいくつか触ってみた感触としては、あくまでデータストアに徹しており、キーの探索(あるキーの前後のキーを取得するなど)はできないようです。そういった処理はアプリケーション側で必要に応じて記述するということなのでしょう。
GlobalsはそういったKVSからすると少しCache'寄りで、キーの探索はできるようです。NextSubscriptといったメソッドが用意されています。