(57)【要約】【課題】メインメモリに入りきらないような大規模データを、簡単で且つ安価な仕組みで取り扱うことができる大規模データ取扱装置を提供する。【解決手段】データベース管理オブジェクト６１は、メインメモリ３１上の参照グラフに一又は複数の分割オブジェクトを追加することにより参照グラフを複数の部分参照グラフに分割する。二次記憶装置３２には、メインメモリ３１上の参照グラフが分割オブジェクトのコンテンツ単位で格納される。データベース管理オブジェクト６１は、アプリケーション５１が参照グラフを処理する際、所定のキーを指定し、分割オブジェクトのコンテンツ単位で二次記憶装置６１にアクセスする。したがって、メインメモリ３１上にはアプリケーション５１が処理に必要とする部分参照グラフだけを置き、他の部分参照グラフは二次記憶装置３２に置いたままにするというような操作が可能である。【選択図】        図２
2004334436.tif 000002
【特許請求の範囲】
【請求項１】
オブジェクト指向プログラミング言語で記述されたアプリケーションプログラムが処理する大規模データを取り扱う大規模データ取扱装置であって、
前記アプリケーションプログラムが処理する、メインメモリ上に展開されたデータの集まりであって各データに付与された参照情報によってデータ間の参照関係が構築されている参照グラフに対して、識別情報を有する一又は複数の分割オブジェクトを生成すると共に当該各分割オブジェクトに付与された参照情報に前記参照グラフ内の所定のデータを設定して当該各分割オブジェクトを前記参照グラフに追加することにより、当該各分割オブジェクトによって前記参照グラフを複数の部分参照グラフに分割する分割オブジェクト生成手段と、
前記参照グラフの参照関係の最上位に分割オブジェクトがある場合にあっては当該最上位の分割オブジェクトの識別情報を、その参照関係の最上位にデータがある場合にあっては当該データを含む最初の部分参照グラフ及び当該最初の部分参照グラフの直後にある分割オブジェクトの識別情報を、文字列のキーを付して格納すると共に、前記参照グラフにおける各分割オブジェクトのコンテンツ、すなわち、当該分割オブジェクトの直後にある部分参照グラフ及び当該部分参照グラフの直後に他の分割オブジェクトがある場合にはさらに当該他の分割オブジェクトの識別情報を、整数値のキーとしての当該分割オブジェクトの識別情報を付して格納する二次記憶手段と、
前記アプリケーションプログラムが前記参照グラフを前記メインメモリ上に生成する際又は前記アプリケーションプログラムが前記参照グラフを前記二次記憶手段から前記メインメモリ上に読み出す際に、前記文字列のキー又は前記整数値のキーを指定し、分割オブジェクトのコンテンツの単位で、前記二次記憶手段にアクセスを行うデータ管理手段と、
を備えることを特徴とする大規模データ取扱装置。
【請求項２】
前記メインメモリ上に存在する分割オブジェクトの識別情報を登録する分割オブジェクト登録手段を備えており、
前記データ管理手段は、前記アプリケーションプログラムが所定の部分参照グラフを前記二次記憶手段から前記メインメモリ上に読み出す際に、当該部分参照グラフをコンテンツとして含んでいる分割オブジェクトの識別情報と同じ識別情報が前記分割オブジェクト登録手段に登録されていれば、前記メインメモリ上に既に存在する当該分割オブジェクトの参照を前記アプリケーションに返すことを特徴とする請求項１記載の大規模データ取扱装置。
【請求項３】
請求項１又は２のいずれかに記載の大規模データ取扱装置の機能をコンピュータに実現させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項４】
請求項１又は２のいずれかに記載の大規模データ取扱装置の機能をコンピュータに実現させるためのプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、オブジェクト指向プログラミング言語で記述されたアプリケーションプログラムが処理する大規模データを取り扱うことができる大規模データ取扱装置に関するものである。
【０００２】
【従来の技術】
通常、オブジェクト指向プログラミング言語で記述されたアプリケーションを実行する際、そのアプリケーションがメインメモリ上で処理するデータは、アプリケーションから見た場合にメインメモリ上のオブジェクトの参照グラフとして表される。ここで、参照グラフに含まれる各データは、他のデータへの参照を含んでいる。特に、アプリケーションが処理するデータが大規模である場合は、そのアプリケーションの実行が困難なことがある。データがメインメモリ上に入りきらず、そのため、データ全体を参照グラフとしてメインメモリ上に生成すること自体ができなくなることがあるからである。
【０００３】
このように、データがメインメモリに入りきらないくらい大規模になる場合、従来は、かかる大規模なデータを扱う方法として、次の二つの方法が用いられている。すなわち、第一の方法は、ＲＤＢ（ｒｅｌａｔｉｏｎａｌ  ｄａｔａｂａｓｅ）、ＯＯＤＢ（ｏｂｊｅｃｔ−ｏｒｉｅｎｔｅｄ  ｄａｔａｂａｓｅ）などを使うことにより、大規模なデータを取り扱う方法である（例えば、非特許文献１参照。）。また、第二の方法は、アプリケーションのプログラムを工夫することにより、データを小さな単位に分割し、その分割した単位でデータを取り扱う方法である（例えば、非特許文献２参照。）。
【０００４】
【非特許文献１】
メアリー  Ｅ．Ｓ．ルーミス著、野口善洋訳「アジソン  ウェスレイ・トッパン  情報科学シリーズ・７８  オブジェクトデータベースのエッセンス」第１版、株式会社トッパン、１９９６年４月、ｐ．２１−２３
【非特許文献２】
メアリー  Ｅ．Ｓ．ルーミス著、野口善洋訳「アジソン  ウェスレイ・トッパン  情報科学シリーズ・７８  オブジェクトデータベースのエッセンス」第１版、株式会社トッパン、１９９６年４月、ｐ．２０
【０００５】
【発明が解決しようとする課題】
ところで、上記の第二の方法では、各アプリケーション毎にプログラムを工夫しなければならず、とても手間がかかるという問題がある。一方、第一の方法では、次のような問題がある。すなわち、ＲＤＢを使う場合は、データをＲＤＢのテーブルで表現するとき、データをＳＱＬという別の言語を介して扱うことになる。このため、メインメモリ上の参照グラフを扱うプログラムの書き方とは異なるプログラムを書く必要があり、煩雑である。また、ＲＤＢでは、参照を辿る操作一つ一つについて検索処理を行うことになり処理に時間がかかる。これに対し、ＯＯＤＢを使う場合は、ＲＤＢのようにプログラムを書く際の煩雑さはないが、ＯＯＤＢ自体が高価であり、しかも、プログラムが要求する機能に対して、仕掛け自体が大掛かりなものになってしまうという問題がある。
【０００６】
本発明は上記事情に基づいてなされたものであり、メインメモリに入りきらないような大規模データを、簡単で且つ安価な仕組みで取り扱うことができる大規模データ取扱装置を提供することを目的とするものである。
【０００７】
【課題を解決するための手段】
上記の目的を達成するための請求項１記載の発明は、オブジェクト指向プログラミング言語で記述されたアプリケーションプログラムが処理する大規模データを取り扱う大規模データ取扱装置であって、前記アプリケーションプログラムが処理する、メインメモリ上に展開されたデータの集まりであって各データに付与された参照情報によってデータ間の参照関係が構築されている参照グラフに対して、識別情報を有する一又は複数の分割オブジェクトを生成すると共に当該各分割オブジェクトに付与された参照情報に前記参照グラフ内の所定のデータを設定して当該各分割オブジェクトを前記参照グラフに追加することにより、当該各分割オブジェクトによって前記参照グラフを複数の部分参照グラフに分割する分割オブジェクト生成手段と、前記参照グラフの参照関係の最上位に分割オブジェクトがある場合にあっては当該最上位の分割オブジェクトの識別情報を、その参照関係の最上位にデータがある場合にあっては当該データを含む最初の部分参照グラフ及び当該最初の部分参照グラフの直後にある分割オブジェクトの識別情報を、文字列のキーを付して格納すると共に、前記参照グラフにおける各分割オブジェクトのコンテンツ、すなわち、当該分割オブジェクトの直後にある部分参照グラフ及び当該部分参照グラフの直後に他の分割オブジェクトがある場合にはさらに当該他の分割オブジェクトの識別情報を、整数値のキーとしての当該分割オブジェクトの識別情報を付して格納する二次記憶手段と、前記アプリケーションプログラムが前記参照グラフを前記メインメモリ上に生成する際又は前記アプリケーションプログラムが前記参照グラフを前記二次記憶手段から前記メインメモリ上に読み出す際に、前記文字列のキー又は前記整数値のキーを指定し、分割オブジェクトのコンテンツの単位で、前記二次記憶手段にアクセスを行うデータ管理手段と、を備えることを特徴とするものである。
【０００８】
請求項２記載の発明は、請求項１記載の大規模データ取扱装置において、前記メインメモリ上に存在する分割オブジェクトの識別情報を登録する分割オブジェクト登録手段を備えており、前記データ管理手段は、前記アプリケーションプログラムが所定の部分参照グラフを前記二次記憶手段から前記メインメモリ上に読み出す際に、当該部分参照グラフをコンテンツとして含んでいる分割オブジェクトの識別情報と同じ識別情報が前記分割オブジェクト登録手段に登録されていれば、前記メインメモリ上に既に存在する当該分割オブジェクトの参照を前記アプリケーションに返すことを特徴とするものである。
【０００９】
上記の目的を達成するための請求項３記載の発明に係るコンピュータ読み取り可能な記録媒体は、請求項１又は２のいずれかに記載の大規模データ取扱装置の機能をコンピュータに実現させるためのプログラムを記録したものである。
【００１０】
上記の目的を達成するための請求項４記載の発明に係るプログラムは、請求項１又は２のいずれかに記載の大規模データ取扱装置の機能をコンピュータに実現させるためのものである。
【００１１】
【発明の実施の形態】
以下に本発明の一実施形態について図面を参照して説明する。図１は本発明の一実施形態である大規模データ取扱装置の概略ブロック図、図２はその大規模データ取扱装置における処理の様子を説明するための図である。
【００１２】
本実施形態の大規模データ取扱装置は、図１に示すように、キーボードやマウス等の入力装置１０と、液晶ディスプレイ等の表示装置２０と、計算機（コンピュータ）３０とを備える。計算機３０は、メインメモリ３１と、ハードディスク装置等の二次記憶装置３２と、中央処理装置３３とを有する。本実施形態では、オブジェクト指向プログラミング言語で記述されたアプリケーションが大規模なデータを処理する場合について考える。
【００１３】
図２に本実施形態の大規模データ取扱装置においてアプリケーション実行時の処理の様子を示す。アプリケーションの実行時には、図２に示すように、当該アプリケーション５１はメインメモリ３１上に読み込まれる。また、このとき、アプリケーション５１はメインメモリ３１上にデータベース管理オブジェクト６１を生成する。このデータベース管理オブジェクト６１は、分割オブジェクト生成部６６と、データベースアクセス部６７と、分割オブジェクトキャッシュ部６８とを有する。中央処理装置３３は、メインメモリ３１上に生成されたアプリケーション５１とデータベース管理オブジェクト６１とを実行することにより、アプリケーション５１の機能とデータベース管理オブジェクト６１の機能とを実現することになる。
【００１４】
アプリケーション５１が処理するデータはメインメモリ３１上に展開される。図２では、かかるデータをメインメモリ３１内の右下部にツリー構造で示している。ここでは、アプリケーション５１がその本来の機能上処理するデータ（「要素データ」又は「アプリケーションデータ」）を、白い丸で表している。例えば、アプリケーション５１が地図作成・閲覧ソフトである場合、アプリケーション５１が本来の機能上処理する要素データは、複数の画像データであり、これらの画像データを繋ぎ合わせることにより地図全体を表す全体の画像データが得られる。
【００１５】
本実施形態では、オブジェクト指向プログラミング言語で記述されたアプリケーションを対象としているので、メインメモリ３１上に展開された各データには、他への参照を示す参照情報が付与されている。この参照情報は、当該データが他のどのデータを参照しているか或いはどのデータと繋がっているのかを示すものである。各データに付与された参照情報を順に辿ることにより、データ間の参照関係（繋がり関係）を知ることができる。ここで、参照情報は方向性を持っている。このため、図２では参照情報を矢印で表現している。矢印が引き出されている側のデータにその矢印に対応する参照情報が付与されている。矢印が指し示している側のデータにその矢印に対応する参照情報が付与されているわけではない。例えば、上述の画像データの場合、ある画像データが上下左右方向に他の画像データと繋がっていれば、当該画像データからは四つの矢印が引き出される、すなわち、当該画像データには四つの参照情報が付与されることになる。この場合、各参照情報には名前を付けて、それらを区別することになる。このように、メインメモリ３１上に展開されたデータの集まりであって、各データに付与された参照情報によってデータ間の参照関係が構築されているものを、「参照グラフ」と称する。
【００１６】
また、図２に示すように、参照グラフには、黒い丸で示すデータが埋め込まれている。かかるデータは、「分割オブジェクト」と称されるものであり、データベース管理オブジェクト６１の分割オブジェクト生成部６６により生成される。分割オブジェクトは、参照グラフがメインメモリ３１上に生成される際に、当該参照グラフを複数の部分参照グラフに分割するためのものである。すなわち、分割オブジェクトは、参照グラフにおいて各部分参照グラフを仕切る役割を果たす。ここで、参照グラフには、要素データと分割オブジェクトが含まれるが、部分参照グラフには、要素データだけが含まれ、分割オブジェクトは含まれないものとする。また、参照グラフにおいて、白い丸で表したデータ、黒い丸で表したデータはともに、プログラムの観点からはオブジェクトとして扱われる。本実施形態の大規模データ取扱装置では、データベース管理オブジェクト６１が設けられている点、参照グラフに複数の分割オブジェクトが追加されている点が、大きな特徴点である。
【００１７】
図３はメインメモリ３１上の分割オブジェクトの内容を模式的に示した図である。分割オブジェクトのデータ量は非常に小さい。分割オブジェクトは、図３に示すように、「データベース管理オブジェクトへの参照情報」、「識別番号」、「コンテンツ読み込み状態フラグ」、「コンテンツへの参照情報」という四つのデータを有する。尚、かかる四つのデータを有するのは、メインメモリ３１上に存在する分割オブジェクトである。二次記憶装置３２に格納されている分割オブジェクトは「識別番号」のみを有する。
【００１８】
一般に、データベース管理オブジェクト６１は、メインメモリ３１上に複数生成されることができる。分割オブジェクトの有する「データベース管理オブジェクトへの参照情報」とは、当該分割オブジェクトを生成したデータベース管理オブジェクト６１、すなわち当該分割オブジェクトが帰属するデータベース管理オブジェクト６１を示すものである。かかる参照情報を調べることにより、当該分割オブジェクトを生成したデータベース管理オブジェクト６１を認識することができる。また、データベース管理オブジェクト６１の分割オブジェクト生成部６６は、分割オブジェクトを生成する際に、ユニークな番号を発生させる。分割オブジェクトの有する「識別番号」とは、当該分割オブジェクトが帰属するデータベース管理オブジェクト６１の分割オブジェクト生成部６６から付与されたユニークな番号のことである。但し、帰属するデータベース管理オブジェクトが異なれば、複数の分割オブジェクトが同じ「識別番号」を有していてもよい。データベース管理オブジェクト６１は、「識別番号」により分割オブジェクトを管理する。
【００１９】
また、分割オブジェクトには、「コンテンツ読み込み状態フラグ」、「コンテンツへの参照情報」も含まれる。いま、分割オブジェクトのコンテンツについて説明する。分割オブジェクトのコンテンツとは、当該参照グラフにおけるオブジェクト間の参照関係上、当該分割オブジェクトの直後にある部分参照グラフ及び当該部分参照グラフの直後に他の分割オブジェクトがある場合にはさらに当該他の分割オブジェクトの識別番号をいう。当該他の分割オブジェクトについては、その識別番号だけが当該分割オブジェクトのコンテンツに含まれ、それ以外の情報は当該分割オブジェクトのコンテンツに含まれない。
【００２０】
図４に参照グラフの例を示す。図４（ａ）に示す例の場合、分割オブジェクトＤ１の下位には他の分割オブジェクトはない。このため、分割オブジェクトＤ１のコンテンツは、その分割オブジェクトの直後にある部分参照グラフ、すなわち点線で囲まれた部分に含まれる複数の要素データである。また、図４（ｂ）に示す例の場合、分割オブジェクトＤ２の下位には一つの分割オブジェクトＤ３がある。このため、分割オブジェクトＤ２のコンテンツは、点線で囲まれた部分に含まれる複数の要素データと、分割オブジェクトＤ３の識別番号とである。ここで、図４（ｂ）において、分割オブジェクトＤ３の半分だけが点線で囲まれるように描いているのは、分割オブジェクトには、データベース管理オブジェクトへの参照情報、識別番号、状態フラグ、コンテンツへの参照情報が含まれるが、これらのうち識別番号だけが分割オブジェクトＤ２のコンテンツに含まれるということを表現するためである。
【００２１】
尚、分割オブジェクトの下位とは、当該参照グラフにおける各オブジェクトの参照情報を順に辿るときに、当該分割オブジェクトから到達可能なオブジェクトを意味し、また、分割オブジェクトの上位とは、当該参照グラフにおける各オブジェクトの参照情報を順に辿るときに、当該分割オブジェクトに到達可能なオブジェクトを意味する。
【００２２】
分割オブジェクトの有する「コンテンツ読み込み状態フラグ」とは、当該分割オブジェクトのコンテンツがメインメモリ３１上に読み込まれた状態にあるか否かを示すものである。コンテンツがメインメモリ３１上に読み込まれているときには「Ｏｐｅｎ」フラグが、コンテンツがメインメモリ３１上に読み込まれていないときには「Ｃｌｏｓｅｄ」フラグが立てられる。また、分割オブジェクトの有する「コンテンツへの参照情報」とは、当該分割オブジェクトのコンテンツのうち当該分割オブジェクトが参照する要素データを示すものである。
【００２３】
図５は図２に示すメインメモリ３１のメモリマップの一例を示す図である。アプリケーション５１の実行時には、アプリケーション５１のマシン語のコード（プログラム）が、メインメモリ３１上に読み込まれる。メインメモリ３１には、アプリケーション５１が読み込まれる領域の他に、アプリケーション５１の作業領域であるヒープ領域がある。このヒープ領域に、データベース管理オブジェクト６１、要素データ、分割オブジェクトが格納される。この例では、アプリケーション５１は、一つのデータベース管理オブジェクト６１を生成しているが、一般にはデータベース管理オブジェクト６１を二つ以上生成してもよい。要素データは、アプリケーション５１により生成され、分割オブジェクトは、データベース管理オブジェクト６１の分割オブジェクト生成部６６により生成される。
【００２４】
また、各分割オブジェクトが格納された領域には、「データベース管理オブジェクトへの参照情報」、「識別番号」、「コンテンツ読み込み状態フラグ」、「コンテンツへの参照情報」が含まれている。これらの詳細は上述したとおりである。尚、図５では、ヒープ領域のところどころに未使用の領域があるが、これは、アプリケーション５１がオブジェクトを作成したり削除したりしているからである。
【００２５】
メインメモリ３１上の参照グラフは、二次記憶装置３２内に生成されたデータベースファイル（ＤＢファイル）に保存される。このＤＢファイルは所定のフォーマットで作成される。すなわち、ＤＢファイルは、図２に示すように、ルートストリーム格納部と、サブストリーム格納部とに分けられている。ルートストリーム格納部は、参照グラフのうちその参照関係の上位の一部のデータを、文字列のキーを付して格納するものである。このルートストリーム格納部のデータ形式は、「ルート名」とそれに対応する「ストリーム」とからなる形式になっている。この「ルート名」が文字列のキーであり、「ルート名」としては、例えば当該参照グラフの全体に付けられる名前（ファイル名）等が用いられる。「ルート名」に対応する「ストリーム」には、その「ルート名」が付けられた参照グラフの参照関係の最上位に分割オブジェクトがある場合にあっては当該最上位の分割オブジェクトの識別番号が、その参照関係の最上位に要素データがある場合にあっては最初の部分参照グラフ及び当該最初の部分参照グラフの直後にある分割オブジェクトの識別番号が格納される。
【００２６】
また、サブストリーム格納部は、各分割オブジェクトのコンテンツを、整数値のキーを付して格納するものである。このサブストリーム格納部のデータ形式は、「Ｉｄ」とそれに対応する「ストリーム」とからなる形式になっている。この「Ｉｄ」が整数値のキーであり、ここでは「Ｉｄ」として当該分割オブジェクトの識別番号が用いられる。「Ｉｄ」に対応する「ストリーム」には、その「Ｉｄ」を有する分割オブジェクトのコンテンツが格納される。
【００２７】
尚、メインメモリ３１上のデータは、二次記憶装置３２に格納される際に、シリアライズされる。シリアライズとは、直列化という意味で、データをシリアライズして可変長バイト列に変換することをいう。ここで、分割オブジェクトもシリアライズ可能である。かかるシリアライズされたデータが二次記憶装置３２に保存される。これにより、当該データを永続化、すなわち、後日、当該データをメインメモリ３１上に復元することができる。この復元の際には、シリアライズとは逆の操作であるデシリアライズが行われる。
【００２８】
アプリケーション５１は、データベース管理オブジェクト６１に対して、ＤＢファイルの作成、分割オブジェクトの生成・削除、オブジェクトの保存や読み出し等を指示する。一方、アプリケーション５１は、参照グラフに対して、要素データの生成・更新・削除、分割オブジェクトの操作等を行う。また、データベース管理オブジェクト６１は、参照グラフに対してシリアライズの実行を行う。更に、データベース管理オブジェクト６１のデータベースアクセス部６７は、二次記憶装置３２のＤＢファイルに対して、キー（ルート名又はＩｄ）の検索、キーを指定してストリームへのオブジェクトの格納・ストリームからのオブジェクトの読み出し等を行う。このように、本実施形態では、アプリケーション５１はデータベース管理オブジェクト６１を介して二次記憶装置３２にアクセスすることになる。
【００２９】
アプリケーション５１は、当該参照グラフのファイル名であるルート名だけを認識していればよく、当該参照グラフに含まれる各分割オブジェクトの識別情報を認識する必要はない。アプリケーション５１は二次記憶装置３２にアクセスする際にルート名だけを指定すれば、データベース管理オブジェクト６１は、その指定したルート名に対応するストリーム、そのストリームに含まれる分割オブジェクトの識別番号、その識別番号と同じＩｄに対応するストリーム、そのストリームに含まれる分割オブジェクトの識別番号、・・・  、というふうにして、当該参照グラフをその参照関係の最上位のオブジェクトから順に辿ることができる。すなわち、本実施形態では、データベース管理オブジェクト６１は、分割オブジェクトのコンテンツ単位でサブストリーム格納部にアクセスすることができる。このような機能は、一般的なライブラリを利用して実現することができる。
【００３０】
次に、本実施形態の大規模データ取扱装置におけるプログラム構成を説明する。図６は本実施形態の大規模データ処理装置におけるプログラムの構成を説明するための図である。
【００３１】
プログラム構成の最上層には、アプリケーションがある。これは大規模な参照グラフを処理するアプリケーションである。例えば、地図や動画等を作成するためのアプリケーションである。一方、プログラム構成の最下層にはＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）がある。このＯＳとしては、例えばマイクロソフト社製のＯＳを用いることができる。ＯＳの上層にＪａｖａ（登録商標）実行環境がある。そして、このＪａｖａ（登録商標）実行環境の上層にＩｄＢｏｘとＤＢＭライブラリとがある。ＩｄＢｏｘは分割オブジェクトのクラスである。ＤＢＭライブラリとしては、ＤＢＭインターフェースを持つ任意のライブラリを使うことができる。ＤＢＭライブラリの上層にはＤＢＭａｎａｇｅｒが設けられ、そのＤＢＭａｎａｇｅｒの上層にＯＤＢＭが設けられている。ＯＤＢＭはデータベース管理オブジェクト６１のクラスである。また、ＤＢＭａｎａｇｅｒは、ＯＤＢＭ内部で、ＤＢＭライブラリへのアクセスを簡単にするオブジェクトのクラス、すなわちデータベースアクセス部６７のクラスである。ここで、クラスとは、オブジェクト内部のデータ構造とそれを操作する手続を定義したものをいう。これらＯＤＢＭ、ＤＢＭａｎａｇｅｒ、ＩｄＢｏｘは、本実施形態において新たに作成したライブラリである。アプリケーションは、これらのライブラリを使って作成される。尚、図２においては、アプリケーション５１を、かかるライブラリを除く、その本来的な機能だけを有するものとして示している。
【００３２】
ＤＢＭａｎａｇｅｒは、ＯＤＢＭとＤＢＭライブラリとの間でデータのやり取りを行うためのものである。ＤＢＭライブラリの持つＤＢＭインターフェースという共通のインターフェースがあるが、ＤＢＭａｎａｇｅｒは、この共通のインターフェース機能を拡張した機能を有している。本実施形態では、ＤＢファイルは、図２に示すように、サブストリーム格納部とルートストリーム格納部とに分けられている。ＤＢファイルをこのような構造で構成し、かかるＤＢファイルにアクセスする機能がＤＢＭａｎａｇｅｒに設けられているのである。具体的に、ＤＢＭライブラリのインターフェース機能を用いた場合は、文字列のキーとそれに対応するストリームとからなる形式のファイルに対して、文字列のキーを指定することにより、当該文字列のキーに対応するストリームにアクセスする。これに対し、ＤＢＭａｎａｇｅｒのインターフェース機能を用いた場合は、サブストリーム格納部とルートストリーム格納部とを有するＤＢファイルに対して、文字列のキー（ルート名）又は整数値のキー（Ｉｄ）を指定することにより、当該キーに対応するストリームにアクセスする。
【００３３】
また、ＯＤＢＭクラス及びＤＢＭａｎａｇｅｒクラスには、ＤＢファイルに対するメソッド、ルートストリーム格納部に対するメソッド、サブストリーム格納部に対するメソッド等が定義されている。ここで、メソッドとは、オブジェクトの実行する手続を記述したプログラムをいう。ＤＢファイルに対するメソッドとしては、ＤＢファイルを開くためのＯｐｅｎメソッドと、ＤＢファイルを閉じるためのＣｌｏｓｅメソッドとがある。ルートストリーム格納部に対するメソッドとしては、指定した文字列のキーに対応するストリームに格納されたオブジェクトを読み出すためのメソッド、指定した文字列のキーに対応するストリームにオブジェクトを保存するためのメソッド等がある。また、サブストリーム格納部に対するメソッドとしては、指定した整数値のキーに対応するストリームに格納されたオブジェクトを読み出すためのメソッド、指定した整数値のキーに対応するストリームにオブジェクトを保存するためのメソッド等がある。また、ＯＤＢＭクラスには、分割オブジェクトを生成するためのメソッドも定義されている。
【００３４】
次に、データベース管理オブジェクト６１について詳しく説明する。上述したように、データベース管理オブジェクト６１は、分割オブジェクト生成部６６と、データベースアクセス部６７と、分割オブジェクトキャッシュ部６８とを有する。ここで、分割オブジェクト生成部６６は、本発明の「分割オブジェクト生成手段」に対応し、分割オブジェクトキャッシュ部６８は、本発明の「分割オブジェクト登録手段」に対応する。また、データベース管理オブジェクト６６から、分割オブジェクト生成部６６の機能と分割オブジェクトキャッシュ部６８の機能とを除いたものが、本発明の「データ管理手段」に対応する。
【００３５】
分割オブジェクト生成部６６は、参照グラフに対して、一又は複数の分割オブジェクトを生成すると共に当該各分割オブジェクトに付与された参照情報に参照グラフ内の所定の要素データを設定して当該各分割オブジェクトを当該参照グラフに追加することにより、当該各分割オブジェクトによって参照グラフを複数の部分参照グラフに分割する。かかる分割オブジェクトの生成や分割オブジェクトによる参照グラフの分割は、分割オブジェクト生成部６６がアプリケーション５１からの指示を受けたときに行われる。この意味では、アプリケーション５１が各分割オブジェクトを参照グラフに追加することにより参照グラフを複数の部分参照グラフに分割すると言い表すことができる。また、データベースアクセス部６７は、アプリケーション５１が参照グラフをメインメモリ３１上に生成する際又はアプリケーション５１が参照グラフを二次記憶装置３２からメインメモリ３１上に読み出す際に、文字列のキー又は整数値のキーを指定し、分割オブジェクトのコンテンツの単位で、二次記憶装置３２にアクセスを行う。
【００３６】
この分割オブジェクト生成部６６は、分割オブジェクトを生成する度に、ユニークな識別番号を発生させ、当該分割オブジェクトに付与する。アプリケーション５１はその分割オブジェクトを参照グラフに追加する。アプリケーション５１は、必要なタイミングでデータベース管理オブジェクト６１を介して分割オブジェクトを生成し、参照グラフに追加するように、予めプログラミングされている。このプログラミングに際しては、各部分参照グラフが、メインメモリ３１上に読み込むことができないぐらい大きな容量を持つことがないように注意する必要がある。具体的には、アプリケーション５１が要素データを所定の数だけ生成したとき、あるいは、メインメモリ３１の使用している容量が所定の容量に達したときに、アプリケーション５１は分割オブジェクトを生成して参照グラフに追加する。
【００３７】
また、分割オブジェクト生成部６６は、分割オブジェクトの削除も行う。ここで、分割オブジェクトを削除するということは、当該分割オブジェクトとそのコンテンツを削除するということである。例えば、参照グラフにおいて、ある分割オブジェクト以降のデータが不要になった場合、分割オブジェクト生成部６６は、アプリケーション５１から当該不要なデータを削除する旨の命令を受けると、データベースアクセス部６７を介してＤＢファイルにアクセスし、当該分割オブジェクト以降の対応するデータを削除する。このとき、メインメモリ３１上にある当該不要なデータはアプリケーション５１が削除する。
【００３８】
データベースアクセス部６７は、分割オブジェクトのコンテンツ単位で二次記憶装置３２のＤＢファイルにアクセスするが、このコンテンツ単位でアクセスする際に一番問題となるのは、分割オブジェクトのコンテンツをメインメモリ上に読み出す際に、メインメモリ上にそのコンテンツのコピーが複数作られてしまうことである。例えば、参照グラフ内の一つの分割オブジェクトが複数の要素データによって参照されている場合に、当該各参照を介して当該分割オブジェクトのコンテンツが読み出されると、このようなことが起こり得る。これでは、二次記憶装置上にあるデータとそれに対応するメインメモリ上の参照グラフの形が違ってしまうことになる。かかる問題を解消するために、本実施形態では、データベース管理オブジェクト６１に分割オブジェクトキャッシュ部６８を設けている。この分割オブジェクトキャッシュ部６８は、メインメモリ３１上に存在する分割オブジェクトの識別番号を登録するものである。
【００３９】
例えば、アプリケーション５１が所定の部分参照グラフを二次記憶装置３２からメインメモリ３１上に読み出す際に、データベース管理オブジェクト６１は、当該部分参照グラフをコンテンツとして含んでいる分割オブジェクトの識別番号と同じ識別番号が分割オブジェクトキャッシュ部６８に登録されているか否かを判断する。データベース管理オブジェクト６１は、登録されていないと判断すると、当該分割オブジェクトのコンテンツを二次記憶装置３２からメインメモリ３１上に読み出す。一方、登録されていると判断すると、再度、当該分割オブジェクトのコンテンツを二次記憶装置３２から読み出すことなく、メインメモリ３１上に既に存在する当該分割オブジェクトの参照をアプリケーション５１に返す。このように、分割オブジェクトキャッシュ部６８は、分割オブジェクトの一意性、すなわちメインメモリ３１上には同一の分割オブジェクトのコンテンツが二つ以上作られないことを保証するために用いられる。
【００４０】
データベース管理オブジェクト６１は、分割オブジェクトに対して、Ｏｐｅｎ操作、Ｓａｖｅ操作、Ｃｌｏｓｅ操作を行うことができる。Ｏｐｅｎ操作は、当該分割オブジェクトのコンテンツを二次記憶装置３２からメインメモリ３１上に読み出す操作である。Ｓａｖｅ操作は、当該分割オブジェクトのコンテンツをメインメモリ３１から二次記憶装置３２に保存する操作である。また、Ｃｌｏｓｅ操作は、当該分割オブジェクトのコンテンツをメインメモリ３１から開放する操作である。
【００４１】
これらの各操作についてもう少し詳しく説明する。実際に、Ｏｐｅｎ操作、Ｓａｖｅ操作、Ｃｌｏｓｅ操作は、図６のプログラム構成に示したＩｄＢｏｘクラスのメソッドとして定義されている。データベース管理オブジェクト６１は、Ｏｐｅｎ操作を行う場合、ＩｄＢｏｘクラスのＯｐｅｎメソッドを呼ぶ。これにより、データベース管理オブジェクト６１は、当該分割オブジェクトのコンテンツ読み込み状態フラグが「Ｃｌｏｓｅｄ」であれば、ＤＢファイルに格納されている当該分割オブジェクトのコンテンツをデシリアライズして、メインメモリ３１上に読み出す。そして、データベース管理オブジェクト６１は、当該分割オブジェクトのコンテンツ読み込み状態フラグを「Ｏｐｅｎ」にすると共に、当該分割オブジェクトのコンテンツへの参照情報に所定の要素データを設定する。
【００４２】
また、データベース管理オブジェクト６１は、Ｓａｖｅ操作を行う場合、ＩｄＢｏｘクラスのＳａｖｅメソッドを呼ぶ。これにより、データベース管理オブジェクト６１は、当該分割オブジェクトのコンテンツ読み込み状態フラグが「Ｃｌｏｓｅｄ」であれば、何もしないが、そのコンテンツ読み込み状態フラグが「Ｏｐｅｎ」であれば、当該分割オブジェクトのコンテンツをシリアライズして、ＤＢファイルに保存する。
【００４３】
更に、データベース管理オブジェクト６１は、Ｃｌｏｓｅ操作を行う場合、ＩｄＢｏｘクラスのＣｌｏｓｅメソッドを呼ぶ。これにより、データベース管理オブジェクト６１は、当該分割オブジェクトのコンテンツへの参照情報をｎｕｌｌにすると共に、そのコンテンツ読み込み状態フラグを「Ｃｌｏｓｅｄ」にする。本実施形態では、分割オブジェクトのコンテンツをメインメモリ３１上から開放するのは、Ｊａｖａ（登録商標）実行環境の有するガーベジコレクションを利用する。Ｊａｖａ（登録商標）の実行環境は、どのオブジェクトからも参照されていないオブジェクトや、名前が付けられておらずプログラム上でアクセス不可能なオブジェクトを、特定のタイミングでメインメモリ３１上から削除する機能を有している。かかる機能をガーベジコレクションという。このため、例えば、ＩｄＢｏｘクラスのＣｌｏｓｅメソッドを呼ぶことにより、当該分割オブジェクトのコンテンツのうちどのオブジェクトからも参照されなくなったオブジェクトは、ガーベジコレクションによる削除の対象となる。
【００４４】
次に、本実施形態におけるシリアライズ機能について説明する。シリアライズは、上述したようにデータをバイト列に変換することであり、オブジェクト毎に行われる。Ｊａｖａ（登録商標）実行環境には、標準的にシリアライズ機能が備わっているが、このシリアライズ機能を使うと、複数のオブジェクトが参照関係上、繋がっている場合、最初のオブジェクトに対してシリアライズを実行すると、その繋がっているすべてのオブジェクトに対してシリアライズが順次実行されてしまう。このため、本実施形態では、Ｊａｖａ（登録商標）実行環境が持つシリアライズ機能をカスタマイズしている。すなわち、分割オブジェクトをシリアライズするときは、その分割オブジェクトの識別番号だけをシリアライズすると共に、当該分割オブジェクトよりも下位にあるオブジェクトについてはシリアライズしないことにしている。分割オブジェクト以外のオブジェクトをシリアライズするときには、当該オブジェクトより下位にあるオブジェクトもシリアライズする。したがって、本実施形態におけるシリアライズ機能では、分割オブジェクトのコンテンツ単位でシリアライズが実行される。これにより、分割オブジェクトのコンテンツに含まれる各オブジェクトはシリアライズされた後、一つにまとめられ、一つの可変長バイト列としてＤＢファイルのサブストリーム格納部に保存される。
【００４５】
このように、本実施形態では、分割オブジェクトに対するシリアライズに関して、Ｊａｖａ（登録商標）実行環境が持つシリアライズ機能をカスタマイズしているが、このカスタマイズは、図６のプログラム構成に示すＩｄＢｏｘクラスのメソッドにより実現している。すなわち、分割オブジェクトに対しては当該メソッドによるシリアライズ機能が用いられ、分割オブジェクト以外の他のオブジェクトに対しては通常のＪａｖａ（登録商標）実行環境が持つシリアライズ機能が用いられる。
【００４６】
本実施形態では、参照グラフに一又は複数の分割オブジェクトを追加して、参照グラフを複数の部分参照グラフに分割したことにより、データベース管理オブジェクト６１は、参照グラフを部分的に操作することができる。例えば、メインメモリ３１上にはアプリケーション５１が処理に必要とする部分参照グラフだけを置き、他の部分参照グラフは二次記憶装置に置いたままにするというような操作が可能である。このため、本実施形態の大規模データ取扱装置では、メインメモリ３１の容量を超える大規模な参照グラフであっても取り扱うことができる。
【００４７】
また、本実施形態では、参照グラフに分割オブジェクトを追加するという点で、ＯＯＤＢ（ｏｂｊｅｃｔ−ｏｒｉｅｎｔｅｄ  ｄａｔａｂａｓｅ）の概念を若干取り入れている。ＯＯＤＢと異なり、参照グラフに分割オブジェクトを追加する処理を別途行う必要があるが、この点は、実際、あまり問題とならない。参照グラフに分割オブジェクトを追加する処理を行うには、プログラムの書き方自体が変わるわけではなく、アプリケーションのプログラム中に、分割オブジェクトに対するＯｐｅｎ等の操作についてのプログラムを追加するだけでよいからである。また、メインメモリ上の参照グラフを扱う場合に近いプログラムの書き方で、二次記憶装置へのデータアクセスを行うことができる。このため、本実施形態の大規模データ取扱装置を容易に実現することができる。
【００４８】
次に、本実施形態の大規模データ取扱装置において、大規模な参照グラフがどのように取り扱われるかについて具体的に説明する。いま、例えば、１０００個の画像データ（要素データ）を順に配列することにより動画データを作成し、また、その作成した動画を再生する場合を考える。ここで、各画像データの容量が１ＭＢであり、また、メインメモリ３１の容量は１ＧＢ未満であるとする。
【００４９】
従来、メインメモリの容量が１ＧＢ未満のマシンでは、図７（ａ）に示すような１０００個の画像データからなる参照グラフをメインメモリ上に作ることはできない。これに対し、本実施形態の大規模データ取扱装置は、分割オブジェクトを追加しながら参照グラフを作成し、保存する機能Ｆ１と、その作成した参照グラフについて最初のオブジェクトから最後のオブジェクトまで順番に辿り、参照グラフの内容を読み取る機能Ｆ２とを有している。かかる機能Ｆ１，Ｆ２を利用して、例えば、図７（ｂ）に示すように、各画像データの間に分割オブジェクトを挿入して参照グラフを１０００個の部分参照グラフに分割することにより、メインメモリ３１の容量よりも大きい容量の大規模な参照グラフを取り扱うことができる。
【００５０】
最初に、上記の機能Ｆ１について説明する。図８は、本実施形態の大規模データ処理装置において、上記の機能Ｆ１により図７（ｂ）に示す１０００個の要素データからなる参照グラフを作成・保存する場合の処理手順を説明するためのフローチャートである。また、図９は図８に示す各処理の様子を模式的に示す図である。尚、以下では、参照グラフの各要素データを「ノード」とも称することにする。
【００５１】
まず、アプリケーション５１は、ＯＤＢＭクラスのオブジェクト、すなわちデータベース管理オブジェクト６１をメインメモリ３１上に生成する（ステップＳ１）。ここで、データベース管理オブジェクト６１の名前を例えば「ｄｂ」とする。
【００５２】
次に、アプリケーション５１は、データベース管理オブジェクト「ｄｂ」のＯｐｅｎメソッドを呼ぶ（ステップＳ２）。このＯｐｅｎメソッドは、ファイル名を指定してＤＢファイルを開くものである。この場合は、当該ＤＢファイルは存在しないので、その指定した名前のＤＢファイルを作成して、開くことになる。これにより、その新規に作成したＤＢファイルは引き続き利用できる状態になる。ここで、その作成したＤＢファイルのファイル名を例えば「ｐａｔｅｎｔ＿ｓａｍｐｌｅ」とする。
【００５３】
次に、アプリケーション５１は、所定の処理を実行することにより最初のノード（ｆｉｒｓｔ＿ｎｏｄｅ）を生成する（ステップＳ３）。これは、アプリケーション５１が１０００個のノードからなる参照グラフのうち最初のノードを生成したという意味である。このときの様子は、図９（ａ）に示される。すなわち、１ＭＢのノードが一つ作成されている。
【００５４】
その後、アプリケーション５１はデータベース管理オブジェクト「ｄｂ」に分割オブジェクトを作成する旨の命令を出す。これにより、データベース管理オブジェクト「ｄｂ」は、最初の分割オブジェクト（ｆｉｒｓｔ＿ｉｄｂｏｘ）を生成する（ステップＳ４）。すなわち、データベース管理オブジェクト「ｄｂ」は、識別番号を発生させ、その識別番号を有する分割オブジェクトを生成する。このとき、その分割オブジェクトにおいて、データベース管理オブジェクトへの参照情報には「ｄｂ」を設定し、コンテンツへの参照情報には「ｆｉｒｓｔ＿ｎｏｄｅ」を設定する。また、その分割オブジェクトにおける状態フラグを「Ｏｐｅｎ」とする。このときの様子は、図９（ｂ）に示される。この図９（ｂ）において黒い丸は最初の分割オブジェクトを示している。そして、その分割オブジェクトから最初のノードに対して矢印が出ていることは、当該分割オブジェクトにおけるコンテンツへの参照情報に「ｆｉｒｓｔ＿ｎｏｄｅ」が設定されたことを示している。
【００５５】
次に、データベース管理オブジェクト「ｄｂ」は、ＤＢファイル「ｐａｔｅｎｔ＿ｓａｍｐｌｅ」のルートストリーム格納部において、ルート名（文字列のキー）に例えば「ｌａｒｇｅ＿ｌｉｓｔ」という名前を付け、そのルート名に対応するストリームに最初の分割オブジェクトの識別番号を保存する（ステップＳ５）。このときの様子は、図９（ｃ）に示される。この図９（ｃ）において、点線で囲った部分が「ｌａｒｇｅ＿ｌｉｓｔ」と名付けられてＤＢファイル「ｐａｔｅｎｔ＿ｓａｍｐｌｅ」に保存される。ここで、図９（ｃ）において、最初の分割オブジェクトの半分だけが点線で囲まれている。これは、最初の分割オブジェクトには、データベース管理オブジェクトへの参照情報、識別番号、状態フラグ、コンテンツへの参照情報が含まれるが、これらのうち識別番号だけがＤＢファイル「ｐａｔｅｎｔ＿ｓａｍｐｌｅ」に保存されるということを表現するためである。この点は、図９（ｃ）以外の図でも、同様である。
【００５６】
次に、データベース管理オブジェクト「ｄｂ」は、「ｐｒｅｖ＿ｉｄｂｏｘ」という名前で最初の分割オブジェクトを指す（ステップＳ６）。この「ｐｒｅｖ＿ｉｄｂｏｘ」という名前は、以下に説明する「ｎｅｗ＿ｉｄｂｏｘ」という名前と対立するもので、一つ前に生成された分割オブジェクトを指し示すために用いられる変数である。このときの様子は、図９（ｄ）に示される。図９（ｄ）では、最初の分割オブジェクトは、「ｐｒｅｖ＿ｉｄｂｏｘ」という名前で表されている。
【００５７】
データベース管理オブジェクト「ｄｂ」は、処理のループカウンタを有している。ステップＳ６の後、データベース管理オブジェクト「ｄｂ」は、そのループカウンタの計数値Ｉを１に初期化する（ステップＳ７）。また、このループカウンタはその計数値Ｉが１０００になるまでカウントする。
【００５８】
その後、データベース管理オブジェクト「ｄｂ」は、ループカウンタの計数値Ｉが１０００より小さいか否か判断する（ステップＳ８）。その計数値Ｉが１０００より小さい場合には、ステップＳ９に移行し、その計数値Ｉが１０００であれば、ステップＳ１６に移行する。
【００５９】
ステップＳ９では、アプリケーション５１は、所定の処理を実行することにより新しいノードを生成し、「ｎｅｗ＿ｎｏｄｅ」という名前（変数）で指し示す。この「ｎｅｗ＿ｎｏｄｅ」という変数は、最近に生成されたノードを指し示すためのものである。図９（ｅ）では、最初のノードに加えて、さらに新しいノード「ｎｅｗ＿ｎｏｄｅ」が生成されている。
【００６０】
その後、アプリケーション５１はデータベース管理オブジェクト「ｄｂ」に分割オブジェクトを作成する旨の命令を出す。すると、データベース管理オブジェクト「ｄｂ」は、新しい分割オブジェクトを生成し、「ｎｅｗ＿ｉｄｂｏｘ」という名前（変数）で指し示す（ステップＳ１０）。この「ｎｅｗ＿ｉｄｂｏｘ」という変数は、最近に生成された分割オブジェクトを指し示すためのものである。このとき、データベース管理オブジェクト「ｄｂ」は、新しい分割オブジェクト「ｎｅｗ＿ｉｄｂｏｘ」において、データベース管理オブジェクトへの参照情報には「ｄｂ」を設定し、コンテンツへの参照情報には「ｎｅｗ＿ｎｏｄｅ」を設定する。また、その分割オブジェクト「ｎｅｗ＿ｉｄｂｏｘ」における状態フラグを「Ｏｐｅｎ」とする。このときの様子は、図９（ｅ）に示される。図９（ｅ）では、新しい分割オブジェクト「ｎｅｗ＿ｉｄｂｏｘ」が生成され、その新しい分割オブジェクト「ｎｅｗ＿ｉｄｂｏｘ」には、新しいノード「ｎｅｗ＿ｎｏｄｅ」に向かう矢印が付けられている。
【００６１】
次に、データベース管理オブジェクト「ｄｂ」は、分割オブジェクト「ｐｒｅｖ＿ｉｄｂｏｘ」のコンテンツのうちのノード（この場合は、最初のノード）の参照情報に「ｎｅｗ＿ｉｄｂｏｘ」を設定する（ステップＳ１１）。このときの様子は、図９（ｆ）に示される。この図９（ｆ）では、分割オブジェクト「ｐｒｅｖ＿ｉｄｂｏｘ」のコンテンツのうちの最初のノードに、新しい分割オブジェクト「ｎｅｗ＿ｉｄｂｏｘ」に向かう矢印が付けられている。
【００６２】
次に、データベース管理オブジェクト「ｄｂ」は、分割オブジェクト「ｐｒｅｖ＿ｉｄｂｏｘ」のＳａｖｅメソッドを呼ぶ（ステップＳ１２）。このＳａｖｅメソッドにより、分割オブジェクト「ｐｒｅｖ＿ｉｄｂｏｘ」のコンテンツは、シリアライズされた後、ＤＢファイル「ｐａｔｅｎｔ＿ｓａｍｐｌｅ」に保存される。具体的には、データベース管理オブジェクト「ｄｂ」は、ＤＢファイル「ｐａｔｅｎｔ＿ｓａｍｐｌｅ」のサブストリーム格納部において、Ｉｄに分割オブジェクト「ｐｒｅｖ＿ｉｄｂｏｘ」の識別番号を付け、このＩｄに対応するストリームに分割オブジェクト「ｐｒｅｖ＿ｉｄｂｏｘ」のコンテンツを保存する。このときの様子は、図９（ｇ）に示される。この図９（ｇ）では、右側の点線で囲った部分が、分割オブジェクト「ｐｒｅｖ＿ｉｄｂｏｘ」のコンテンツを表しており、かかるコンテンツがＤＢファイル「ｐａｔｅｎｔ＿ｓａｍｐｌｅ」のサブストリーム格納部に保存される。
【００６３】
次に、データベース管理オブジェクト「ｄｂ」は、分割オブジェクト「ｐｒｅｖ＿ｉｄｂｏｘ」のＣｌｏｓｅメソッドを呼ぶ（ステップＳ１３）。このＣｌｏｓｅメソッドにより、分割オブジェクト「ｐｒｅｖ＿ｉｄｂｏｘ」におけるコンテンツへの参照情報がｎｕｌｌにされると共に、その状態フラグが「Ｃｌｏｓｅｄ」とされる。このため、分割オブジェクト「ｐｒｅｖ＿ｉｄｂｏｘ」のコンテンツのうちのノードは、分割オブジェクト「ｐｒｅｖ＿ｉｄｂｏｘ」から参照されなくなる。このときの様子は、図９（ｈ）に示される。すなわち、分割オブジェクト「ｐｒｅｖ＿ｉｄｂｏｘ」から当該ノードに向かう矢印がなくなる。したがって、分割オブジェクト「ｐｒｅｖ＿ｉｄｂｏｘ」のＣｌｏｓｅメソッドを呼ぶと、分割オブジェクト「ｐｒｅｖ＿ｉｄｂｏｘ」のコンテンツのうちのノードは、ガーベジコレクションによるメインメモリ３１上からの削除の対象となる。そして、ガーベジコレクションが実行されることにより、分割オブジェクト「ｐｒｅｖ＿ｉｄｂｏｘ」のコンテンツのうちのノードはメインメモリ３１から開放される。すなわち、図９（ｈ）において、右側の点線内において網掛けで示した部分がメインメモリ３１上から削除される。尚、この時点では、分割オブジェクト「ｐｒｅｖ＿ｉｄｂｏｘ」自体は削除の対象とはならない。分割オブジェクト「ｐｒｅｗ＿ｉｄｂｏｘ」は、その名前でプログラム上参照されているからである。
【００６４】
次に、データベース管理オブジェクト「ｄｂ」は、「ｐｒｅｖ＿ｉｄｂｏｘ」という名前で新しい分割オブジェクト「ｎｅｗ＿ｉｄｂｏｘ」を指し示す（ステップＳ１４）。これにより、「ｐｒｅｖ＿ｉｄｂｏｘ」という変数は、新しい分割オブジェクトを指し示すことになる。このため、いままで「ｐｒｅｖ＿ｉｄｂｏｘ」という名前で指し示されていた分割オブジェクトは、プログラム上参照できなくなるので、ガーベジコレクションによるメインメモリ３１上からの削除の対象となる。このときの様子は、図９（ｉ）に示される。すなわち、図９（ｉ）に示すように、左側に網掛けで示した部分に含まれる分割オブジェクトは、ガーベジコレクションによりメインメモリ３１上から開放されることになる。
【００６５】
このステップＳ１４による処理が終了した時点で、メインメモリ３１上に存在する参照グラフの状態は、ステップＳ６による処理が終了した時点でメインメモリ３１上に存在する参照グラフの状態と全く同じである。
【００６６】
ステップＳ１４による処理の後、データベース管理オブジェクト「ｄｂ」は、ループカウンタの計数値Ｉを１だけ増やす（ステップＳ１５）。そして、ステップＳ８に移行する。こうして、ステップＳ９からステップＳ１５までの処理を繰り返すことにより、１０００個のノードからなる参照グラフが生成される。
【００６７】
その後、ステップＳ８においてループカウンタの計数値Ｉが１０００であると判断されると、すなわち、１０００個のノードからなる参照グラフが作成されると、ステップＳ１６に移行する。
【００６８】
ステップＳ１６では、データベース管理オブジェクト「ｄｂ」は、分割オブジェクト「ｐｒｅｖ＿ｉｄｂｏｘ」のＳａｖｅメソッドを呼ぶ。これにより、分割オブジェクト「ｐｒｅｖ＿ｉｄｂｏｘ」のコンテンツは、シリアライズされた後、ＤＢファイル「ｐａｔｅｎｔ＿ｓａｍｐｌｅ」のサブストリーム格納部に保存される。この場合、当該分割オブジェクト「ｐｒｅｖ＿ｉｄｂｏｘ」の下位には分割オブジェクトはないので、当該分割オブジェクト「ｐｒｅｖ＿ｉｄｂｏｘ」のコンテンツはノードだけである。
【００６９】
次に、データベース管理オブジェクト「ｄｂ」は、分割オブジェクト「ｐｒｅｖ＿ｉｄｂｏｘ」のＣｌｏｓｅメソッドを呼ぶ（ステップＳ１７）。これにより、分割オブジェクト「ｐｒｅｖ＿ｉｄｂｏｘ」のコンテンツであるノードは、ガーベジコレクションが実行されることにより、メインメモリ３１上から削除される。
【００７０】
その後、アプリケーション５１は、データベース管理オブジェクト「ｄｂ」のＣｌｏｓｅメソッドを呼ぶ（ステップＳ１８）。このＣｌｏｓｅメソッドにより、ＤＢファイル「ｐａｔｅｎｔ＿ｓａｍｐｌｅ」が閉じられる。以上により、１０００個のノードからなる参照グラフが二次記憶装置３２に保存され、図８の処理フローが終了する。
【００７１】
次に、参照グラフの内容を読み出す機能Ｆ２について説明する。図１０は、上記の機能Ｆ２により図８の処理フローにしたがって作成した参照グラフの最初のノードから最後のノードまで順番に辿り、その内容を読み出す場合の処理手順を説明するためのフローチャートである。また、図１１は図１０に示す各処理の様子を模式的に示す図である。ここで、アプリケーション５１は、読み出そうとする参照グラフが二次記憶装置３２内の「ｐａｔｅｎｔ＿ｓａｍｐｌｅ」という名前のＤＢファイルに「ｌａｒｇｅ＿ｌｉｓｔ」という名前で保存されていることが分かっている。
【００７２】
まず、アプリケーション５１は、ＯＤＢＭクラスのオブジェクト、すなわちデータベース管理オブジェクト６１をメインメモリ３１上に生成する（ステップＳ２１）。ここで、データベース管理オブジェクト６１の名前は「ｄｂ」である。
【００７３】
次に、アプリケーション５１は、データベース管理オブジェクト「ｄｂ」のＯｐｅｎメソッドを呼ぶ（ステップＳ２２）。このとき、ファイル名として、図８の処理フローで作成したＤＢファイルのファイル名「ｐａｔｅｎｔ＿ｓａｍｐｌｅ」を指定する。これにより、ＤＢファイル「ｐａｔｅｎｔ＿ｓａｍｐｌｅ」が開かれる。
【００７４】
次に、アプリケーション５１はデータベース管理オブジェクト「ｄｂ」に、「ｌａｒｇｅ＿ｌｉｓｔ」という名前で保存されているオブジェクト（データ）をメインメモリ３１上に読み出す旨の命令を出す。これにより、データベース管理オブジェクト「ｄｂ」は、ＤＢファイル「ｐａｔｅｎｔ＿ｓａｍｐｌｅ」から、「ｌａｒｇｅ＿ｌｉｓｔ」という名前で保存されているオブジェクトを読み出す（ステップＳ２３）。具体的には、データベース管理オブジェクト「ｄｂ」は、ＤＢファイル「ｐａｔｅｎｔ＿ｓａｍｐｌｅ」のルートストリーム格納部において、「ｌａｒｇｅ＿ｌｉｓｔ」というルート名に対応するストリームに保存されているオブジェクトをデシリアライズする。そして、そのデシリアライズされたオブジェクトをメインメモリ３１上に読み出す。このとき、データベース管理オブジェクト６１は、その読み出したオブジェクトを、「ｉｄｂｏｘ」という名前（変数）で指し示す。この「ｉｄｂｏｘ」という変数は、分割オブジェクトを指し示すためのものである。ここで、読み出したオブジェクトを「ｉｄｂｏｘ」という名前で指し示すのは、データベース管理オブジェクト「ｄｂ」が、図８の処理フローで作成されたＤＢファイルの構造を知っており、したがって、そのオブジェクトがＩｄＢｏｘクラスのオブジェクト、すなわち分割オブジェクトであるということが予め分かっているからである。
【００７５】
また、ここで読み出した分割オブジェクト「ｉｄｂｏｘ」の識別番号としては、「ｌａｒｇｅ＿ｌｉｓｔ」というルート名に対応するストリームに保存されていた識別番号が用いられる。そして、データベース管理オブジェクト「ｄｂ」は、分割オブジェクト「ｉｄｂｏｘ」において、データベース管理オブジェクトへの参照情報に「ｄｂ」を、コンテンツへの参照情報にｎｕｌｌを設定する。また、その状態フラグを「Ｃｌｏｓｅｄ」とする。このときの様子は、図１１（ａ）に示される。この図１１（ａ）では、分割オブジェクト「ｉｄｂｏｘ」が一つ生成されている。
【００７６】
その後、データベース管理オブジェクト「ｄｂ」は、分割オブジェクト「ｉｄｂｏｘ」コンテンツをＤＢファイル「ｐａｔｅｎｔ＿ｓａｍｐｌｅ」から読み出す（ステップＳ２４）。具体的には、データベース管理オブジェクト「ｄｂ」は、ＤＢファイル「ｐａｔｅｎｔ＿ｓａｍｐｌｅ」のサブストリーム格納部において、分割オブジェクト「ｉｄｂｏｘ」の識別情報と同じＩｄに対応するストリームに保存されているコンテンツをデシリアライズしてメインメモリ３１上に読み出す。この読み出したコンテンツには、当該分割オブジェクトが参照グラフの最後のものでなければ、ノードとそれに続く他の分割オブジェクトの識別情報とを含んでいる。データベース管理オブジェクト「ｄｂ」は、読み出したノードを「ｎｏｄｅ」という名前（変数）で指し示す。この「ｎｏｄｅ」という変数は、ノードを指し示すためのものである。そして、データベース管理オブジェクト「ｄｂ」は、分割オブジェクト「ｉｄｂｏｘ」において、コンテンツへの参照情報に「ｎｏｄｅ」を設定し、その状態フラグを「Ｏｐｅｎ」とする。また、分割オブジェクト「ｉｄｂｏｘ」のコンテンツに含まれる他の分割オブジェクトの識別情報に基づいて、当該他の分割オブジェクトが生成される。このときの様子は、図１１（ｂ）に示される。この図１１（ｂ）では、当該他の分割オブジェクトは省略している。
【００７７】
その後、アプリケーション５１は、ステップＳ２４でメインメモリ３１上に取り出したノード「ｎｏｄｅ」の内容を使って所定の処理を行う。そして、当該ノード「ｎｏｄｅ」の内容を使った処理が終わると、ステップＳ２５に移行する。
【００７８】
ステップＳ２５では、データベース管理オブジェクト「ｄｂ」は、分割オブジェクト「ｉｄｂｏｘ」のＣｌｏｓｅメソッドを呼ぶ。これにより、分割オブジェクト「ｉｄｂｏｘ」のコンテンツのうちのノード「ｎｏｄｅ」は、分割オブジェクト「ｉｄｂｏｘ」からの参照がなくなる。このときの様子は、図１１（ｃ）に示される。すなわち、図１１（ｃ）に示すように、分割オブジェクト「ｉｄｂｏｘ」から当該ノード「ｎｏｄｅ」に向かう矢印がなくなる。したがって、分割オブジェクト「ｉｄｂｏｘ」のコンテンツのうちのノード「ｎｏｄｅ」は、他に参照がなければ、ガーベジコレクションが実行されると、メインメモリ３１上から削除される。
【００７９】
次に、データベース管理オブジェクト「ｄｂ」は、当該ノード「ｎｏｄｅ」の次に他の分割オブジェクトが繋がっているか否かを判断する（ステップＳ２６）。すなわち、図１１（ｄ）に示すように、当該ノード「ｎｏｄｅ」の参照情報がｎｕｌｌでないか、ｎｕｌｌであるかを判断する。当該ノード「ｎｏｄｅ」の参照情報がｎｕｌｌでなく、その次に繋がる他の分割オブジェクトを指し示している場合には、データ管理オブジェクト「ｄｂ」は、当該ノード「ｎｏｄｅ」の次に繋がる他の分割オブジェクトを「ｉｄｂｏｘ」という変数で指し示す（ステップＳ２７）。このときの様子は、図１１（ｅ）に示される。すなわち、図１１（ｅ）に示すように、「ｉｄｂｏｘ」という変数は、右側の分割オブジェクトを指し示すことになる。このため、いままで「ｉｄｂｏｘ」という変数で指し示されていた左側の分割オブジェクトは、プログラム上参照できなくなるので、ガーベジコレクションによるメインメモリ３１上からの削除の対象となる。すなわち、図１１（ｅ）において、左側に網掛けで示した部分に含まれる分割オブジェクトは、ガーベジコレクションによりメインメモリ３１上から開放される。また、真ん中に示したノード「ｎｏｄｅ」については、その「ｎｏｄｅ」という変数（参照名）が次の処理ループ（ステップＳ２４〜Ｓ２７）において他のオブジェクトを指し示すようになったときに、ガーベジコレクションによりメインメモリ３１上から開放されることになる。
【００８０】
かかるステップＳ２６の処理の後は、ステップＳ２４に移行する。そして、ステップＳ２４からステップＳ２７までの処理を繰り返すことにより、参照グラフの最初のノードから最後のノードまで順番に辿り、その内容をメインメモリ３１上に読み取ることができる。
【００８１】
ステップＳ２６において、当該ノード「ｎｏｄｅ」の参照情報がｎｕｌｌであると判断されると、アプリケーション５１は、当該ノード「ｎｏｄｅ」が参照グラフの最後のノードであると認識し、データベース管理オブジェクト「ｄｂ」のＣｌｏｓｅメソッドを呼ぶ（ステップＳ２８）。これにより、ＤＢファイル「ｐａｔｅｎｔ＿ｓａｍｐｌｅ」が閉じられる。以上で、図１１の処理フローが終了する。
【００８２】
本実施形態の大規模データ取扱装置では、参照グラフに一又は複数の分割オブジェクトを追加することにより、参照グラフを複数の部分参照グラフに分割すると共に、分割オブジェクトのコンテンツ単位で、二次記憶装置にデータアクセスを行う。このため、メインメモリ上にはアプリケーションが処理に必要とする部分参照グラフだけを置き、他の部分参照グラフは二次記憶装置に置いたままにするというような操作が可能である。また、メインメモリ上の参照グラフを扱う場合に近いプログラムの書き方で、二次記憶装置へのデータアクセスを実現できる。したがって、本実施形態の大規模データ取扱装置では、メインメモリの容量を超える大規模な参照グラフであっても、簡単で且つ安価な仕組みで取り扱うことができる。
【００８３】
尚、本発明は上記の実施形態に限定されるものではなく、その要旨の範囲内において種々の変形が可能である。
【００８４】
例えば、上記の実施形態では、アプリケーションがデータベース管理オブジェクトを生成する場合について説明したが、大規模データ取扱装置がデータベース管理オブジェクトの機能を有しており、その機能を利用して、分割オブジェクトの生成、二次記憶装置へのデータアクセス等を行うようにしてもよい。
【００８５】
本発明の目的は、上述した実施形態の装置の機能を実現するソフトウェアのプログラムコード（実行形式を含む）を、その全体あるいは一部を記録した記録媒体により、本実施形態の装置に供給し、その装置のコンピュータ（又はＣＰＵ、ＭＰＵ）が記録媒体に格納されたプログラムコードを読み出して、動作の全部あるいは一部を実行することによっても達成されることは言うまでもない。この場合、記録媒体から読み出されたプログラムコード自体が本実施形態の機能を実現することになり、そのプログラムコードを記録した記録媒体は本発明を構成することになる。
【００８６】
プログラムコードを供給するための記録媒体としては、ＲＯＭ、フロッピー（登録商標）ディスク、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＤＶＤ−ＲＯＭ、磁気テープ、不揮発性のメモリカード等を用いることができる。さらに、通信回線を介してダウンロードすることによってプログラムコードを供給するようにしてもよいし、ＪＡＶＡ（登録商標）などの技術を利用してプログラムコードを供給して実行するようにしてもよい。
【００８７】
また、コンピュータが読み出したプログラムコードを実行することにより、本実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼動しているＯＳなどが実際の処理の一部又は全部を行い、その処理によって本実施形態の機能が実現される場合も本発明に含まれることは言うまでもない。
【００８８】
更に、記録媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータが接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部又は全部を行い、その処理によって本実施形態の機能が実現される場合も本発明に含まれることは言うまでもない。
【００８９】
加えて、本発明はコンピュータに上記の実施形態の装置の機能を実現させるためのプログラムを含むプログラム・プロダクトであってもよい。ここで、プログラム・プロダクトというのは、コンピュータ・プログラムだけでなく、プログラムを記録した記録媒体あるいはコンピュータを含むものである。
【００９０】
【発明の効果】
以上説明したように本発明に係る大規模データ取扱装置では、参照グラフに一又は複数の分割オブジェクトを追加することにより、参照グラフを複数の部分参照グラフに分割すると共に、分割オブジェクトのコンテンツ単位で、二次記憶手段にデータアクセスを行う。このため、メインメモリ上にはアプリケーションプログラムが処理に必要とする部分参照グラフだけを置き、他の部分参照グラフは二次記憶手段に置いたままにするというような操作が可能である。また、メインメモリ上の参照グラフを扱う場合に近いプログラムの書き方で、二次記憶手段へのデータアクセスを実現できる。したがって、本発明の大規模データ取扱装置は、メインメモリの容量を超える大規模な参照グラフを、簡単で且つ安価な仕組みで取り扱うことができる。
【図面の簡単な説明】
【図１】本発明の一実施形態である大規模データ取扱装置の概略ブロック図である。
【図２】その大規模データ取扱装置における処理の様子を説明するための図である。
【図３】メインメモリ上の分割オブジェクトの内容を模式的に示した図である。
【図４】参照グラフの例を示す図である。
【図５】図２に示すメインメモリのメモリマップの一例を示す図である。
【図６】本実施形態の大規模データ処理装置におけるプログラムの構成を説明するための図である。
【図７】参照グラフの例を示す図である。
【図８】本実施形態の大規模データ処理装置において、図７（ｂ）に示す１０００個の要素データからなる参照グラフを作成・保存する場合の処理手順を説明するためのフローチャートである。
【図９】図８に示す各処理の様子を模式的に示す図である。
【図１０】図８の処理フローにしたがって作成した参照グラフの最初の要素データから最後の要素データまで順番に辿り、その内容を読み出す場合の処理手順を説明するためのフローチャートである。
【図１１】図１０に示す各処理の様子を模式的に示す図である。
【符号の説明】
１０    入力装置
２０    表示装置
３０    計算機
３１    メインメモリ
３２    二次記憶装置
３３    中央処理装置
５１    アプリケーション
６１    データベース管理オブジェクト
６６    分割オブジェクト生成部
６７    データベースアクセス部
６８    分割オブジェクトキャッシュ部
【図１】
2004334436.tif 000003
【図２】
2004334436.tif 000004
【図３】
2004334436.tif 000005
【図４】
2004334436.tif 000006
【図５】
2004334436.tif 000007
【図６】
2004334436.tif 000008
【図７】
2004334436.tif 000009
【図８】
2004334436.tif 000010
【図９】
2004334436.tif 000011
【図１０】
2004334436.tif 000012
【図１１】
2004334436.tif 000013