オンライン トランザクション処理と意思決定支援
多くのアプリケーションは、次の 2 種類のデータベース アプリケーションに大別されます。
オンライン トランザクション処理 (OLTP)
意思決定支援
アプリケーションの種類によって、データベースのデザインで何を考慮する必要があるかが大きく左右されます。
オンライン トランザクション処理
オンライン トランザクション処理データベース アプリケーションは、頻繁に変更されるデータを管理するのに最適なデータベースです。このようなアプリケーションには、通常、リアルタイムのデータを変更するトランザクションを同時に実行する複数のユーザーがいます。通常、ユーザーからのデータ要求では、数レコードしか参照されませんが、これらの要求の多くは同時に実行されます。この種のデータベースの例としては、航空券予約システムや銀行取引システムなどがあります。この種のアプリケーションで最も重要なのは同時実行性と原子性です。
データベース システムの同時実行の制御機能は、複数のユーザーが同じデータを変更できない、つまり 1 人のユーザーがデータを変更し終えるまでは他のユーザーが同じデータを変更できない状態を保証します。たとえば、航空券予約代理店で最後に残っている座席を予約する場合、その代理店で予約プロセスが開始されたら、他の代理店ではその座席を予約できると別の顧客に伝えられないようにする必要があります。
原始性は、トランザクション内のすべてのステップが 1 つのグループとして正常に完了することを保証します。いずれかのステップが失敗したら、他のステップは完了することはできません。たとえば、ある銀行取引トランザクションで、当座預金から預金を引き出し、その預金を普通預金へ預け入れるという 2 つのステップを実行する必要があるとします。当座預金からの引き出しに成功したら、普通預金に預け入れるか当座預金に戻すかのどちらかのステップを確実に実行する必要があります。
オンライン トランザクション処理のデザインに関する考慮事項
トランザクション処理システム データベースは、次のことを考慮してデザインする必要があります。
データの配置が適切であること。
データベース全体にわたって数多くのユーザーがデータを変更するため、OLTP システムでは I/O のボトルネックは大きな問題になります。データベースのデザイン時に、データのアクセス パターンを予測し、頻繁にアクセスされるデータをまとめます。そのためには、ファイル グループと RAID (Redundant Array of Independent Disks) システムを使用してください。
短いトランザクションを使用してロック持続時間を最小限に抑え、同時実行性を向上させること。
トランザクションの実行中はユーザーとのやり取りを避けます。可能な場合には、1 つのストアド プロシージャでトランザクション全体を処理するようにします。トランザクション内でテーブルを参照する順序が同時実行性に影響を与えることがあります。頻繁にアクセスされるテーブルへの参照をトランザクションの終わりに配置して、ロック持続時間をできるだけ短縮してください。
オンライン バックアップ。
OLTP システムには連続運用という特長があり、ダウンタイムを最小限に抑えられるという定評があります。つまり、OLTP システムは、24 時間年中無休で運用されます。SQL Server データベース エンジンでは使用中のデータベースをバックアップできますが、ユーザーへの影響を最小限にとどめるため、使用率が低いときにバックアップ プロセスを実行するようにスケジュールを設定してください。
データベースを高度に正規化すること。
更新速度と同時実効性を向上させるために、冗長な情報を削減します。データを減らすと、バックアップする必要があるデータ量が減るため、バックアップ速度も向上します。
履歴データや集計データをなくすか最小限に抑えること。
参照頻度が極端に低いデータは別のデータベースに格納します。つまり、そのようなデータは、更新頻度が高いテーブルから取り除き、履歴データだけを格納するテーブルに移動します。こうすると、テーブルのサイズをできる限り小さくしておくことができ、バックアップ時間とクエリ パフォーマンスが向上します。
インデックスを慎重に使用すること。
行が追加または変更されるたびにインデックスを更新する必要があります。頻繁に更新するテーブルにインデックスを作りすぎないようにするには、インデックスに使用する列数を少なくし、増やさないでください。インデックスをデザインするには、データベース エンジン チューニング アドバイザを使用します。
OLTP システムで必要とされる、数多くの同時アクセス ユーザーへの対応と迅速な応答を実現できる適切なハードウェア構成にすること。
意思決定支援
意思決定支援データベース アプリケーションは、データが変更されないデータ クエリに最適です。たとえば、会社の売上高のデータを日付、販売地域、または製品別に定期的にまとめ、この情報を別のデータベースに格納し、上級管理職が分析を行う際に使用することができます。意思決定するには、ユーザーが、各種の基準に基づいてデータを照会して、売上高の傾向をすばやく判断できる必要があります。ただし、ユーザーは、データを変更する必要はありません。意思決定支援データベースでは、テーブルに多数のインデックスが作成され、生データは各種のクエリをサポートできるように前処理され編成されています。ユーザーはデータを変更しないため、同時実行性と原子性は問題になりません。定期的なデータ変更だけが行われ、トラフィックが少ない業務時間外にデータベース内で一括更新が行われます。
意思決定支援のデザインに関する考慮事項
意思決定支援システム データベースは、次のことを考慮してデザインする必要があります。
多数のインデックスを作成すること。
意思決定支援システムの場合は頻繁に更新する必要はありませんが、大量のデータが格納されています。クエリ パフォーマンスを向上させるには、インデックスを多数使用します。
データベースの非正規化。
一般的なクエリの必要条件を満たし、クエリの応答時間を短縮するため、事前に集計するか集約したデータを格納します。
スター スキーマまたはスノーフレーク スキーマによってデータベース内でデータを編成すること。