Webシステムが主流となり、データベース・アプリケーションはJavaやC#といったオブジェクト指向言語で開発することが多くなった。しかし、データベース設計はオブジェクト指向モデルとうまくかみ合わず、データモデル設計に苦労するエンジニアは少なくない。本連載は、オブジェクト指向モデルとデータベースモデルのインピーダンスミスマッチに対応するテクニックを紹介する。(編集局)
本連載の最終回は、これまでに連載で紹介した「Javaとデータベースのインピーダンスミスマッチを解消するための設計」に加えて、「パフォーマンスを向上させるために設計の段階で考慮すべきポイント」と「パフォーマンス向上のための具体的な実装」について紹介します。また最後に本連載のすべての内容を振り返って、締めくくりとします。
システム開発者がパフォーマンスを考慮する際には、いくつかの観点があります。それはいい換えれば、システムのパフォーマンスを劣化させるボトルネックとなる部分の原因が何なのかを考えることになります。ボトルネックとなる部分の原因が異なれば、それに対する対応も当然異なってきます。ここでは一般的にパフォーマンスを劣化させるとされる主な2つの原因について考えてみたいと思います。
観点 | 原因 | |
---|---|---|
パフォーマンス劣化の要因 | データベース・アクセスに関すること | ディスクI/Oの回数によるもの データベース・サーバとの通信によるもの SQL文の内容によるもの |
プログラムの性能に関すること | オブジェクト生成によるもの アルゴリズムによるもの |
|
表1 パフォーマンス・チューニングする際の観点 |
ひとくちにパフォーマンス・チューニングの観点といっても、表1のようにさまざまな原因があります。
「ディスクI/Oの回数によるもの」への対応としては、キャッシュを使用してディスクI/Oの回数を減らす工夫をする必要がありますし、「データベース・サーバとの通信によるもの」については、ストアド・プロシージャやバッチ処理を使用してデータベース・サーバとの通信の回数を減らす対応をする必要があります。ただし、ストアド・プロシージャの使用やバッチ処理については、システムの設計思想にまでかかわってくることなので、設計の段階で事前に考慮しておきたい点です。「オブジェクト生成によるもの」への対応としては、オブジェクトを使い回すことによってオブジェクトの生成を極力減らす工夫をする必要があります。
このように原因によって対処の方法もまったく異なったものになります。パフォーマンスについての検証はプログラムがほぼ完成したころか、またはそれ以降の工程になって初めて考えられるということはよくあると思いますが、すでにプログラムが出来上がっている段階でパフォーマンスを向上させる手立てを講じるとなると、大きな手戻り工数が必要になる場合がありますので、設計段階や実装段階でパフォーマンスについての考慮をしておくべきでしょう。
まず、システムの設計思想を決める段階で、パフォーマンスについて考慮しながら設計をすることが必要です(図2の(1))。この段階でシステム全体のパフォーマンスのレベルが決まってしまうといっても過言ではありません。デザインパターンなどを用いてパフォーマンス・チューニングをしやすいシステムの設計思想をこの段階で作成しておきます。
続いて実装段階でもパフォーマンスを考慮した実装を心掛けます(図2の(2))。これまでの連載で紹介してきた設計方法および実装方法を駆使してメンテナビリティの高いプログラムを作成することができれば、パフォーマンスの問題の大半はクリアできると思います。
設計・実装が完了しパフォーマンスの検証をする際には、まずボトルネックを検出します(図2の(3))。システムのボトルネックとなる部分を発見したら、先に述べたようにボトルネックごとにその対応方法や対応すべき範囲を調査します(図2の(4))。その後チューニングを実施し、再度検証する(図2の(5))というプロセスを繰り返していきます。
システムの拡張やパフォーマンス・チューニングのしやすいシステムを作るには、まず設計の段階でそれらを考慮に入れて設計する必要があることは理解できたと思います。デザインパターンを駆使するなどして、システムの拡張に強いオブジェクト指向のメリットを生かせば、柔軟に設計を変更することが可能になります。つまりシステムの拡張とパフォーマンス・チューニングに強いシステムを作ることができるようになるのです。
(次ページへ続く)
Copyright © ITmedia, Inc. All Rights Reserved.