(57)【要約】  コンピューティングデバイス内で、データオブジェクトを記憶し修正するためのデータ処理システムの一実施形態であり、データオブジェクトの記憶空間内でデータを直接挿入しまたは除去することにより、データオブジェクトを修正する。データオブジェクトは、固定長または可変長のものとすることができる。データオブジェクトは、ネストすることができる。データオブジェクトの長さ、名前、データタイプ、値、および構成は修正することができる。他の実施形態についても説明し、図示する。
2014504381.tif 000002
【特許請求の範囲】
【請求項１】
データを処理するための方法であって、
ａ．データを記憶するためのいくつかの順次的な論理アドレスを含む記憶ユニットを提供するステップと、
ｂ．前記記憶ユニット内に記憶される、いくつかの固定長または可変長のデータオブジェクトを提供するステップと、
ｃ．前記記憶ユニット内の前記データを修正するステップであって、前記データの修正は
ｉ．前記記憶ユニット内の所定の論理アドレスに追加の記憶空間を挿入することと、
ｉｉ．前記所定の論理アドレス以降に記憶されるいくつかのデータオブジェクトを、前記記憶ユニット内の新たな論理アドレスに再配置することと、
ｉｉｉ．必要な場合、前記記憶ユニット内に追加のデータを記憶することと、
ｉｖ．１つまたは複数のデータオブジェクトの前記新たなアドレスまたは新たな長さを追跡することと
によって特徴付けられる、ステップと
を含む、方法。
【請求項２】
前記データの修正が、
ａ．前記記憶ユニット内への追加のデータオブジェクトの挿入、または
ｂ．データオブジェクト内へのデータ要素の挿入、または
ｃ．前記記憶ユニットからのデータオブジェクトの除去、または
ｄ．ネストされたデータオブジェクトの、その親データオブジェクトからの除去、または
ｅ．データオブジェクトの前記長さの修正、または
ｆ．ネストされたデータオブジェクトの前記長さ、およびその親データオブジェクトの前記長さの修正、または
ｇ．データオブジェクトのデータタイプの修正、または
ｈ．データオブジェクトの再命名
の性質を帯びる、請求項１に記載の方法。
【請求項３】
親データオブジェクトのその子データオブジェクトとの関係に加え、データオブジェクトの、前記記憶ユニット内の１つまたは複数の他のデータオブジェクトとの関係が表される、請求項１に記載の方法。
【請求項４】
前記記憶ユニットが、仮想メモリ領域、またはファイル、またはアレイ、またはカウントツリー、または他のデータ構造である、請求項１に記載の方法。
【請求項５】
前記所定の論理アドレス以降に記憶される一部のまたは全てのデータが、
ａ．前記データをコピーすることなしに、または
ｂ．前記データにアクセスすることなしに
前記記憶ユニット内の新たな論理アドレスに再配置される、請求項１に記載の方法。
【請求項６】
ａ．前記記憶ユニットが、いくつかの物理アドレスをさらに含み、
ｂ．前記物理アドレスの１つまたは複数が、前記記憶ユニット内の前記論理アドレスのうちの１つまたは複数に関連し、
ｃ．前記所定の論理アドレス以降に記憶される一部のまたは全てのデータを、前記記憶ユニット内の新たな論理アドレスに再配置することが、
ｉ．１つまたは複数の物理アドレスを、前記記憶ユニット内の１つまたは複数の論理アドレスから切り離し、
ｉｉ．前記１つまたは複数の物理アドレスを、前記記憶ユニット内の１つまたは複数の新たな論理アドレスに再び関連させること
によって行われる、請求項１に記載の方法。
【請求項７】
ａ．前記記憶ユニットが、１つまたは複数の記憶ブロックをさらに含み、
ｂ．前記物理アドレスが、前記記憶ユニット内の１つまたは複数の記憶ブロック内に含まれる
請求項６に記載の方法。
【請求項８】
データを処理するための装置であって、
ａ．データを記憶するためのいくつかの順次的な論理アドレスを含む記憶ユニットと、
ｂ．前記記憶ユニット内に記憶される、いくつかの固定長または可変長のデータオブジェクトと、
ｃ．前記記憶ユニット内の前記データを修正するための装置であって、前記データの修正は
ｉ．前記記憶ユニット内の所定の論理アドレスへの追加の記憶空間の挿入、
ｉｉ．前記所定の論理アドレス以降に記憶されるいくつかのデータオブジェクトの、前記記憶ユニット内の新たな論理アドレスへの再配置、
ｉｉｉ．必要な場合、前記記憶ユニット内への追加のデータの記憶、および
ｉｖ．１つまたは複数のデータオブジェクトの前記新たなアドレスまたは新たな長さの追跡
によって特徴付けられる、装置と
を含む、装置。
【請求項９】
前記データの修正が、
ａ．前記記憶ユニット内への追加のデータオブジェクトの挿入、または
ｂ．データオブジェクト内へのデータ要素の挿入、または
ｃ．前記記憶ユニットからのデータオブジェクトの除去、または
ｄ．ネストされたデータオブジェクトの、その親データオブジェクトからの除去、または
ｅ．データオブジェクトの前記長さの修正、または
ｆ．ネストされたデータオブジェクトの前記長さ、およびその親データオブジェクトの前記長さの修正、または
ｇ．データオブジェクトのデータタイプの修正、または
ｈ．データオブジェクトの再命名
の性質を帯びる、請求項８に記載の装置。
【請求項１０】
親データオブジェクトのその子データオブジェクトとの関係に加え、データオブジェクトの、前記記憶ユニット内の１つまたは複数の他のデータオブジェクトとの関係が維持される、請求項８に記載の装置。
【請求項１１】
前記記憶ユニットが、仮想メモリ領域、またはファイル、またはアレイ、またはカウントツリー、または他のデータ構造である、請求項８に記載の装置。
【請求項１２】
前記所定の論理アドレス以降に記憶される一部のまたは全てのデータが、
ａ．前記データをコピーすることなしに、または
ｂ．前記データにアクセスすることなしに
前記記憶ユニット内の新たな論理アドレスに再配置される、請求項８に記載の装置。
【請求項１３】
ａ．前記記憶ユニットが、いくつかの物理アドレスをさらに含み、
ｂ．前記物理アドレスの１つまたは複数が、前記記憶ユニット内の前記論理アドレスのうちの１つまたは複数に関連し、
ｃ．前記所定の論理アドレス以降に記憶される一部のまたは全てのデータを、前記記憶ユニット内の新たな論理アドレスに再配置することが、
ｉ．１つまたは複数の物理アドレスを、前記記憶ユニット内の１つまたは複数の論理アドレスから切り離し、
ｉｉ．前記１つまたは複数の物理アドレスを、前記記憶ユニット内の１つまたは複数の新たな論理アドレスに再び関連させること
によって行われる、請求項８に記載の装置。
【請求項１４】
ａ．前記記憶ユニットが、１つまたは複数の記憶ブロックをさらに含み、
ｂ．前記物理アドレスが、前記記憶ユニット内の１つまたは複数の記憶ブロック内に含まれる
請求項１３に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータおよび他の電子装置上のデータオブジェクトを組織化することに関する。より詳細には、本発明は、データオブジェクトおよびネストされたデータオブジェクトを構成すること、ならびにデータオブジェクトおよびネストされたデータオブジェクトの中に可変長データを実行時に挿入し除去することに関する。
【背景技術】
【０００２】
コンピュータや他の電子装置などのデータ処理システムは、データオブジェクトをメモリ領域、ファイルやファイル領域、データ構造など、その記憶ユニット内に記憶する。
【０００３】
データオブジェクトは、論理的な方法で組織化されるいくつかのデータ要素を含む。データ要素は、一次データオブジェクトまたは複合データオブジェクトとすることができる。それ自体が他のデータオブジェクトの要素であるデータオブジェクトを子データオブジェクトまたはネストされたデータオブジェクトと呼び、もう一方のデータオブジェクトを親データオブジェクトと呼ぶ。
【０００４】
データを構成するために、データオブジェクトと、そのデータオブジェクトへのポインタとを区別する。したがって、
ｉ．データオブジェクトを、他のデータオブジェクトの記憶空間内に記憶することができる。その場合、そのデータオブジェクトは、子データオブジェクトまたはネストされたデータオブジェクトと呼ばれる。
ｉｉ．あるいは、データオブジェクトは、それ自体の記憶空間内に記憶してもよい。そのデータオブジェクトのポインタ、参照、ハンドル、または他のアドレスが他のデータオブジェクト内に記憶される。したがって、そのデータオブジェクトは他のデータオブジェクトの要素ではない。代わりに、それらのポインタ、参照、ハンドル、または他のアドレスが、他のデータオブジェクト内の子データオブジェクトまたはネストされたデータオブジェクトである。
【０００５】
データオブジェクトは、小さくても大きくてもよい。データオブジェクトの一例は、Ｃ言語における「構造体」である。データ構造およびファイル構造も、データオブジェクトであり得る。いくつかのデータ表およびインデックスを含むデータベースは、データオブジェクトのもう１つの例である。データオブジェクトによって要求されまたは使用される記憶空間の量を、データオブジェクトのサイズまたは長さと呼ぶ。
【０００６】
記憶ユニットは、論理アドレス空間内に、データを記憶するためのいくつかの順次アドレスを備える。データオブジェクトは、メモリ領域、ファイルなどの記憶ユニット内に記憶することができる。一部のデータ構造（例えばアレイ）も、データを記憶するためのいくつかの順次的な論理アドレスを備え、データオブジェクトをその中に記憶できる記憶ユニットとして使用することができる。
【０００７】
記憶ユニットは、メモリ内のページやディスク上のセクタやクラスタなどの、物理アドレス空間も有する。一部の事例では、物理アドレスは論理アドレスと同じ場合がある。しかし他の事例では、物理アドレスは論理アドレスと異なる。そのような場合、データにアクセスできるようにするために、物理アドレスと論理アドレスとの間の関連付けが保たれる。
【０００８】
記憶空間は実行時にどのように割り当てられるのか
既存のデータオブジェクトを修正することを含む、データオブジェクトを動的に構成することは追加の記憶空間を必要とする。使用可能な記憶空間、または未使用の記憶空間は、以下のようにいくつかの場所で見つけることができる。
１．未使用記憶空間は、新たな記憶ユニットを作成することにより割り当てることができる。したがって、記憶空間を提供するために、新たなメモリ領域または新たなファイル等を作成することができる。
２．未使用記憶空間は、その目的で予備空間が確保されている場合、データオブジェクト内で見つけることができる。
３．未使用記憶空間は、ヒープまたは他のヒープライク（ｈｅａｐ−ｌｉｋｅ）な動的記憶域マネージャによって提供することができる。ヒープは、大きなメモリ領域で構成され、そのメモリ領域から、可変長データオブジェクトを記憶するためのいくつかのより小さな小領域を割り当てる。したがって、
ａ．Ｃ言語は、ヒープから数バイト割り当てるための「ｍａｌｌｏｃ」関数を提供する。
ｂ．多くのファイル構造では、ヒープライクなメモリマネージャが、未使用の記憶領域を追跡し、記憶空間を動的に提供するために使用される。
４．未使用記憶空間は、論理アドレス空間の末尾に割り当てることができる。例えば、
ａ．ファイルの末尾にある記憶空間を使用することにより、テキストファイル内にいくつかの行を挿入することができる。
ｂ．多くのＣコンパイラは、プロセススタックの最上部の可変長メモリ領域を割り当てるために使用される「ａｌｌｏｃａ」関数を実装する。
【０００９】
メモリを割り当てるためのこれらの方法のそれぞれには、欠点がある。使用する方法の選択は、データ長、データに対して頻繁に行われることが予期される操作の種類、および速度の必要性によって決まる。
【００１０】
データオブジェクトを構成するための方法
データオブジェクトを構成するためのいくつかの方法が存在する。方法の選択は、記憶する必要があるデータの特性、およびデータに対して行われることが予期される操作によって通常決まる。既存の各データ構成方法には長所と短所がある。短所がない既存の方法はない。データオブジェクトがネストされる場合、さらなる厄介な問題が生じる。方法の利点の多くは、データオブジェクトがネストされる場合は利用できない可能性がある。
【００１１】
システムの効率は、データオブジェクトを構成するために使用する方法、とりわけ既存のデータオブジェクトを修正することを含む、動的に構成するために使用する方法次第である。
【００１２】
親データオブジェクトに対するデータ要素の配置、または親データオブジェクト内の他のデータ要素に対するデータ要素の配置はかなり重要である。システム内でデータオブジェクトがよく組織化されている場合、そのシステムは、より優れた効率で機能することができる。
【００１３】
一部の既存のデータ構成方法は、システム内でデータオブジェクトの最適化された配置を行うが、データオブジェクトの動的な構成または実行時の修正については、初歩的なサポートしか提供せず、またはサポートを提供しない。他の方法は、データオブジェクトの動的な構成および実行時の修正を効率的に行うが、データオブジェクトの最適化された配置を行うことができない。
【００１４】
データオブジェクトの動的な構成および修正は、多くの理由により困難である。それらの理由の一部を以下に記す。
ｉ．データオブジェクト内で可変長データ要素を維持する必要がある。
ｉｉ．データオブジェクト内で可変数のデータ要素を維持する必要がある。
ｉｉｉ．ネストされたデータオブジェクトを含め、データオブジェクト内で実行時にデータ要素を挿入しまたは除去する必要がある。
ｉｖ．高水準の動作効率を維持する必要がある。
ｖ．利用可能な記憶空間を賢明に使用する必要がある。
ｖｉ．システムを誤りなしに維持する必要がある。
ｖｉｉ．ダイナミックメモリの割当て後、データの配置の順序を維持する必要がある。
ｖｉｉｉ．ダイナミックメモリを割り当てるためのそれぞれの方法には、欠点がある。
【００１５】
したがって、データオブジェクトを構成するための新たな方法が必要である。
【００１６】
データオブジェクトを構成するための方法について、いくつかの文献が記載している。例えば以下のものがある。
ｉ．「Ｔｈｅ‘Ｃ’Ｐｒｏｇｒａｍｍｉｎｇ  Ｌａｎｇｕａｇｅ」、ＫｅｒｎｉｇｈａｎおよびＲｉｔｃｈｉｅ著は、Ｃ言語でデータオブジェクトを構成するための方法について記載する。
ｉｉ．文献「Ｄａｔａ  Ｓｔｒｕｃｔｕｒｅｓ  ａｎｄ  Ａｌｇｏｒｉｔｈｍｓ」、Ａｈｏ、Ｈｏｐｃｒｏｆｔ、およびＵｌｌｍａｎ著は、データ構造を構成するための方法について記載する。
ｉｉｉ．文献「Ｆｉｌｅ  Ｓｔｒｕｃｔｕｒｅｓ，  Ａｎ  Ｏｂｊｅｃｔ−Ｏｒｉｅｎｔｅｄ  Ａｐｐｒｏａｃｈ  ｗｉｔｈ  Ｃ＋＋」、Ｆｏｌｋ、Ｚｏｅｌｌｉｃｋ、およびＲｉｃｃａｒｄｉ著は、ディスクまたはファイル内に記憶するためのデータオブジェクトを構成するための方法について記載する。
【００１７】
データを構成するために一般に使用されるいくつかの方法を以下で論じる。
【００１８】
１．固定された同じサイズのデータオブジェクト
データオブジェクトを構成する一般に使用される方法によれば、記憶ユニット内の連続した論理アドレスに、いくつかの固定された同じサイズのデータオブジェクトが記憶される。この方法は、データオブジェクトのリストを維持するのに有用である。
【００１９】
この方法の一例は、Ｃプログラミング言語における「アレイ」である。もう１つの例は、いくつかの固定長レコードを含む、ファイル内に記憶されるデータ表である。レコードの相対位置は、先行するレコード数をレコードサイズと掛けることによって決められる。この方法は、データオブジェクトの直接アクセスを可能にする。この方法のさらに別の一例は、いくつかの固定された同じサイズのエントリが記憶されるｂツリーノードである。
【００２０】
各要素の長さおよび相対アドレスが分かっているか、それらを容易に求めることができるので、この方法では、データ要素の長さまたはアドレスを追跡する必要はない。
【００２１】
データオブジェクト内でデータを挿入しまたは除去することは、記憶ユニットのサイズを拡張でき、データオブジェクトが記憶ユニット内の他のデータオブジェクトによって制限されない場合に行うことができる。したがって、
ｉ．いくつかの追加エントリをｂツリーノード内に挿入できるが、その目的でｂツリーノード内に確保される予備空間の量によって制限される。
ｉｉ．それ自体のファイル内に記憶されるデータ表の中に追加のレコードを挿入することができる。
【００２２】
この方法は、いくつかの欠点を有する。それらの一部を以下に記す。
ｉ．前もってその目的で確保される任意の記憶空間を超えるデータの挿入はできない。さらに、データオブジェクトを記憶するために境界のない論理アドレス空間を設けることは、必ずしも可能または有利とは限らない。
ｉｉ．データオブジェクトが固定された等しいサイズのものでない場合、この方法は不適当である。
ｉｉｉ．この方法は、データオブジェクト間の関係（親−子関係や他の関係など）を確立しない。
【００２３】
したがって、この方法は、データオブジェクト、とりわけネストされたデータオブジェクトを構成するのに不適当である。
【００２４】
２．区切りデータ
別の方法によれば、記憶ユニット内の連続した論理アドレスに、いくつかの可変長データオブジェクトが記憶される。各データオブジェクトは、「分離記号」または「区切り記号」により、その隣接するデータオブジェクトから隔てられもしくは区切られる。
【００２５】
例えば、
ｉ．テキストファイルでは、「改行」文字を使用して、ある行を別の行と分ける。
ｉｉ．コンマ区切りファイルでは、コンマまたは他の区切り記号を使用してフィールドを区切る。
ｉｉｉ．ｂツリーノードでは、区切り記号により、可変長エントリを他のエントリと分けることができる。
ｉｖ．ｘｍｌドキュメントでは、分離記号として「＜」および「／＞」タグが使用される。
【００２６】
追加データを挿入することは、データオブジェクトが、ファイルなどの境界のないアドレス空間内に記憶される場合に行うことができる。あるいは、挿入は、データ内に予備の記憶空間が確保されている場合に行うことができる。テキストファイル内で文字を挿入しまたは除去すると、ファイル内のその後の行が、より高位のまたはより低位の論理アドレスに移される。
【００２７】
この方法は、いくつかの欠点を有する。それらの一部を以下に記す。
ｉ．「分離記号」がデータオブジェクトと混同されないことを保証する必要がある。
ｉｉ．前もってその目的で確保される任意の記憶空間を超える、境界のないデータオブジェクト内のデータの挿入および除去はできない。多くの場合、境界のないアドレス空間をデータオブジェクトに与えることは可能でも有利でもない。したがって、ｂツリーノード内へのエントリの挿入は、ｂツリーノードのサイズによって限定される。
ｉｉｉ．データ要素の相対アドレスまたは長さは追跡されず、また容易に分かることもない。そのためこの方法は、データオブジェクトへの直接アクセスを提供しない。例えば、テキストファイルでは、所定の行にアクセスするために改行文字をスキャンする必要がある。したがって、この方法は、データが頻繁に修正されることが予期され、データ量が多く、またはシステム効率が極めて重要な場合は不適当である。
ｉｖ．この方法は、たとえデータオブジェクト間の関係がデータ内に記載される場合があっても、データオブジェクト間の関係を確立しない。したがって、データオブジェクトの他のデータオブジェクトとの関係（親−子関係など）を容易に推測できず、そのような関係を求める前に全データをスキャンする必要がある。
【００２８】
３．データタイプに基づく組織化
別の方法によれば、システムが、データオブジェクトに関する「データタイプ」または「データテンプレート」を維持する。データタイプは、データオブジェクト内にいくつかのデータ要素を記憶するための記憶パターンを提供する。記憶パターンは、データ要素のアドレスを求めるために使用される。
【００２９】
この方法は、多くのプログラミング言語で使用される。この方法の一例は、「Ｃ」言語プログラムにおける構造体である。この方法は多くのファイル構造でも使用される。データ要素に割り当てられる記憶空間は、データオブジェクト内の他のデータ要素に割り当てられる記憶空間と等しくない場合がある。システムは、データ要素の直接アクセスを提供する。データ要素のアドレスおよび長さは固定されており、そのためデータ要素の長さまたは相対アドレスを追跡する必要はない。この方法は、ネストされたデータオブジェクトの構成を可能にする。
【００３０】
この方法は、限られた量の可変長データを管理する能力を提供する。典型的には、可変長データ要素を記憶するための適度に大量の記憶空間が確保される。例えば、「生徒」データタイプは、生徒の名前を記憶するための３０文字幅のフィールドを含むことができる。しかし、これには多くの欠点がある。それらの欠点の一部を以下に記す。
ｉ．記憶空間の量を前もって推定する必要がある。
ｉｉ．確保した記憶空間が大きすぎる場合、記憶空間を無駄にすることになる。
ｉｉｉ．記憶する必要があるデータ量が確保した空間よりも大きい場合、データを記憶し損なうことになる。
【００３１】
４．長さまたはアドレスの追跡
別の方法によれば、データオブジェクト内のいくつかの可変長データ要素が、データオブジェクトの記憶空間内のいくつかのアドレスに記憶される。
【００３２】
データ要素の長さを追跡することにより、データ要素への直接アクセスが提供される。あるいは、各要素のアドレスを追跡する。理解され得るように、これらの２つの方法は等価であり、データをスキャンすることなしにデータ要素にアクセスできるようにする、同じ機能を実行する。データ要素の長さまたはアドレスを追跡するために、アドレス、オフセット、長さ、累積長さ、データオフセット、または他の関連情報を記憶することができる。
【００３３】
例えばｂツリーノードでは、いくつかの可変長エントリを記憶することができる。いくつかの方法でこれを行うことができ、その一部を以下に記す。
ｉ．各エントリの始めに長さインジケータを記憶する。
ｉｉ．全エントリの長さインジケータをノード内に記憶し、その後にエントリが続く。
ｉｉｉ．エントリのオフセットをノード内に記憶し、その後にエントリが続く。
ｉｖ．エントリの累積長さをノード内に記憶し、その後にエントリが続く。
【００３４】
予備の記憶空間がその目的で維持されている場合、限られた量のデータをデータオブジェクト内で挿入しまたは除去することができる。したがって、既存のデータオブジェクト内で、いくつかの追加のデータ要素を付加し、挿入し、または除去することができる。また、データ要素の長さは随時増すことも減らすこともできる。この方法は、ｂツリーノード内の可変数のエントリを維持するために、一部のｂツリーで使用される。
【００３５】
この方法にはいくつかの欠点がある。それらの欠点の一部を以下に記す。
ｉ．必要な予備空間の量を前もって推定する必要がある。
ｉｉ．予備空間が大きすぎる場合、記憶空間を無駄にすることになる。
ｉｉｉ．記憶する必要があるデータ量が予備空間よりも大きい場合、データを記憶し損なうことになる。
【００３６】
５．アレイに基づくデータオブジェクトの組織化
別の方法によれば、線形記憶空間内にいくつかのデータオブジェクトが記憶される。データオブジェクトが他のいくつかのデータオブジェクトに関係するように、データオブジェクト間の関係が確立される。
【００３７】
例えば、Ａｈｏ、Ｈｏｐｃｒｏｆｔ、およびＵｌｌｍａｎは、線形配列でツリーデータ構造を構成するための方法について記載している（文献「Ｄａｔａ  Ｓｔｒｕｃｔｕｒｅｓ  ａｎｄ  Ａｌｇｏｒｉｔｈｍｓ」、Ａｄｄｉｓｏｎ  Ｗｅｓｌｅｙ  Ｐｕｂｌｉｓｈｉｎｇ  Ｃｏｍｐａｎｙ、１９８３年、８４項内の「Ａｎ  Ａｒｒａｙ  Ｒｅｐｒｅｓｅｎｔａｔｉｏｎ  ｏｆ  Ｔｒｅｅｓ」の節を参照されたい）。著者らは、ツリーを走査するための方法についても記載している。ここでは、ツリー内のノードの、ツリー内のいくつかの子ノードとの関係が示されている。
【００３８】
一部の事例では、ファイルの末尾に新たなデータを記憶することにより、データの挿入および除去が行われる。したがって、例えばファイル内のレコードの中の「生徒」フィールドは、
ｉ．より大きい新規フィールドを記憶するために、ファイルの末尾に新たなデータ領域を割り当て、
ｉｉ．ファイル内のデータオブジェクトの中の既存フィールドを無効化し、
ｉｉｉ．その場所に、ファイルの末尾にある新たなデータ領域へのポインタを記憶すること
により、より大きなフィールドで置き換えることができる。
【００３９】
しかし、この方法を使用してデータを挿入および除去することには、以下のいくつかの欠点がある。
ｉ．この方法は、データを修正する度にいくつかの小さなデータ領域を作り、データにアクセスする際の効率の悪さの原因となる。
ｉｉ．この方法の結果として参照の局所性は保たれず、多数のページフォルトおよびキャッシュミス、ならびにシステム動作の効率の悪さを招く。
ｉｉｉ．データを修正するとき、ファイル内にいくつかの未使用の、無効化されたデータ領域が作成される。
ｉｖ．データが、その最適な方法で維持されない。修正する度に、ますます多くの乱れがデータ内に取り入れられる。
ｖ．動作の効率を取り戻すために、データを新たなファイルに適切な順序で周期的に書き換えなければならない。
【００４０】
６．データオブジェクトの再作成
この方法によれば、新たなデータ要素が挿入され、除去され、または修正されるときにデータオブジェクトを再作成することにより、そのデータオブジェクトは可変長データを維持することができる。例えば、
ｉ．Ｃ言語では、アレイは固定数の要素を記憶することができる。追加の要素を挿入するために、新たなメモリ空間を割り当てることにより、新たなアレイが作成される。次いで、元のアレイ内のいくつかの既存の要素が、新たな要素とともに新たなアレイにコピーされる。その後、元のアレイは通常破棄され、代わりに新たなアレイが使用される。
ｉｉ．ファイル内にデータ要素を挿入するために、元のファイルのコンテンツを新たなデータ要素とともに新たなファイルにコピーすることができる。その後、元のファイルは通常破棄され、代わりに新たなファイルが使用される。
【００４１】
この方法は、大量のデータにアクセスし、または大量のデータをコピーするものであるため効率が悪い。
【００４２】
上記に挙げた欠点の結果として、上述の方法のそれぞれは、データオブジェクト、とりわけネストされたデータオブジェクトまたは大きいデータオブジェクトを動的に構成するのに適さない。
【００４３】
７．ヒープに基づくデータ記憶
別の方法によれば、ヒープから割り当てられた記憶空間を使用して可変長データが記憶される。データオブジェクトは、データ自体は記憶しない。代わりに、データオブジェクトは、データへのポインタ、参照、または他のハンドルを記憶する。データの構成において、ポインタ、参照、または他のハンドルは、データオブジェクト内の子要素である。
【００４４】
したがって、この方法は、データオブジェクト内に可変長データを記憶する能力を提供する。前もってデータ長が分かっている必要はない。したがってこの方法は、上記で論じた他の方法よりも順応性がある。
【００４５】
この方法は多くのファイル構造でも使用される。この方法のもう１つの例は、ファイル内のｂツリーの組織化である。ｂツリーでは、動的に割り当てられる記憶空間を提供するために、ヒープライクな動的メモリマネージャを使用して未使用の記憶領域を追跡する。
【００４６】
しかし、この方法もいくつかの欠点を有する。それらの欠点の一部を以下に記す。
ｉ．この方法は、ヒープ内の未使用の記憶領域を管理することを必要とする。
ｉｉ．この方法が要求するデータ要素の管理および追跡は、多くの障害の原因である。
ｉｉｉ．この方法は、記憶空間の断片化、ならびにページフォルトおよびキャッシュミスの増加を招き、それによりシステムを遅くする。
ｉｖ．参照の局所性が保たれず、それにより効率の悪さを招く。
ｖ．この方法は、使用できない記憶空間の領域を作成することになる。
ｖｉ．データをその最適な位置に記憶することは通常できない。
【発明の概要】
【発明が解決しようとする課題】
【００４７】
本発明の目的は、以下で論じるようにいくつかのデータオブジェクトを記憶し、いくつかの操作をその中で実行できるデータ処理システムを提供することである。データ処理システム内のデータオブジェクトは、いくつかの固定長または可変長のデータ要素を含む。データオブジェクトはネストすることができる。データオブジェクト内のデータ要素への直接アクセスが提供される。データオブジェクト内のデータ要素は、そのインデックスまたは名前によってアクセスすることができる。
【課題を解決するための手段】
【００４８】
本発明によれば、データオブジェクトを構成し、データオブジェクト内に記憶空間を挿入しまたは除去することにより、実行時にデータオブジェクトを修正するための方法が提供される。この方法はヒープを必要としない。この方法は、予備の記憶空間を確保することも必要としない。この方法は、論理的かつ効率的な順序で、データオブジェクト内のデータ要素を配置できるようにする。いくつかのデータ要素を挿入しまたは除去した後でさえ、参照の局所性が保たれる。
【００４９】
データオブジェクトの長さ、データタイプ、名前、または値は、随時修正することができる。いくつかのデータ要素を、データオブジェクト内で挿入しまたは除去することもできる。修正は、ネストされたデータオブジェクト内でも行うことができる。この方法は、データオブジェクトと、１つまたは複数の他のデータオブジェクトとの間の関係を表し、維持する能力を提供する。
【発明の効果】
【００５０】
本発明にはいくつかの利点がある。
ｉ．この方法は、ポインタを使用する必要なしに可変長データを記憶する能力を提供する。データオブジェクトは、可変数のデータ要素を含むことができる。データオブジェクトの長さは、都度異なり得る。データ要素のサイズは、固定される必要も等しい必要もない。
ｉｉ．この方法は、ネストされたデータオブジェクト内のデータの挿入および除去をサポートする。追加データの挿入をサポートするために、予備空間を確保する必要はない。
ｉｉｉ．この方法は、データ要素を、その最適な位置に記憶することをサポートする。
ｉｖ．この方法は、システムがより効率的に実行されることを可能にする。
ｖ．この方法は、データを挿入しまたは除去した後でさえ、データ要素の直接アクセスを可能にする。
ｖｉ．この方法は、データ要素の名前またはインデックスにより、そのデータ要素にアクセスできるようにするのに有用である。
ｖｉｉ．断片化、ページフォルト、およびキャッシュミスが減る。データを挿入しまたは除去した後でさえ、参照の局所性が維持される。
ｖｉｉｉ．動的に割り当てられる記憶空間を維持し、または管理する必要がない。
ｉｘ．ヒープ内の使用できない記憶領域の問題が低減する。
ｘ．この方法は、データ要素のデータタイプを修正するのに有用である。
ｘｉ．この方法は、欠落したデータ要素のデフォルト値を維持するのに有用である。
【００５１】
図面では、密接に関係した図面は、同じ番号だが異なる英字の添え字を有する。
【図面の簡単な説明】
【００５２】
【図１】本発明の一実施形態によるデータ処理システムを示す。
【図２】いくつかのデータ要素を実行時に挿入し、または除去することができる可変長アレイＶＡを示す。
【図３】可変長アレイＶＡ内で追加のデータ要素を挿入し、または除去する方法を示すフローチャートである。
【図４】そのデータタイプを随時修正することができるデータ要素を記憶するために使用される、可変タイプデータオブジェクトＶＴＤＯを示す。
【図５】可変タイプデータオブジェクトＶＴＤＯ内に記憶されるデータ要素のデータタイプを修正する方法を示すフローチャートである。
【図６Ａ】データ処理システム内にデータオブジェクトを挿入する前の、記憶ユニット内のデータオブジェクトの配置を示す。
【図６Ｂ】データ処理システム内にデータオブジェクトを挿入した後の、記憶ユニット内のデータオブジェクトの配置を示す。
【図７】いくつかの可変長データオブジェクトをその中で記憶し、修正し、挿入し、除去することができる複合データオブジェクトＣＯを示す。
【図８】複合オブジェクトＣＯ内に、追加のデータオブジェクトを挿入する方法を示すフローチャートである。
【図９】ネストされたデータオブジェクト内に、追加のデータ要素を挿入する方法を示すフローチャートである。
【図１０Ａ】データ要素が階層状に配置される、階層型データ構造ＨＤＳを示す。
【図１０Ｂ】データ要素が階層状に配置される、階層型データ構造ＨＤＳを示す。
【図１０Ｃ】データ要素が階層状に配置される、階層型データ構造ＨＤＳを示す。
【図１０Ｄ】データ要素が階層状に配置される、階層型データ構造ＨＤＳを示す。
【図１１】データが可変サイズのページを有する仮想メモリ領域内に記憶される、データ処理システムを示す。
【図１２】仮想メモリ領域を使用し、データ処理システム内に追加のデータを挿入するためのフローチャートを示す。
【図１３】データが固定サイズのページを有する仮想メモリ領域内に記憶される、データ処理システムを示す。
【発明を実施するための形態】
【００５３】
本発明の好ましい実施形態によれば、いくつかのデータオブジェクトを記憶するためのデータ処理システムが提供される。
【００５４】
実行時にデータオブジェクトを修正するための方法を提供する。データオブジェクト内に追加のデータを挿入することができ、それにより、１つまたは複数の追加のデータ要素が挿入され、かつ／またはデータオブジェクトの長さが増加する。同様に、データオブジェクト内の既存のデータを除去することができ、それにより、データ処理システム内の１つまたは複数のデータオブジェクトが除去され、かつ／またはデータオブジェクトの長さが縮小される。
【００５５】
データを挿入するために、以下のステップを実行する。
ｉ．追加のデータを記憶するための、記憶ユニット内の論理アドレスを識別する。
ｉｉ．そのように識別した論理アドレスに追加のデータを記憶するために、記憶ユニット内に追加の記憶空間を挿入する。それにより、前述の論理アドレスを越えて記憶された１つまたは複数の既存のデータオブジェクトが、その既存の論理アドレスから、より高位の論理アドレスに移され得る。
ｉｉｉ．挿入した記憶空間の中に追加のデータを記憶し、それにより、追加のデータオブジェクトをシステム内に挿入し、またはデータオブジェクトの長さを増加させる。
ｉｖ．追加のデータオブジェクトは、他のデータオブジェクトの子オブジェクトとして挿入することもできる。データオブジェクトを子データオブジェクトとして挿入する場合、結果として親データオブジェクトの長さも増加する。
【００５６】
データ要素を除去するプロセスは上記の逆である。
【００５７】
データを挿入しまたは除去する間、挿入点または除去点を越えて親データオブジェクトの記憶空間内に記憶されるいくつかのデータ要素を、記憶ユニット内の新たな論理アドレスに再配置することができる。記憶ユニット内のいくつかの他のデータオブジェクトも、新たな論理アドレスに再配置することができる。
【００５８】
データオブジェクトマネージャは、データオブジェクトのアドレスを追跡するために、データオブジェクト内のデータ要素に関する相対アドレス、長さ、データタイプ、または他の情報を必要に応じて記憶する。したがって、データオブジェクトへの直接アクセスが提供される。データオブジェクトマネージャは、データを挿入しまたは除去する間に更新される。
【００５９】
データオブジェクトマネージャは、システム内の、またはデータオブジェクト内のいくつかのデータオブジェクトの名前を記憶する。この方法は、データ要素に名前でアクセスできるようにする。データオブジェクトの名前も随時修正することができる。
【００６０】
データオブジェクトマネージャは、データオブジェクトのデータタイプを記憶する。データオブジェクトのデータタイプも、随時修正することができる。データオブジェクトのデータタイプまたはデータテンプレートは、そのデータオブジェクトの構造を規定するために使用することができる。データオブジェクトのデータタイプは、データオブジェクト内の欠落したデータ要素のデフォルト値を定めるために使用することもできる。
【００６１】
いくつかのデータ要素を階層状に記憶する方法も示す。
【００６２】
他の実施形態は、この方法を使用することを示し、データを仮想メモリ領域内に記憶する。
【００６３】
データ処理システムは、データオブジェクトを記憶ユニット内に記憶し、以下で論じるようにデータは効率的に挿入しまたは除去することができる。
【００６４】
データオブジェクトの構成における記憶ユニット
最も一般に使用される、使用される記憶ユニットは、データを効率的に挿入しまたは除去する能力を提供しない。概して、記憶ユニット内でデータを挿入しまたは除去するのにかかる時間は、挿入点または除去点より先の記憶ユニット内のデータの量に依存する。したがって、挿入点より先の記憶ユニット内のデータの量が多い場合、データを挿入するのにその分だけ多くの時間がかかる。このことは、データの挿入および除去を非実用的にする。これらの記憶ユニット内での挿入および除去操作は、Ｏ（ｎ）程度であると言われ、ただしｎは記憶ユニット内のデータ量である。
【００６５】
ただし、他の一部の記憶ユニットは、データを効率的に挿入しまたは除去する。これらの記憶ユニットでは、挿入または除去を実行するのにかかる時間は、挿入点または除去点より先のデータの量に依存しない。これらの記憶ユニットの一部の例には以下のものがある。
ｉ．本出願人の発明（特許出願第ＰＣＴ／ＩＮ２０１０／０００２５９号明細書）では、ファイルシステムやメモリシステムなど、記憶ユニット内でデータを効率的に挿入し除去する記憶システムについて記載している。
ｉｉ．本出願人の発明（特許出願第ＰＣＴ／ＩＮ２０１０／０００６４１号明細書）では、可変サイズのページを使用し、仮想メモリシステム内でデータを効率的に挿入し除去する仮想メモリシステムについて記載している。
ｉｉｉ．Ｓｉｎｃｌａｉｒ、Ａｌａｎ  Ｗｅｌｓｈによって記載された、フラッシュにより最適化されたファイルシステム（特許出願第ＰＣＴ／ＵＤ２００７／０８８１６５号明細書）は、フラッシュベースのファイルシステム内でデータを効率的に挿入しまたは除去する、ファイルシステムである。
ｉｖ．Ｓｉｍｏｎ  Ｔａｔｈａｍによって記載されたカウントｂツリー（ｃｏｕｎｔｅｄ  ｂ−ｔｒｅｅ）は、指定のインデックスにおいて、ソートされていないｂツリー内で項目を挿入しまたは除去することをサポートする、ｂツリーデータ構造の一形態である（ｈｔｔｐ：／／ｗｗｗ．ｃｈｉａｒｋ．ｇｒｅｅｎｅｎｄ．ｏｒｇ．ｕｋ／〜ｓｇｔａｔｈａｍ／ａｌｇｏｒｉｔｈｍｓ／ｃｂｔｒｅｅ．ｈｔｍｌ）。
【００６６】
これらの他の記憶ユニットは、挿入点または除去点より先のデータを、そのデータにアクセスしまたはそのデータをコピーすることなしに新たなアドレスに再配置する。代わりにこれらの記憶ユニットは、データの物理アドレスをデータの論理アドレスから切り離し、物理アドレスを新たな論理アドレスに再び関連させることによりデータを再配置する。その結果、これらの記憶ユニットは、データの挿入または除去に関してより優れた効率をもたらす。したがって、
ｉ．本出願人の発明（上記の番号ｉ．）の記憶ユニット（ファイルやメモリ領域など）は、データを記憶するためのいくつかの論理アドレスを提供する。この記憶ユニットは、データをその中に物理的に記憶する可変サイズの記憶ブロックのリストも含む。記憶ブロックは、予備容量も含むことができる。記憶ブロック内のアドレスは、論理アドレス空間にマップされる。記憶ブロック内のデータの論理アドレスは、先行する記憶ブロック内の使用済み容量によって決まる。
【００６７】
したがって、この記憶ユニットは、その記憶ブロック内に予備容量を維持する。リスト内に追加の記憶ブロックを挿入することにより、記憶ユニット内にさらなる予備容量を挿入することができる。ファイル内にデータが挿入されるとき、この予備容量が使用される。
【００６８】
挿入の結果として、挿入点より先の記憶ユニット内のデータが、より高位の論理アドレスに再配置される。したがってこの再配置は、データを、その物理アドレスから新たな物理アドレスにコピーすることも移すことも必要としない。再配置されるデータの記憶ブロックおよび物理アドレスは、変わらないままである。
【００６９】
本出願人の発明（上記の番号ｉｉ．）で記載した仮想メモリシステムでは、ページテーブルや変換索引バッファ（すなわちＴＬＢ）などのマッピング装置を使用し、いくつかの可変サイズのページを仮想アドレス領域にマップすることができる。
【００７０】
システムが提供する仮想メモリ領域では、仮想アドレス空間からいくつかのページをマップ解除し、それらを新たな仮想アドレス空間に再マップすることにより、所定の挿入点に追加のデータを挿入することができる。したがって、ページ内のデータをその物理アドレスから移動させることなしに、それらのデータは新たな論理アドレスに再配置される。挿入されるデータに記憶空間を与えるために、１つまたは複数の追加のページが挿入点においてマップされる。したがって、その物理アドレスから大量のデータをコピーすることも移動することもなしに、データをメモリ領域から挿入しまたは除去することができる。
【００７１】
フラッシュにより最適化されたファイルシステム（上記の番号ｉｉｉ．）では、いくつかの物理アドレスをいくつかの新たなファイルアドレスに再マップすることにより、フラッシュベースの記憶媒体内のファイル内にデータを挿入する方法について記載している。挿入点より先に記憶されるいくつかのデータオブジェクトを、挿入中に物理媒体内の新たなアドレスに物理的に再配置する必要はない。
【００７２】
カウントｂツリー（上記の番号ｉｖ．）は、いくつかのノード内にいくつかのエントリを記憶する。エントリは、キーを使用することなしにカウントｂツリー内のインデックスにおいて記憶し、取得し、挿入し、除去することができる。
【００７３】
ｂツリー内でエントリとして１バイト記憶することにより、論理アドレス空間を作成することができる。各エントリのインデックスを、データの論理アドレスとみなすことができる。カウントｂツリーは、データを構成するための記憶ユニットとして使用することができる。
【００７４】
ｂツリー内の各ノードは、エントリが記憶されるいくつかの物理アドレスを提供する記憶ブロックとみなすことができる。エントリが記憶されるノード内の各物理アドレスは、ｂツリー内の論理アドレスまたはインデックスに関連する。
【００７５】
ｂツリー内に新たなエントリが挿入されると、いくつかのノード内の少数のエントリが再構成される。これにより、挿入点より先のインデックスにおける多数のエントリが、より高位のインデックスに移される。したがって、物理アドレスの論理アドレスとの関連付けを変えることにより、カウントｂツリー内のいくつかのエントリが、より高位のアドレスに再配置される。多数のエントリは、挿入中にアクセスされることも物理的にコピーされることもない。
【００７６】
これらの他の記憶ユニット内でデータを挿入し除去する効率性は、Ｏ（ｎ）よりもよく、ただしｎは記憶ユニット内のデータ量である。例えば、ｂツリー（したがってカウントｂツリー）内でデータを挿入し除去する効率は、Ｏ（ｌｏｇ  ｎ）程度であると言われる。
【００７７】
既存のデータオブジェクト構成法は、これらの他の記憶ユニットの能力を活用しない。本出願人の発明は、これらの記憶ユニットが提供する、データを速く挿入し除去する能力を活用することを提案する。本発明では、データオブジェクトを記憶するために使用する記憶ユニットは、上記で論じた効率の悪さに見舞われない他の任意の記憶ユニットとすることもできる。
【００７８】
次に、本発明を図面と併せて説明する。
【００７９】
図１に、データ処理システムの好ましい一実施形態を示す。データ処理システム１０１は、記憶ユニット１０２、および記憶ユニット内の順次的な論理アドレス１０４に記憶されるいくつかのデータオブジェクト１０３を含む。
【００８０】
記憶ユニット１０２は、前の節で論じたようにデータを効率的に挿入し除去するファイル、メモリ領域、データ構造、または他の記憶ユニットである。
【００８１】
データ処理システム内のデータオブジェクト１０３は、既存のデータオブジェクトまたは実行時に作成されるデータオブジェクトとすることができる。データ処理システム内のデータオブジェクトは、「構造体」、「アレイ」、「長さに基づく」データオブジェクト、データ構造、ファイル構造、または先に記載した他の任意のデータタイプ、もしくは以下に記載するデータオブジェクトのうちの１つのインスタンス等とすることができる。データオブジェクトは、他のデータオブジェクトの子データオブジェクトとすることもできる。
【００８２】
データ処理システムに対して行われるいくつかの操作について、図面と併せて以下に説明する。
【００８３】
図２は、可変長アレイＶＡ２０１のデータテンプレートを示す。ＶＡ２０１は、複合データオブジェクトであり、その記憶空間の中にいくつかの固定サイズのデータ要素を記憶するために使用する。ＶＡ２０１は、
ｉ．Ｌｅｎフィールド２０２、および
ｉｉ．データ空間フィールド２０３
を含む。
【００８４】
データ空間フィールド２０３は、ＶＡ２０１内のいくつかの要素を記憶するために確保される空間を表す。Ｌｅｎフィールド２０２は、整数フィールドであり、データ空間フィールド２０３の長さを記憶するために使用する。
【００８５】
ただし、データ空間フィールド２０３は、予備空間を一切確保しない。
【００８６】
ＶＡのインスタンスが作成されると、所定数の固定サイズレコードを記憶するのに十分大きいようにデータ空間フィールドが作成される。データ空間フィールドの長さは、Ｌｅｎフィールド内に記憶される。ＶＡに割り当てられる総記憶空間は、データ空間フィールドの長さ、およびＬｅｎフィールドの長さの和に等しい。データ要素は、データ空間フィールド内に記憶される。
【００８７】
追加のデータ要素をＶＡ内に随時挿入することができる。図３は、ＶＡ内にデータ要素を挿入する方法を示すフローチャートである。したがって、
ｉ．ステップ３０１で、新たなレコードのサイズに等しい追加の記憶空間を記憶ユニット１０２内に挿入し、それにより、
ａ．挿入点以降にあるデータ処理システム１０２内の１つまたは複数の既存のデータオブジェクトがより高位のアドレスに移され、
ｂ．データ空間フィールド３０３の長さが増加され、
ｉｉ．ステップ３０２で、Ｌｅｎフィールドの値を更新し、
ｉｉｉ．ステップ３０３で、新たなデータ要素をデータ空間フィールド内に記憶する。
【００８８】
ＶＡ内のデータ要素を除去するプロセスは、挿入プロセスの逆である。
【００８９】
データ空間フィールド内に追加の記憶空間が挿入される場合、記憶ユニット内の挿入点以降において記憶ユニット１０２内に記憶される、１つまたは複数のデータオブジェクトがより高位のアドレスに移され、ＶＡのサイズが増加される。同様に、ＶＡ内の記憶空間が除去される場合、点または除去より先の１つまたは複数のデータオブジェクトがより低位のアドレスに移され、ＶＡのサイズが減らされる。
【００９０】
こうしてＶＡの長さが修正されると、ＶＡ内の既存のデータ要素の１つまたは複数が新たなアドレスに移される。したがって、ＶＡ自体が他のデータオブジェクトの子である場合、ＶＡ内でデータ要素が挿入されまたは除去されるとき、親オブジェクト内の１つまたは複数のデータ要素が再配置される可能性がある。
【００９１】
図４は、可変タイプデータオブジェクトＶＴＤＯ４０１を示す。ＶＴＤＯ４０１は、単一のデータ要素を記憶するために使用する。ＶＴＤＯ４０１内に記憶されるデータ要素のデータタイプは、以下に説明するように随時変わり得る。
【００９２】
図４に示すように、ＶＴＤＯ４０１は、
ｉ．データタイプフィールド４０２、
ｉｉ．データ空間フィールド４０３、および
ｉｉｉ．データ要素４０４
を含む。
【００９３】
データタイプフィールド４０２は、データ要素４０４のデータタイプを記憶するために使用する。
【００９４】
データ空間フィールド４０３は、データタイプフィールド４０２内に記憶されるデータタイプに応じて、データ要素４０４を記憶するために確保される空間を表す。
【００９５】
データ要素４０４は、データ空間フィールド４０３内に記憶される。
【００９６】
ＶＴＤＯのインスタンスが作成されると、データタイプフィールドを使用して所定のデータタイプを記憶し、データ空間フィールドには、所定のデータタイプのインスタンスを記憶するのに十分な記憶空間が与えられる。ＶＴＤＯに割り当てられる総記憶空間は、データタイプフィールドに割り当てられる記憶空間の和、およびデータ要素のサイズに等しい。
【００９７】
データ要素４０４のデータタイプは、随時修正することができる。図５は、データ要素のデータタイプを修正する方法を示すフローチャートである。したがって、
ｉ．ステップ５０１で、新たなデータタイプをデータタイプフィールド内に記憶する。
ｉｉ．ステップ５０２で、新たなデータタイプの記憶要件を、データ空間フィールドに既に割り当てられた記憶空間の量と比較する。
ｉｉｉ．ステップ５０３で、新たなデータタイプの記憶要件がデータ空間フィールドの既存の長さを上回る場合、追加の記憶空間をデータ空間フィールド内に挿入し、それによりＶＴＤＯのサイズを増加させる。
ｉｖ．ステップ５０４で、新たなデータタイプの記憶要件がデータ空間フィールドの既存の長さを下回る場合、データ空間フィールド内の余分な記憶空間を除去し、それによりＶＴＤＯのサイズを減らす。
ｖ．ステップ５０５で、新たなデータタイプに応じたデータ要素の値をデータ空間フィールド内に記憶する。
【００９８】
記憶空間を挿入しまたは除去する結果として、データ処理システム１０１内でＶＴＤＯを越えて記憶されるいくつかのデータオブジェクトを、記憶ユニット内の新たな論理アドレスに移すことができる。
【００９９】
図６Ａおよび図６Ｂは、データオブジェクトを挿入する前および挿入した後それぞれの、記憶ユニット内における、例示的データ処理システム内のデータオブジェクトの配置を示す。
【０１００】
図６Ａは、挿入前のいくつかのデータオブジェクトのアドレスを示す。したがって、データオブジェクト６０１、６０２、６０３、６０４、および６０５が、記憶ユニット内のアドレス６１１から６２２、６２３から６３０、６３１から６３５、６３６から６４３、および６４４から６５０のそれぞれに記憶される。データオブジェクト６０３は、可変長アレイＶＡであり、データ要素６０３Ａ、６０３Ｂ、６０３Ｃ、および６０３Ｄの親オブジェクトである。ＶＡのＬｅｎフィールドは、アドレス６３１に記憶される。データ要素６０３Ａ、６０３Ｂ、６０３Ｃ、および６０３Ｄは、アドレス６３２、６３３、６３４、および６３５のそれぞれに記憶される。
【０１０１】
図６Ｂは、データオブジェクト６０３内に追加のデータ要素を挿入した後の、データオブジェクトのアドレスを示す。データオブジェクト６０３内で、データ要素６０３Ｃの後に追加のデータ要素６０３Ｅが挿入されている。データオブジェクト６０１、６０２、６０３、６０４、および６０５は、今ではアドレス６１１から６２２、６２３から６３０、６３１から６３６、６３７から６４４、および６４５から６５１のそれぞれに記憶されている。ＶＡのＬｅｎフィールドは、アドレス６３１に記憶される。（データオブジェクト６０３内の）データ要素６０３Ａ、６０３Ｂ、６０３Ｃ、６０３Ｅ、および６０３Ｄは、アドレス６３２、６３３、６３４、６３５、および６３６のそれぞれに記憶される。
【０１０２】
図７は、いくつかの可変長データ要素がその中に記憶されるデータオブジェクトである、複合オブジェクトＣＯ７０１を示す。ＣＯ内のデータ要素の数は固定されていない。いくつかのデータ要素を、ＣＯ内で随時挿入しまたは除去することができる。ＣＯ内のデータ要素のサイズは可変である。あるデータ要素のサイズが、別のデータ要素のサイズと等しい必要はない。データ要素のサイズは、随時修正することができる。
【０１０３】
図７に示すように、ＣＯ７０１は、
ｉ．要素数フィールド７０２、
ｉｉ．データオブジェクトマネージャ７０３、
ｉｉｉ．データ空間フィールド７０７
を含む。
【０１０４】
データオブジェクトマネージャ７０３は、
ｉ．要素サイズフィールド７０４、
ｉｉ．データタイプフィールド７０５、および
ｉｉｉ．要素名フィールド７０６
を含む。
【０１０５】
要素数フィールド７０２は、整数フィールドであり、ＣＯ内の要素数を記憶するために使用する。このフィールド内の値は、ＣＯ内で要素が挿入されまたは除去されるときに更新される。
【０１０６】
データオブジェクトマネージャ７０３は、ＣＯ内に記憶されるデータ要素の長さ、データタイプ、および要素名を追跡するために使用する。
【０１０７】
要素サイズフィールド７０４は、ＶＡ２０１のインスタンスであり、整数のリストを記憶するために使用する。このアレイ内の各エントリは、ＣＯ内に記憶される対応するデータ要素のサイズを表す。
【０１０８】
データタイプフィールド７０５は、ＶＡ２０１のインスタンスであり、データタイプのリストを記憶するために使用する。このアレイ内の各エントリは、ＣＯ内の対応するデータ要素のサイズを表す。
【０１０９】
要素名フィールド７０６は、ＶＡ１０１のインスタンスであり、名前のリストを記憶するために使用する。このアレイ内の各エントリは、ＣＯ内の対応するデータ要素の名前を表す。
【０１１０】
データ空間フィールド７０７は、ＣＯ内のいくつかの要素を記憶するために確保される空間を表す。データ空間フィールド７０７は、予備空間を一切確保しない。
【０１１１】
ＣＯ内に記憶されるデータ要素は、そのインデックスまたは位置によってアクセスすることができる。データ要素の相対アドレスは、先行するデータ要素のサイズを合計することで求めることができる。データ要素は、データ空間フィールド内の相対アドレスにおいてアクセスすることができる。
【０１１２】
ＣＯ内に記憶されるデータ要素は、その名前によってもアクセスすることができる。各データ要素の名前は、要素名フィールド内で見つけることができる。
【０１１３】
空のＣＯのインスタンスは、
ｉ．要素数フィールド内の値をゼロに設定すること、
ｉｉ．空の要素サイズフィールドを作成すること、
ｉｉｉ．空のデータタイプフィールドを作成すること、
ｉｖ．空の要素名フィールドを作成すること、および
ｖ．空のデータ空間フィールドを作成すること
によって作成される。
【０１１４】
いくつかのデータ要素を、ＣＯ内に随時挿入することができる。図８は、所定のインデックスにおいてＣＯ内に追加のデータ要素を挿入する方法を示す、フローチャートを示す。したがって、
ｉ．ステップ８０１で、要素数フィールドの値をインクリメントし、
ｉｉ．ステップ８０２で、新たなデータ要素のサイズを示すために、所定のインデックスにおいて要素サイズフィールド内に整数値を挿入し、
ｉｉｉ．ステップ８０３で、新たなデータ要素のデータタイプを示すために、所定のインデックスにおいてデータタイプフィールド内にデータタイプ値を挿入し、
ｉｖ．ステップ８０４で、新たなデータ要素の名前を示すために、所定のインデックスにおいて要素名フィールド内に名前値を挿入し、
ｖ．ステップ８０５で、新たなデータ要素のサイズに等しい記憶空間を、データ空間フィールド内の適切な位置に挿入し、それにより、
ａ．データ空間フィールドの長さが増加され、
ｂ．挿入点以降にある既存のデータ要素がより高位のアドレスに移され、
ｉｖ．ステップ８０６で、ステップ８０５で挿入した記憶空間内に新たなデータ要素を記憶する。
【０１１５】
ＣＯ内のデータ要素を除去するプロセスは、挿入プロセスの逆である。
【０１１６】
ＣＯ内に追加の記憶空間が挿入されると、データオブジェクトの境界以降の１つまたは複数のデータがより高位のアドレスに移される。ＶＡ１内の余分な記憶空間が除去されると、データオブジェクトの境界以降の１つまたは複数のデータがより低位のアドレスに移される。
【０１１７】
したがって、１つまたは複数の他のデータ要素のアドレスが修正され得る。同様に、データオブジェクト自体が他のデータオブジェクトの子である場合、ＣＯ内に記憶空間が挿入されるとき、親オブジェクト内の１つまたは複数のデータ要素のアドレスが修正され得る。
【０１１８】
ネストされたデータオブジェクトのサイズも、随時修正することができる。例えば、ＶＴＤＯは、ＣＯ内の所定のインデックスに記憶されるネストされたデータ要素である。データ要素のサイズが修正されると、要素サイズフィールド内の対応するエントリが更新される。この方法は、データが挿入されまたは除去された後、全てのデータオブジェクトがその既存のまたは新たなアドレスにおいてアクセス可能であることを確実にする。したがって、ネストされたデータオブジェクトを含め、データオブジェクト内でデータを随時挿入しまたは除去することができる。
【０１１９】
図９は、ＣＯ内にネストされる、ネストされたデータオブジェクト内に追加のデータ要素を挿入するためのフローチャートを示す。したがって、
ｉ．ステップ９０１で、ネストされたデータオブジェクト内に追加のデータ要素を挿入することにより、ネストされたデータオブジェクトの長さを増加させる。その結果、ネストされたデータオブジェクトより先の、記憶ユニット内の１つまたは複数のデータオブジェクトが新たなアドレスに移される。次のステップは、ステップ９０２である。
ｉｉ．ステップ９０２で、データオブジェクトの長さをＣＯ内の要素サイズフィールド内で更新する。次のステップは、ステップ９０３である。
ｉｉｉ．ステップ９０１および９０２の結果として、親データオブジェクトＣＯのサイズも修正される。ステップ９０３で、ＣＯが他のデータオブジェクト内にネストされている場合、ステップ９０２を実行することにより、ＣＯの新たな長さを、その親データオブジェクトの要素サイズフィールド内で更新する。さもなければ、次のステップは、ステップ９０４である。
ｉｖ．ステップ９０４で、ネストされたオブジェクト内にデータを挿入するプロセスは完全である。
【０１２０】
いくつかの改変形態があり得る。例えば、
ｉ．ＣＯ内のデータオブジェクトマネージャでは、要素サイズフィールドの代わりに、要素アドレスフィールドを置き換えることができる。要素アドレスフィールドは、ＣＯ内に記憶されるデータ要素の相対アドレスを追跡する。
ｉｉ．データタイプフィールドを使用してデータタイプを追跡することができ、それによりデータ要素の長さを追跡することができる。そのような場合、要素サイズフィールドは必要でないことがある。
ｉｉｉ．各データ要素のデータタイプが同じであり、またさもなければ求めることができる場合、データタイプフィールドは必要でないことがある。
ｉｖ．データ要素に名前でアクセスする必要がない場合、要素名フィールドは必要でないことがある。
ｖ．この方法は、欠落したデータ要素のデフォルト値を提供するよう、容易に向上させることができる。例えば、データオブジェクト内の欠落した要素のデフォルト値は、データオブジェクトのデータテンプレート内に規定することができる。
【０１２１】
図１０Ａおよび図１０Ｂは、本発明による階層型データ構造ＨＤＳ１００１を示す。階層型データ構造ＨＤＳ１００１は、いくつかのデータ要素が階層状に配置されるデータオブジェクトである。階層内の各データ要素はノードであり、このノードはサブノードを有する場合もある。
【０１２２】
図１０Ａは、ＨＤＳ内のノード間の関係の概略図を示す。図１０Ａによれば、ノード１００２がこの階層のルートノードである。ノード１００２は、３つのサブノード、すなわちノード１００３、１００４、および１００５を有する。ノード１００３は２つのサブノード、すなわちノード１００６および１００７を有する。ノード１００４は、３つのサブノード、すなわちノード１００８、ノード１００９、およびノード１０１０を有する。ノード１００５は２つのサブノード、すなわちノード１０１１およびノード１０１２を有する。各ノードは１０バイトの長さを有する。
【０１２３】
各ノードはインデックスを有する。ノードのインデックスは、レベル順走査または幅優先走査を用いて走査したときの、階層内の他のノードに対するそのノードの位置である。したがって、ノード１００２、１００３、１００４、１００５、１００６、１００７、１００８、１００９、１０１０、１０１１、および１０１２のインデックスは、それぞれ１、２、３、４、５、６、７、８、９、１０、および１１である。データオブジェクト内のノードのアドレスは、そのノードのインデックスによって決まる。
【０１２４】
図１０Ｂは、記憶ユニット内のノードのアドレスを示す。したがって、ノード１００２、１００３、１００４、１００５、１００６、１００７、１００８、１００９、１０１０、１０１１、および１０１２は、それぞれアドレス１０、２０、３０、４０、５０、６０、７０、８０、９０、１００、および１１０に記憶される。
【０１２５】
図１０Ｃおよび図１０Ｄは、階層内に追加のノードを挿入した後の階層型データ構造ＨＤＳ１００１を示す。
【０１２６】
図１０Ｃは、階層型データ構造ＨＤＳ１００１の概略図を示す。したがって追加のノード、すなわちノード１０１３が、ノード１００４内で、サブノード１００８の後にサブノードとして挿入されている。
【０１２７】
図１０Ｄは、追加のノードを挿入した後の各ノードのアドレスを示す。追加のノードを挿入した後のノード１００２、１００３、１００４、１００５、１００６、１００７、１００８、１０１３、１００９、１０１０、１０１１、および１０１２のインデックスは、それぞれ１、２、３、４、５、６、７、８、９、１０、１１、および１１である。ノード１００２、１００３、１００４、１００５、１００６、１０１１、１００７、１００８、１００９、および１０１０は、それぞれアドレス１０、２０、３０、４０、５０、６０、７０、８０、９０、および１００に記憶される。
【０１２８】
データ要素のサイズが固定されておらず、可変である場合、データオブジェクト間の関係はさらに柔軟に表すことができる。可変サイズのデータオブジェクトを使用することについては、上記で既に詳しく示している。
【０１２９】
図１１は、本発明の別の好ましい実施形態を示す。したがって、データ処理システム１００１は、
ｉ．いくつかのデータオブジェクト１１０２、および
ｉｉ．仮想メモリ領域１１０３
を含む。
【０１３０】
仮想メモリ領域１１０３は、
ｉ．論理アドレス空間１１０４、
ｉｉ．ページのリスト１１０５、および
ｉｉｉ．メモリ管理ユニット１１０６
を含む。
【０１３１】
仮想メモリシステム内のページのリスト１１０５はいくつかのページを含み、各ページは、仮想メモリ領域内にデータを記憶するためのいくつかの物理アドレスを提供する。ページのサイズは固定されておらず、あるページのサイズが、リスト内の他のページのサイズと異なってもよい。
【０１３２】
メモリ管理ユニット１１０６は、ページテーブルＴＬＢ、またはページ内のいくつかの物理アドレスを仮想メモリ領域内のいくつかの論理アドレスにマップするための他の装置を含む。メモリ管理ユニットは、いくつかの可変サイズのページを論理アドレス空間にマップすることができる。例えば、本出願人の発明（特許出願第ＰＣＴ／ＩＮ２０１０／０００６４１号明細書）の中で記載したメモリ管理ユニットを使用してもよい。
【０１３３】
ページテーブルエントリ内の各可変サイズのページは、論理アドレスに関連する。メモリ管理ユニットを使用して、ページをその関連する論理アドレスにマップする。ページの論理アドレスは、リスト内の先行するページ内のバイト数によって決まる。
【０１３４】
いくつかの追加のバイトを、仮想メモリ領域内に随時挿入することができる。図１２は、いくつかの追加のバイトを仮想メモリ領域内に挿入するためのフローチャートを示す。したがって、
ｉ．ステップ１２０１で、対応するページテーブルエントリを「不存在」値で印付けすることにより、メモリ管理ユニット内のいくつかのページをマップ解除する。
ｉｉ．ステップ１２０２で、ページのリスト内に、適切なサイズの１つまたは複数の追加のページを挿入する。このことは以下の効果を有する。
ａ．リスト内の１つまたは複数の他のページをより高位の論理アドレスに移すこと、および
ｂ．追加のデータを仮想メモリ領域内に挿入すること。
ｉｉｉ．ステップ１２０３で、対応するページテーブルエントリを「存在」値で印付けすることにより、リスト内の１つまたは複数のページを仮想メモリ領域にマップする。
【０１３５】
仮想メモリ領域内のデータを除去する方法は上記の逆である。
【０１３６】
この方法は、データ処理ユニット内でいくつかの追加のデータオブジェクトを挿入しまたは除去するために使用する。データ処理ユニット内にデータを挿入することの他の詳細については、既に前に説明した。
【０１３７】
いくつかの改変形態があり得る。例えば、図１３はデータ処理システム１３０１を示す。したがって、データ処理システム１３０１は、
ｉ．いくつかのデータオブジェクト１３０２、および
ｉｉ．仮想メモリ領域１３０３
を含む。
【０１３８】
仮想メモリ領域１３０３は、
ｉ．論理アドレス空間１３０４、
ｉｉ．ページのリスト１３０５、
ｉｉｉ．メモリ管理ユニット１３０６、および
ｉｖ．ページスワッピング装置１３０７
を含む。
【０１３９】
ページのリスト１３０５は、いくつかの固定サイズのページを含む。メモリ管理ユニット１３０６は、固定サイズのページを仮想メモリ領域にマップするどんなメモリ管理ユニットでもよい。
【０１４０】
このメモリシステムは、ページスワッピング装置１３０７も含む。ページスワッピング装置１３０７は、本出願人の発明（ＰＣＴ／ＩＮ２０１０／００００２５９号明細書）の中で記載したファイルである。このファイルは、先に論じたようにデータを効率的に挿入し除去することを支援する。ページスワッピング装置は、ディスク空間を使用することにより、論理アドレス空間を拡張するために使用する。ページは、物理メモリ内に、またはページスワッピング装置内に随時位置することができる。
【０１４１】
ｉ．メモリ管理ユニット内の１つまたは複数のページテーブルエントリを無効化し、１つまたは複数のページを論理アドレス空間からマップ解除し、
ｉｉ．
ａ．記憶ブロック内の予備容量を使用すること、または
ｂ．１つまたは複数の追加の記憶ブロックを挿入することにより、ファイル内に追加の予備容量を挿入すること
により、ファイル内に追加の記憶空間を挿入し、
ｉｉｉ．１つまたは複数のページを論理アドレス空間にマップすること
により、仮想メモリ領域内にいくつかの追加のバイトを挿入することができる。
【０１４２】
データオブジェクトを修正することに関する他の詳細については、先に記載した。
【０１４３】
結論、効果、および範囲
したがって、様々な実施形態のデータ処理システムを使用して、大きく複雑なデータオブジェクトを効率的に作成し、操作することができる。
【０１４４】
このデータ処理システムは、データおよびデータオブジェクトを操作する任意のシステムとすることができる。このデータ処理システムは、アプリケーションプログラム、ならびにシステムプログラムで使用することができる。
【０１４５】
この方法は、多岐にわたるシステムで使用することができる。この方法は、コンパイル済みプログラムまたはインタプリタ型プログラムで使用することができる。この方法は、コンパイラ、データベースシステム、文書処理システム、ファイルシステム、仮想メモリシステム、ネットワーキングシステムおよび装置等で使用することができる。この方法は、データ構造、ファイル構造、およびデータベースを実装するのにも有用である。この方法は、プロセススタック内に追加のデータを挿入するために使用することもできる。この方法は、ｘｍｌデータを効率的な形式で記憶するのにも有用であり、データは直接操作することができる。
【０１４６】
データは、コンピュータまたは他のコンピューティングデバイス上のメモリ領域、ファイル、アレイ、および他のデータ構造が含まれる任意の適切な記憶ユニット内に、または分散環境内に記憶することができる。
【符号の説明】
【０１４７】
１０１  データ処理システム、１０２  記憶ユニット、１０３  データオブジェクト、１０４  論理アドレス、２０１  可変長アレイＶＡ、２０２  Ｌｅｎフィールド、２０３  データ空間フィールド、３０１−３０３  フローチャートのステップ、４０１  可変タイプデータオブジェクトＶＴＤＯ、４０２  データタイプフィールド、４０３  データ空間フィールド、４０４  データ要素、５０１−５０５  フローチャートのステップ、６０１−６０５  データオブジェクト、６０３Ａ−６０３Ｄ  データオブジェクト６０３内のデータ要素、６１１−６５１  論理アドレス、７０１  複合データオブジェクト、７０２  要素数フィールド、７０３  データオブジェクトマネージャ、７０４  要素サイズフィールド、７０５  データタイプフィールド、７０６  要素名フィールド、７０７  データ空間フィールド、８０１−８０６  フローチャートのステップ、９０１−９０４  フローチャートのステップ、１００１  階層型データ構造ＨＤＳ、１００２−１０１３  ＨＤＳ内のノード、１１０１  データ処理システム、１１０２  データオブジェクト、１１０３  仮想メモリ領域、１１０４  論理アドレス空間、１１０５  ページのリスト、１１０６  メモリ管理ユニット、１２０１−１２０３  フローチャートのステップ、１３０１  データ処理システム、１３０２  データオブジェクト、１３０４  論理アドレス空間、１３０５  ページのリスト、１３０６  メモリ管理ユニット、１３０７  ページスワッピング装置
【図１】
2014504381.tif 000003
【図２】
2014504381.tif 000004
【図３】
2014504381.tif 000005
【図４】
2014504381.tif 000006
【図５】
2014504381.tif 000007
【図６Ａ】
2014504381.tif 000008
【図６Ｂ】
2014504381.tif 000009
【図７】
2014504381.tif 000010
【図８】
2014504381.tif 000011
【図９】
2014504381.tif 000012
【図１０Ａ】
2014504381.tif 000013
【図１０Ｂ】
2014504381.tif 000014
【図１０Ｃ】
2014504381.tif 000015
【図１０Ｄ】
2014504381.tif 000016
【図１１】
2014504381.tif 000017
【図１２】
2014504381.tif 000018
【図１３】
2014504381.tif 000019
【国際調査報告】
2014504381.tif 000020
2014504381.tif 000021
2014504381.tif 000022