連載
» 2008年06月20日 00時00分 公開

組み込みDBプログラミングの道しるべ(2):組み込みデータベースの構造ってどうなってるの? (1/2)

メモリ制約の厳しい組み込み機器で利用されるDBの内部構造とは? これを理解すればDBの可能性をさらに実感できるはずだ。

[加藤大受,@IT MONOist]

 前回は、組み込み機器におけるデータ管理の必要性や組み込みデータベースに求められる機能について解説しました。

 今回は、メモリ制約の厳しい組み込み機器で利用される“組み込みデータベースの構造”についてお話ししていきます。内部構造を知らなくてもデータベースを利用することはできますが、データベースの内部を知ればデータベースの持つ可能性をさらに実感できると思います。

データベースといえば“トランザクション管理”

 データベースの基本機能といえば「トランザクション管理」機能です。トランザクションとは何らかの業務を実行するための『一塊の意味ある処理の単位』のことで、データベースの世界に当てはめて考えてみると『データ処理に対して、要求される一塊の処理の単位』となります。つまり、トランザクションは“データ処理の単位”のことで、トランザクション管理とはこの“データ処理の単位を確実に処理・管理する技術”のことをいいます。このトランザクション技術は“データベースの最も基本となる機能”といっても過言ではないでしょう。

 トランザクション管理には、次の文字列の頭文字を取った「ACID特性」と呼ばれる4つの特性があります。

  1. Atomicity(原子性、非分割性)
  2. Consistency(一貫性、整合性)
  3. Isolation(独立性、分離性、隔離性)
  4. Durability(耐久性、持続性)

Atomicity

 「Atomicity」とは、“トランザクション処理のそのすべてを反映するか、すべて取り消すかの二者択一のこと”です。

  • トランザクション開始から終了までのデータ処理を正常に行う
  • トランザクション開始から終了までの間にデータ処理に異常があった場合はトランザクションの開始前の状態に戻す

 トランザクション管理では、トランザクション処理を確実に行うか、トランザクション処理の実施前の状態に戻すかのどちらかで、トランザクション中のデータ処理の安全性を担保してくれます。

 そして、COMMIT処理またはトランザクションの終了処理が行われると、トランザクション中の一連のデータ処理がすべて反映されます。トランザクション中のデータ処理で何らかのエラーが発生すると、トランザクションはROLLBACK処理され、一連のデータ処理がすべてキャンセルされて、トランザクション開始前のデータの状態に戻ります。

トランザクション処理 図1 トランザクション処理

Consistency

 「Consistency」とは、“トランザクションの処理結果は処理前後のいずれも整合性が保持でき、また処理の順序や終了状態に関係なく保証できること”を示しています。この保証は、正常時でも異常時でも、Atomic特性により正しい状態を維持してくれます。

Isolation

 「Isolation」とは、“複数のトランザクション処理が同時に行われるときの管理項目で、同時並行処理結果も逐次処理結果も同じで、データ処理中のそれぞれのデータはほかのデータ処理から見えず、ほかの処理から影響を受けないこと”を示しています。なお、複数のトランザクション処理については別の機会に詳しく説明したいと思います。

Durability

 「Durability」とは、“トランザクション処理が終了したら、その後の障害などによる影響を受けず、不変に保たれること”を示しています。つまり、成功したトランザクション処理の結果は永久に保存されるというわけです。

 以上、データベースのトランザクション処理はこの4つのACIDの特性により、データ処理が安全かつ独立に行われ、安心してデータ管理ができるようになっています。

 このトランザクション処理では、一体どのような特別な機能・技術が使われているでしょうか? 次に、トランザクション処理を支える機能「トランザクションログ」について解説することにします。

トランザクションログの概要

 多くのリレーショナルデータベースでは、トランザクション管理としてトランザクションの各処理をロギングしています。このロギング情報をトランザクションログとして利用します。トランザクションログに、何が書かれるのかはデータベース製品によって異なりますが、一般的にトランザクションログにはトランザクション中の更新されたテーブルの情報が書き込まれます。

 データベースのトランザクションログを使った動きは以下のとおりです。

  • COMMIT処理が行われると、ここに書き込まれた情報を実データに反映する
  • トランザクション中にエラーが発生した場合は、ROLLBACK処理のタイミングでこのトランザクションログを参照して、元の状態に戻す
  • COMMIT処理やROLLBACK処理が行われるとトランザクションログはクリアされて、次のトランザクション処理のために再利用される

 トランザクションログの実装方法は、各データベース製品によって異なります。ストレージ上のデータベース領域の中に、トランザクションログ領域を作成して利用するものもあれば、「ジャーナルファイル」と呼ばれるファイルを用いて行うものもあります。ジャーナルファイルにはトランザクション処理が失敗したときに、元の状態に戻すための情報が書き込まれます。

 例えば、日立製作所の組み込みデータベースである「Entier」の場合、ジャーナルファイルは明示的なROLLBACK処理やSQLエラーでのROLLBACK処理、または瞬断および異常終了によるEntierの再開始処理などで、更新したデータベースまたはメモリの内容を回復してデータベースの整合性を保つために必要な情報として、データベースを更新する際に出力されます。出力されるトランザクションログには、データベースファイルに対するものとメモリ情報に対するものがあります。ちなみに、Entierのジャーナルファイルは「ジャーナルデータファイル」と「ジャーナル管理ファイル」に分類されます。

 Entierの場合、データベース更新処理の情報であるトランザクションログ(ジャーナル)は、データベースを更新するたびにジャーナルデータファイルに出力され、トランザクションが完了すると、それまでに出力したジャーナルはリセット(破棄)されます。

 また、ジャーナルファイルはEntier開始時のシステムオプションや接続時のコネクトオプションにて初期サイズを設定できます。初期サイズの大きさを設定するのは必要最低限のファイルサイズとし、ファイル増分のオーバーヘッドを抑えることです。例えば、トランザクション1回分の最大ジャーナル量を見積もっておいて、そのトランザクションログの量(ジャーナルの量)が収まる値を初期ファイルサイズとして設定しておけば、トランザクションログの出力によるファイル増分のオーバーヘッドがなくなるというわけです。

 ジャーナルファイルの初期ファイルサイズを超えてトランザクションログの出力が繰り返されると、ジャーナル拡張ファイルが増化し続けるためオーバヘッドが発生することになります。ジャーナルファイルのサイズは利用する形態、シングルユーザーなのか、マルチユーザーなのかによっても異なってきますので、利用形態に合わせてジャーナルファイルのサイズを見積もることが必要です。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.