(57)【特許請求の範囲】
【請求項１】
データベースに登録されるファイルを管理するファイル管理方法において、
１ページサイズ内のレコードに関する要求を受けた場合は、１個のレコード内で該データベースに対してアクセスを行なう一方、
１ページのサイズ内に収まらないサイズを有する新規の長大レコードに関する登録要求を受けた場合は、該新規の長大レコードについて、ページ単位に分割されたスライスに分解して、該データベースに登録するとともに、
該データベースに登録され、１ページのサイズ内に収まらないサイズを有する長大レコードであって、複数のスライスにより構成された長大レコードに関する要求を受けた場合は、該長大レコードについて、該スライス単位に分解された長大レコード内での部分的アクセスを該データベースとの間で行なうか、又は該長大レコードのインデクスを生成又は更新し、該長大レコードのアクセスを、該スライスを単位として、該データベースとの間で行なうことを特徴とする、ファイル管理方法。
【請求項２】
データベースに登録されるファイルを管理するファイル管理装置において、
レコードに対する各種要求を受け付けるレコード操作手段と、
１ページのサイズ内に収まらないサイズの長大レコードであって、ページ単位に分割された複数のスライスにより構成された長大レコードに関する要求を該レコード操作手段から受けると、該長大レコードについて、該スライス単位に分解する長大レコード操作手段と、
該レコード操作手段からの１ページサイズ内のレコードに関する要求又は該長大レコード操作手段からの長大レコードに関する要求を受け、１個のレコード内でのアクセス又はレコード内での部分的アクセスを、該データベースとの間で行なう通常レコード操作手段と、
該長大レコードのインデクスを生成又は更新し、長大レコードのアクセスを該データベースとの間で行なうインデクス操作手段とをそなえ、
該通常レコード操作手段が、該レコード操作手段から１ページサイズ内のレコードに関する要求を受けた場合は、１個のレコード内で該データベースに対してアクセスを行ない、
該長大レコード操作手段が、該レコード操作手段が１ページサイズ内に収まらないサイズを有する新規の長大レコードに関する登録要求を受けた場合は、該新規の長大レコードについて、１ページに相当するサイズを有するスライス単位に分解するとともに、該通常レコード操作手段で、該データベースに登録するとともに、
該長大レコード操作手段が、該データベースに登録され、１ページのサイズ内に収まらないサイズを有する長大レコードであって、複数のスライスにより構成された長大レコードに関する要求を受けた場合は、該長大レコードについて、該スライス単位に分解された長大レコード内での部分的アクセスを該データベースとの間で行なうか、又は該長大レコードのインデクスを生成又は更新し、該長大レコードのアクセスを、該スライスを単位として、該データベースとの間で行なうように構成されたことを特徴とする、ファイル管理装置。
【請求項３】
データベースに登録されるファイルを管理するファイル管理装置において、
レコード又はレコード内の部分的なデータに対する各種レコード操作要求を受け付けるレコード操作手段と、
該レコード操作手段にて受け付けた該要求の対象となるデータが１ページ内に収まるサイズの通常レコードである場合において、該要求の対象としての新規レコード又はデータベース上で登録されたレコード識別子で示される既存レコードを１ページに収まる通常レコードとして割り当てて、各種レコード操作を行なうとともに、１個の通常レコード内における部分的アクセスを行なうデータページ操作手段と、
該レコード操作手段にて受け付けた該要求の対象となるデータが、１ページ内に収まらないサイズの長大レコードであって、ページ単位に分割された複数のスライスにより構成された長大レコードである場合は、新規レコード又はデータベース上で登録された該長大レコードに対し、操作を受けるスライス単位に分解してから、該データページ操作手段に対して各種レコード操作を該スライス単位に要求する長大レコード操作手段と、
最下位リーフレベルのインデクスでは各スライスそのもののサイズとスライスへのレコード識別子を格納し、その上の階層のインデクスは下位のインデクスの表すサイズの総和を格納し、最上位のルートレベルのインデクスの表すサイズの総和は該長大レコード全体のサイズに一致し、リーフレベルのインデクスの順番は、これらの対応する各スライスのオフセットの順番に一致するようにインデクスを構成する木インデクス操作手段とをそなえ、
該長大レコード操作手段が、
既存の長大レコードに対する部分的なアクセスを行なう場合には、レコード全体に対するオフセットより操作対象となるスライスの開始点を、スライス間のアドレスリンクを順次ナビゲートする方法又は上記木インデクスより求める方法のいずれかにより決定するアクセス開始点決定制御部と、
スライス単位の追加、削除に伴う上記木インデクスのメンテナンスを該木インデクス操作手段に要求するメンテナンス部とをそなえたことを
特徴とする、ファイル管理装置。
【請求項４】
該レコード操作手段にて要求を受け付ける各種レコード操作が、レコードに対する新規作成、抹消、フェッチ、レコード内の部分的なデータに対する途中挿入、途中削除、更新又は読み込みのうちのいずれかであることを特徴とする、請求項２又は３記載のファイル管理装置。
【請求項５】
該データページ操作手段が、
ページ内の各レコードの、通常レコードと長大レコードとの区別を記録するレコード区別記録部をそなえるとともに、
該レコード操作手段が、
該データページ操作手段のレコード区別記録部からの、既存のレコードのレコード識別子に対応する前記レコードの区別に基づき、通常レコードの場合には前記データページ操作手段に、長大レコードの場合には該長大レコード操作手段にそれぞれレコード操作を要求する操作要求部をそなえたことを特徴とする、請求項３記載のファイル管理装置。
【請求項６】
該レコード操作手段が、
既存の通常レコードに対し、操作に伴いレコード全体のサイズが１ページに収まらなくなる場合には、該通常レコードを長大レコードとして登録し直してから該長大レコード操作手段にレコード操作を要求する一方、既存の長大レコードに対し、操作を完了した後、長大レコード全体のサイズが１ページに収まる場合には、このレコード操作の完了した長大レコードを通常レコードとして登録し直す再登録操作部をそなえたことを特徴とする、請求項２記載のファイル管理装置。
【請求項７】
該長大レコード操作手段のアクセス開始点決定制御部が、
既存の長大レコードに対する部分的なアクセスを行なうスライスの開始点を決定する際に、木インデクスが構成されている場合は該木インデクス操作手段により、無ければスライス自体の持つアドレスリンクをナビゲートしてその開始点を決定するように制御するように構成されたことを特徴とする、請求項３記載のファイル管理装置。
【請求項８】
該長大レコード操作手段のメンテナンス部が、
該アクセス開始点決定制御部による制御に基づき、該木インデクス操作手段によりアクセス開始点を決定する場合、長大レコード全体のサイズに対する予め決められたしきいサイズとの大小に基づいて、該木インデクスの作成と削除とを決定するように構成されたことを特徴とする、請求項７記載のファイル管理装置。
【請求項９】
該長大レコード操作手段のメンテナンス部が、
部分的なアクセスの要否により該木インデクスの作成又は削除することを決定するように構成されたことを特徴とする、請求項７記載のファイル管理装置。
【請求項１０】
該長大レコード操作手段のメンテナンス部が、
部分的なアクセスが発生すると、該木インデクスを作成するように構成されたことを特徴とする、請求項９記載のファイル管理装置。
【請求項１１】
該長大レコード操作手段のメンテナンス部が、
長大レコード全体のサイズに対する予め決められたしきいサイズとの大小関係、及び部分的なアクセスの要否により該木インデクスの作成又は削除することを決定するように構成されたことを特徴とする、請求項７記載のファイル管理装置。
【請求項１２】
該木インデクス操作手段が、
長大レコード全体に対するオフセットからスライスを検索する際に、該木インデクスの最上位のルートインデクスページから最下位のリーフインデクスページに至る各インデクスのサイズの積算が、所望のオフセットと一致又は直前となるインデクスを検索し、検索されたインデクスから逐次下位階層のインデクスページに移って検索を行なうことにより、リーフインデクスページ上のインデクスにおいて当該オフセットを含むスライスへのレコード識別子を取得するインデクスページ操作部をそなえたことを特徴とする、請求項３記載のファイル管理装置。
【請求項１３】
該長大レコード操作手段が、
長大レコードに対する部分的な挿入を行なう際に、挿入操作後に新規生成されたスライスの格納ページに空き領域があれば、該新規生成されたスライスと直後のスライス間で併合するインデクスページ間操作部をそなえたことを特徴とする、請求項４記載のファイル管理装置。
【請求項１４】
該長大レコード操作手段が、
長大レコードに対する部分的な削除を行なう際に、削除操作の開始点を含むスライスと終了点をスライス間で併合するインデクスページ間操作部をそなえたことを特徴とする、請求項４記載のファイル管理装置。
【請求項１５】
該長大レコード操作手段が、
長大レコードに対するサイズ変更操作が行なわれた後に、当該長大レコードを構成する全てのスライスについてのスライスサイズの総和を演算する総和演算部と、
該総和演算部において演算された総和に対する、スライスの個数と１ページサイズの積との比を演算する比演算部と、
該比演算部において演算された比と、予め設定された比率とを比較する比率比較部と、
該比率比較部における比率の比較の結果、該比演算部において演算された比が予め設定された比率よりも小さい場合は、隣り合うスライス間において自スライスの空き領域が該自スライスに続くスライスのデータで埋まるように、該全てのスライスについて順次マージしていくことにより、ガベージコレクションを行なうように制御するガベージコレクション制御部をそなえたことを特徴とする、請求項３記載のファイル管理装置。
【請求項１６】
該長大レコード操作手段が、
該メンテナンス部において、該インデクスに対する修正をした後に、修正されたリーフインデクスページ内における、スライスサイズの総和を演算する総和演算部と、
該総和演算部において演算された総和に対する、スライスの個数と１ページサイズの積との比率を演算する比演算部と、
該比演算部において演算された比と、予め設定された比率とを比較する比率比較部と、
該比率比較部における比率の比較の結果、該比演算部において演算された比が予め設定された比率よりも小さい場合は、該リーフインデクスページ内におけるインデクスに対応したスライスについて、隣り合うスライス間において自スライスの空き領域が該自スライスに続くスライスのデータで埋まるように順次マージしていくことにより、ガベージコレクションを行なうように制御するガベージコレクション制御部をそなえたことを特徴とする、請求項３記載のファイル管理装置。
【発明の詳細な説明】
【０００２】
【産業上の利用分野】
本発明は、データベースに登録されるファイルを管理するためのファイル管理方法及びファイル管理装置に関し、特に、データベースにおけるデータの入出力動作の単位としてのページ内に収まらないようなデータについてアクセスする際に用いて好適な、ファイル管理方法及びファイル管理装置に関する。
【０００３】
【従来の技術】
従来より、例えば複数の端末とデータベース等により構成され、応用プログラム等が起動されるワークステーションにおいては、例えばＤＢＭＳ（Database Management System）等のようなデータベースに登録されるファイルを管理するためのシステムが用いられている。
【０００４】
即ち、このＤＢＭＳにおいては、データベースに対して、数値や文字列等のような基本的なデータ型（atomic data type）により構成されるファイルについての部分的な読み込み，更新，及びデータの挿入や削除に伴うサイズ変更等のアクセス処理が行なわれている。
また、上述のワークステーション等においては、文書、画像データ、ＣＡＤ／ＣＡＥにおける可変長の座標配列等のマルチメディアデータについてもデータベース上に表現したいというニーズも高まっている。
【０００５】
ここで、マルチメディアデータは、データサイズが可変であり、データに対する固定的な意味付け（大小比較等）は限定することができない。そこで、多くのＲＤＢＭＳ（リレーショナルＤＢＭＳ）では、マルチメディアデータを、例えばレコード（タップル，行）単位に可変長のビット／バイト列を表すＢＬＯＢ(binary large objects)というデータ型で表現することにより、上述の基本的なデータ型とは区別されている。
【０００６】
ここで、レコードとは、データベース内のデータを応用プログラム間でやり取りする際のデータの単位をいう。
なお、マルチメディアデータを、レコードを構成するデータ項目（フィールド、カラム）単位に対応してＢＬＯＢとして扱う場合においては、そのＢＬＯＢレコードへのアドレス参照により実現できる。
【０００７】
また、ＢＬＯＢは、この他に「long item data」，「spatial data」，「bulk data 」のように英語表現される場合がある。
ところで、上述したように、マルチメディアデータをファイルとしてデータベースに登録するにあたっては、レコードのサイズが可変であり、複数の物理ページ間にまたがるような大きいサイズとなる場合があり、このような場合においては、マルチメディアデータを、基本的なデータと同様にはデータベース上に登録することができない。
【０００８】
従って、マルチメディアデータにより構成されるレコードは、レコード全体のサイズが大きくなり、全てのデータ量を主記憶上に常駐させることができなくなり、ワークステーションの運用の際に、応用プログラムや問い合わせに対する要求として、データベースにおけるレコード全体に対する部分的なアクセスを行なえる必要が生じている。
【０００９】
そこで、図３７に示すように、ファイルを管理するファイル管理装置において、複数の物理ページ間にまたがる大きなサイズのレコード（ＢＬＯＢデータ）１０１を、データベース上にページ単位に分割して格納するとともに、これらの分割して格納された破片１０１−１〜１０１−ｎをアドレスリンクすることが考えられる。
【００１０】
これにより、図３７に示すようにＢＬＯＢデータをデータベースに登録した場合は、ファイル管理装置では、レコード全体に対する部分的なアクセスを行なう際には、アドレスリンクに基づいて、先頭の破片から順次ナビゲートしていくようになっている。
しかしながら、近年のデータベースに格納すべきデータの量の増大に伴って、複数の物理ページに分割された破片数を多くすることになる。従って、データベースに対してのアクセス時間が増加し、例えば画像データの時間軸に対するスキップや、ＣＡＥの部分的な配列データへの瞬時なアクセスを実現することができないという課題がある。
【００１１】
そこで、例えば図３８に示すように、ファイル管理装置において、ページ単位に分割された破片（スライス）１０１−１〜１０１−ｎにより構成されるレコードに対して、各スライス１０１−１〜１０１−ｎについてのサイズとアドレスとからなる一覧情報（ディレクトリ情報）を格納するページ１０２を別個に登録しておくことにより、データベース上のＢＬＯＢデータに対する部分的アクセスの時間を少なくすることができる。
【００１２】
即ち、スライス１０１−１〜１０１−ｎの格納されたページに部分的アクセスする場合においては、それぞれ、ディレクトリ情報が格納されたページ１０２における指針１０２−１〜１０２−ｎを参照することにより、部分的アクセスの時間を少なくしているのである。
【００１３】
【発明が解決しようとする課題】
しかしながら、上述の図３８に示すようなファイル管理装置によるデータベースのアクセス手法では、ページ１０２に格納されたディレクトリ情報自体は、一つの物理ページに収まらなければならず、結果としてＢＬＯＢのレコード全体に対する最大サイズが制約されるという課題がある。
【００１４】
さらに、高々数ページにまたがるような小規模のＢＬＯＢデータに対しても、必ずディレクトリ情報のためのページが必要となる。即ち、単にページ内に収まらない小規模のＢＬＯＢデータについて、上述の図３８に示すようなアクセス手法を用いると、ディレクトリ情報のための領域の設定とそのメンテナンスが、空間的、時間的なオーバーヘッドとなる課題もある。
【００１５】
また、応用プログラム利用の際に、利用者の便宜を図るべく、応用プログラム側において、データベース側の環境を意識する必要がないインターフェイスを構築することも必要である。
本発明は、このような課題に鑑み創案されたもので、レコードサイズの制約がなく、且つ部分的なアクセスに対しても高速に行なうことができる、ファイル管理方法及びファイル管理装置を提供することを目的とする。
【００１６】
【課題を解決するための手段】
図１は第１の発明の原理ブロック図であり、この図１において、１ａはファイル管理装置であり、このファイル管理装置１ａは、データベース６ａに登録されるファイルを管理するものであり、レコード操作手段２ａ，長大レコード操作手段３ａ，通常レコード操作手段４ａ及びインデクス操作手段５ａをそなえている。
【００１７】
レコード操作手段１ａは、レコードに対する各種要求を受け付けるものであり、ここでいうレコードとは、データベース６ａ内のデータをレコード操作手段２側の要求元との間でやり取りする際のデータの単位をいう。
また、長大レコード操作手段３ａは、１ページのサイズ内に収まらないサイズの長大レコードであって、ページ単位に分割された複数のスライスにより構成された長大レコードに関する要求をレコード操作手段２ａから受けると、その長大レコードについて、スライス単位に分解するものである。
【００１８】
さらに、通常レコード操作手段４ａは、レコード操作手段１ａからの１ページサイズ内のレコードに関する要求又は長大レコード操作手段３ａからの長大レコードに関する要求を受け、１個のレコード内でのアクセス又はレコード内での部分的アクセスを、データベース６ａとの間で行なうものである。
また、インデクス操作手段５ａは、長大レコードのインデクスを生成又は更新し、長大レコードのアクセスをデータベースとの間で行なうものである。
さらに、通常レコード操作手段４ｂは、レコード操作手段２ａから１ページサイズ内のレコードに関する要求を受けた場合は、１個のレコード内でデータベース６ａに対してアクセスを行なうようになっている。
また、長大レコード操作手段３ａは、レコード操作手段２ａが１ページサイズ内に収まらないサイズを有する新規の長大レコードに関する登録要求を受けた場合はその新規の長大レコードについて１ページに相当するサイズを有するスライス単位に分解するとともに、通常レコード操作手段４ａで、データベース６ａに登録するようになっている。
さらに、長大レコード操作手段３ａが、データベース６ａに登録され１ページのサイズ内に収まらないサイズを有する長大レコードであって複数のスライスにより構成された長大レコードに関する要求を受けた場合は、該長大レコードについて、該スライス単位に分解された長大レコード内での部分的アクセスをデータベース６ａとの間で行なうか、又は該長大レコードのインデクスを生成又は更新し、該長大レコードのアクセスを、該スライスを単位として、データベース６ａとの間で行なうように構成されている。
【００１９】
さらに、図２は第２の発明の原理ブロック図であり、この図２において、１ｂはファイル管理装置であり、このファイル管理装置１ｂは、データベース６ｂに登録されるファイルを管理するものであり、レコード操作手段２ｂ，長大レコード操作手段３ｂ，データページ操作手段４ｂ及び木インデクス操作手段５ｂをそなえている。
【００２０】
ここで、レコード操作手段２ｂは、レコード又はレコード内の部分的なデータに対して、レコードの新規作成、抹消、フェッチ、レコード内の部分的なデータに対する途中挿入、途中削除、更新又は読み込みのいずれかのレコード操作要求を受け付けるものであり、ここでいうレコードについても、データベース６ｂ内のデータをレコード操作手段２側の要求元との間でやり取りする際のデータの単位をいう。
【００２１】
また、データページ操作手段４ｂは、レコード操作手段２ｂにて受け付けた要求の対象となるデータが１ページ内に収まるサイズの通常レコードである場合において、該要求の対象としての新規レコード又はデータベース６ｂ上で登録されたレコード識別子で示される既存レコードを１ページに収まる通常レコードとして割り当てて、各種レコード操作を行なうとともに、１個の通常レコード内における部分的アクセスを行なうものである。
【００２２】
なお、ページとは、データベースにおけるデータに関しての物理的な入出力動作の最小単位である。
さらに、長大レコード操作手段３ｂは、レコード操作手段２ｂにて受け付けた要求の対象となるデータが、１ページ内に収まらないサイズの長大レコードであって、ページ単位に分割された複数のスライスにより構成された長大レコードである場合は、新規レコード又はデータベース６ｂ上で登録された長大レコードに対し、操作を受けるスライス単位に分解してから、データページ操作手段４ｂに対して各種レコード操作を該スライス単位に要求するものであり、後述するアクセス開始点決定制御部３ｂ−１及びメンテナンス部３ｂ−２をそなえている。
【００２３】
木インデクス操作手段５ｂは、最下位リーフレベルのインデクスでは各スライスそのもののサイズとスライスへのレコード識別子を格納し、その上の階層のインデクスは下位のインデクスの表すサイズの総和を格納し、最上位のルートレベルのインデクスの表すサイズの総和は長大レコード全体のサイズに一致し、リーフレベルのインデクスの順番は、これらの対応する各スライスのオフセットの順番に一致するようにインデクスを構成するものである。
【００２４】
また、長大レコード操作手段３ｂのアクセス開始点決定制御部３ｂ−１は、既存の長大レコードに対する部分的なアクセスを行なう場合には、レコード全体に対するオフセットより操作対象となるスライスの開始点を、スライス間のアドレスリンクを順次ナビゲートする方法又は上記木インデクスより求める方法のいずれかにより決定するものである。
【００２５】
さらに、メンテナンス部３ｂ−２は、スライス単位の追加、削除に伴う上記木インデクスのメンテナンスを木インデクス操作手段５ｂに要求するものである。
また、データページ操作手段４ｂが、ページ内の各レコードの、通常レコードと長大レコードとの区別を記録するレコード区別記録部をそなえるとともに、レコード操作手段２ｂが、データページ操作手段４ｂのレコード区別記録部からの、既存のレコードのレコード識別子に対応するレコードの区別に基づき、通常レコードの場合にはデータページ操作手段４ｂに、長大レコードの場合には長大レコード操作手段３ｂにそれぞれレコード操作を要求する操作要求部をそなえることもできる。
【００２６】
さらに、レコード操作手段２ｂが、既存の通常レコードに対し、操作に伴いレコード全体のサイズが１ページに収まらなくなる場合には、通常レコードを長大レコードとして登録し直してから長大レコード操作手段３ｂにレコード操作を要求する一方、既存の長大レコードに対し、操作を完了した後、長大レコード全体のサイズが１ページに収まる場合には、このレコード操作の完了した長大レコードを通常レコードとして登録し直す再登録操作部をそなえることもできる。
【００２７】
また、アクセス開始点決定制御部３ｂ−１が、既存の長大レコードに対する部分的なアクセスを行なうスライスの開始点を決定する際に、木インデクスが構成されている場合は木インデクス操作手段５ｂにより、無ければスライス自体の持つアドレスリンクをナビゲートしてその開始点を決定することができる。
【００２８】
即ち、アクセス開始点決定制御部３ｂ−１の制御に基づいて、該木インデクス操作手段５ｂによりアクセス開始点の決定する場合は、メンテナンス部３ｂ−２を、長大レコード全体のサイズに対する予め決められたしきいサイズとの大小に基づいて、木インデクスの作成と削除とを決定するように構成することができるほか、部分的なアクセスの要否により木インデクスの作成又は削除することを決定し、さらに、部分的なアクセスが発生すると、木インデクスを作成するように構成することができる。
【００２９】
また、長大レコード操作手段３ｂのメンテナンス部３ｂ−２を長大レコード全体のサイズに対する予め決められたしきいサイズとの大小関係、及び部分的なアクセスの要否により木インデクスの作成又は削除することを決定するように構成することができる。
さらに、木インデクス操作手段５ｂが、長大レコード全体に対するオフセットからスライスを検索する際に、木インデクスの最上位のルートインデクスページから最下位のリーフインデクスページに至る各インデクスのサイズの積算が、所望のオフセットと一致又は直前となるインデクスを検索し、検索されたインデクスから逐次下位階層のインデクスページに移って検索を行なうことにより、リーフインデクスページ上のインデクスにおいて当該オフセットを含むスライスへのレコード識別子を取得するインデクスページ操作部をそなえることもできる。
【００３０】
また、長大レコード操作手段３ｂが、長大レコードに対する部分的な挿入を行なう際に、挿入操作後に新規生成されたスライスの格納ページに空き領域があれば、新規生成されたスライスと直後のスライス間で併合するインデクスページ間操作部をそなえることができるほか、長大レコードに対する部分的な削除を行なう際に、削除操作の開始点を含むスライスと終了点をスライス間で併合するインデクスページ間操作部をそなえることもできる。
【００３１】
さらに、長大レコード操作手段３ｂが、長大レコードに対するサイズ変更操作が行なわれた後に、当該長大レコードを構成する全てのスライスについてのスライスサイズの総和を演算する総和演算部と、総和演算部において演算された総和に対する、スライスの個数と１ページサイズの積との比を演算する比演算部と、比演算部において演算された比と、予め設定された比率とを比較する比率比較部と、比率比較部における比率の比較の結果、比演算部において演算された比が予め設定された比率よりも小さい場合は、隣り合うスライス間において自スライスの空き領域が該自スライスに続くスライスのデータで埋まるように、全てのスライスについて順次マージしていくことにより、ガベージコレクションを行なうように制御するガベージコレクション制御部をそなえることができる。
【００３２】
また、長大レコード操作手段３ｂが、メンテナンス部３ｂ−２において、インデクスに対する修正をした後に、修正されたリーフインデクスページ内における、スライスサイズの総和を演算する総和演算部と、総和演算部において演算された総和に対する、スライスの個数と１ページサイズの積との比率を演算する比演算部と、比演算部において演算された比と、予め設定された比率とを比較する比率比較部と、比率比較部における比率の比較の結果、比演算部において演算された比が予め設定された比率よりも小さい場合は、リーフインデクスページ内におけるインデクスに対応したスライスについて、隣り合うスライス間において自スライスの空き領域が該自スライスに続くスライスのデータで埋まるように順次マージしていくことにより、ガベージコレクションを行なうように制御するガベージコレクション制御部をそなえることもできる。
【００３３】
【作用】
上述の第１の発明では、図１に示すように、レコード操作手段２ａにおいて、１ページサイズ内のレコードに関する要求を受けた場合は、通常レコード操作手段４ａにより、１個のレコード内でデータベース６ａに対してアクセスを行なう。
また、長大レコード操作手段３ａで、１ページのサイズ内に収まらないサイズを有する新規の長大レコードに関する登録要求を受けた場合は、該新規の長大レコードについて、ページ単位に分割されたスライスに分解して、通常レコード操作手段４ａで、データベース６ａに登録する。
また、レコード操作手段２ａにおいて、データベース６ａに登録され１ページのサイズ内に収まらないサイズを有する長大レコードであって、複数のスライスにより構成された長大レコードに関する要求を受けた場合は、長大レコード操作手段３ａにより、長大レコードについて、スライス単位に分解する。
【００３４】
そして、通常レコード操作手段４ａにより、スライス単位に分解された長大レコード内での部分的アクセスをデータベース６ａとの間で行なうか、又はインデクス操作手段５ａにより、長大レコードのインデクスを生成又は更新し、長大レコードのアクセスを、スライスを単位として、データベース６ａとの間で行なう。
これにより、ファイル管理装置１ａでは、データベース６ａに格納されるファイルを管理することができる。
【００３５】
さらに、上述の第２の発明のファイル管理装置１ｂにおいては、レコード操作手段２ｂでは、レコード又はレコード内の部分的なデータに対して、レコードの新規作成、抹消、フェッチ、レコード内の部分的なデータに対する途中挿入、途中削除、更新又は読み込みのいずれかのレコード操作要求を受け付ける。
また、データページ操作手段４ｂでは、レコード操作手段２ｂにて受け付けた要求の対象となるデータが１ページ内に収まるサイズの通常レコードである場合は、該要求の対象としての新規レコード又はデータベース６ｂ上で登録されたレコード識別子で示される既存レコードを１ページに収まる通常レコードとして割り当てて、各種レコード操作を行なうとともに、１個の通常レコード内における部分的アクセスを行なう。
【００３６】
さらに、長大レコード操作手段３ｂでは、レコード操作手段２ｂにて受け付けた要求の対象となるデータが、１ページ内に収まらないサイズの長大レコードであって、ページ単位に分割された複数のスライスにより構成された長大レコードである場合は、新規レコード又はデータベース６ｂ上で登録された長大レコードに対し、操作を受けるスライス単位に分解してから、データページ操作手段４ｂに対して各種レコード操作をスライス単位に要求する。
【００３７】
また、木インデクス操作手段５ｂでは、最下位リーフレベルのインデクスでは各スライスそのもののサイズとスライスへのレコード識別子を格納し、その上の階層のインデクスは下位のインデクスの表すサイズの総和を格納し、最上位のルートレベルのインデクスの表すサイズの総和は長大レコード全体のサイズに一致し、リーフレベルのインデクスの順番は、これらの対応する各スライスのオフセットの順番に一致するようにインデクスを構成する。
【００３８】
また、長大レコード操作手段３ｂのアクセス開始点決定制御部３ｂ−１では、既存の長大レコードに対する部分的なアクセスを行なう場合には、レコード全体に対するオフセットより操作対象となるスライスの開始点を、スライス間のアドレスリンクを順次ナビゲートする方法又は上記木インデクスより求める方法のいずれかにより決定し、メンテナンス部３ｂ−２では、スライス単位の追加、削除に伴う上記木インデクスのメンテナンスを木インデクス操作手段５ｂに要求する。
【００３９】
これにより、ファイル管理装置１ｂでは、操作要求の対象のレコードに基づいて、データベース６ｂに登録されるファイルを管理することができる。
また、データページ操作手段４ｂでは、レコード区別記録部により、ページ内の各レコードの通常レコードと長大レコードとの区別を記録しておき、レコード操作手段２ｂの操作要求部により、データページ操作手段４ｂのレコード区別記録部からの既存のレコードのレコード識別子に対応するレコードの区別に基づき、通常レコードの場合にはデータページ操作手段４ｂに、長大レコードの場合には長大レコード操作手段３ｂにそれぞれレコード操作を要求する。これにより、レコード操作手段２ｂでは、既存のレコードのレコード識別子に対応するレコードの区別に応じてレコード操作を要求することができる。
【００４０】
さらに、レコード操作手段２ｂの再登録操作部により、既存の通常レコードに対し、操作に伴いレコード全体のサイズが１ページに収まらなくなる場合には、通常レコードを長大レコードとして登録し直してから長大レコード操作手段３ｂにレコード操作を要求する一方、既存の長大レコードに対し、操作を完了した後、長大レコード全体のサイズが１ページに収まる場合には、このレコード操作の完了した長大レコードを通常レコードとして登録し直すこともできる。
【００４１】
また、長大レコード操作手段３ｂのアクセス開始点決定制御部３ｂ−１では、既存の長大レコードに対する部分的なアクセスを行なうスライスの開始点を決定する際に、木インデクスが構成されている場合は木インデクス操作手段５ｂにより、無ければスライス自体の持つアドレスリンクをナビゲートしてその開始点を決定するように制御することができる。
【００４２】
この場合においては、アクセス開始点決定制御部３ｂ−１による制御に基づき、木エンデクス操作手段５ｂによりアクセス開始点を決定する場合は、メンテンナンス部３ｂ−２では、長大レコード全体のサイズに対する予め決められたしきいサイズとの大小に基づいて、木インデクスの作成と削除とを決定することができるほか、部分的なアクセスの要否により木インデクスの作成又は削除することを決定することができ、さらに、部分的なアクセスが発生すると、木インデクスを作成することもできる。
【００４３】
また、メンテナンス部３ｂ−２では、長大レコード全体のサイズに対する予め決められたしきいサイズとの大小関係、及び部分的なアクセスの要否により木インデクスの作成又は削除することを決定することができる。
さらに、木インデクス操作手段５ｂのインデクスページ操作部では、長大レコード全体に対するオフセットからスライスを検索する際に、木インデクスの最上位のルートインデクスページから最下位のリーフインデクスページに至る各インデクスのサイズの積算が、所望のオフセットと一致又は直前となるインデクスを検索し、検索されたインデクスから逐次下位階層のインデクスページに移って検索を行なうことにより、リーフインデクスページ上のインデクスにおいて当該オフセットを含むスライスへのレコード識別子を取得することもできる。
【００４４】
また、長大レコード操作手段３ｂのインデクスページ間操作部により、長大レコードに対する部分的な挿入を行なう際に、挿入操作後に新規生成されたスライスの格納ページに空き領域があれば、新規生成されたスライスと直後のスライス間で併合することができるほか、長大レコードに対する部分的な削除を行なう際に、削除操作の開始点を含むスライスと終了点をスライス間で併合することもできる。
【００４５】
さらに、長大レコードに対するサイズ変更操作が行なわれた後に、総和演算部では、当該長大レコードを構成する全てのスライスについてのスライスサイズの総和を演算し、比演算部では、総和演算部において演算された総和に対するスライスの個数と１ページサイズの積との比を演算し、比率比較部では、比演算部において演算された比と予め設定された比率とを比較し、ガベージコレクション制御部では、比率比較部における比率の比較の結果、比演算部において演算された比が予め設定された比率よりも小さい場合は、隣り合うスライス間において自スライスの空き領域が該自スライスに続くスライスのデータで埋まるように、全てのスライスについて順次マージしていくことにより、ガベージコレクションを行なうように制御することができる。
【００４６】
また、メンテナンス部３ｂ−２において、インデクスに対する修正をした後に、総和演算部では、修正されたリーフインデクスページ内における、スライスサイズの総和を演算し、比演算部では、総和演算部において演算された総和に対するスライスの個数と１ページサイズの積との比率を演算し、比率比較部では、比演算部において演算された比と予め設定された比率とを比較し、ガベージコレクション制御部では、比率比較部における比率の比較の結果、比演算部において演算された比が予め設定された比率よりも小さい場合は、リーフインデクスページ内におけるインデクスに対応したスライスについて、隣り合うスライス間において自スライスの空き領域が該自スライスに続くスライスのデータで埋まるように、順次マージしていくことにより、ガベージコレクションを行なうように制御することもできる。
【００４７】
【実施例】
以下、図面を参照することにより本発明の実施例について説明する。
（ａ）本発明の一実施例にかかるファイル管理装置の概要の説明
図３は本実施例にかかるファイル管理装置が適用されたシステムを示すブロック図であり、この図３に示すシステムは、複数の端末とデータベース等により構成され、例えば端末利用者による文書編集処理を行なうための応用プログラム等が起動されるワークステーションなどとして機能するものであり、ファイル管理装置は、データベースに登録されるファイルを管理するためのものである。
【００４８】
ここで、この図３において、１１は端末利用者による処理内容等を表示するディスプレイ装置であり、１２は端末利用者からのデータやコマンド等を入力するためのキーボードである。
また、１３はキーボード１２からの入力やデータベース１４に格納されているデータに基づいて、例えば文書編集処理等の応用プログラムを実行したり、プログラム実行の際に使用されるデータをデータベース１４から読み込んで格納する中央処理装置／主記憶装置であり、この中央処理装置／主記憶装置１３は、本実施例にかかるファイル管理装置としての機能を有している。
【００４９】
また、データベース１４は、中央処理装置／主記憶装置１３において起動される応用プログラムのための各種データ等をファイル毎に格納しておくものであり、このデータベース１４では、データに関しての物理的な入出力動作をページ単位に行なうようになっている。
ここで、ＣＰＵ及び主記憶装置１３は、応用処理部２１，レコード操作部２２，ＢＬＯＢレコード操作部２３，ツリーインデクス操作部２４，データページ操作部２５及びページバッファ２６をそなえており、それぞれの機能はソフトウェアにより実現することができる。
【００５０】
応用処理部２１は、応用プログラム（アプリケーションプログラム）による処理を実行するものであり、本実施例においては、文書編集処理の応用プログラムを実行するものである。
レコード操作部（レコード操作手段）２２は、データベース１４内のデータを応用プログラム間でやり取りする際のデータの単位としてのレコード又はレコード内の部分的なデータに対する各種レコード操作要求を受け付けるものであり、操作要求部２２ａ及び再登録操作部２２ｂをそなえている。
【００５１】
例えば、レコード操作部２２は、レコード単位に対する操作要求として文書の新規作成（ｃｒｅａｔｅ），抹消（ｒｅｍｏｖｅ）又はフェッチ（ｆｅｔｃｈ）を、レコード内の部分的なデータに対する操作要求として途中挿入（ｉｎｓｅｒｔ）、途中削除（ｃｕｔ）、更新（ｕｐｄａｔｅ），読み込み（ｒｅａｄ）を受け付けるようになっている。
【００５２】
また、レコード操作部２２の操作要求部２２ａは、データページ操作部２５からのレコード識別子（Record IDentifier,ＲＩＤ）で示される、既存のレコードにおけるレコードの区別（割り当て）に基づき、通常レコードの場合にはデータページ操作部２５に、ＢＬＯＢレコード（長大レコード）の場合にはＢＬＯＢレコード操作部２３にそれぞれレコード操作を要求するものである。
【００５３】
さらに、再登録操作部２２ｂは、既存の通常レコードに対し、操作に伴いレコード全体のサイズが１ページに収まらなくなる場合には、通常レコードを長大レコードとして登録し直してからＢＬＯＢレコード操作部２３にレコード操作を要求する一方、既存の長大レコードに対し、操作を完了した後、長大レコード全体のサイズが１ページに収まる場合には、このレコード操作の完了した長大レコードを通常レコードとして登録し直すものである。
【００５４】
また、データページ操作部（通常レコード操作手段，データページ操作手段）２５は、データを格納するデータページを、ページ毎に操作するものである。具体的には、レコード操作部２２にて受け付けた要求の対象となるデータが１ページ内に収まるサイズの通常レコードである場合に、新規レコード又はデータベース１４上で登録されたレコード識別子で示される既存レコードが１ページに収まる通常レコードとしての各種レコード操作を行なうとともに、通常レコードにおける１ページ内に収まる部分的アクセスを行なうものである。
【００５５】
さらに、データページ操作部２５は、ページ内の各レコードの、通常レコードとＢＬＯＢレコードとの区別をＲＩＤとして記録するレコード区別記録部２５ａをそなえている。
また、ＢＬＯＢレコード操作部（長大レコード操作手段）２３は、レコード操作部２２にて受け付けた要求の対象となるデータが、１ページ内に収まらないサイズであって、複数のスライスにより構成された長大レコードとしてのＢＬＯＢ(binary large objects)レコードである場合は、新規レコード又はデータベース１４上で登録されたＢＬＯＢレコードに対し、操作を受けるスライス単位に分解してから、データページ操作部２５に対して各種レコード操作を要求するものであり、アクセス開始点決定制御部２３ａ及びメンテナンス部２３ｂをそなえている。
【００５６】
なお、ＢＬＯＢレコード操作部２３は、図１７にて後述するように、総和演算部２３ｃ，比演算部２３ｄ，比率比較部２３ｅ及びガベージコレクション（Garbage Collection) 制御部２３ｆをそなえ、データベース１４におけるスライスの空の領域を整理することもできる。
ここで、アクセス開始点決定制御部２３ａは、既存のＢＬＯＢレコードに対する部分的なアクセスを行なう場合には、レコード全体に対するオフセットより操作対象となるスライスの開始点を、スライス間のアドレスリンクを順次ナビゲートする方法又は後述するツリーインデクス操作部２４のツリーインデクス情報で求める方法のいずれかにより決定するものである。
【００５７】
また、メンテナンス部２３ｂは、スライス単位の追加、削除に伴うツリーインデクス情報のメンテナンスをTreeインデクス操作部２４に要求するものである。
さらに、ツリーインデクス（Tree Index) 操作部２４は、ツリーインデクスを構成して、データベース１４におけるインデクスページに格納させるものであり、インデクスページ(Index Page)操作部２４ａ及びインデクスページ間操作部２４ｂをそなえている。
【００５８】
また、既存のＢＬＯＢレコードに対する部分的なアクセスを行なう場合には、このツリーインデクス操作部２４で構成されたツリーインデクス情報に基づいててアクセスを行なうことができるようになっている。
上述のツリーインデクスの構成としては、下位リーフレベル(Leaf Level)のインデクスでは各スライスそのもののサイズとスライスへのレコード識別子を格納し、その上の階層のインデクスは下位のインデクスの表すサイズの総和を格納し、最上位のルートレベル(Root Level)のインデクスの表すサイズの総和は該長大レコード全体のサイズに一致し、リーフレベルのインデクスの順番は、これらの対応する各スライスのオフセットの順番に一致するように構成することができる。
【００５９】
上述の構成により、本発明の一実施例にかかるファイル管理装置では、以下に示すような処理が行なわれる。
即ち、レコード操作部２２では、応用処理部２１の応用プログラムからのレコードに対するアクセス要求を受け付ける。例えば、レコード単位のアクセス要求として、新規作成（ｃｒｅａｔｅ），抹消（ｒｅｍｏｖｅ）又はフェッチ（ｆｅｔｃｈ）を受け付け、また、部分的なアクセスとして、途中挿入（ｉｎｓｅｒｔ），途中削除（ｃｕｔ），更新（ｕｐｄａｔｅ）又は読み込み（ｒｅａｄ）を受け付ける。
【００６０】
さらに、レコード操作部２２では、レコードの新規作成時は、そのレコードに対する要求サイズにより、通常レコードか又はＢＬＯＢレコードの区別を設定する。
また、レコード操作部２２において受け付けたアクセス要求が、既存のレコードに対するものならば、データページ操作部２５からのＲＩＤに基づいて、そのレコードが通常レコードであるかＢＬＯＢレコードであるかを区別する。
【００６１】
ここで、レコード操作部２２の操作要求部２２ａでは、受け付けたアクセスに対応するレコードが、通常レコードである場合は、直接データページ操作部２５に実際のレコード操作を要求する一方、ＢＬＯＢレコードである場合は、ＢＬＯＢレコード操作部２３に実際のレコード操作を要求する。
また、既存のレコードが通常のレコードの場合でも、要求されたレコード操作に伴ってレコード全体サイズが１サイズに収まらなくなる場合には、再登録操作部２２ｂにより既存の通常レコードをＢＬＯＢレコードとして登録し直し、その後、操作要求部２２ａによりＢＬＯＢレコード操作部２３に実際のレコード操作を要求する。
【００６２】
また、既存のＢＬＯＢレコードに対する操作を完了した後、ＢＬＯＢレコード全体が１ページに収まるようになった場合には、再登録操作部２２ｂにより、そのレコード操作完了後のＢＬＯＢレコードを通常レコードとして登録し直す。
なお、レコード操作部２２において受けたアクセス要求が既存の通常レコードに対するものである場合は、ＲＩＤは、それ自体１個のレコードのデータベース１４における所在を示している。
【００６３】
これに対し、レコード操作部２２において受けたアクセス要求がＢＬＯＢレコードの場合には、ＲＩＤは、ＢＬＯＢレコードに対する管理情報のデータベース１４における所在を示している。また、データベース１４に所在する管理情報としては、複数のスライスをナビゲートする情報，ツリーインデクスに関する情報から構成される。
【００６４】
データページ操作部２５では、レコード操作部２２からの要求に基づいて、新規レコード又はＲＩＤで示される既存レコードが１ページに収まる通常レコードとしての割り当て、削除、更新等のレコード操作を行なうほか、１個の通常レコード内における途中削除，部分的な読み出し、及び１ページ内に収まる範囲の途中挿入といったレコード内（スライス内）での部分的アクセスを行なう。
【００６５】
ＢＬＯＢレコード操作部２３では、レコード操作部２２において受けたアクセス要求が、新規レコードのＢＬＯＢレコードか又はＲＩＤで示される既存レコードが複数ページに点在したスライスにまたがって格納されるＢＬＯＢレコードに対するものである場合は、そのＢＬＯＢレコードについて、操作を受けるスライス単位に分解することにより、見かけ上個別の通常レコードに対するアクセスを行なうことができる。
【００６６】
即ち、ＢＬＯＢレコード操作部２３のアクセス開始点決定制御部２３ａでは、レコード全体に対するオフセットより操作対象となるスライスの開始点を、スライス間のアドレスリンクを順次ナビゲートする方法又はツリーインデクス操作部２４により生成されたツリーインデクス情報により求める方法のいずれかにより決定する。
【００６７】
具体的には、アクセス開始点決定制御部２３ａでは、ツリーインデクス操作部２４においてツリーインデクスが作成されている場合は、ツリーインデクス操作部２４により部分的なアクセス対象となるスライスの開始点を決定するが、作成されていない場合は、スライス自体が有するアドレスリンクをナビゲートしてその開始点を決定するのである。
【００６８】
スライスの開始点を上述のいずれかの方法で決定すると、ＢＬＯＢレコード操作部２３では、開始点以降のスライス単位のレコード操作については、アドレスリンクをナビゲートして、スライス単位にデータページ操作部２５によるアクセス処理を繰り返し実行させるとともに、スライス単位のデータの追加、削除に伴って、アドレスリンクのメンテナンスを行なう。
【００６９】
さらに、ツリーインデクス操作部２４においてツリーインデクスが作成されている場合においては、メンテナンス部２３ｂでは、各スライス単位の追加、削除、サイズ変更に関わる操作に伴い、ツリーインデクスをメンテナンスする。
なお、メンテナンス部２３ｂでは、部分的なアクセスの要否や、ＢＬＯＢレコード全体のサイズに応じて、ツリーインデクスを新規に一括生成したり、すでにあるツリーインデクスを消滅させる。
【００７０】
ここで、部分的なアクセスの要否は、このＢＬＯＢレコードとして格納管理されるデータの種類毎に事前に定義された辞書を参照したり、応用プログラムから部分的なアクセス要求を受け付けることにより判断し、ＢＬＯＢレコード全体のサイズは、レコード操作後にサイズが縮小した結果、通常レコードに変換される可能性があるので、レコード操作後のサイズに基づいて判断されている。
【００７１】
ところで、ツリーインデクス操作部２４では、データベース１４上のインデクスページにおける、各スライスに対応したインデクスを操作する。このインデクスは、ページ当たりのインデクスの格納数をＸ，平均格納率をγ（０．５≦γ≦１．０）とすれば、インデクスの階層の高さＨはｌｏｇγＸ（ｎ）となり、スライス数の増加に対して動的にインデクスを増加させるとともに、アクセス性能の劣化を緩和することができる。
【００７２】
また、ツリーインデクス操作部２４により生成されるインデクスでは、各インデクスには対応するスライスのサイズを格納し、最下位のリーフレベルのインデクスは、各スライスそのもののサイズを格納し、結果として最上位のインデクスの表すサイズの総和が、ＢＬＯＢレコード全体のサイズに一致する。
さらに、リーフレベルのインデクスの順番は、これらに対応する各スライスのオフセットの順番に一致しており、結果的に上位のインデクスにより、下位のインデクスページをナビゲートすることなく、少ないページアクセスで効率的にＢＬＯＢ全体に対するオフセットに対応したリーフレベルのインデクスに行き着くことができる。
【００７３】
また、最上位階層（ルート）から最下位（リーフ）に至るインデクスページ上の各インデクスのサイズの積算が、所望のオフセットと一致又は直前となるインデクスを見つけ、そのインデクスから逐次下位階層のインデクスページに移って検索することにより、リーフインデクスページ(Leaf Index Page) 上のインデクスに当該オフセットを含むスライスのＲＩＤを取得する。これにより、ＢＬＯＢレコード全体からのオフセットからスライスを特定することができる。
【００７４】
インデクスページ操作部２４ａでは、インデクスページ単位の操作を行なう。即ち、インデクスを検索する際は、ルートインデクスページ(Root Index Page) から下位のインデクスページに向かって逐次検索されるが、インデクスをメンテナンスする際は、インデクスページ間操作部２４ｂを介して、リーフインデクスページから上位のインデクスページに対して順次変更が反映される。
【００７５】
また、インデクスページ間操作部２４ｂでは、同一階層での前後のインデクスページ間のリンクや、上位／下位インデクスページ間のリンクのメンテナンスを行なう。
ところで、ツリーインデクス操作部２４において、データページにおけるスライスの増減に伴った、インデクスページにおけるインデクスの増減操作を行なう際においては、同一階層内での前後のインデクスページ間でのインデクスの移動が伴うオーバーフローやアンダーフロー、さらに前後のインデクスページ間であふれたインデクスを収容できない場合のスプリットや、極端に過疎になったインデクスページのマージを行なう。
【００７６】
これにより、最初にインデクスページ操作部２４ａがリーフレベルのインデクスに対するメンテナンス要求を受け付けると、インデクスページ操作部２４ａからインデクスページ間操作部２４ｂに実際のインデクスに対するメンテナンス要求を行なう。
メンテナンス要求を受けたインデクスページ間操作部２４ｂでは、前記のインデクスページ間にまたがるメンテナンス（オーバフロー，アンダーフロー，スプリット又はマージ）を行ない、インデクスページ単位のインデクスの挿入，削除はインデクスページ操作部２４ａに要求する。
【００７７】
さらに、インデクスページ間操作部２４ｂでは、一つの階層に対するインデクスのメンテナンスが完了すると、その変更内容を上位階層のインデクスページに反映する。例えば、下位階層のインデクスページの総サイズが変更された場合には、その下位階層のインデクスページを代表する上位階層のインデクスのサイズ及び当該上位階層のインデクスページの総サイズを更新する。
【００７８】
ところで、ページバッファ２６では、データベース１４におけるファイル上のページアドレスに従って、物理ページ単位の入出力，主記憶装置に読み込まれたページのバッファリング，新規ページのデータベース１４上への割り当て，データレコードやインデクスが空になって不要になったページの、データベース１４からの開放等を行なう。
【００７９】
このように、ツリーインデクス操作部２４により、ＢＬＯＢレコードのインデクスを生成し、ＢＬＯＢレコードのアクセスをデータベース１４との間で行なうことができるので、管理すべきＢＬＯＢレコードの最大レコードサイズの制約を無くすとともに、高速に部分的アクセスを行なえる利点もある。
また、再登録操作部２２ａにより、操作に伴ってレコード全体のサイズが変わっても、そのレコード全体のサイズに応じて、通常レコード又はＢＬＯＢレコードとして登録することができるほか、レコード区別記録部２５ａにより、ページ内の各レコードの、ＢＬＯＢレコードと通常レコードとの区別を記録しておき、この区別に基づき、通常レコードとＢＬＯＢレコードの操作との分岐制御を行なうことができるので、応用処理部２１側において、通常レコードとＢＬＯＢレコードの区別を意識する必要がなく、ファイル管理装置を、データ長を区別しない一貫性のあるインターフェイスとして機能させることができる利点がある。
【００８０】
さらに、ＢＬＯＢレコード操作部２３のアクセス開始点決定制御部２３ａにより、レコード全体に対するオフセットから操作対象となるスライスの開始点を、スライス間のアドレスリンクを順次ナビゲートする方法又はツリーインデクスから求める方法のいずれかにより決定することができるので、レコードの規模とアクセス形態に応じた最適なアクセス手段を選択することができる利点があるほか、ファイル管理装置を、応用処理部２１側においてデータベース側の環境を意識する必要のない独立性のあるインターフェイスとして機能することができる利点もある。
【００８１】
また、ツリーインデクス操作部２４では、ＢＬＯＢレコード全体のサイズの対する予め決められたしきいサイズとの大小関係又は部分的なアクセスの要否によりツリーインデクスを動的に増減して更新，作成又は削除を行なうことができるので、データベースの領域を有効に活用しながら、管理すべき長大レコードの最大レコードサイズの制約を無くすとともに、高速に部分的アクセスを行なえる利点もある。
【００８２】
（ｂ）本実施例にかかるファイル管理装置を実現するためのヘッダファイルのプログラミング例の説明
上述のファイル管理装置としての機能をソフトウェアにより構成する場合は、例えば、以下に示す図２４〜図３６に示すような、Ｃ言語のプログラムにより実現することができる。
【００８３】
即ち、これらの図２４〜図３６は、本実施例にかかるファイル管理装置を実現するためのヘッダファイルのプログラミング例を示す図であり、図２４は初期の設定を行なうためのもので、図２５はレコード操作部２２を実現するためのもので、図２６はページバッファ２６を実現するためのものである。
また、図２７はデータベース１４におけるデータページ内のヘッダ部分の構造を設定するためのもので、図２８はデータページ操作部２５を実現するためのもので、図２９はデータページ内のレコードエントリ部分の構造を設定するためのものである。
【００８４】
さらに、図３０はＢＬＯＢ管理情報を設定するためのもので、図３１はＢＬＯＢレコード操作部２３を実現するためのもので、図３２はツリーインデクス操作部２４を実現するためのもので、図３３はインデクスページ内のスライス毎のインデクスの構造を設定するためのもので、図３４はインデクスページ内のヘッダ部の構造を設定するためのもので、図３５はインデクスページ操作部２４ａを実現するためのもので、図３６はインデクスページ間操作部２４ｂを実現するためのものである。
【００８５】
上述の図２４〜図３５に示すように、ファイル管理装置を実現するためのヘッダファイルが構成されている場合においては、データベース１４におけるデータページ内においては、先頭に、図２７のプログラムにより設定されたヘッダ部（ＤａｔａＨｅａｄ）が格納され、その直後にレコードエントリが可変数の配列として格納される。なお、このレコードエントリの配列数としては、図２７のプログラムにおける変数ｅｎｔｒｙＭａｘが相当する。また、可変長となるレコードはデータページの最後尾から格納され、レコードエントリとレコード領域が衝突しない範囲で格納されるようになっている。
【００８６】
さらに、データベース１４におけるインデクスページ内においては、先頭に、図３４のプログラムにより設定されたヘッダ部（ＩｎｄｅｘＨｅａｄ）が格納され、その直後に、図３３のプログラムにより設定された個々のスライス毎のインデクス（ＩｎｄｅｘＴｕｐｌｅ）が固定数の配列として格納される。なお、インデクスが固定数の配列として格納されているので、インデクスのページサイズも固定である。
【００８７】
また、図３５のプログラムにより実現されたインデクスページ操作部２４ａ及び図３６のプログラムにより実現されたインデクスページ間操作部２４ｂは、図３２のプログラムにより実現されたツリーインデクス操作部２４から利用されるようになっている。
（ｃ）本実施例にかかるファイル管理装置を文書編集システムに適用した場合の動作の概略の説明
次に、図３に示したファイル管理装置を文書編集システムを起動する応用プログラムに適用した場合の動作について、図４に示すフローチャートを用いて以下に説明する。
【００８８】
即ち、この図４に示すように、利用者はキーボード１２からの入力指示とディスプレイ装置１１への表示により文書編集作業を進め、文書情報をデータベース１４から入出力する。
まず、利用者は最初にキーボードより新規／既存の文書指定を行ない（ステップＡ１，ステップＡ２）、指定された文書が新規文書である場合は、文書ヘッダ情報をｃｒｅａｔｅ操作により新規レコードとしてデータベース１４に書き込む（ステップＡ３）。
【００８９】
また、指定された文書が既存文書である場合は、その文書をデータベース１４から取り出すためにｆｅｔｃｈ操作を行なう（ステップＡ４）。
さらに、ページ単位の文書編集を行なう場合については（ステップＡ５）、キーボード１２により編集すべき文書ページを指示する（ステップＡ６）。これにより、データベース１４上において、ＢＬＯＢレコード又は通常レコードで構成された文書の当該文書ページに対応するオフセットをｌｏｃａｔｅ操作により位置付ける（ステップＡ７）。
【００９０】
なお、この場合においては、単位文書ページ当たりの総バイト数を固定にすることにより、文書ページとオフセットとが一意に対応付けることができる。
また、ｌｏｃａｔｅ操作により指示されたオフセットに対応するＢＬＯＢレコード又は通常レコード内の単位文書ページに対応する特定サイズ分だけをｒｅａｄ操作によりデータベース１４から読み込む（ステップＡ８）。
【００９１】
さらに、ｒｅａｄ操作によりデータベース１４から読み込まれた文書の内容をディスプレイ装置１１に表示する（ステップＡ９）。以後、表示中の文書に対する部分文字列，行の単位での修正作業等をキーボード１２で指示し（ステップＡ１０）、これらに対応して、途中挿入ｉｎｓｅｒｔ（ステップＡ１１），途中削除ｃｕｔ（ステップＡ１２），部分変更ｕｐｄａｔｅ（ステップＡ１３）といったデータベース１４に対する操作が行なわれる。
【００９２】
これにより、複数文書ページについて、上述したような編集作業を繰り返すことができる。
また、文書を削除する指示に対しては、キーボード１２により不要文書を指定すると（ステップＡ１４）、ｒｅｍｏｖｅ操作を行なうことにより、ＢＬＯＢレコード又は通常レコード単位で削除する（ステップＡ１５）。
【００９３】
（ｄ）本実施例にかかるファイル管理装置の適用されたデータベース１４の詳細な説明
図５は本実施例にかかるファイル管理装置の適用されたデータベース１４の詳細を示すブロック図であり、この図５に示すように、１４ａはレコードエントリー部であり、このレコードエントリ部１４ａは、ページバッファ２６からのアクセス要求のあったレコードを特定するためのＲＩＤを入力され、このＲＩＤに対応するレコードの所在（例えばページ内の相対バイト位置等）と通常レコードとＢＬＯＢレコードとの区別を記録するものである。
【００９４】
なお、このレコードエントリ部１４ａにて記録されたレコードの区別に基づき、ファイル管理装置側においては、前述のデータページ操作部２５のレコード区別記録部２５ａにて記録されるようになっている。
なお、このＲＩＤには、レコード毎に採番されたユニーク番号を用いたり、レコードアドレスを用いることができる。この場合ではレコードアドレスを用いてＲＩＤを構成する。なお、ＲＩＤは、レコードを格納するページのアドレスとともに、そのページ内でのレコード追番とにより構成されている。
【００９５】
ここで、データベース１４においては、データページ操作部２５の操作に基づいて通常レコード及びＢＬＯＢレコードを格納するデータページ１４ｅと、ツリーインデクス操作部２４の操作に基づきツリーインデクス情報を格納するインデクスページ１４ｄをそなえている。
なお、いずれのページ１４ｄ，１４ｅにおいても、データベース１４のファイル上では、一つの物理ページであり、ページのファイルとの入出力やバッファリングはページバッファ操作部２６で共通して行なわれるようになっている。
。
【００９６】
また、インデクスページ１４ｄに格納されたツリーインデクスとデータページ１４ｅに格納されたＢＬＯＢレコードとしてのｎ個のスライス１４−１〜１４−ｎとは、図６に示すような関係を有している。
即ち、この図６に示すように、ｎ個のスライス１４−１〜１４−ｎにより、応用処理部２１から要求される１個のＢＬＯＢレコードを構成しており、それぞれのスライス１４−１〜１４−ｎは、各スライスに続くスライスのアドレス情報としてのｎｅｘｔアドレス等の制御情報をそなえ、これにより、例えば各スライス１４−１〜１４−ｎを順にｎｅｘｔアドレスに従ってアクセスすることにより、全体としてＢＬＯＢレコードにアクセスすることができるようになっている。
【００９７】
従って、１個のＢＬＯＢレコードのサイズは、以下に示す式（１）に示すように、各スライス１４−１〜１４−ｎ毎のサイズＳ１〜Ｓｎについての制御情報領域を除いた総和Ｓとなる。
0003703874.tif 000002
さらに、インデクスページ１４ｄのツリーインデクスは、３段の階層構成を有するインデクス群１４ｄ−１〜１４ｄ−３により構成されており、各インデクス群１４ｄ−１〜１４ｄ−３には対応するスライスのサイズが格納されている。
【００９８】
即ち、最下位のリーフレベルのインデクス群１４ｄ−３には、各スライスそのもののサイズを格納し、その上の階層のインデクス群１４ｄ−２には、下位のインデクスの表すサイズの総和を格納し、結果として最上位のルートレベルのインデクス群１４ｄ−１の表すサイズの総和が、ＢＬＯＢレコード全体のサイズに一致する。
【００９９】
さらに、リーフレベルのインデクス群１４ｄ−３の順番は、これらに対応する各スライスのオフセットの順番に一致しており、従って、上位のインデクス群１４ｄ−２，１４ｄ−１を参照することにより、下位のインデクス群１４ｄ−３をナビゲートすることなく、少ないページアクセスで効率的にＢＬＯＢ全体に対するオフセットに対応したリーフレベルのインデクスを検索できるようになっている。
【０１００】
ところで、それぞれのインデクス群１４ｄ−１〜１４ｄ−３は、複数のインデクスページにより構成することができる。さらに、各々のインデクス群１４ｄ−１〜１４ｄ−３を構成するインデクス１個は、例えば、スライスに対するＲＩＤで８バイト、スライスのサイズで４バイト、更に上位から下位へのインデクスへのページアドレスとして４バイトの合計１６バイトからなり、１ページのサイズを４ＫＢとすると、約２５０個のインデクスを１インデクスページに収容することができる。
【０１０１】
このような構成により、レコードエントリ部１４ａにおいて記録された内容に基づき、アクセス要求のあったレコードが通常レコードである場合は、そのレコードは一つのページ上に存在し、且つそのレコードの所在位置がレコードエントリの記録から直接示される（図５における（ａ）参照）。
また、アクセス要求のあったレコードが、複数ページ上に分散されたスライス１４−１〜１４−ｎにより構成されるＢＬＯＢレコードである場合は、レコードエントリ部１４ａにおいて記録されている所在位置情報は、アクセス要求のあったＢＬＯＢレコードについてのＢＬＯＢ管理情報１４ｃを示している（図５における（ｂ）参照）。
【０１０２】
また、このＢＬＯＢ管理情報１４ｃにより、複数ページ上に分散されたスライスの内の先頭のものへの位置が示されるとともに、このＢＬＯＢレコードに対応するツリーインデクスが生成されている場合は、このＢＬＯＢレコードを構成する分散されたスライスへのツリーインデクスへのトップ（ルート）が示されている。
【０１０３】
ここで、上述のＢＬＯＢ管理情報１４ｃに基づいて、データページ１４ｅ上のデータにアクセスする際においては、スライス間のアドレスリンクを順次ナビゲートする方法か又はインデクスページ１４ｄに生成されたツリーインデクスによりアクセスする方法を採用する。
具体的には、ＢＬＯＢレコードを構成するスライスの個数が少なかったり、部分的なアクセスを要しない場合にはスライス間のアドレスリンクを順次ナビゲートする方法を採用し、インデクスページ１４ｄにツリーインデクスが生成されていたり、部分的なアクセスを要する場合は、ツリーインデクスによりアクセスする方法を採用する。
【０１０４】
ここで、上述のツリーインデクスを用いたデータアクセスを行なう方法を採用する場合においては、ＢＬＯＢ管理情報１４ｃからのＢＬＯＢレコード全体からのオフセットに基づいて、最上位階層（ルート）から最下位（リーフ）に至るインデクスページ上の各インデクスのサイズの積算が所望のオフセットと一致又は直前となるインデクスを見つけ、そのインデクスから逐次下位階層のインデクスページに移っていくことにより、リーフインデクスページ上のインデクスに当該オフセットを含むスライスのＲＩＤを取得することができ、これにより、ＢＬＯＢレコード全体からのオフセットからスライスを特定することができる。
【０１０５】
例えば、ｉ番目のスライス１４−ｉに対する部分的なアクセスを必要とする場合、このｉ番目のスライスは、応用処理部２１からのＢＬＯＢレコード全体におけるオフセットで特定される。
ここで、このオフセットに基づいてアクセスする際に、ツリーインデクスを利用した方法を用いた場合においては、上述したように、ルートレベルのインデクス群１４ｄ−１からオフセット１が求まり、インデクス群１４ｄ−２からオフセット２が求まり、リーフレベルのインデクス群１４ｄ−３からオフセット３が求まる。
【０１０６】
これにより、目標とするオフセットのデータの内容を含むスライス１４−ｉを検索することができ、巨大なＢＬＯＢレコード全体の内の１部分に対するアクセスを高速に実現することができる。
なお、アクセス要求のあったＢＬＯＢデータについて、実際に存在するスライスが数ページ（例えば１０ページ）の場合や、常に先頭から順次読み込むような目的の場合（例えばデータベース１４が単なる大きなデータの格納庫であったり、膨大なメモリ空間に一括して読み込むか、読み込める範囲のサイズまでしかデータ量が増大しないものの場合）は、ツリーインデクスによらずにスライス間のアドレスリンクを順次ナビゲートしてアクセスを行なう。
【０１０７】
これにより、ＢＬＯＢレコード全体に対するサイズや部分的なレコードのアクセスの要否によりアクセス方法を選択して、ツリーインデクスの生成／削除を選択することができるので、インデクスページ１４ｅを生成するのに必要なデータベース１４上の記憶領域や、インデクスページ１４ｅのためのメンテナンス時間の冗長性を抑止することができる。
【０１０８】
（ｅ）データベース上のレコードのサイズ変更に伴った状態遷移の説明
また、データベース１４上のレコードは、前述の（ｂ）にて示したような文書ファイルについての修正等が行なわれると、データベース１４上では、その修正等に応じて図７に示すように状態が遷移するようになっている。
即ち、文書ファイルにおけるレコードの新規作成（ｃｒｅａｔｅ，図７の状態Ｂ１参照）に対しては、初回のレコードサイズが１物理ページに収まれば通常レコードとして登録され（図７の状態Ｂ１から状態Ｂ２）、収まらなければＢＬＯＢレコードとして登録される（状態Ｂ１から状態Ｂ３）。
【０１０９】
また、通常レコードに対して、その後の途中挿入（ｉｎｓｅｒｔ）を行なった結果、レコードサイズが１物理ページに収まらなくなった場合は、ＢＬＯＢレコードとして再登録され（状態Ｂ２から状態Ｂ３）、逆に、ＢＬＯＢレコードに対し、途中削除（ｃｕｔ，図７の状態Ｂ４参照）を行なった結果、レコードサイズが１物理ページに収まれば通常レコードとして再登録される（状態Ｂ３からＢ２）。
【０１１０】
さらに、状態Ｂ３において登録されているＢＬＯＢレコードに対して、途中挿入（ｉｎｓｅｒｔ）により更にレコードサイズが増加するか、既に新規作成（ｃｒｅａｔｅ）段階で充分大きなレコードサイズになっている場合か、又は途中挿入（ｉｎｓｅｒｔ）、途中削除（ｃｕｔ）、途中更新（ｕｐｄａｔｅ）、途中読み込み（ｒｅａｄ）といった部分的なアクセスが必要である場合は、このＢＬＯＢレコードに対し、ツリーインデクス操作部２４による操作に基づいて、前述の図６に示すようなツリーインデクスを生成する（状態Ｂ３から状態Ｂ５）。
【０１１１】
その後、逆にＢＬＯＢレコードに対し途中削除（ｃｕｔ）を行なった結果、レコードサイズが充分小さくなるので、ツリーインデクスはオーバーヘッドとなり、再びツリーインデクスは不要とみなされる。これにより、インデクスページ１４ｅに生成されたツリーインデクスを削除される（状態Ｂ５から状態Ｂ３）。
上述のツリーインデクスの生成、削除を行なう際の判断は、レコード操作部２２において、ＢＬＯＢレコードのサイズの基準値に基づいて行なっているが、このサイズの基準値は、インデクスページ１４ｅのサイズが、最小のインデクス構成で冗長にならないような全スライスのサイズの総和の閾値として設定されている。
【０１１２】
なお、最小のインデクス構成であるという条件は、例えばルートとリーフが一致するとともに１個のインデクスページから成り、且つ１ページ内の格納率が０．５とすることができる。
例えば、前述の図６におけるツリーインデクスの場合においては、１個のインデクスページでは２５０個のインデクスを格納できるので、その０．５の格納率の１２５個以上のインデクスを保つようなスライス数（＝インデクス数）であり、その数分のスライスサイズの総和となる。
【０１１３】
即ち、ガベージコレクション制御によりスライスが密に詰められた状態で、１２５個分のインデクスに対応したページの総サイズを閾値としてのサイズとするので、以下に示す式（２）に基づき、５００ＫＢとすることができる。
４ＫＢ×１２５＝５００ＫＢ                                  …（２）
なお、レコードの削除／抹消（ｒｅｍｏｖｅ）を行なう際は、最後のレコードサイズに依存して、ＢＬＯＢレコードと通常レコードの両方の状態から遷移しうる。また、ツリーインデクスが生成されている状態であっても、レコード削除（ｒｅｍｏｖｅ）に伴い、スライスの削除が発生し、その結果の中間の状態遷移としてＴｒｅｅインデクス無しのＢＬＯＢレコードへの状態遷移となる（図７における状態Ｂ５から状態Ｂ３）。
【０１１４】
従って、ページ内の各レコードの、ＢＬＯＢレコードと通常レコードとの区別を記録しておき、この区別に基づき、通常レコードとＢＬＯＢレコードの操作との分岐制御を行なうことができるので、応用処理部２１側において、通常レコードとＢＬＯＢレコードの区別を意識する必要がなく、ファイル管理装置を、データ長を区別しない一貫性のあるインターフェイスとして機能させることができる。
【０１１５】
（ｆ）本実施例におけるファイル管理装置による、レコードの新規作成の際の動作の詳細な説明
図８はレコードの新規作成（ｃｒｅａｔｅ）を行なう際の動作を詳細に説明するためのフローチャートであり、この図８に示すように、まず新規作成に要求されるレコードサイズがページ内に収まるか否かのチェックを行ない（ステップＣ１）、このチェック結果に応じて、データベース１４に格納される際のレコードの種類としての通常レコード又はＢＬＯＢレコードのいずれかが選択される（ステップＣ２）。
【０１１６】
ここで、レコードサイズが１物理ページに収まらず、ＢＬＯＢレコードとして格納することが選択された場合は（ステップＣ２から“ＢＬＯＢレコード”ルート）、ＢＬＯＢレコード操作部２３において、最初にＢＬＯＢレコードに関わる管理情報を作成するとともに、データページ操作部２５の操作により、この管理情報をあたかも通常レコードの如く１物理ページ内に割り当てる（ステップＣ３）。
【０１１７】
その後、実際のデータを格納すべきレコードは、データページ操作部２５の操作により、スライス形式で複数ページ間に分割して格納される。スライス単位の格納は、あたかも１個１個の通常レコードの如くデータページ操作で格納されるが、スライス毎には、制御情報として、スライス間のＲＩＤによるリンク、そのスライスの持つデータのサイズが付加されている（ステップＣ４）。
【０１１８】
次に、ＢＬＯＢレコード操作部２３ａにおいて、ツリーインデクス要のフラグが立っているか否かを判定する（ステップＣ６）。この段階において、ＢＬＯＢレコードが既に巨大化しており、ＢＬＯＢレコード操作部２３ａにおいて、ツリーインデクス要のフラグが立っている場合は（ステップＣ６の“要”ルート）、ツリーインデクス操作部２４の操作により、ツリーインデクスを一括作成する（ステップＣ７）。
【０１１９】
なお、部分的なアクセスの必要性がある場合においても、ツリーインデクスを作成することができるが、新規作成段階では、実際の部分的なアクセス発生をもってその必要性の判断を行なう場合はない。
このように作成された複数スライスの先頭のスライスへのＲＩＤや、ＴｒｅｅインデクスのルートインデクスページへのページアドレスといったＢＬＯＢレコードに関わる情報を、前述のＢＬＯＢ管理情報に返却記録する（ステップＣ８）。
【０１２０】
これにより、データベース１４におけるページ内に割り当てられた各領域への所在を示すレコードエントリには、そのＢＬＯＢレコードの所在と共に、レコードの種類として、通常レコード、ＢＬＯＢ管理情報、スライスの区別が記録されている。
また、ステップＣ２において、レコードサイズが１物理ページに収まる通常レコードである場合は、単にデータページ操作部２５により、１ページ内にレコードを格納し、ＲＩＤをデータベース１４に返却する（ステップＣ９，ステップＣ１０）。
【０１２１】
従って、新規作成されたレコードに対するＲＩＤを返却した結果、通常レコードならばそのＲＩＤはそのままその領域を示し、ＢＬＯＢレコードならばそのＲＩＤはＢＬＯＢ管理情報を示すことになる。
従って、操作に伴ってレコード全体のサイズが変わっても、そのレコード全体のサイズに応じて、通常レコード又はＢＬＯＢレコードとして登録することができるので、応用処理部２１側において、通常レコードとＢＬＯＢレコードの区別を意識する必要がなく、ファイル管理装置を、データ長を区別しない一貫性のあるインターフェイスとして機能させることができる。
【０１２２】
（ｇ）本実施例におけるファイル管理装置による、レコードの途中挿入の際の動作の詳細な説明
図９〜図１２はレコードの途中挿入（ｉｎｓｅｒｔ）を行なう際のレコードの操作の一例とともに、その後の隣接ページのマージの様子を示す図である。
例えば、図９に示すように、ｎ個のスライス１４−１〜１４−ｎからなるＢＬＯＢレコードに対して、ｉ番目のスライス１４−ｉの途中となるオフセットＸから、ｒバイトのデータ３０の挿入を行なう場合においては、まず、目標オフセット位置への位置付け（ｌｏｃａｔｅ）及び押し出されるデータの有無の判定を行なう。
【０１２３】
即ち、図１０に示すように、挿入の開始点となるオフセットが、ｉ番目のスライス１４−ｉの途中に位置付けられると、このオフセット位置Ｘからｒバイト分のデータ３０が挿入されるが、もともとスライス１４−ｉは空き領域がなかったため、挿入されるべき領域にあるｒバイト分のデータは押し出される。
この場合のように、押し出されるデータがある場合は、新規スライス領域３１を確保しておき、押し出されるデータをその新規スライス領域３１に退避させてから、スライス１４−ｉにおける空いた領域に、新データを挿入する。
【０１２４】
即ち、図１１に示すように、オフセット位置Ｘからｒバイト分のデータ３０の挿入に伴い、ｉ番目のスライス１４−ｉ内に存在するデータｒバイト分のデータが、新規に設定されたページ上の新たなスライス領域３１として押し出され、元のｉ番目のスライス１４−ｉの直後のｉ＋１番目だったスライス１４−（ｉ＋１）のデータが、新規生成されたスライス領域の後ろにマージされる。
【０１２５】
ここで、図１２に示すように、ｉ＋１番目だったスライス１４−（ｉ＋１）内の全てのデータが、新規スライス上にマージできれば、ｉ＋１番目だったスライスは空となり削除することができ、新規スライスを新しいｉ＋１番目のスライス１４−（ｉ＋１）とすることができる。
従って、挿入操作の直後に隣接するページとのマージを行なうことにより、挿入操作によるスライスの増加を抑制することができ、アクセス性能の劣化を防止することができる。
【０１２６】
（ｈ）本実施例におけるファイル管理装置による、レコードの途中削除の際の動作の詳細な説明
図１３〜図１６はレコードの途中削除（ｃｕｔ）を行なう際のレコードの操作の一例とともに、その後の隣接ページのマージの様子を示す図である。
即ち、図１３に示すように、ｎ個のスライス１４−１〜１４−ｎからなるＢＬＯＢレコードに対し、ｉ番目のスライス１４−ｉの途中となるオフセットＸから、ｒ（＝ｋ＋ｍ＋ｎ）バイトの途中削除を行なう場合においては、最初に削除の開始点となるオフセットへの位置付け（ｌｏｃａｔｅ）を行なって、ｉ番目のスライス１４−ｉの途中に位置付ける。
【０１２７】
そして、図１４に示すように、スライス１４−ｉ〜１４−（ｉ＋２）内のデータ削除を行ない、目標全ての削除が終わるまで行なう。即ち、スライス１４−ｉにおけるオフセットＸから最終位置までのｋバイト，スライス１４−（ｉ＋１）における先頭位置から最終位置までのｍバイト及びスライス１４−（ｉ＋２）における先頭のｎバイトを削除する。
【０１２８】
次に、図１５に示すように、空スライス１４−（ｉ＋１）を削除し、スライス１４−ｉとスライス１４−（ｉ＋２）との間のスライス間のリンクを結び直すとともに、スライス１４−（ｉ＋２）内の使用部分（先頭からｎバイトの位置から最終位置までの部分）を、当該スライス１４−（ｉ＋２）の先頭部分に詰め直す。
【０１２９】
最後に、図１６に示すように、元のｉ番目のスライス１４−ｉの開いたスペース（オフセットＸから最終位置までのｋバイト）に、新たなｉ＋１番目のスライス１４−（ｉ＋１）（削除前にｉ＋２番目のスライス１４−（ｉ＋２）だったもの）のデータをマージし、残ったスライス１４−（ｉ＋１）のデータについては、前述の図１５におけるスライス１４−（ｉ＋２）と同様に、先頭位置に詰め直す。
【０１３０】
これにより、削除した結果のページ内に過疎なスライスの増加を抑制することができ、アクセス性能の劣化を抑制することができる。
なお、新たなｉ＋１番目のスライス１４−（ｉ＋１）内でのデータの再度のマージの際に、新たなｉ＋１番目スライス１４−（ｉ＋１）のデータが全てｉ番目のスライス１４−ｉ内に収まれば、この新たなｉ＋１番目のスライスも削除されることになる。
【０１３１】
（ｉ）第１のガベージコレクションの態様の説明
ところで、本実施例にかかるファイル管理装置のＢＬＯＢレコード操作部２３は、詳細には図１７に示すように、総和演算部２３ｃ，比演算部２３ｄ，比率比較部２３ｅ及びガベージコレクション制御部２３ｆをそなえており、ツリーインデクス操作部２４においてツリーインデクスを生成していない場合において、データベース１４におけるスライスの空の領域を整理するガベージコレクション制御を行なうことができるようになっており、このため、ＢＬＯＢレコード操作部２３は、詳細には図１７に示すように、総和演算部２３ｃ，比演算部２３ｄ，比率比較部２３ｅ及びガベージコレクション制御部２３ｆをそなえている。
【０１３２】
ここで、総和演算部２３ｃは、ＢＬＯＢレコードに対するサイズ変更操作が行なわれた後に、当該ＢＬＯＢレコードを構成する全てのスライスについてのスライスサイズの総和を演算するものである。
また、比演算部２３ｄは、総和演算部において演算された総和に対する、スライス１４−１〜１４−ｎの個数ｎとページ単位サイズＰの積Ｄとの比Ｓ／Ｄを演算するものであり、比率比較部２３ｅは、比演算部２３ｄにおいて演算された比Ｓ／Ｄと、予め設定された比率αとを比較するものである。
【０１３３】
さらに、ガベージコレクション制御部２３ｆは、比率比較部２３ｅにおける比率の比較の結果、比演算部２３ｄにおいて演算された比Ｓ／Ｄが予め設定された比率αよりも小さい場合は、データベース１４における全てのスライス１４−１〜１４−ｎについてガベージコレクションを行なうように、データページ操作部２５を介して制御するものである。
【０１３４】
このような構成により、本発明のファイル管理装置では、ツリーインデクス操作部２４においてツリーインデクスを生成しておらず、ｎｅｘｔリンクのみでＢＬＯＢデータが管理されている場合は、以下に示すようにガベージコレクションを行なっている。
ところで、個々のスライスが１ページ丸々のサイズ分のデータを持てば、ＢＬＯＢレコード全体のサイズを満足すべき最小スライス数とすることができる。例えば図１８に示すように、スライス１４−１〜１４−ｎにデータが格納されている場合においては、スライス１４−１〜１４−ｎの個数ｎとページ単位サイズＰの積Ｄ（＝ｎ×Ｐ）が、管理することができるＢＬＯＢレコードの最大サイズである。
【０１３５】
ここで、スライス１４−１〜１４−ｎに格納されているデータの総和が所定の格納率αを下回った場合は、図１８〜図２０に示すように、ＢＬＯＢレコードを構成する全てのスライスに対し、ガベージコレクション制御を行なうことができる。
即ち、図１８に示すように、ＢＬＯＢレコードに対するサイズ変更操作が行なわれた後に、総和演算部２３ｃでは、当該ＢＬＯＢレコードを構成する全てのスライス１４−１〜１４−ｎについてのスライスサイズの総和Ｓを、前述の式（１）に従って演算する。
【０１３６】
比演算部２３ｄでは、総和演算部２３ｃにおいて演算された総和Ｓに対するスライス１４−１〜１４−ｎの個数ｎとページ単位サイズＰの積Ｄ（＝ｎ×Ｐ）との比Ｓ／Ｄを演算する。
そして、比率比較部２３ｅでは、比演算部２３ｄにおいて演算された比Ｓ／Ｄと予め設定された比率α（例えばα＝０．５）と比較し、Ｓ／Ｄがαよりも小さい場合は、スライスに格納されるデータ量が、極度に過疎の状態にあると判定され、ガベージコレクション制御部２３ｆにより、全てのスライス１４−１〜１４−ｎについてガベージコレクションを行なうように制御する。
【０１３７】
ここで、全てのスライス１４−１〜１４−ｎについてガベージコレクションを行なう際においては、例えば図１９におけるスライス１４−１〜１４−３の間のように、隣り合うスライス間において、自スライスとｎｅｘｔアドレスで続くｎｅｘｔスライスとの間でマージすることが行なわれる。
即ち、例えばスライス１４−１の空き領域にスライス１４−２のデータＳ2 及びスライス１４−３のデータの一部Ｓ3-1 がマージされ（図１９の▲１▼参照）、スライス１４−２のように、スライス１４−２が空になると、スライス削除が発生する（図１９の▲２▼参照）。
【０１３８】
なお、スライス１４−３のように、スライス内のデータが空でないものについては、残ったデータＳ3-2 を当該スライス１４−３における先頭部分に詰め直す（図１９の▲３▼参照）。
以後、続くスライス１４−４〜１４−ｎについても、上述の▲１▼〜▲３▼における処理と同様のガベージコレクションを行なうことにより、図２０に示すような総スライス数がｍ（＜ｎ）のスライスとすることができるが、この総スライス数の値ｍは、以下に示す式（３）により表すことができる。
【０１３９】
ｍ＝ＣＥＩＬ（Ｓ／Ｐ）；ＣＥＩＬは小数点以下を切り上げる関数…（３）
従って、ＢＬＯＢレコード操作部２３により、操作に伴って長大レコード全体のサイズが変わった場合においては、データベース１４におけるスライスの空の領域を整理して、スライス数を減少させることができるので、データベース１４の領域を有効に活用することができる利点がある。
【０１４０】
（ｊ）第２のガベージコレクションの態様の説明
上述の（ｉ）で詳述した第１のガベージコレクションの態様においては、ツリーインデクス操作部２４においてツリーインデクスを生成していない場合に行なわれるガベージコレクション制御について説明したが、第２のガベージコレクションの態様としては、ツリーインデクスが生成されている場合のガベージコレクション制御を行なうこともできる。
【０１４１】
また、この場合においても、上述の（ｉ）における図１７に示すように、ＢＬＯＢレコード操作部２３は、総和演算部２３ｃ，比演算部２３ｄ，比率比較部２３ｅ及びガベージコレクション制御部２３ｆをそなえているが、それぞれの機能は上述の（ｉ）におけるものと異なる。
即ち、総和演算部２３ｃは、メンテナンス部２３ｂにおいて、インデクスに対する修正をした後に、修正されたリーフインデクスページ内における、スライスサイズの総和を演算するものであり、比演算部２３ｄは、総和演算部２３ｃにおいて演算された総和に対する、スライスの個数とページ単位サイズの積との比率を演算するものである。
【０１４２】
また、比率比較部２３ｅは、比率演算部２３ｄにおいて演算された比と、予め設定された比率とを比較するものであり、ガベージコレクション制御部２３ｆは、比率比較部２３ｅにおける比率の比較の結果、比演算部２３ｄにおいて演算された比が予め設定された比率よりも小さい場合は、リーフインデクスページ内におけるインデクスに対応したスライスについてガベージコレクションを行なうように制御するものである。
【０１４３】
このような構成により、本発明のファイル管理装置では、ツリーインデクス操作部２４により、ツリーインデクスが構成されているＢＬＯＢレコードに対するガベージコレクションの動作について、図２１〜図２３を用いて以下に説明する。
即ち、スライス１４−１〜１４−Ｎに対する修正を行なうとともに、メンテナンス部２３ｂにおいてインデクスに対する修正を行なうことにより、図２１に示すようなインデクス１５及びこのインデクス１５に対応するスライス１４−１〜１４−Ｎとなった場合においては、以下に示すようにガベージコレクションを行なうか否かを判定する。
【０１４４】
即ち、総和演算部２３ｃでは、修正されたリーフインデクスページ１５内におけるスライスサイズの総和Ｓを演算し、比演算部２３ｄでは、総和演算部２３ｃにおいて演算された総和Ｓに対する、リーフインデクスページ１５内におけるスライスの個数Ｎとスライスページ単位サイズＰの積Ｄ（＝Ｎ×Ｐ）との比Ｓ／Ｄを演算する。
【０１４５】
ここで、比率比較部２３ｅでは、比演算部２３ｄにおいて演算された比Ｓ／Ｄと予め設定された比率とを比較し、ガベージコレクション制御部２３ｆでは、比率比較部における比率の比較の結果、比演算部２３ｄにおいて演算された比が予め設定された比率α（例えばα＝０．５）よりも小さい場合は、リーフインデクスページ１５内におけるインデクスに対応したスライス１４−１〜１４−Ｎについてガベージコレクションを行なうように制御する。
【０１４６】
即ち、図２２に示すように、リーフインデクスページ１５内のスライス１４−１〜１４−Ｎについてガベージコレクションを行なう際においても、前述の図１９におけるスライス１４−１〜１４−３の間のように、隣り合うスライス間において、自スライスとｎｅｘｔアドレスで続くｎｅｘｔスライスとの間でマージすることが行なわれる。
【０１４７】
ここで、メンテナンス部２３ｂでは、上述の隣り合うスライス間のマージ処理を行なう毎にインデクスページのメンテナンスを行なっている。即ち、例えばスライス削除が生じた場合は、対応するインデクスも削除する。
具体的には、スライス１４−１の空き領域にスライス１４−２のデータＳ2 がマージされ（図２２の▲１▼参照）、空になったスライス１４−２が削除されると（図２２の▲２▼参照）、対応するリーフインデクスページ１５におけるインデクス１５Ａ（サイズＳ2 が格納されている領域）が削除され、インデクスの詰め直しが行なわれる（図２２の▲３▼参照）。
【０１４８】
以後、続くスライス１４−３〜１４−Ｎについても、上述の図２２における▲１▼〜▲３▼における処理と同様のガベージコレクションを行なうことにより、図２３に示すような総スライス数がｍ（≦ｎ）のスライスとすることができる。
これにより、ツリーインデクスを構成するリーフインデクスページ１５内で、ガベージコレクションを行なう対象となるスライス群の範囲をスライス１４−１〜１４−Ｎに限定することができる。
【０１４９】
従って、ＢＬＯＢレコード操作部２３により、操作に伴って長大レコード全体のサイズが変わった場合においては、データベース１４におけるスライスの空の領域を整理して、スライス数を減少させることができるので、データベース１４の領域を有効に活用することができる利点がある。
また、ツリーインデクス操作部２４によりツリーインデクスが生成される場合のように、詰めなおしの対象となるスライス数が多い場合において、ガベージコレクションを行なう対象となるスライス群の範囲を限定することにより、データの入出力負荷を抑制することもできる。
【０１５０】
また、各スライス１４−１〜１４−Ｎの合計サイズは、ガベージコレクションを行なった後も変わらないので、総管理サイズも変わらず、仮にツリーインデクスが複数段により構成されている場合においても、リーフインデクスページのメンテナンス時の、対応する上位インデクスページのメンテナンスを容易にすることができる。
【０１５１】
（ｊ）その他
上述の（ｉ），（ｊ）では、スライスの理想サイズに対する格納率に基づいてガベージコレクションを行なうか否かを判定しているが、本発明によればこれに限定されず、理想スライス数に基づいて上述の判定を行なうことができ、このようにしても前述の（ｉ），（ｊ）と同様の作用効果を得ることができる。
【０１５２】
この場合においては、現在保有サイズ（ＢＬＯＢレコード全体のサイズ）をＳとし、スライスページ単位サイズをＰとすると、理想のスライス数、即ち最小のスライス数Ｍを、以下に示す式（４）のように設定する。
Ｍ＝ＣＥＩＬ（Ｓ／Ｐ）；ＣＥＩＬは小数点以下を切り上げる関数…（４）
これにより、上述の式（４）にて得られた理想スライス数Ｍを用いて、実際のスライス数Ｎに対する理想スライス数Ｍとの比率Ｎ／Ｍと所定の閾値αとを比較し、この比較結果に基づいてガベージコレクションを行なうか否かを判定するのである。
【０１５３】
【発明の効果】
以上詳述したように、本発明によれば、ツリーインデクス操作手段により、長大レコードのインデクスを生成し、長大レコードのアクセスをデータベースとの間で行なうことができるので、管理すべき長大レコードの最大レコードサイズの制約を無くすとともに、高速に部分的アクセスを行なえる利点もある。
【０１５４】
また、本発明によれば、再登録操作部により、操作に伴ってレコード全体のサイズが変わっても、そのレコード全体のサイズに応じて、通常レコード又は長大レコードとして登録することができるので、応用プログラム側において、通常レコードとＢＬＯＢレコードの区別を意識する必要がなく、ファイル管理装置を、データ長を区別しない一貫性のあるインターフェイスとして機能させることができる利点もある。
【０１５５】
さらに、本発明によれば、データページ操作手段のレコード区別記録部により、ページ内の各レコードの、長大レコードと通常レコードとの区別を記録しておき、この区別に基づき、通常レコードと長大レコードの操作との分岐制御を行なうことができるので、前述の場合と同様の利点がある。
【０１５６】
また、本発明によれば、長大レコード操作手段のアクセス開始点決定制御部により、レコード全体に対するオフセットより操作対象となるスライスの開始点を、スライス間のアドレスリンクを順次ナビゲートする方法又は上記木インデクスより求める方法のいずれかにより決定することができるので、レコードの規模とアクセス形態に応じた最適なアクセス手段を選択することができるほか、ファイル管理装置を、応用プログラム側においてデータベース側の環境を意識する必要のない独立性のあるインターフェイスとして機能することができる利点もある。
【０１５７】
さらに、本発明によれば、ツリーインデクス操作手段では、長大レコード全体のサイズの対する予め決められたしきいサイズとの大小関係又は部分的なアクセスの要否によりツリーインデクスを動的に増減して更新，作成又は削除を行なうことができるので、データベースの領域を有効に活用しながら、管理すべき長大レコードの最大レコードサイズの制約を無くすとともに、高速に部分的アクセスを行なえる利点もある。
【０１５８】
また、本発明によれば、長大レコード操作手段により、操作に伴って長大レコード全体のサイズが変わった場合においては、データベースにおけるスライスの空の領域を整理して、スライス数を減少させることができるので、前述の場合と同様に、データベースの領域を有効に活用することができる利点がある。
【０１５９】
さらに、本発明によれば、長大レコード操作手段により、ガベージコレクションを行なう際に、詰めなおしの対象となるスライス数が多い場合において、ガベージコレクションを行なう対象となるスライス群の範囲を限定することにより、入出力負荷を抑制することができる利点もある。
【図面の簡単な説明】
【図１】第１の発明の原理ブロック図である。
【図２】第２の発明の原理ブロック図である。
【図３】本実施例にかかるファイル管理装置が適用されたシステムを示すブロック図である。
【図４】本実施例にかかるファイル管理装置を文書編集システムを起動する応用プログラムに適用した場合の動作を説明するためのフローチャートである。
【図５】本実施例にかかるファイル管理装置の適用されたデータベースの詳細を示すブロック図である。
【図６】本実施例にかかるデータベースにおけるスライスとインデクスの関係を示す図である。
【図７】本実施例にかかるデータベースの状態遷移を説明するための図である。
【図８】本実施例にかかるデータベースにおけるレコードの新規作成を行なう際の動作を詳細に説明するためのフローチャートである。
【図９】本実施例にかかるデータベースにおけるレコードの途中挿入を行なう際のレコードの操作の一例とともに、その後の隣接ページのマージの様子を示す図である。
【図１０】本実施例にかかるデータベースにおけるレコードの途中挿入を行なう際のレコードの操作の一例とともに、その後の隣接ページのマージの様子を示す図である。
【図１１】本実施例にかかるデータベースにおけるレコードの途中挿入を行なう際のレコードの操作の一例とともに、その後の隣接ページのマージの様子を示す図である。
【図１２】本実施例にかかるデータベースにおけるレコードの途中挿入を行なう際のレコードの操作の一例とともに、その後の隣接ページのマージの様子を示す図である。
【図１３】本実施例にかかるデータベースにおけるレコードの途中削除を行なう際のレコードの操作の一例とともに、その後の隣接ページのマージの様子を示す図である。
【図１４】本実施例にかかるデータベースにおけるレコードの途中削除を行なう際のレコードの操作の一例とともに、その後の隣接ページのマージの様子を示す図である。
【図１５】本実施例にかかるデータベースにおけるレコードの途中削除を行なう際のレコードの操作の一例とともに、その後の隣接ページのマージの様子を示す図である。
【図１６】本実施例にかかるデータベースにおけるレコードの途中削除を行なう際のレコードの操作の一例とともに、その後の隣接ページのマージの様子を示す図である。
【図１７】本実施例にかかるファイル管理装置のＢＬＯＢレコード操作部を詳細に示すブロック図である。
【図１８】本実施例にかかるファイル管理装置における、ツリーインデクスを生成していない場合におけるガベージコレクション制御を説明する図である。
【図１９】本実施例にかかるファイル管理装置における、ツリーインデクスを生成していない場合におけるガベージコレクション制御を説明する図である。
【図２０】本実施例にかかるファイル管理装置における、ツリーインデクスを生成していない場合におけるガベージコレクション制御を説明する図である。
【図２１】ツリーインデクスが構成されている場合におけるＢＬＯＢレコードに対するガベージコレクション制御を説明する図である。
【図２２】ツリーインデクスが構成されている場合におけるＢＬＯＢレコードに対するガベージコレクション制御を説明する図である。
【図２３】ツリーインデクスが構成されている場合におけるＢＬＯＢレコードに対するガベージコレクション制御を説明する図である。
【図２４】本実施例にかかるファイル管理装置を実現するためのヘッダファイルのプログラミング例を示す図である。
【図２５】本実施例にかかるファイル管理装置を実現するためのヘッダファイルのプログラミング例を示す図である。
【図２６】本実施例にかかるファイル管理装置を実現するためのヘッダファイルのプログラミング例を示す図である。
【図２７】本実施例にかかるファイル管理装置を実現するためのヘッダファイルのプログラミング例を示す図である。
【図２８】本実施例にかかるファイル管理装置を実現するためのヘッダファイルのプログラミング例を示す図である。
【図２９】本実施例にかかるファイル管理装置を実現するためのヘッダファイルのプログラミング例を示す図である。
【図３０】本実施例にかかるファイル管理装置を実現するためのヘッダファイルのプログラミング例を示す図である。
【図３１】本実施例にかかるファイル管理装置を実現するためのヘッダファイルのプログラミング例を示す図である。
【図３２】本実施例にかかるファイル管理装置を実現するためのヘッダファイルのプログラミング例を示す図である。
【図３３】本実施例にかかるファイル管理装置を実現するためのヘッダファイルのプログラミング例を示す図である。
【図３４】本実施例にかかるファイル管理装置を実現するためのヘッダファイルのプログラミング例を示す図である。
【図３５】本実施例にかかるファイル管理装置を実現するためのヘッダファイルのプログラミング例を示す図である。
【図３６】本実施例にかかるファイル管理装置を実現するためのヘッダファイルのプログラミング例を示す図である。
【図３７】一般的なファイル管理装置によるＢＬＯＢレコードのアクセス手法を示す図である。
【図３８】一般的なファイル管理装置によるＢＬＯＢレコードのアクセス手法を示す図である。
【符号の説明】
１ａ，１ｂ  ファイル管理装置
２ａ，２ｂ  レコード操作手段
３ａ，３ｂ  長大レコード操作手段
３ｂ−１  アクセス開始点決定制御部
３ｂ−２  メンテナンス部
４ａ  通常レコード操作手段
４ｂ  データページ操作手段
５ａ  インデクス操作手段
５ｂ  木インデクス操作手段
６ａ，６ｂ  データベース
１１  ディスプレイ装置
１２  キーボード
１３  中央処理装置／主記憶装置
１４  データベース
１４−１〜１４−ｎ，１４−Ｎ  スライス
１４ａ  レコードエントリ
１４ｂ  通常レコード
１４ｃ  ＢＬＯＢ管理情報
１４ｄ  インデクスページ
１４ｄ−１〜１４ｄ−３  インデクス群
１４ｅ  データページ
１５，１５Ａ  インデクス
２１  応用処理部
２２  レコード操作部（レコード操作手段）
２２ａ  操作要求部
２２ｂ  再登録操作部
２３  ＢＬＯＢレコード操作部（長大レコード操作手段）
２３ａ  アクセス開始点決定制御部
２３ｂ  メンテナンス部
２３ｃ  総和演算部
２３ｄ  比演算部
２３ｅ  比率比較部
２３ｆ  ガベージコレクション制御部
２４  ツリーインデクス操作部
２４ａ  インデクスページ操作部
２４ｂ  インデクスページ間操作部
２５  データページ操作部（データページ操作手段）
２５ａ  レコード区別記録部
２６  ページバッファ
３０  挿入データ
３１  新規スライス領域
１０１  レコード
１０１−１〜１０１−ｎ  スライス
１０２  ページ
【図１】
0003703874.tif 000003
【図２】
0003703874.tif 000004
【図３】
0003703874.tif 000005
【図４】
0003703874.tif 000006
【図５】
0003703874.tif 000007
【図６】
0003703874.tif 000008
【図７】
0003703874.tif 000009
【図８】
0003703874.tif 000010
【図９】
0003703874.tif 000011
【図１０】
0003703874.tif 000012
【図１１】
0003703874.tif 000013
【図１２】
0003703874.tif 000014
【図１３】
0003703874.tif 000015
【図１４】
0003703874.tif 000016
【図１５】
0003703874.tif 000017
【図１６】
0003703874.tif 000018
【図１７】
0003703874.tif 000019
【図１８】
0003703874.tif 000020
【図１９】
0003703874.tif 000021
【図２０】
0003703874.tif 000022
【図２１】
0003703874.tif 000023
【図２２】
0003703874.tif 000024
【図２３】
0003703874.tif 000025
【図２４】
0003703874.tif 000026
【図２５】
0003703874.tif 000027
【図２６】
0003703874.tif 000028
【図２７】
0003703874.tif 000029
【図２８】
0003703874.tif 000030
【図２９】
0003703874.tif 000031
【図３０】
0003703874.tif 000032
【図３１】
0003703874.tif 000033
【図３２】
0003703874.tif 000034
【図３３】
0003703874.tif 000035
【図３４】
0003703874.tif 000036
【図３５】
0003703874.tif 000037
【図３６】
0003703874.tif 000038
【図３７】
0003703874.tif 000039
【図３８】
0003703874.tif 000040