システムは何からできているか

 このブログではデータベースに関する話題が多くなると思いますが、今回はその理由を説明します。

 昨今、『日本はIT後進国だ』などと揶揄され、システムの大きなトラブルや構築失敗のニュースを頻繁に目にするようになりました。モノ作りが得意で勤勉と言われていたはずの日本で、なぜIT分野だけがこのようになるのでしょうか?。単なる手抜きやミスだけが問題ではないはずです。

 私はその最も大きな原因は「データ」にあると考え、それを改善したいと思っています。
 詳しくは今後の記事で解説していきたいと思いますが、今回はこの問題点について整理したいと思います。

システムを構成する要素

 「システムを構成する要素は何か」について考えてみます。
 OSやミドルウェア、あるいはハードウェアやシステムの利用者など様々な要素がありますが、プログラマの観点から見れば、どのようなシステムも次の要素に単純化できます。

  1. プログラム
    システムを動かすためのソースコード・バイナリ。
    プログラムはデータを受け取り、何らかの処理を行って、データを出力するものとみなすことができる。
  2. データ
    システムが入出力するデータ。
    データは以下のように様々な形式に変換されながら存在する。
    • 外部形式: ユーザの操作・画面表示・データファイルなど人が直接触れるデータ
    • 内部形式: データベースのようにシステム内部で保持するデータ
    • 中間形式: 通信電文やシステム間でやりとりされるデータ

データ中心主義

 「プログラム」はプログラマにとって最終的な生産物であり、最も大きな関心事でしょう。プログラムの品質や生産性を高めることは大きなテーマであり、これまで多くの努力を払ってきたのではないかと思います。

 一方で「データ」についてはどうでしょうか?
 ビッグデータを扱うシステムの登場で、データの種類や量については注目されるようになりました。しかしデータそのものの設計や品質については、置き去りになっていると感じます。
 具体的には次のようなことです。

  1. プログラムが処理しやすい形に、データを最適化しているか
  2. データに誤り・不足・不整合・無駄(冗長性)がないか
  3. データの入出力に十分な性能が出るか

 これを実現するのは、何十年も前に確立された基礎的な設計技術であり、何も目新しいものはありません。しかしこの点がおろそかであると、次のような問題が起きます。

  • プログラムの実装が必要以上に複雑になる
  • データの問題で誤動作や想定外のエラーを引き起こす
  • オンライン処理の応答が遅い・バッチ処理に時間がかかり過ぎる

 例えば、想定外のNULL値に悩まされチェック処理の追加に奔走したり、定刻通りにバッチ処理が終わらず困ったといった経験は、誰にもあるかと思います。


 プログラマは、ついプログラムばかりを注目しがちです。
 しかし、いかなるプログラムもデータなしに動くことはなく、データとして表現できていない仕様を、プログラムが実現することはあり得ません。
 また、プログラムの方式や実装は時代によって移り変わりますが、適切に設計されたデータ構造は不変と考えることができます。

 したがって、プログラムとデータを比較すると、データの方がより支配的であり重要です。この考え方は「データ中心主義」と呼ばれます。

 データについて正しく設計されていないシステムでは、プログラムの品質も低下せざるを得ず、これをテストや運用の努力によって解決することは困難です。そしてこの問題は、データの蓄積や複雑化に伴い、年々深刻度を増していきます。

 このような状況は、物事の半分しか見えていないと言えるでしょう。


 この問題を改善する方法については、様々な概念や手法を順を追って説明する必要があります。大仰に聞こえますが、先に述べた通り技術的には枯れたもので、それを適切に組み合わせるだけのことです。
 今後の記事では、このテーマについて時間をかけて解説していきたいと思います。


1つ星2つ星3つ星4つ星5つ星 (1 投票, 平均: 3.00 / 5)


 

タイトルとURLをコピーしました