JP2014504381A - データオブジェクトの構成 - Google Patents

データオブジェクトの構成 Download PDF

Info

Publication number
JP2014504381A
JP2014504381A JP2013510730A JP2013510730A JP2014504381A JP 2014504381 A JP2014504381 A JP 2014504381A JP 2013510730 A JP2013510730 A JP 2013510730A JP 2013510730 A JP2013510730 A JP 2013510730A JP 2014504381 A JP2014504381 A JP 2014504381A
Authority
JP
Japan
Prior art keywords
data
storage unit
data object
objects
length
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2013510730A
Other languages
English (en)
Inventor
カムレッシュ ガンディー
Original Assignee
カムレッシュ ガンディー
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by カムレッシュ ガンディー filed Critical カムレッシュ ガンディー
Publication of JP2014504381A publication Critical patent/JP2014504381A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/0292User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/657Virtual address space management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

コンピューティングデバイス内で、データオブジェクトを記憶し修正するためのデータ処理システムの一実施形態であり、データオブジェクトの記憶空間内でデータを直接挿入しまたは除去することにより、データオブジェクトを修正する。データオブジェクトは、固定長または可変長のものとすることができる。データオブジェクトは、ネストすることができる。データオブジェクトの長さ、名前、データタイプ、値、および構成は修正することができる。他の実施形態についても説明し、図示する。

Description

