« DBMSの交換容易性と開発基盤 | トップページ | システム開発は「セル生産方式」になる »

2014.05.25

問題領域とコンピュータの狭間で

 業務システムにはさまざまなデータ処理プログラムが含まれるが、それらをパターン化して、それぞれのパターン毎の可変部を規定し様式化する。これが私の言う「仕様書駆動アーキテクチャ」の枠組みで、拙作のOSS開発基盤「XEAD Editor/Driver」はその実装である。Editorを使って仕様書を書けば、それを読み込んだDriverがみずから変形し、仕様書どおりに動作する。

 この基盤が提供するプログラムパターンの中から、「明細一括表示」について取り上げたい。前回記事に関連して、「DBMS毎のクセを生かしつつ吸収する」ことの良い事例になっているからだ。さらにそのことが、問題領域とコンピュータとの間で開発基盤が果たす役目をうまく表しているからだ。

 「明細一括表示」は、テーブル中のレコードを絞り込んで一覧するというシンプルなプログラムパターンなのだが、設定次第で振舞いが精妙に変化する。たとえば、その仕様書上の設定項目として「初期検索件数」というものがある。デフォルト値は*ALLで、これにたとえば10を指定すると、10件読んだタイミングで次のようなダイアログが表示される。

セッションデータを「明細一括表示」した例
140522

 この機構は、大量データを含むテーブルを扱うために用意されている。100万件レンジのレコードが一挙に読み込まれるようなSELECT文が発行されると、ResultSetオブジェクトがパンクして、プログラムがフリーズすることがある。そのようなテーブルを扱う際、「初期検索件数」に10000などと指定しておけば、そのブロック単位でしか読み込まれないのでResultSetがパンクしない。しかも、上のダイアログが表示されたら、直後のレコードから読取を継続できるだけでなく、いきなり500万件目から読ませ直すこともできる。大量データを「明細一括表示」するにはこのような仕様が便利なのである。

 そのような仕様を実現するためにプログラムは「リレーション中の任意行番から任意行数だけ読む」という動きをしなければいけない。そのために内部で発行されるSELECT文は次のようになっている(500万件目から1万件だけ読ませる例。ROW_NUMBER()はレコードの行番を得るための関数)。

SELECT * FROM
 (SELECT fields,
  ROW_NUMBER() OVER (ORDER BY ...) rNum
  FROM table WHERE ... )t
 WHERE t.rNum >= 5000000 AND t.rNum < 5010000

 SQL標準としてこれで動作する(Oracle, SQL Server, PostgreSQL, MySQLで動作するが、Derbyではなぜかエラーになる)のだが、じつはDBMSによっては以下のように書いたほうがレスポンスが良かったりする。まさに「方言」なのではあるが、これらのほうがインテンショナルでわかりやすい。

<PostgreSQL,MySQL>
SELECT fields FROM table WHERE ... ORDER BY ...
 LIMIT 10000 OFFSET 4999999

<Derby>
SELECT fields FROM table WHERE ... ORDER BY ...
 OFFSET 4999999 ROWS
 FETCH NEXT 10000 ROWS ONLY

 もともと大量データを処理するための機構なので、少しでも高速にしたいところだ。そのために、これらの方言が活用されている。DBMS毎に発行されるSELECT文が切り替わるのである。

 ここで重要なことは、これらのコードが仕様の一部として書いたり読んだりされるわけではなく、自動生成され実行された後にただちに揮発してしまう点だ。したがって開発基盤のユーザ(すなわちシステム開発者)には、書き方の違いに関する片々たる知識は要らない。ここらへんについては、異種DBMSを扱う開発基盤の開発者あたりが心配すればいい。なんのためか。システム開発者になるべく実装上の心配をさせないためだ。

 つまり開発基盤は、実装とシステム開発者との間で効果的なインタフェースの役目を果たす。コンピュータに対しては実装上の問題をマニアックに配慮すると同時に、システム開発者に対しては問題領域(ドメイン)に特化した晴明な枠組みを提供する。開発基盤はそんなユーティリティであるべきだ。なぜか。業務システムの開発者に、問題領域を扱うための知識やスキル(会計や業務設計やDB設計)の習得に専念してもらうためだ。そして、学は成り難く技術者は老い易いからだ。

|

« DBMSの交換容易性と開発基盤 | トップページ | システム開発は「セル生産方式」になる »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: 問題領域とコンピュータの狭間で:

« DBMSの交換容易性と開発基盤 | トップページ | システム開発は「セル生産方式」になる »