本発明は、コンピュータおよび他の電子装置上のデータオブジェクトを組織化することに関する。より詳細には、本発明は、データオブジェクトおよびネストされたデータオブジェクトを構成すること、ならびにデータオブジェクトおよびネストされたデータオブジェクトの中に可変長データを実行時に挿入し除去することに関する。
コンピュータや他の電子装置などのデータ処理システムは、データオブジェクトをメモリ領域、ファイルやファイル領域、データ構造など、その記憶ユニット内に記憶する。
データオブジェクトは、論理的な方法で組織化されるいくつかのデータ要素を含む。データ要素は、一次データオブジェクトまたは複合データオブジェクトとすることができる。それ自体が他のデータオブジェクトの要素であるデータオブジェクトを子データオブジェクトまたはネストされたデータオブジェクトと呼び、もう一方のデータオブジェクトを親データオブジェクトと呼ぶ。
データを構成するために、データオブジェクトと、そのデータオブジェクトへのポインタとを区別する。したがって、
i.データオブジェクトを、他のデータオブジェクトの記憶空間内に記憶することができる。その場合、そのデータオブジェクトは、子データオブジェクトまたはネストされたデータオブジェクトと呼ばれる。
ii.あるいは、データオブジェクトは、それ自体の記憶空間内に記憶してもよい。そのデータオブジェクトのポインタ、参照、ハンドル、または他のアドレスが他のデータオブジェクト内に記憶される。したがって、そのデータオブジェクトは他のデータオブジェクトの要素ではない。代わりに、それらのポインタ、参照、ハンドル、または他のアドレスが、他のデータオブジェクト内の子データオブジェクトまたはネストされたデータオブジェクトである。
データオブジェクトは、小さくても大きくてもよい。データオブジェクトの一例は、C言語における「構造体」である。データ構造およびファイル構造も、データオブジェクトであり得る。いくつかのデータ表およびインデックスを含むデータベースは、データオブジェクトのもう1つの例である。データオブジェクトによって要求されまたは使用される記憶空間の量を、データオブジェクトのサイズまたは長さと呼ぶ。
記憶ユニットは、論理アドレス空間内に、データを記憶するためのいくつかの順次アドレスを備える。データオブジェクトは、メモリ領域、ファイルなどの記憶ユニット内に記憶することができる。一部のデータ構造(例えばアレイ)も、データを記憶するためのいくつかの順次的な論理アドレスを備え、データオブジェクトをその中に記憶できる記憶ユニットとして使用することができる。
記憶ユニットは、メモリ内のページやディスク上のセクタやクラスタなどの、物理アドレス空間も有する。一部の事例では、物理アドレスは論理アドレスと同じ場合がある。しかし他の事例では、物理アドレスは論理アドレスと異なる。そのような場合、データにアクセスできるようにするために、物理アドレスと論理アドレスとの間の関連付けが保たれる。
記憶空間は実行時にどのように割り当てられるのか
既存のデータオブジェクトを修正することを含む、データオブジェクトを動的に構成することは追加の記憶空間を必要とする。使用可能な記憶空間、または未使用の記憶空間は、以下のようにいくつかの場所で見つけることができる。
1.未使用記憶空間は、新たな記憶ユニットを作成することにより割り当てることができる。したがって、記憶空間を提供するために、新たなメモリ領域または新たなファイル等を作成することができる。
2.未使用記憶空間は、その目的で予備空間が確保されている場合、データオブジェクト内で見つけることができる。
3.未使用記憶空間は、ヒープまたは他のヒープライク(heap−like)な動的記憶域マネージャによって提供することができる。ヒープは、大きなメモリ領域で構成され、そのメモリ領域から、可変長データオブジェクトを記憶するためのいくつかのより小さな小領域を割り当てる。したがって、
a.C言語は、ヒープから数バイト割り当てるための「malloc」関数を提供する。
b.多くのファイル構造では、ヒープライクなメモリマネージャが、未使用の記憶領域を追跡し、記憶空間を動的に提供するために使用される。
4.未使用記憶空間は、論理アドレス空間の末尾に割り当てることができる。例えば、
a.ファイルの末尾にある記憶空間を使用することにより、テキストファイル内にいくつかの行を挿入することができる。
b.多くのCコンパイラは、プロセススタックの最上部の可変長メモリ領域を割り当てるために使用される「alloca」関数を実装する。
メモリを割り当てるためのこれらの方法のそれぞれには、欠点がある。使用する方法の選択は、データ長、データに対して頻繁に行われることが予期される操作の種類、および速度の必要性によって決まる。
データオブジェクトを構成するための方法
データオブジェクトを構成するためのいくつかの方法が存在する。方法の選択は、記憶する必要があるデータの特性、およびデータに対して行われることが予期される操作によって通常決まる。既存の各データ構成方法には長所と短所がある。短所がない既存の方法はない。データオブジェクトがネストされる場合、さらなる厄介な問題が生じる。方法の利点の多くは、データオブジェクトがネストされる場合は利用できない可能性がある。
システムの効率は、データオブジェクトを構成するために使用する方法、とりわけ既存のデータオブジェクトを修正することを含む、動的に構成するために使用する方法次第である。
親データオブジェクトに対するデータ要素の配置、または親データオブジェクト内の他のデータ要素に対するデータ要素の配置はかなり重要である。システム内でデータオブジェクトがよく組織化されている場合、そのシステムは、より優れた効率で機能することができる。
一部の既存のデータ構成方法は、システム内でデータオブジェクトの最適化された配置を行うが、データオブジェクトの動的な構成または実行時の修正については、初歩的なサポートしか提供せず、またはサポートを提供しない。他の方法は、データオブジェクトの動的な構成および実行時の修正を効率的に行うが、データオブジェクトの最適化された配置を行うことができない。
データオブジェクトの動的な構成および修正は、多くの理由により困難である。それらの理由の一部を以下に記す。
i.データオブジェクト内で可変長データ要素を維持する必要がある。
ii.データオブジェクト内で可変数のデータ要素を維持する必要がある。
iii.ネストされたデータオブジェクトを含め、データオブジェクト内で実行時にデータ要素を挿入しまたは除去する必要がある。
iv.高水準の動作効率を維持する必要がある。
v.利用可能な記憶空間を賢明に使用する必要がある。
vi.システムを誤りなしに維持する必要がある。
vii.ダイナミックメモリの割当て後、データの配置の順序を維持する必要がある。
viii.ダイナミックメモリを割り当てるためのそれぞれの方法には、欠点がある。
したがって、データオブジェクトを構成するための新たな方法が必要である。
データオブジェクトを構成するための方法について、いくつかの文献が記載している。例えば以下のものがある。
i.「The‘C’Programming Language」、KernighanおよびRitchie著は、C言語でデータオブジェクトを構成するための方法について記載する。
ii.文献「Data Structures and Algorithms」、Aho、Hopcroft、およびUllman著は、データ構造を構成するための方法について記載する。
iii.文献「File Structures, An Object−Oriented Approach with C++」、Folk、Zoellick、およびRiccardi著は、ディスクまたはファイル内に記憶するためのデータオブジェクトを構成するための方法について記載する。
データを構成するために一般に使用されるいくつかの方法を以下で論じる。
1.固定された同じサイズのデータオブジェクト
データオブジェクトを構成する一般に使用される方法によれば、記憶ユニット内の連続した論理アドレスに、いくつかの固定された同じサイズのデータオブジェクトが記憶される。この方法は、データオブジェクトのリストを維持するのに有用である。
この方法の一例は、Cプログラミング言語における「アレイ」である。もう1つの例は、いくつかの固定長レコードを含む、ファイル内に記憶されるデータ表である。レコードの相対位置は、先行するレコード数をレコードサイズと掛けることによって決められる。この方法は、データオブジェクトの直接アクセスを可能にする。この方法のさらに別の一例は、いくつかの固定された同じサイズのエントリが記憶されるbツリーノードである。
各要素の長さおよび相対アドレスが分かっているか、それらを容易に求めることができるので、この方法では、データ要素の長さまたはアドレスを追跡する必要はない。
データオブジェクト内でデータを挿入しまたは除去することは、記憶ユニットのサイズを拡張でき、データオブジェクトが記憶ユニット内の他のデータオブジェクトによって制限されない場合に行うことができる。したがって、
i.いくつかの追加エントリをbツリーノード内に挿入できるが、その目的でbツリーノード内に確保される予備空間の量によって制限される。
ii.それ自体のファイル内に記憶されるデータ表の中に追加のレコードを挿入することができる。
この方法は、いくつかの欠点を有する。それらの一部を以下に記す。
i.前もってその目的で確保される任意の記憶空間を超えるデータの挿入はできない。さらに、データオブジェクトを記憶するために境界のない論理アドレス空間を設けることは、必ずしも可能または有利とは限らない。
ii.データオブジェクトが固定された等しいサイズのものでない場合、この方法は不適当である。
iii.この方法は、データオブジェクト間の関係(親−子関係や他の関係など)を確立しない。
したがって、この方法は、データオブジェクト、とりわけネストされたデータオブジェクトを構成するのに不適当である。
2.区切りデータ
別の方法によれば、記憶ユニット内の連続した論理アドレスに、いくつかの可変長データオブジェクトが記憶される。各データオブジェクトは、「分離記号」または「区切り記号」により、その隣接するデータオブジェクトから隔てられもしくは区切られる。
例えば、
i.テキストファイルでは、「改行」文字を使用して、ある行を別の行と分ける。
ii.コンマ区切りファイルでは、コンマまたは他の区切り記号を使用してフィールドを区切る。
iii.bツリーノードでは、区切り記号により、可変長エントリを他のエントリと分けることができる。
iv.xmlドキュメントでは、分離記号として「<」および「/>」タグが使用される。
追加データを挿入することは、データオブジェクトが、ファイルなどの境界のないアドレス空間内に記憶される場合に行うことができる。あるいは、挿入は、データ内に予備の記憶空間が確保されている場合に行うことができる。テキストファイル内で文字を挿入しまたは除去すると、ファイル内のその後の行が、より高位のまたはより低位の論理アドレスに移される。
この方法は、いくつかの欠点を有する。それらの一部を以下に記す。
i.「分離記号」がデータオブジェクトと混同されないことを保証する必要がある。
ii.前もってその目的で確保される任意の記憶空間を超える、境界のないデータオブジェクト内のデータの挿入および除去はできない。多くの場合、境界のないアドレス空間をデータオブジェクトに与えることは可能でも有利でもない。したがって、bツリーノード内へのエントリの挿入は、bツリーノードのサイズによって限定される。
iii.データ要素の相対アドレスまたは長さは追跡されず、また容易に分かることもない。そのためこの方法は、データオブジェクトへの直接アクセスを提供しない。例えば、テキストファイルでは、所定の行にアクセスするために改行文字をスキャンする必要がある。したがって、この方法は、データが頻繁に修正されることが予期され、データ量が多く、またはシステム効率が極めて重要な場合は不適当である。
iv.この方法は、たとえデータオブジェクト間の関係がデータ内に記載される場合があっても、データオブジェクト間の関係を確立しない。したがって、データオブジェクトの他のデータオブジェクトとの関係(親−子関係など)を容易に推測できず、そのような関係を求める前に全データをスキャンする必要がある。
3.データタイプに基づく組織化
別の方法によれば、システムが、データオブジェクトに関する「データタイプ」または「データテンプレート」を維持する。データタイプは、データオブジェクト内にいくつかのデータ要素を記憶するための記憶パターンを提供する。記憶パターンは、データ要素のアドレスを求めるために使用される。
この方法は、多くのプログラミング言語で使用される。この方法の一例は、「C」言語プログラムにおける構造体である。この方法は多くのファイル構造でも使用される。データ要素に割り当てられる記憶空間は、データオブジェクト内の他のデータ要素に割り当てられる記憶空間と等しくない場合がある。システムは、データ要素の直接アクセスを提供する。データ要素のアドレスおよび長さは固定されており、そのためデータ要素の長さまたは相対アドレスを追跡する必要はない。この方法は、ネストされたデータオブジェクトの構成を可能にする。
この方法は、限られた量の可変長データを管理する能力を提供する。典型的には、可変長データ要素を記憶するための適度に大量の記憶空間が確保される。例えば、「生徒」データタイプは、生徒の名前を記憶するための30文字幅のフィールドを含むことができる。しかし、これには多くの欠点がある。それらの欠点の一部を以下に記す。
i.記憶空間の量を前もって推定する必要がある。
ii.確保した記憶空間が大きすぎる場合、記憶空間を無駄にすることになる。
iii.記憶する必要があるデータ量が確保した空間よりも大きい場合、データを記憶し損なうことになる。
4.長さまたはアドレスの追跡
別の方法によれば、データオブジェクト内のいくつかの可変長データ要素が、データオブジェクトの記憶空間内のいくつかのアドレスに記憶される。
データ要素の長さを追跡することにより、データ要素への直接アクセスが提供される。あるいは、各要素のアドレスを追跡する。理解され得るように、これらの2つの方法は等価であり、データをスキャンすることなしにデータ要素にアクセスできるようにする、同じ機能を実行する。データ要素の長さまたはアドレスを追跡するために、アドレス、オフセット、長さ、累積長さ、データオフセット、または他の関連情報を記憶することができる。
例えばbツリーノードでは、いくつかの可変長エントリを記憶することができる。いくつかの方法でこれを行うことができ、その一部を以下に記す。
i.各エントリの始めに長さインジケータを記憶する。
ii.全エントリの長さインジケータをノード内に記憶し、その後にエントリが続く。
iii.エントリのオフセットをノード内に記憶し、その後にエントリが続く。
iv.エントリの累積長さをノード内に記憶し、その後にエントリが続く。
予備の記憶空間がその目的で維持されている場合、限られた量のデータをデータオブジェクト内で挿入しまたは除去することができる。したがって、既存のデータオブジェクト内で、いくつかの追加のデータ要素を付加し、挿入し、または除去することができる。また、データ要素の長さは随時増すことも減らすこともできる。この方法は、bツリーノード内の可変数のエントリを維持するために、一部のbツリーで使用される。
この方法にはいくつかの欠点がある。それらの欠点の一部を以下に記す。
i.必要な予備空間の量を前もって推定する必要がある。
ii.予備空間が大きすぎる場合、記憶空間を無駄にすることになる。
iii.記憶する必要があるデータ量が予備空間よりも大きい場合、データを記憶し損なうことになる。
5.アレイに基づくデータオブジェクトの組織化
別の方法によれば、線形記憶空間内にいくつかのデータオブジェクトが記憶される。データオブジェクトが他のいくつかのデータオブジェクトに関係するように、データオブジェクト間の関係が確立される。
例えば、Aho、Hopcroft、およびUllmanは、線形配列でツリーデータ構造を構成するための方法について記載している(文献「Data Structures and Algorithms」、Addison Wesley Publishing Company、1983年、84項内の「An Array Representation of Trees」の節を参照されたい)。著者らは、ツリーを走査するための方法についても記載している。ここでは、ツリー内のノードの、ツリー内のいくつかの子ノードとの関係が示されている。
一部の事例では、ファイルの末尾に新たなデータを記憶することにより、データの挿入および除去が行われる。したがって、例えばファイル内のレコードの中の「生徒」フィールドは、
i.より大きい新規フィールドを記憶するために、ファイルの末尾に新たなデータ領域を割り当て、
ii.ファイル内のデータオブジェクトの中の既存フィールドを無効化し、
iii.その場所に、ファイルの末尾にある新たなデータ領域へのポインタを記憶すること
により、より大きなフィールドで置き換えることができる。
しかし、この方法を使用してデータを挿入および除去することには、以下のいくつかの欠点がある。
i.この方法は、データを修正する度にいくつかの小さなデータ領域を作り、データにアクセスする際の効率の悪さの原因となる。
ii.この方法の結果として参照の局所性は保たれず、多数のページフォルトおよびキャッシュミス、ならびにシステム動作の効率の悪さを招く。
iii.データを修正するとき、ファイル内にいくつかの未使用の、無効化されたデータ領域が作成される。
iv.データが、その最適な方法で維持されない。修正する度に、ますます多くの乱れがデータ内に取り入れられる。
v.動作の効率を取り戻すために、データを新たなファイルに適切な順序で周期的に書き換えなければならない。
6.データオブジェクトの再作成
この方法によれば、新たなデータ要素が挿入され、除去され、または修正されるときにデータオブジェクトを再作成することにより、そのデータオブジェクトは可変長データを維持することができる。例えば、
i.C言語では、アレイは固定数の要素を記憶することができる。追加の要素を挿入するために、新たなメモリ空間を割り当てることにより、新たなアレイが作成される。次いで、元のアレイ内のいくつかの既存の要素が、新たな要素とともに新たなアレイにコピーされる。その後、元のアレイは通常破棄され、代わりに新たなアレイが使用される。
ii.ファイル内にデータ要素を挿入するために、元のファイルのコンテンツを新たなデータ要素とともに新たなファイルにコピーすることができる。その後、元のファイルは通常破棄され、代わりに新たなファイルが使用される。
この方法は、大量のデータにアクセスし、または大量のデータをコピーするものであるため効率が悪い。
上記に挙げた欠点の結果として、上述の方法のそれぞれは、データオブジェクト、とりわけネストされたデータオブジェクトまたは大きいデータオブジェクトを動的に構成するのに適さない。
7.ヒープに基づくデータ記憶
別の方法によれば、ヒープから割り当てられた記憶空間を使用して可変長データが記憶される。データオブジェクトは、データ自体は記憶しない。代わりに、データオブジェクトは、データへのポインタ、参照、または他のハンドルを記憶する。データの構成において、ポインタ、参照、または他のハンドルは、データオブジェクト内の子要素である。
したがって、この方法は、データオブジェクト内に可変長データを記憶する能力を提供する。前もってデータ長が分かっている必要はない。したがってこの方法は、上記で論じた他の方法よりも順応性がある。
この方法は多くのファイル構造でも使用される。この方法のもう1つの例は、ファイル内のbツリーの組織化である。bツリーでは、動的に割り当てられる記憶空間を提供するために、ヒープライクな動的メモリマネージャを使用して未使用の記憶領域を追跡する。
しかし、この方法もいくつかの欠点を有する。それらの欠点の一部を以下に記す。
i.この方法は、ヒープ内の未使用の記憶領域を管理することを必要とする。
ii.この方法が要求するデータ要素の管理および追跡は、多くの障害の原因である。
iii.この方法は、記憶空間の断片化、ならびにページフォルトおよびキャッシュミスの増加を招き、それによりシステムを遅くする。
iv.参照の局所性が保たれず、それにより効率の悪さを招く。
v.この方法は、使用できない記憶空間の領域を作成することになる。
vi.データをその最適な位置に記憶することは通常できない。
本発明の目的は、以下で論じるようにいくつかのデータオブジェクトを記憶し、いくつかの操作をその中で実行できるデータ処理システムを提供することである。データ処理システム内のデータオブジェクトは、いくつかの固定長または可変長のデータ要素を含む。データオブジェクトはネストすることができる。データオブジェクト内のデータ要素への直接アクセスが提供される。データオブジェクト内のデータ要素は、そのインデックスまたは名前によってアクセスすることができる。
本発明によれば、データオブジェクトを構成し、データオブジェクト内に記憶空間を挿入しまたは除去することにより、実行時にデータオブジェクトを修正するための方法が提供される。この方法はヒープを必要としない。この方法は、予備の記憶空間を確保することも必要としない。この方法は、論理的かつ効率的な順序で、データオブジェクト内のデータ要素を配置できるようにする。いくつかのデータ要素を挿入しまたは除去した後でさえ、参照の局所性が保たれる。
データオブジェクトの長さ、データタイプ、名前、または値は、随時修正することができる。いくつかのデータ要素を、データオブジェクト内で挿入しまたは除去することもできる。修正は、ネストされたデータオブジェクト内でも行うことができる。この方法は、データオブジェクトと、1つまたは複数の他のデータオブジェクトとの間の関係を表し、維持する能力を提供する。
本発明にはいくつかの利点がある。
i.この方法は、ポインタを使用する必要なしに可変長データを記憶する能力を提供する。データオブジェクトは、可変数のデータ要素を含むことができる。データオブジェクトの長さは、都度異なり得る。データ要素のサイズは、固定される必要も等しい必要もない。
ii.この方法は、ネストされたデータオブジェクト内のデータの挿入および除去をサポートする。追加データの挿入をサポートするために、予備空間を確保する必要はない。
iii.この方法は、データ要素を、その最適な位置に記憶することをサポートする。
iv.この方法は、システムがより効率的に実行されることを可能にする。
v.この方法は、データを挿入しまたは除去した後でさえ、データ要素の直接アクセスを可能にする。
vi.この方法は、データ要素の名前またはインデックスにより、そのデータ要素にアクセスできるようにするのに有用である。
vii.断片化、ページフォルト、およびキャッシュミスが減る。データを挿入しまたは除去した後でさえ、参照の局所性が維持される。
viii.動的に割り当てられる記憶空間を維持し、または管理する必要がない。
ix.ヒープ内の使用できない記憶領域の問題が低減する。
x.この方法は、データ要素のデータタイプを修正するのに有用である。
xi.この方法は、欠落したデータ要素のデフォルト値を維持するのに有用である。
図面では、密接に関係した図面は、同じ番号だが異なる英字の添え字を有する。
本発明の一実施形態によるデータ処理システムを示す。 いくつかのデータ要素を実行時に挿入し、または除去することができる可変長アレイVAを示す。 可変長アレイVA内で追加のデータ要素を挿入し、または除去する方法を示すフローチャートである。 そのデータタイプを随時修正することができるデータ要素を記憶するために使用される、可変タイプデータオブジェクトVTDOを示す。 可変タイプデータオブジェクトVTDO内に記憶されるデータ要素のデータタイプを修正する方法を示すフローチャートである。 データ処理システム内にデータオブジェクトを挿入する前の、記憶ユニット内のデータオブジェクトの配置を示す。 データ処理システム内にデータオブジェクトを挿入した後の、記憶ユニット内のデータオブジェクトの配置を示す。 いくつかの可変長データオブジェクトをその中で記憶し、修正し、挿入し、除去することができる複合データオブジェクトCOを示す。 複合オブジェクトCO内に、追加のデータオブジェクトを挿入する方法を示すフローチャートである。 ネストされたデータオブジェクト内に、追加のデータ要素を挿入する方法を示すフローチャートである。 データ要素が階層状に配置される、階層型データ構造HDSを示す。 データ要素が階層状に配置される、階層型データ構造HDSを示す。 データ要素が階層状に配置される、階層型データ構造HDSを示す。 データ要素が階層状に配置される、階層型データ構造HDSを示す。 データが可変サイズのページを有する仮想メモリ領域内に記憶される、データ処理システムを示す。 仮想メモリ領域を使用し、データ処理システム内に追加のデータを挿入するためのフローチャートを示す。 データが固定サイズのページを有する仮想メモリ領域内に記憶される、データ処理システムを示す。
本発明の好ましい実施形態によれば、いくつかのデータオブジェクトを記憶するためのデータ処理システムが提供される。
実行時にデータオブジェクトを修正するための方法を提供する。データオブジェクト内に追加のデータを挿入することができ、それにより、1つまたは複数の追加のデータ要素が挿入され、かつ/またはデータオブジェクトの長さが増加する。同様に、データオブジェクト内の既存のデータを除去することができ、それにより、データ処理システム内の1つまたは複数のデータオブジェクトが除去され、かつ/またはデータオブジェクトの長さが縮小される。
データを挿入するために、以下のステップを実行する。
i.追加のデータを記憶するための、記憶ユニット内の論理アドレスを識別する。
ii.そのように識別した論理アドレスに追加のデータを記憶するために、記憶ユニット内に追加の記憶空間を挿入する。それにより、前述の論理アドレスを越えて記憶された1つまたは複数の既存のデータオブジェクトが、その既存の論理アドレスから、より高位の論理アドレスに移され得る。
iii.挿入した記憶空間の中に追加のデータを記憶し、それにより、追加のデータオブジェクトをシステム内に挿入し、またはデータオブジェクトの長さを増加させる。
iv.追加のデータオブジェクトは、他のデータオブジェクトの子オブジェクトとして挿入することもできる。データオブジェクトを子データオブジェクトとして挿入する場合、結果として親データオブジェクトの長さも増加する。
データ要素を除去するプロセスは上記の逆である。
データを挿入しまたは除去する間、挿入点または除去点を越えて親データオブジェクトの記憶空間内に記憶されるいくつかのデータ要素を、記憶ユニット内の新たな論理アドレスに再配置することができる。記憶ユニット内のいくつかの他のデータオブジェクトも、新たな論理アドレスに再配置することができる。
データオブジェクトマネージャは、データオブジェクトのアドレスを追跡するために、データオブジェクト内のデータ要素に関する相対アドレス、長さ、データタイプ、または他の情報を必要に応じて記憶する。したがって、データオブジェクトへの直接アクセスが提供される。データオブジェクトマネージャは、データを挿入しまたは除去する間に更新される。
データオブジェクトマネージャは、システム内の、またはデータオブジェクト内のいくつかのデータオブジェクトの名前を記憶する。この方法は、データ要素に名前でアクセスできるようにする。データオブジェクトの名前も随時修正することができる。
データオブジェクトマネージャは、データオブジェクトのデータタイプを記憶する。データオブジェクトのデータタイプも、随時修正することができる。データオブジェクトのデータタイプまたはデータテンプレートは、そのデータオブジェクトの構造を規定するために使用することができる。データオブジェクトのデータタイプは、データオブジェクト内の欠落したデータ要素のデフォルト値を定めるために使用することもできる。
いくつかのデータ要素を階層状に記憶する方法も示す。
他の実施形態は、この方法を使用することを示し、データを仮想メモリ領域内に記憶する。
データ処理システムは、データオブジェクトを記憶ユニット内に記憶し、以下で論じるようにデータは効率的に挿入しまたは除去することができる。
データオブジェクトの構成における記憶ユニット
最も一般に使用される、使用される記憶ユニットは、データを効率的に挿入しまたは除去する能力を提供しない。概して、記憶ユニット内でデータを挿入しまたは除去するのにかかる時間は、挿入点または除去点より先の記憶ユニット内のデータの量に依存する。したがって、挿入点より先の記憶ユニット内のデータの量が多い場合、データを挿入するのにその分だけ多くの時間がかかる。このことは、データの挿入および除去を非実用的にする。これらの記憶ユニット内での挿入および除去操作は、O(n)程度であると言われ、ただしnは記憶ユニット内のデータ量である。
ただし、他の一部の記憶ユニットは、データを効率的に挿入しまたは除去する。これらの記憶ユニットでは、挿入または除去を実行するのにかかる時間は、挿入点または除去点より先のデータの量に依存しない。これらの記憶ユニットの一部の例には以下のものがある。
i.本出願人の発明(特許出願第PCT/IN2010/000259号明細書)では、ファイルシステムやメモリシステムなど、記憶ユニット内でデータを効率的に挿入し除去する記憶システムについて記載している。
ii.本出願人の発明(特許出願第PCT/IN2010/000641号明細書)では、可変サイズのページを使用し、仮想メモリシステム内でデータを効率的に挿入し除去する仮想メモリシステムについて記載している。
iii.Sinclair、Alan Welshによって記載された、フラッシュにより最適化されたファイルシステム(特許出願第PCT/UD2007/088165号明細書)は、フラッシュベースのファイルシステム内でデータを効率的に挿入しまたは除去する、ファイルシステムである。
iv.Simon Tathamによって記載されたカウントbツリー(counted b−tree)は、指定のインデックスにおいて、ソートされていないbツリー内で項目を挿入しまたは除去することをサポートする、bツリーデータ構造の一形態である(http://www.chiark.greenend.org.uk/〜sgtatham/algorithms/cbtree.html)。
これらの他の記憶ユニットは、挿入点または除去点より先のデータを、そのデータにアクセスしまたはそのデータをコピーすることなしに新たなアドレスに再配置する。代わりにこれらの記憶ユニットは、データの物理アドレスをデータの論理アドレスから切り離し、物理アドレスを新たな論理アドレスに再び関連させることによりデータを再配置する。その結果、これらの記憶ユニットは、データの挿入または除去に関してより優れた効率をもたらす。したがって、
i.本出願人の発明(上記の番号i.)の記憶ユニット(ファイルやメモリ領域など)は、データを記憶するためのいくつかの論理アドレスを提供する。この記憶ユニットは、データをその中に物理的に記憶する可変サイズの記憶ブロックのリストも含む。記憶ブロックは、予備容量も含むことができる。記憶ブロック内のアドレスは、論理アドレス空間にマップされる。記憶ブロック内のデータの論理アドレスは、先行する記憶ブロック内の使用済み容量によって決まる。
したがって、この記憶ユニットは、その記憶ブロック内に予備容量を維持する。リスト内に追加の記憶ブロックを挿入することにより、記憶ユニット内にさらなる予備容量を挿入することができる。ファイル内にデータが挿入されるとき、この予備容量が使用される。
挿入の結果として、挿入点より先の記憶ユニット内のデータが、より高位の論理アドレスに再配置される。したがってこの再配置は、データを、その物理アドレスから新たな物理アドレスにコピーすることも移すことも必要としない。再配置されるデータの記憶ブロックおよび物理アドレスは、変わらないままである。
本出願人の発明(上記の番号ii.)で記載した仮想メモリシステムでは、ページテーブルや変換索引バッファ(すなわちTLB)などのマッピング装置を使用し、いくつかの可変サイズのページを仮想アドレス領域にマップすることができる。
システムが提供する仮想メモリ領域では、仮想アドレス空間からいくつかのページをマップ解除し、それらを新たな仮想アドレス空間に再マップすることにより、所定の挿入点に追加のデータを挿入することができる。したがって、ページ内のデータをその物理アドレスから移動させることなしに、それらのデータは新たな論理アドレスに再配置される。挿入されるデータに記憶空間を与えるために、1つまたは複数の追加のページが挿入点においてマップされる。したがって、その物理アドレスから大量のデータをコピーすることも移動することもなしに、データをメモリ領域から挿入しまたは除去することができる。
フラッシュにより最適化されたファイルシステム(上記の番号iii.)では、いくつかの物理アドレスをいくつかの新たなファイルアドレスに再マップすることにより、フラッシュベースの記憶媒体内のファイル内にデータを挿入する方法について記載している。挿入点より先に記憶されるいくつかのデータオブジェクトを、挿入中に物理媒体内の新たなアドレスに物理的に再配置する必要はない。
カウントbツリー(上記の番号iv.)は、いくつかのノード内にいくつかのエントリを記憶する。エントリは、キーを使用することなしにカウントbツリー内のインデックスにおいて記憶し、取得し、挿入し、除去することができる。
bツリー内でエントリとして1バイト記憶することにより、論理アドレス空間を作成することができる。各エントリのインデックスを、データの論理アドレスとみなすことができる。カウントbツリーは、データを構成するための記憶ユニットとして使用することができる。
bツリー内の各ノードは、エントリが記憶されるいくつかの物理アドレスを提供する記憶ブロックとみなすことができる。エントリが記憶されるノード内の各物理アドレスは、bツリー内の論理アドレスまたはインデックスに関連する。
bツリー内に新たなエントリが挿入されると、いくつかのノード内の少数のエントリが再構成される。これにより、挿入点より先のインデックスにおける多数のエントリが、より高位のインデックスに移される。したがって、物理アドレスの論理アドレスとの関連付けを変えることにより、カウントbツリー内のいくつかのエントリが、より高位のアドレスに再配置される。多数のエントリは、挿入中にアクセスされることも物理的にコピーされることもない。
これらの他の記憶ユニット内でデータを挿入し除去する効率性は、O(n)よりもよく、ただしnは記憶ユニット内のデータ量である。例えば、bツリー(したがってカウントbツリー)内でデータを挿入し除去する効率は、O(log n)程度であると言われる。
既存のデータオブジェクト構成法は、これらの他の記憶ユニットの能力を活用しない。本出願人の発明は、これらの記憶ユニットが提供する、データを速く挿入し除去する能力を活用することを提案する。本発明では、データオブジェクトを記憶するために使用する記憶ユニットは、上記で論じた効率の悪さに見舞われない他の任意の記憶ユニットとすることもできる。
次に、本発明を図面と併せて説明する。
図1に、データ処理システムの好ましい一実施形態を示す。データ処理システム101は、記憶ユニット102、および記憶ユニット内の順次的な論理アドレス104に記憶されるいくつかのデータオブジェクト103を含む。
記憶ユニット102は、前の節で論じたようにデータを効率的に挿入し除去するファイル、メモリ領域、データ構造、または他の記憶ユニットである。
データ処理システム内のデータオブジェクト103は、既存のデータオブジェクトまたは実行時に作成されるデータオブジェクトとすることができる。データ処理システム内のデータオブジェクトは、「構造体」、「アレイ」、「長さに基づく」データオブジェクト、データ構造、ファイル構造、または先に記載した他の任意のデータタイプ、もしくは以下に記載するデータオブジェクトのうちの1つのインスタンス等とすることができる。データオブジェクトは、他のデータオブジェクトの子データオブジェクトとすることもできる。
データ処理システムに対して行われるいくつかの操作について、図面と併せて以下に説明する。
図2は、可変長アレイVA201のデータテンプレートを示す。VA201は、複合データオブジェクトであり、その記憶空間の中にいくつかの固定サイズのデータ要素を記憶するために使用する。VA201は、
i.Lenフィールド202、および
ii.データ空間フィールド203
を含む。
データ空間フィールド203は、VA201内のいくつかの要素を記憶するために確保される空間を表す。Lenフィールド202は、整数フィールドであり、データ空間フィールド203の長さを記憶するために使用する。
ただし、データ空間フィールド203は、予備空間を一切確保しない。
VAのインスタンスが作成されると、所定数の固定サイズレコードを記憶するのに十分大きいようにデータ空間フィールドが作成される。データ空間フィールドの長さは、Lenフィールド内に記憶される。VAに割り当てられる総記憶空間は、データ空間フィールドの長さ、およびLenフィールドの長さの和に等しい。データ要素は、データ空間フィールド内に記憶される。
追加のデータ要素をVA内に随時挿入することができる。図3は、VA内にデータ要素を挿入する方法を示すフローチャートである。したがって、
i.ステップ301で、新たなレコードのサイズに等しい追加の記憶空間を記憶ユニット102内に挿入し、それにより、
a.挿入点以降にあるデータ処理システム102内の1つまたは複数の既存のデータオブジェクトがより高位のアドレスに移され、
b.データ空間フィールド303の長さが増加され、
ii.ステップ302で、Lenフィールドの値を更新し、
iii.ステップ303で、新たなデータ要素をデータ空間フィールド内に記憶する。
VA内のデータ要素を除去するプロセスは、挿入プロセスの逆である。
データ空間フィールド内に追加の記憶空間が挿入される場合、記憶ユニット内の挿入点以降において記憶ユニット102内に記憶される、1つまたは複数のデータオブジェクトがより高位のアドレスに移され、VAのサイズが増加される。同様に、VA内の記憶空間が除去される場合、点または除去より先の1つまたは複数のデータオブジェクトがより低位のアドレスに移され、VAのサイズが減らされる。
こうしてVAの長さが修正されると、VA内の既存のデータ要素の1つまたは複数が新たなアドレスに移される。したがって、VA自体が他のデータオブジェクトの子である場合、VA内でデータ要素が挿入されまたは除去されるとき、親オブジェクト内の1つまたは複数のデータ要素が再配置される可能性がある。
図4は、可変タイプデータオブジェクトVTDO401を示す。VTDO401は、単一のデータ要素を記憶するために使用する。VTDO401内に記憶されるデータ要素のデータタイプは、以下に説明するように随時変わり得る。
図4に示すように、VTDO401は、
i.データタイプフィールド402、
ii.データ空間フィールド403、および
iii.データ要素404
を含む。
データタイプフィールド402は、データ要素404のデータタイプを記憶するために使用する。
データ空間フィールド403は、データタイプフィールド402内に記憶されるデータタイプに応じて、データ要素404を記憶するために確保される空間を表す。
データ要素404は、データ空間フィールド403内に記憶される。
VTDOのインスタンスが作成されると、データタイプフィールドを使用して所定のデータタイプを記憶し、データ空間フィールドには、所定のデータタイプのインスタンスを記憶するのに十分な記憶空間が与えられる。VTDOに割り当てられる総記憶空間は、データタイプフィールドに割り当てられる記憶空間の和、およびデータ要素のサイズに等しい。
データ要素404のデータタイプは、随時修正することができる。図5は、データ要素のデータタイプを修正する方法を示すフローチャートである。したがって、
i.ステップ501で、新たなデータタイプをデータタイプフィールド内に記憶する。
ii.ステップ502で、新たなデータタイプの記憶要件を、データ空間フィールドに既に割り当てられた記憶空間の量と比較する。
iii.ステップ503で、新たなデータタイプの記憶要件がデータ空間フィールドの既存の長さを上回る場合、追加の記憶空間をデータ空間フィールド内に挿入し、それによりVTDOのサイズを増加させる。
iv.ステップ504で、新たなデータタイプの記憶要件がデータ空間フィールドの既存の長さを下回る場合、データ空間フィールド内の余分な記憶空間を除去し、それによりVTDOのサイズを減らす。
v.ステップ505で、新たなデータタイプに応じたデータ要素の値をデータ空間フィールド内に記憶する。
記憶空間を挿入しまたは除去する結果として、データ処理システム101内でVTDOを越えて記憶されるいくつかのデータオブジェクトを、記憶ユニット内の新たな論理アドレスに移すことができる。
図6Aおよび図6Bは、データオブジェクトを挿入する前および挿入した後それぞれの、記憶ユニット内における、例示的データ処理システム内のデータオブジェクトの配置を示す。
図6Aは、挿入前のいくつかのデータオブジェクトのアドレスを示す。したがって、データオブジェクト601、602、603、604、および605が、記憶ユニット内のアドレス611から622、623から630、631から635、636から643、および644から650のそれぞれに記憶される。データオブジェクト603は、可変長アレイVAであり、データ要素603A、603B、603C、および603Dの親オブジェクトである。VAのLenフィールドは、アドレス631に記憶される。データ要素603A、603B、603C、および603Dは、アドレス632、633、634、および635のそれぞれに記憶される。
図6Bは、データオブジェクト603内に追加のデータ要素を挿入した後の、データオブジェクトのアドレスを示す。データオブジェクト603内で、データ要素603Cの後に追加のデータ要素603Eが挿入されている。データオブジェクト601、602、603、604、および605は、今ではアドレス611から622、623から630、631から636、637から644、および645から651のそれぞれに記憶されている。VAのLenフィールドは、アドレス631に記憶される。(データオブジェクト603内の)データ要素603A、603B、603C、603E、および603Dは、アドレス632、633、634、635、および636のそれぞれに記憶される。
図7は、いくつかの可変長データ要素がその中に記憶されるデータオブジェクトである、複合オブジェクトCO701を示す。CO内のデータ要素の数は固定されていない。いくつかのデータ要素を、CO内で随時挿入しまたは除去することができる。CO内のデータ要素のサイズは可変である。あるデータ要素のサイズが、別のデータ要素のサイズと等しい必要はない。データ要素のサイズは、随時修正することができる。
図7に示すように、CO701は、
i.要素数フィールド702、
ii.データオブジェクトマネージャ703、
iii.データ空間フィールド707
を含む。
データオブジェクトマネージャ703は、
i.要素サイズフィールド704、
ii.データタイプフィールド705、および
iii.要素名フィールド706
を含む。
要素数フィールド702は、整数フィールドであり、CO内の要素数を記憶するために使用する。このフィールド内の値は、CO内で要素が挿入されまたは除去されるときに更新される。
データオブジェクトマネージャ703は、CO内に記憶されるデータ要素の長さ、データタイプ、および要素名を追跡するために使用する。
要素サイズフィールド704は、VA201のインスタンスであり、整数のリストを記憶するために使用する。このアレイ内の各エントリは、CO内に記憶される対応するデータ要素のサイズを表す。
データタイプフィールド705は、VA201のインスタンスであり、データタイプのリストを記憶するために使用する。このアレイ内の各エントリは、CO内の対応するデータ要素のサイズを表す。
要素名フィールド706は、VA101のインスタンスであり、名前のリストを記憶するために使用する。このアレイ内の各エントリは、CO内の対応するデータ要素の名前を表す。
データ空間フィールド707は、CO内のいくつかの要素を記憶するために確保される空間を表す。データ空間フィールド707は、予備空間を一切確保しない。
CO内に記憶されるデータ要素は、そのインデックスまたは位置によってアクセスすることができる。データ要素の相対アドレスは、先行するデータ要素のサイズを合計することで求めることができる。データ要素は、データ空間フィールド内の相対アドレスにおいてアクセスすることができる。
CO内に記憶されるデータ要素は、その名前によってもアクセスすることができる。各データ要素の名前は、要素名フィールド内で見つけることができる。
空のCOのインスタンスは、
i.要素数フィールド内の値をゼロに設定すること、
ii.空の要素サイズフィールドを作成すること、
iii.空のデータタイプフィールドを作成すること、
iv.空の要素名フィールドを作成すること、および
v.空のデータ空間フィールドを作成すること
によって作成される。
いくつかのデータ要素を、CO内に随時挿入することができる。図8は、所定のインデックスにおいてCO内に追加のデータ要素を挿入する方法を示す、フローチャートを示す。したがって、
i.ステップ801で、要素数フィールドの値をインクリメントし、
ii.ステップ802で、新たなデータ要素のサイズを示すために、所定のインデックスにおいて要素サイズフィールド内に整数値を挿入し、
iii.ステップ803で、新たなデータ要素のデータタイプを示すために、所定のインデックスにおいてデータタイプフィールド内にデータタイプ値を挿入し、
iv.ステップ804で、新たなデータ要素の名前を示すために、所定のインデックスにおいて要素名フィールド内に名前値を挿入し、
v.ステップ805で、新たなデータ要素のサイズに等しい記憶空間を、データ空間フィールド内の適切な位置に挿入し、それにより、
a.データ空間フィールドの長さが増加され、
b.挿入点以降にある既存のデータ要素がより高位のアドレスに移され、
iv.ステップ806で、ステップ805で挿入した記憶空間内に新たなデータ要素を記憶する。
CO内のデータ要素を除去するプロセスは、挿入プロセスの逆である。
CO内に追加の記憶空間が挿入されると、データオブジェクトの境界以降の1つまたは複数のデータがより高位のアドレスに移される。VA1内の余分な記憶空間が除去されると、データオブジェクトの境界以降の1つまたは複数のデータがより低位のアドレスに移される。
したがって、1つまたは複数の他のデータ要素のアドレスが修正され得る。同様に、データオブジェクト自体が他のデータオブジェクトの子である場合、CO内に記憶空間が挿入されるとき、親オブジェクト内の1つまたは複数のデータ要素のアドレスが修正され得る。
ネストされたデータオブジェクトのサイズも、随時修正することができる。例えば、VTDOは、CO内の所定のインデックスに記憶されるネストされたデータ要素である。データ要素のサイズが修正されると、要素サイズフィールド内の対応するエントリが更新される。この方法は、データが挿入されまたは除去された後、全てのデータオブジェクトがその既存のまたは新たなアドレスにおいてアクセス可能であることを確実にする。したがって、ネストされたデータオブジェクトを含め、データオブジェクト内でデータを随時挿入しまたは除去することができる。
図9は、CO内にネストされる、ネストされたデータオブジェクト内に追加のデータ要素を挿入するためのフローチャートを示す。したがって、
i.ステップ901で、ネストされたデータオブジェクト内に追加のデータ要素を挿入することにより、ネストされたデータオブジェクトの長さを増加させる。その結果、ネストされたデータオブジェクトより先の、記憶ユニット内の1つまたは複数のデータオブジェクトが新たなアドレスに移される。次のステップは、ステップ902である。
ii.ステップ902で、データオブジェクトの長さをCO内の要素サイズフィールド内で更新する。次のステップは、ステップ903である。
iii.ステップ901および902の結果として、親データオブジェクトCOのサイズも修正される。ステップ903で、COが他のデータオブジェクト内にネストされている場合、ステップ902を実行することにより、COの新たな長さを、その親データオブジェクトの要素サイズフィールド内で更新する。さもなければ、次のステップは、ステップ904である。
iv.ステップ904で、ネストされたオブジェクト内にデータを挿入するプロセスは完全である。
いくつかの改変形態があり得る。例えば、
i.CO内のデータオブジェクトマネージャでは、要素サイズフィールドの代わりに、要素アドレスフィールドを置き換えることができる。要素アドレスフィールドは、CO内に記憶されるデータ要素の相対アドレスを追跡する。
ii.データタイプフィールドを使用してデータタイプを追跡することができ、それによりデータ要素の長さを追跡することができる。そのような場合、要素サイズフィールドは必要でないことがある。
iii.各データ要素のデータタイプが同じであり、またさもなければ求めることができる場合、データタイプフィールドは必要でないことがある。
iv.データ要素に名前でアクセスする必要がない場合、要素名フィールドは必要でないことがある。
v.この方法は、欠落したデータ要素のデフォルト値を提供するよう、容易に向上させることができる。例えば、データオブジェクト内の欠落した要素のデフォルト値は、データオブジェクトのデータテンプレート内に規定することができる。
図10Aおよび図10Bは、本発明による階層型データ構造HDS1001を示す。階層型データ構造HDS1001は、いくつかのデータ要素が階層状に配置されるデータオブジェクトである。階層内の各データ要素はノードであり、このノードはサブノードを有する場合もある。
図10Aは、HDS内のノード間の関係の概略図を示す。図10Aによれば、ノード1002がこの階層のルートノードである。ノード1002は、3つのサブノード、すなわちノード1003、1004、および1005を有する。ノード1003は2つのサブノード、すなわちノード1006および1007を有する。ノード1004は、3つのサブノード、すなわちノード1008、ノード1009、およびノード1010を有する。ノード1005は2つのサブノード、すなわちノード1011およびノード1012を有する。各ノードは10バイトの長さを有する。
各ノードはインデックスを有する。ノードのインデックスは、レベル順走査または幅優先走査を用いて走査したときの、階層内の他のノードに対するそのノードの位置である。したがって、ノード1002、1003、1004、1005、1006、1007、1008、1009、1010、1011、および1012のインデックスは、それぞれ1、2、3、4、5、6、7、8、9、10、および11である。データオブジェクト内のノードのアドレスは、そのノードのインデックスによって決まる。
図10Bは、記憶ユニット内のノードのアドレスを示す。したがって、ノード1002、1003、1004、1005、1006、1007、1008、1009、1010、1011、および1012は、それぞれアドレス10、20、30、40、50、60、70、80、90、100、および110に記憶される。
図10Cおよび図10Dは、階層内に追加のノードを挿入した後の階層型データ構造HDS1001を示す。
図10Cは、階層型データ構造HDS1001の概略図を示す。したがって追加のノード、すなわちノード1013が、ノード1004内で、サブノード1008の後にサブノードとして挿入されている。
図10Dは、追加のノードを挿入した後の各ノードのアドレスを示す。追加のノードを挿入した後のノード1002、1003、1004、1005、1006、1007、1008、1013、1009、1010、1011、および1012のインデックスは、それぞれ1、2、3、4、5、6、7、8、9、10、11、および11である。ノード1002、1003、1004、1005、1006、1011、1007、1008、1009、および1010は、それぞれアドレス10、20、30、40、50、60、70、80、90、および100に記憶される。
データ要素のサイズが固定されておらず、可変である場合、データオブジェクト間の関係はさらに柔軟に表すことができる。可変サイズのデータオブジェクトを使用することについては、上記で既に詳しく示している。
図11は、本発明の別の好ましい実施形態を示す。したがって、データ処理システム1001は、
i.いくつかのデータオブジェクト1102、および
ii.仮想メモリ領域1103
を含む。
仮想メモリ領域1103は、
i.論理アドレス空間1104、
ii.ページのリスト1105、および
iii.メモリ管理ユニット1106
を含む。
仮想メモリシステム内のページのリスト1105はいくつかのページを含み、各ページは、仮想メモリ領域内にデータを記憶するためのいくつかの物理アドレスを提供する。ページのサイズは固定されておらず、あるページのサイズが、リスト内の他のページのサイズと異なってもよい。
メモリ管理ユニット1106は、ページテーブルTLB、またはページ内のいくつかの物理アドレスを仮想メモリ領域内のいくつかの論理アドレスにマップするための他の装置を含む。メモリ管理ユニットは、いくつかの可変サイズのページを論理アドレス空間にマップすることができる。例えば、本出願人の発明(特許出願第PCT/IN2010/000641号明細書)の中で記載したメモリ管理ユニットを使用してもよい。
ページテーブルエントリ内の各可変サイズのページは、論理アドレスに関連する。メモリ管理ユニットを使用して、ページをその関連する論理アドレスにマップする。ページの論理アドレスは、リスト内の先行するページ内のバイト数によって決まる。
いくつかの追加のバイトを、仮想メモリ領域内に随時挿入することができる。図12は、いくつかの追加のバイトを仮想メモリ領域内に挿入するためのフローチャートを示す。したがって、
i.ステップ1201で、対応するページテーブルエントリを「不存在」値で印付けすることにより、メモリ管理ユニット内のいくつかのページをマップ解除する。
ii.ステップ1202で、ページのリスト内に、適切なサイズの1つまたは複数の追加のページを挿入する。このことは以下の効果を有する。
a.リスト内の1つまたは複数の他のページをより高位の論理アドレスに移すこと、および
b.追加のデータを仮想メモリ領域内に挿入すること。
iii.ステップ1203で、対応するページテーブルエントリを「存在」値で印付けすることにより、リスト内の1つまたは複数のページを仮想メモリ領域にマップする。
仮想メモリ領域内のデータを除去する方法は上記の逆である。
この方法は、データ処理ユニット内でいくつかの追加のデータオブジェクトを挿入しまたは除去するために使用する。データ処理ユニット内にデータを挿入することの他の詳細については、既に前に説明した。
いくつかの改変形態があり得る。例えば、図13はデータ処理システム1301を示す。したがって、データ処理システム1301は、
i.いくつかのデータオブジェクト1302、および
ii.仮想メモリ領域1303
を含む。
仮想メモリ領域1303は、
i.論理アドレス空間1304、
ii.ページのリスト1305、
iii.メモリ管理ユニット1306、および
iv.ページスワッピング装置1307
を含む。
ページのリスト1305は、いくつかの固定サイズのページを含む。メモリ管理ユニット1306は、固定サイズのページを仮想メモリ領域にマップするどんなメモリ管理ユニットでもよい。
このメモリシステムは、ページスワッピング装置1307も含む。ページスワッピング装置1307は、本出願人の発明(PCT/IN2010/0000259号明細書)の中で記載したファイルである。このファイルは、先に論じたようにデータを効率的に挿入し除去することを支援する。ページスワッピング装置は、ディスク空間を使用することにより、論理アドレス空間を拡張するために使用する。ページは、物理メモリ内に、またはページスワッピング装置内に随時位置することができる。
i.メモリ管理ユニット内の1つまたは複数のページテーブルエントリを無効化し、1つまたは複数のページを論理アドレス空間からマップ解除し、
ii.
a.記憶ブロック内の予備容量を使用すること、または
b.1つまたは複数の追加の記憶ブロックを挿入することにより、ファイル内に追加の予備容量を挿入すること
により、ファイル内に追加の記憶空間を挿入し、
iii.1つまたは複数のページを論理アドレス空間にマップすること
により、仮想メモリ領域内にいくつかの追加のバイトを挿入することができる。
データオブジェクトを修正することに関する他の詳細については、先に記載した。
結論、効果、および範囲
したがって、様々な実施形態のデータ処理システムを使用して、大きく複雑なデータオブジェクトを効率的に作成し、操作することができる。
このデータ処理システムは、データおよびデータオブジェクトを操作する任意のシステムとすることができる。このデータ処理システムは、アプリケーションプログラム、ならびにシステムプログラムで使用することができる。
この方法は、多岐にわたるシステムで使用することができる。この方法は、コンパイル済みプログラムまたはインタプリタ型プログラムで使用することができる。この方法は、コンパイラ、データベースシステム、文書処理システム、ファイルシステム、仮想メモリシステム、ネットワーキングシステムおよび装置等で使用することができる。この方法は、データ構造、ファイル構造、およびデータベースを実装するのにも有用である。この方法は、プロセススタック内に追加のデータを挿入するために使用することもできる。この方法は、xmlデータを効率的な形式で記憶するのにも有用であり、データは直接操作することができる。
データは、コンピュータまたは他のコンピューティングデバイス上のメモリ領域、ファイル、アレイ、および他のデータ構造が含まれる任意の適切な記憶ユニット内に、または分散環境内に記憶することができる。
101 データ処理システム、102 記憶ユニット、103 データオブジェクト、104 論理アドレス、201 可変長アレイVA、202 Lenフィールド、203 データ空間フィールド、301−303 フローチャートのステップ、401 可変タイプデータオブジェクトVTDO、402 データタイプフィールド、403 データ空間フィールド、404 データ要素、501−505 フローチャートのステップ、601−605 データオブジェクト、603A−603D データオブジェクト603内のデータ要素、611−651 論理アドレス、701 複合データオブジェクト、702 要素数フィールド、703 データオブジェクトマネージャ、704 要素サイズフィールド、705 データタイプフィールド、706 要素名フィールド、707 データ空間フィールド、801−806 フローチャートのステップ、901−904 フローチャートのステップ、1001 階層型データ構造HDS、1002−1013 HDS内のノード、1101 データ処理システム、1102 データオブジェクト、1103 仮想メモリ領域、1104 論理アドレス空間、1105 ページのリスト、1106 メモリ管理ユニット、1201−1203 フローチャートのステップ、1301 データ処理システム、1302 データオブジェクト、1304 論理アドレス空間、1305 ページのリスト、1306 メモリ管理ユニット、1307 ページスワッピング装置

Claims (14)

  1. データを処理するための方法であって、
    a.データを記憶するためのいくつかの順次的な論理アドレスを含む記憶ユニットを提供するステップと、
    b.前記記憶ユニット内に記憶される、いくつかの固定長または可変長のデータオブジェクトを提供するステップと、
    c.前記記憶ユニット内の前記データを修正するステップであって、前記データの修正は
    i.前記記憶ユニット内の所定の論理アドレスに追加の記憶空間を挿入することと、
    ii.前記所定の論理アドレス以降に記憶されるいくつかのデータオブジェクトを、前記記憶ユニット内の新たな論理アドレスに再配置することと、
    iii.必要な場合、前記記憶ユニット内に追加のデータを記憶することと、
    iv.1つまたは複数のデータオブジェクトの前記新たなアドレスまたは新たな長さを追跡することと
    によって特徴付けられる、ステップと
    を含む、方法。
  2. 前記データの修正が、
    a.前記記憶ユニット内への追加のデータオブジェクトの挿入、または
    b.データオブジェクト内へのデータ要素の挿入、または
    c.前記記憶ユニットからのデータオブジェクトの除去、または
    d.ネストされたデータオブジェクトの、その親データオブジェクトからの除去、または
    e.データオブジェクトの前記長さの修正、または
    f.ネストされたデータオブジェクトの前記長さ、およびその親データオブジェクトの前記長さの修正、または
    g.データオブジェクトのデータタイプの修正、または
    h.データオブジェクトの再命名
    の性質を帯びる、請求項1に記載の方法。
  3. 親データオブジェクトのその子データオブジェクトとの関係に加え、データオブジェクトの、前記記憶ユニット内の1つまたは複数の他のデータオブジェクトとの関係が表される、請求項1に記載の方法。
  4. 前記記憶ユニットが、仮想メモリ領域、またはファイル、またはアレイ、またはカウントツリー、または他のデータ構造である、請求項1に記載の方法。
  5. 前記所定の論理アドレス以降に記憶される一部のまたは全てのデータが、
    a.前記データをコピーすることなしに、または
    b.前記データにアクセスすることなしに
    前記記憶ユニット内の新たな論理アドレスに再配置される、請求項1に記載の方法。
  6. a.前記記憶ユニットが、いくつかの物理アドレスをさらに含み、
    b.前記物理アドレスの1つまたは複数が、前記記憶ユニット内の前記論理アドレスのうちの1つまたは複数に関連し、
    c.前記所定の論理アドレス以降に記憶される一部のまたは全てのデータを、前記記憶ユニット内の新たな論理アドレスに再配置することが、
    i.1つまたは複数の物理アドレスを、前記記憶ユニット内の1つまたは複数の論理アドレスから切り離し、
    ii.前記1つまたは複数の物理アドレスを、前記記憶ユニット内の1つまたは複数の新たな論理アドレスに再び関連させること
    によって行われる、請求項1に記載の方法。
  7. a.前記記憶ユニットが、1つまたは複数の記憶ブロックをさらに含み、
    b.前記物理アドレスが、前記記憶ユニット内の1つまたは複数の記憶ブロック内に含まれる
    請求項6に記載の方法。
  8. データを処理するための装置であって、
    a.データを記憶するためのいくつかの順次的な論理アドレスを含む記憶ユニットと、
    b.前記記憶ユニット内に記憶される、いくつかの固定長または可変長のデータオブジェクトと、
    c.前記記憶ユニット内の前記データを修正するための装置であって、前記データの修正は
    i.前記記憶ユニット内の所定の論理アドレスへの追加の記憶空間の挿入、
    ii.前記所定の論理アドレス以降に記憶されるいくつかのデータオブジェクトの、前記記憶ユニット内の新たな論理アドレスへの再配置、
    iii.必要な場合、前記記憶ユニット内への追加のデータの記憶、および
    iv.1つまたは複数のデータオブジェクトの前記新たなアドレスまたは新たな長さの追跡
    によって特徴付けられる、装置と
    を含む、装置。
  9. 前記データの修正が、
    a.前記記憶ユニット内への追加のデータオブジェクトの挿入、または
    b.データオブジェクト内へのデータ要素の挿入、または
    c.前記記憶ユニットからのデータオブジェクトの除去、または
    d.ネストされたデータオブジェクトの、その親データオブジェクトからの除去、または
    e.データオブジェクトの前記長さの修正、または
    f.ネストされたデータオブジェクトの前記長さ、およびその親データオブジェクトの前記長さの修正、または
    g.データオブジェクトのデータタイプの修正、または
    h.データオブジェクトの再命名
    の性質を帯びる、請求項8に記載の装置。
  10. 親データオブジェクトのその子データオブジェクトとの関係に加え、データオブジェクトの、前記記憶ユニット内の1つまたは複数の他のデータオブジェクトとの関係が維持される、請求項8に記載の装置。
  11. 前記記憶ユニットが、仮想メモリ領域、またはファイル、またはアレイ、またはカウントツリー、または他のデータ構造である、請求項8に記載の装置。
  12. 前記所定の論理アドレス以降に記憶される一部のまたは全てのデータが、
    a.前記データをコピーすることなしに、または
    b.前記データにアクセスすることなしに
    前記記憶ユニット内の新たな論理アドレスに再配置される、請求項8に記載の装置。
  13. a.前記記憶ユニットが、いくつかの物理アドレスをさらに含み、
    b.前記物理アドレスの1つまたは複数が、前記記憶ユニット内の前記論理アドレスのうちの1つまたは複数に関連し、
    c.前記所定の論理アドレス以降に記憶される一部のまたは全てのデータを、前記記憶ユニット内の新たな論理アドレスに再配置することが、
    i.1つまたは複数の物理アドレスを、前記記憶ユニット内の1つまたは複数の論理アドレスから切り離し、
    ii.前記1つまたは複数の物理アドレスを、前記記憶ユニット内の1つまたは複数の新たな論理アドレスに再び関連させること
    によって行われる、請求項8に記載の装置。
  14. a.前記記憶ユニットが、1つまたは複数の記憶ブロックをさらに含み、
    b.前記物理アドレスが、前記記憶ユニット内の1つまたは複数の記憶ブロック内に含まれる
    請求項13に記載の装置。
JP2013510730A 2010-05-19 2011-05-18 データオブジェクトの構成 Pending JP2014504381A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
IN2846CH2009 2010-05-19
IN2846/CHE/2009 2010-05-19
PCT/IN2011/000344 WO2011145114A2 (en) 2010-05-19 2011-05-18 Composition of data objects

Publications (1)

Publication Number Publication Date
JP2014504381A true JP2014504381A (ja) 2014-02-20

Family

ID=44511140

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013510730A Pending JP2014504381A (ja) 2010-05-19 2011-05-18 データオブジェクトの構成

Country Status (6)

Country Link
US (1) US9047175B2 (ja)
EP (1) EP2572283A2 (ja)
JP (1) JP2014504381A (ja)
CN (1) CN103124959A (ja)
CA (1) CA2800843A1 (ja)
WO (1) WO2011145114A2 (ja)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8838931B1 (en) * 2012-03-30 2014-09-16 Emc Corporation Techniques for automated discovery and performing storage optimizations on a component external to a data storage system
US9110680B1 (en) * 2013-03-14 2015-08-18 Amazon Technologies, Inc. Avoiding or deferring data copies
RU2610587C2 (ru) * 2014-09-16 2017-02-13 Общество С Ограниченной Ответственностью "Яндекс" Способ пространственного хранения объекта посредством гибкой иерархической структуры и постоянный носитель информации
US9766808B1 (en) * 2014-11-20 2017-09-19 Medallia, Inc. Expanding variable sub-column widths as needed to store data in memory
US10055162B2 (en) * 2015-10-30 2018-08-21 Netapp, Inc. Using a tree-based data structure to map logical addresses to physical addresses on a storage device
US11113190B2 (en) * 2016-11-11 2021-09-07 Microsoft Technology Licensing, Llc Mutable type builder
CN106936820B (zh) * 2017-03-06 2020-12-25 桂林电子科技大学 数据变长修改方法及其在大数据加密中的应用
CN113392133A (zh) * 2021-06-29 2021-09-14 浪潮软件科技有限公司 一种基于机器学习的数据智能识别的方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6279548A (ja) * 1985-10-02 1987-04-11 Sekisui Chem Co Ltd 記憶装置
JP2010515162A (ja) * 2006-12-26 2010-05-06 サンディスク コーポレイション 連続論理アドレス空間インターフェイスを備えるダイレクトデータファイルシステムの使用

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2000057276A1 (en) * 1999-03-25 2000-09-28 Excelon Corporation Method and apparatus for pointer relocation optimization for virtual memory mapping and transaction management in a database system
US7343452B2 (en) * 2004-03-31 2008-03-11 Kabushiki Kaisha Toshiba Apparatus for direct access to only specific lower hierarchy data in a nest structure
US7386663B2 (en) * 2004-05-13 2008-06-10 Cousins Robert E Transaction-based storage system and method that uses variable sized objects to store data
US20070005874A1 (en) * 2005-07-01 2007-01-04 Dan Dodge File system storing transaction records in flash-like media
CN100418090C (zh) * 2005-08-31 2008-09-10 国际商业机器公司 一种存储数据的方法
US7917723B2 (en) * 2005-12-01 2011-03-29 Microsoft Corporation Address translation table synchronization
US7739444B2 (en) * 2006-12-26 2010-06-15 Sandisk Corporation System using a direct data file system with a continuous logical address space interface
JPWO2009096180A1 (ja) * 2008-01-30 2011-05-26 パナソニック株式会社 メモリコントローラ、不揮発性記憶装置、及び、不揮発性記憶システム
CA2758235A1 (en) * 2009-04-27 2010-11-04 Kamlesh Gandhi Device and method for storage, retrieval, relocation, insertion or removal of data in storage units
US8478799B2 (en) * 2009-06-26 2013-07-02 Simplivity Corporation Namespace file system accessing an object store
EP2529309A2 (en) * 2009-09-25 2012-12-05 Kamlesh Gandhi Virtual-memory system with variable-sized pages

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6279548A (ja) * 1985-10-02 1987-04-11 Sekisui Chem Co Ltd 記憶装置
JP2010515162A (ja) * 2006-12-26 2010-05-06 サンディスク コーポレイション 連続論理アドレス空間インターフェイスを備えるダイレクトデータファイルシステムの使用

Also Published As

Publication number Publication date
US20130073830A1 (en) 2013-03-21
EP2572283A2 (en) 2013-03-27
WO2011145114A3 (en) 2012-03-08
WO2011145114A2 (en) 2011-11-24
CN103124959A (zh) 2013-05-29
US9047175B2 (en) 2015-06-02
CA2800843A1 (en) 2011-11-24

Similar Documents

Publication Publication Date Title
JP2014504381A (ja) データオブジェクトの構成
US10649910B2 (en) Persistent memory for key-value storage
JP5647252B2 (ja) メモリ管理装置及び仮想メモリ領域を提供する方法
US6895418B1 (en) Versatile indirection in an extent based file system
US6654772B1 (en) Multi-volume extent based file system
US20120042146A1 (en) Device and method for storage, retrieval, relocation, insertion or removal of data in storage units
US7496586B1 (en) Method and apparatus for compressing data in a file system
US9086820B2 (en) System and methods for managing storage space allocation
KR101289931B1 (ko) 다양한 블록 크기를 지원하는 주소 사상을 사용하여 플래시 메모리 내에 데이터를 저장하는 방법 및 장치
KR101467589B1 (ko) 데이터 구조를 가지는 하나 이상의 장치 판독가능 매체, 및장치 실행가능 명령어를 구비한 하나 이상의 장치 판독가능 매체
US7415653B1 (en) Method and apparatus for vectored block-level checksum for file system data integrity
US6697795B2 (en) Virtual file system for dynamically-generated web pages
US7225314B1 (en) Automatic conversion of all-zero data storage blocks into file holes
TW200900930A (en) Hierarchical immutable content-addressable memory processor
JP2015512604A (ja) 暗号ハッシュ・データベース
US20090182785A1 (en) Multi-Way Checkpoints in a Data Storage System
US7499961B2 (en) Method and apparatus for limiting the size and facilitating maintenance of remembered sets in a space incremental garbage collector
US7424574B1 (en) Method and apparatus for dynamic striping
JP3796391B2 (ja) 多用途な間接指定又は複数ボリュームを有するエクステント・ベース・ファイルシステム
Chen et al. KVFTL: Optimization of storage space utilization for key-value-specific flash storage devices
JP6006740B2 (ja) インデックス管理装置
Golovin B-treaps: A uniquely represented alternative to B-trees
US9753850B1 (en) On-heap huge slab allocator
KR20100078450A (ko) 플래시 메모리 장치 및 플래시 메모리 장치에서의 메모리 관리 방법
JP3846614B2 (ja) 記憶領域管理装置および記録媒体

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140516

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150306

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150408

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20150707

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20150807

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20150907

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20151008

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20151125

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20160225

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20160323

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20160422

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20160901