JP2004334436A - 大規模データ取扱装置 - Google Patents
大規模データ取扱装置 Download PDFInfo
- Publication number
- JP2004334436A JP2004334436A JP2003128187A JP2003128187A JP2004334436A JP 2004334436 A JP2004334436 A JP 2004334436A JP 2003128187 A JP2003128187 A JP 2003128187A JP 2003128187 A JP2003128187 A JP 2003128187A JP 2004334436 A JP2004334436 A JP 2004334436A
- Authority
- JP
- Japan
- Prior art keywords
- divided
- divided object
- main memory
- reference graph
- data
- 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.)
- Withdrawn
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
【課題】メインメモリに入りきらないような大規模データを、簡単で且つ安価な仕組みで取り扱うことができる大規模データ取扱装置を提供する。
【解決手段】データベース管理オブジェクト61は、メインメモリ31上の参照グラフに一又は複数の分割オブジェクトを追加することにより参照グラフを複数の部分参照グラフに分割する。二次記憶装置32には、メインメモリ31上の参照グラフが分割オブジェクトのコンテンツ単位で格納される。データベース管理オブジェクト61は、アプリケーション51が参照グラフを処理する際、所定のキーを指定し、分割オブジェクトのコンテンツ単位で二次記憶装置61にアクセスする。したがって、メインメモリ31上にはアプリケーション51が処理に必要とする部分参照グラフだけを置き、他の部分参照グラフは二次記憶装置32に置いたままにするというような操作が可能である。
【選択図】 図2
【解決手段】データベース管理オブジェクト61は、メインメモリ31上の参照グラフに一又は複数の分割オブジェクトを追加することにより参照グラフを複数の部分参照グラフに分割する。二次記憶装置32には、メインメモリ31上の参照グラフが分割オブジェクトのコンテンツ単位で格納される。データベース管理オブジェクト61は、アプリケーション51が参照グラフを処理する際、所定のキーを指定し、分割オブジェクトのコンテンツ単位で二次記憶装置61にアクセスする。したがって、メインメモリ31上にはアプリケーション51が処理に必要とする部分参照グラフだけを置き、他の部分参照グラフは二次記憶装置32に置いたままにするというような操作が可能である。
【選択図】 図2
Description
【0001】
【発明の属する技術分野】
本発明は、オブジェクト指向プログラミング言語で記述されたアプリケーションプログラムが処理する大規模データを取り扱うことができる大規模データ取扱装置に関するものである。
【0002】
【従来の技術】
通常、オブジェクト指向プログラミング言語で記述されたアプリケーションを実行する際、そのアプリケーションがメインメモリ上で処理するデータは、アプリケーションから見た場合にメインメモリ上のオブジェクトの参照グラフとして表される。ここで、参照グラフに含まれる各データは、他のデータへの参照を含んでいる。特に、アプリケーションが処理するデータが大規模である場合は、そのアプリケーションの実行が困難なことがある。データがメインメモリ上に入りきらず、そのため、データ全体を参照グラフとしてメインメモリ上に生成すること自体ができなくなることがあるからである。
【0003】
このように、データがメインメモリに入りきらないくらい大規模になる場合、従来は、かかる大規模なデータを扱う方法として、次の二つの方法が用いられている。すなわち、第一の方法は、RDB(relational database)、OODB(object−oriented database)などを使うことにより、大規模なデータを取り扱う方法である(例えば、非特許文献1参照。)。また、第二の方法は、アプリケーションのプログラムを工夫することにより、データを小さな単位に分割し、その分割した単位でデータを取り扱う方法である(例えば、非特許文献2参照。)。
【0004】
【非特許文献1】
メアリー E.S.ルーミス著、野口善洋訳「アジソン ウェスレイ・トッパン 情報科学シリーズ・78 オブジェクトデータベースのエッセンス」第1版、株式会社トッパン、1996年4月、p.21−23
【非特許文献2】
メアリー E.S.ルーミス著、野口善洋訳「アジソン ウェスレイ・トッパン 情報科学シリーズ・78 オブジェクトデータベースのエッセンス」第1版、株式会社トッパン、1996年4月、p.20
【0005】
【発明が解決しようとする課題】
ところで、上記の第二の方法では、各アプリケーション毎にプログラムを工夫しなければならず、とても手間がかかるという問題がある。一方、第一の方法では、次のような問題がある。すなわち、RDBを使う場合は、データをRDBのテーブルで表現するとき、データをSQLという別の言語を介して扱うことになる。このため、メインメモリ上の参照グラフを扱うプログラムの書き方とは異なるプログラムを書く必要があり、煩雑である。また、RDBでは、参照を辿る操作一つ一つについて検索処理を行うことになり処理に時間がかかる。これに対し、OODBを使う場合は、RDBのようにプログラムを書く際の煩雑さはないが、OODB自体が高価であり、しかも、プログラムが要求する機能に対して、仕掛け自体が大掛かりなものになってしまうという問題がある。
【0006】
本発明は上記事情に基づいてなされたものであり、メインメモリに入りきらないような大規模データを、簡単で且つ安価な仕組みで取り扱うことができる大規模データ取扱装置を提供することを目的とするものである。
【0007】
【課題を解決するための手段】
上記の目的を達成するための請求項1記載の発明は、オブジェクト指向プログラミング言語で記述されたアプリケーションプログラムが処理する大規模データを取り扱う大規模データ取扱装置であって、前記アプリケーションプログラムが処理する、メインメモリ上に展開されたデータの集まりであって各データに付与された参照情報によってデータ間の参照関係が構築されている参照グラフに対して、識別情報を有する一又は複数の分割オブジェクトを生成すると共に当該各分割オブジェクトに付与された参照情報に前記参照グラフ内の所定のデータを設定して当該各分割オブジェクトを前記参照グラフに追加することにより、当該各分割オブジェクトによって前記参照グラフを複数の部分参照グラフに分割する分割オブジェクト生成手段と、前記参照グラフの参照関係の最上位に分割オブジェクトがある場合にあっては当該最上位の分割オブジェクトの識別情報を、その参照関係の最上位にデータがある場合にあっては当該データを含む最初の部分参照グラフ及び当該最初の部分参照グラフの直後にある分割オブジェクトの識別情報を、文字列のキーを付して格納すると共に、前記参照グラフにおける各分割オブジェクトのコンテンツ、すなわち、当該分割オブジェクトの直後にある部分参照グラフ及び当該部分参照グラフの直後に他の分割オブジェクトがある場合にはさらに当該他の分割オブジェクトの識別情報を、整数値のキーとしての当該分割オブジェクトの識別情報を付して格納する二次記憶手段と、前記アプリケーションプログラムが前記参照グラフを前記メインメモリ上に生成する際又は前記アプリケーションプログラムが前記参照グラフを前記二次記憶手段から前記メインメモリ上に読み出す際に、前記文字列のキー又は前記整数値のキーを指定し、分割オブジェクトのコンテンツの単位で、前記二次記憶手段にアクセスを行うデータ管理手段と、を備えることを特徴とするものである。
【0008】
請求項2記載の発明は、請求項1記載の大規模データ取扱装置において、前記メインメモリ上に存在する分割オブジェクトの識別情報を登録する分割オブジェクト登録手段を備えており、前記データ管理手段は、前記アプリケーションプログラムが所定の部分参照グラフを前記二次記憶手段から前記メインメモリ上に読み出す際に、当該部分参照グラフをコンテンツとして含んでいる分割オブジェクトの識別情報と同じ識別情報が前記分割オブジェクト登録手段に登録されていれば、前記メインメモリ上に既に存在する当該分割オブジェクトの参照を前記アプリケーションに返すことを特徴とするものである。
【0009】
上記の目的を達成するための請求項3記載の発明に係るコンピュータ読み取り可能な記録媒体は、請求項1又は2のいずれかに記載の大規模データ取扱装置の機能をコンピュータに実現させるためのプログラムを記録したものである。
【0010】
上記の目的を達成するための請求項4記載の発明に係るプログラムは、請求項1又は2のいずれかに記載の大規模データ取扱装置の機能をコンピュータに実現させるためのものである。
【0011】
【発明の実施の形態】
以下に本発明の一実施形態について図面を参照して説明する。図1は本発明の一実施形態である大規模データ取扱装置の概略ブロック図、図2はその大規模データ取扱装置における処理の様子を説明するための図である。
【0012】
本実施形態の大規模データ取扱装置は、図1に示すように、キーボードやマウス等の入力装置10と、液晶ディスプレイ等の表示装置20と、計算機(コンピュータ)30とを備える。計算機30は、メインメモリ31と、ハードディスク装置等の二次記憶装置32と、中央処理装置33とを有する。本実施形態では、オブジェクト指向プログラミング言語で記述されたアプリケーションが大規模なデータを処理する場合について考える。
【0013】
図2に本実施形態の大規模データ取扱装置においてアプリケーション実行時の処理の様子を示す。アプリケーションの実行時には、図2に示すように、当該アプリケーション51はメインメモリ31上に読み込まれる。また、このとき、アプリケーション51はメインメモリ31上にデータベース管理オブジェクト61を生成する。このデータベース管理オブジェクト61は、分割オブジェクト生成部66と、データベースアクセス部67と、分割オブジェクトキャッシュ部68とを有する。中央処理装置33は、メインメモリ31上に生成されたアプリケーション51とデータベース管理オブジェクト61とを実行することにより、アプリケーション51の機能とデータベース管理オブジェクト61の機能とを実現することになる。
【0014】
アプリケーション51が処理するデータはメインメモリ31上に展開される。図2では、かかるデータをメインメモリ31内の右下部にツリー構造で示している。ここでは、アプリケーション51がその本来の機能上処理するデータ(「要素データ」又は「アプリケーションデータ」)を、白い丸で表している。例えば、アプリケーション51が地図作成・閲覧ソフトである場合、アプリケーション51が本来の機能上処理する要素データは、複数の画像データであり、これらの画像データを繋ぎ合わせることにより地図全体を表す全体の画像データが得られる。
【0015】
本実施形態では、オブジェクト指向プログラミング言語で記述されたアプリケーションを対象としているので、メインメモリ31上に展開された各データには、他への参照を示す参照情報が付与されている。この参照情報は、当該データが他のどのデータを参照しているか或いはどのデータと繋がっているのかを示すものである。各データに付与された参照情報を順に辿ることにより、データ間の参照関係(繋がり関係)を知ることができる。ここで、参照情報は方向性を持っている。このため、図2では参照情報を矢印で表現している。矢印が引き出されている側のデータにその矢印に対応する参照情報が付与されている。矢印が指し示している側のデータにその矢印に対応する参照情報が付与されているわけではない。例えば、上述の画像データの場合、ある画像データが上下左右方向に他の画像データと繋がっていれば、当該画像データからは四つの矢印が引き出される、すなわち、当該画像データには四つの参照情報が付与されることになる。この場合、各参照情報には名前を付けて、それらを区別することになる。このように、メインメモリ31上に展開されたデータの集まりであって、各データに付与された参照情報によってデータ間の参照関係が構築されているものを、「参照グラフ」と称する。
【0016】
また、図2に示すように、参照グラフには、黒い丸で示すデータが埋め込まれている。かかるデータは、「分割オブジェクト」と称されるものであり、データベース管理オブジェクト61の分割オブジェクト生成部66により生成される。分割オブジェクトは、参照グラフがメインメモリ31上に生成される際に、当該参照グラフを複数の部分参照グラフに分割するためのものである。すなわち、分割オブジェクトは、参照グラフにおいて各部分参照グラフを仕切る役割を果たす。ここで、参照グラフには、要素データと分割オブジェクトが含まれるが、部分参照グラフには、要素データだけが含まれ、分割オブジェクトは含まれないものとする。また、参照グラフにおいて、白い丸で表したデータ、黒い丸で表したデータはともに、プログラムの観点からはオブジェクトとして扱われる。本実施形態の大規模データ取扱装置では、データベース管理オブジェクト61が設けられている点、参照グラフに複数の分割オブジェクトが追加されている点が、大きな特徴点である。
【0017】
図3はメインメモリ31上の分割オブジェクトの内容を模式的に示した図である。分割オブジェクトのデータ量は非常に小さい。分割オブジェクトは、図3に示すように、「データベース管理オブジェクトへの参照情報」、「識別番号」、「コンテンツ読み込み状態フラグ」、「コンテンツへの参照情報」という四つのデータを有する。尚、かかる四つのデータを有するのは、メインメモリ31上に存在する分割オブジェクトである。二次記憶装置32に格納されている分割オブジェクトは「識別番号」のみを有する。
【0018】
一般に、データベース管理オブジェクト61は、メインメモリ31上に複数生成されることができる。分割オブジェクトの有する「データベース管理オブジェクトへの参照情報」とは、当該分割オブジェクトを生成したデータベース管理オブジェクト61、すなわち当該分割オブジェクトが帰属するデータベース管理オブジェクト61を示すものである。かかる参照情報を調べることにより、当該分割オブジェクトを生成したデータベース管理オブジェクト61を認識することができる。また、データベース管理オブジェクト61の分割オブジェクト生成部66は、分割オブジェクトを生成する際に、ユニークな番号を発生させる。分割オブジェクトの有する「識別番号」とは、当該分割オブジェクトが帰属するデータベース管理オブジェクト61の分割オブジェクト生成部66から付与されたユニークな番号のことである。但し、帰属するデータベース管理オブジェクトが異なれば、複数の分割オブジェクトが同じ「識別番号」を有していてもよい。データベース管理オブジェクト61は、「識別番号」により分割オブジェクトを管理する。
【0019】
また、分割オブジェクトには、「コンテンツ読み込み状態フラグ」、「コンテンツへの参照情報」も含まれる。いま、分割オブジェクトのコンテンツについて説明する。分割オブジェクトのコンテンツとは、当該参照グラフにおけるオブジェクト間の参照関係上、当該分割オブジェクトの直後にある部分参照グラフ及び当該部分参照グラフの直後に他の分割オブジェクトがある場合にはさらに当該他の分割オブジェクトの識別番号をいう。当該他の分割オブジェクトについては、その識別番号だけが当該分割オブジェクトのコンテンツに含まれ、それ以外の情報は当該分割オブジェクトのコンテンツに含まれない。
【0020】
図4に参照グラフの例を示す。図4(a)に示す例の場合、分割オブジェクトD1の下位には他の分割オブジェクトはない。このため、分割オブジェクトD1のコンテンツは、その分割オブジェクトの直後にある部分参照グラフ、すなわち点線で囲まれた部分に含まれる複数の要素データである。また、図4(b)に示す例の場合、分割オブジェクトD2の下位には一つの分割オブジェクトD3がある。このため、分割オブジェクトD2のコンテンツは、点線で囲まれた部分に含まれる複数の要素データと、分割オブジェクトD3の識別番号とである。ここで、図4(b)において、分割オブジェクトD3の半分だけが点線で囲まれるように描いているのは、分割オブジェクトには、データベース管理オブジェクトへの参照情報、識別番号、状態フラグ、コンテンツへの参照情報が含まれるが、これらのうち識別番号だけが分割オブジェクトD2のコンテンツに含まれるということを表現するためである。
【0021】
尚、分割オブジェクトの下位とは、当該参照グラフにおける各オブジェクトの参照情報を順に辿るときに、当該分割オブジェクトから到達可能なオブジェクトを意味し、また、分割オブジェクトの上位とは、当該参照グラフにおける各オブジェクトの参照情報を順に辿るときに、当該分割オブジェクトに到達可能なオブジェクトを意味する。
【0022】
分割オブジェクトの有する「コンテンツ読み込み状態フラグ」とは、当該分割オブジェクトのコンテンツがメインメモリ31上に読み込まれた状態にあるか否かを示すものである。コンテンツがメインメモリ31上に読み込まれているときには「Open」フラグが、コンテンツがメインメモリ31上に読み込まれていないときには「Closed」フラグが立てられる。また、分割オブジェクトの有する「コンテンツへの参照情報」とは、当該分割オブジェクトのコンテンツのうち当該分割オブジェクトが参照する要素データを示すものである。
【0023】
図5は図2に示すメインメモリ31のメモリマップの一例を示す図である。アプリケーション51の実行時には、アプリケーション51のマシン語のコード(プログラム)が、メインメモリ31上に読み込まれる。メインメモリ31には、アプリケーション51が読み込まれる領域の他に、アプリケーション51の作業領域であるヒープ領域がある。このヒープ領域に、データベース管理オブジェクト61、要素データ、分割オブジェクトが格納される。この例では、アプリケーション51は、一つのデータベース管理オブジェクト61を生成しているが、一般にはデータベース管理オブジェクト61を二つ以上生成してもよい。要素データは、アプリケーション51により生成され、分割オブジェクトは、データベース管理オブジェクト61の分割オブジェクト生成部66により生成される。
【0024】
また、各分割オブジェクトが格納された領域には、「データベース管理オブジェクトへの参照情報」、「識別番号」、「コンテンツ読み込み状態フラグ」、「コンテンツへの参照情報」が含まれている。これらの詳細は上述したとおりである。尚、図5では、ヒープ領域のところどころに未使用の領域があるが、これは、アプリケーション51がオブジェクトを作成したり削除したりしているからである。
【0025】
メインメモリ31上の参照グラフは、二次記憶装置32内に生成されたデータベースファイル(DBファイル)に保存される。このDBファイルは所定のフォーマットで作成される。すなわち、DBファイルは、図2に示すように、ルートストリーム格納部と、サブストリーム格納部とに分けられている。ルートストリーム格納部は、参照グラフのうちその参照関係の上位の一部のデータを、文字列のキーを付して格納するものである。このルートストリーム格納部のデータ形式は、「ルート名」とそれに対応する「ストリーム」とからなる形式になっている。この「ルート名」が文字列のキーであり、「ルート名」としては、例えば当該参照グラフの全体に付けられる名前(ファイル名)等が用いられる。「ルート名」に対応する「ストリーム」には、その「ルート名」が付けられた参照グラフの参照関係の最上位に分割オブジェクトがある場合にあっては当該最上位の分割オブジェクトの識別番号が、その参照関係の最上位に要素データがある場合にあっては最初の部分参照グラフ及び当該最初の部分参照グラフの直後にある分割オブジェクトの識別番号が格納される。
【0026】
また、サブストリーム格納部は、各分割オブジェクトのコンテンツを、整数値のキーを付して格納するものである。このサブストリーム格納部のデータ形式は、「Id」とそれに対応する「ストリーム」とからなる形式になっている。この「Id」が整数値のキーであり、ここでは「Id」として当該分割オブジェクトの識別番号が用いられる。「Id」に対応する「ストリーム」には、その「Id」を有する分割オブジェクトのコンテンツが格納される。
【0027】
尚、メインメモリ31上のデータは、二次記憶装置32に格納される際に、シリアライズされる。シリアライズとは、直列化という意味で、データをシリアライズして可変長バイト列に変換することをいう。ここで、分割オブジェクトもシリアライズ可能である。かかるシリアライズされたデータが二次記憶装置32に保存される。これにより、当該データを永続化、すなわち、後日、当該データをメインメモリ31上に復元することができる。この復元の際には、シリアライズとは逆の操作であるデシリアライズが行われる。
【0028】
アプリケーション51は、データベース管理オブジェクト61に対して、DBファイルの作成、分割オブジェクトの生成・削除、オブジェクトの保存や読み出し等を指示する。一方、アプリケーション51は、参照グラフに対して、要素データの生成・更新・削除、分割オブジェクトの操作等を行う。また、データベース管理オブジェクト61は、参照グラフに対してシリアライズの実行を行う。更に、データベース管理オブジェクト61のデータベースアクセス部67は、二次記憶装置32のDBファイルに対して、キー(ルート名又はId)の検索、キーを指定してストリームへのオブジェクトの格納・ストリームからのオブジェクトの読み出し等を行う。このように、本実施形態では、アプリケーション51はデータベース管理オブジェクト61を介して二次記憶装置32にアクセスすることになる。
【0029】
アプリケーション51は、当該参照グラフのファイル名であるルート名だけを認識していればよく、当該参照グラフに含まれる各分割オブジェクトの識別情報を認識する必要はない。アプリケーション51は二次記憶装置32にアクセスする際にルート名だけを指定すれば、データベース管理オブジェクト61は、その指定したルート名に対応するストリーム、そのストリームに含まれる分割オブジェクトの識別番号、その識別番号と同じIdに対応するストリーム、そのストリームに含まれる分割オブジェクトの識別番号、・・・ 、というふうにして、当該参照グラフをその参照関係の最上位のオブジェクトから順に辿ることができる。すなわち、本実施形態では、データベース管理オブジェクト61は、分割オブジェクトのコンテンツ単位でサブストリーム格納部にアクセスすることができる。このような機能は、一般的なライブラリを利用して実現することができる。
【0030】
次に、本実施形態の大規模データ取扱装置におけるプログラム構成を説明する。図6は本実施形態の大規模データ処理装置におけるプログラムの構成を説明するための図である。
【0031】
プログラム構成の最上層には、アプリケーションがある。これは大規模な参照グラフを処理するアプリケーションである。例えば、地図や動画等を作成するためのアプリケーションである。一方、プログラム構成の最下層にはOS(Operating System)がある。このOSとしては、例えばマイクロソフト社製のOSを用いることができる。OSの上層にJava(登録商標)実行環境がある。そして、このJava(登録商標)実行環境の上層にIdBoxとDBMライブラリとがある。IdBoxは分割オブジェクトのクラスである。DBMライブラリとしては、DBMインターフェースを持つ任意のライブラリを使うことができる。DBMライブラリの上層にはDBManagerが設けられ、そのDBManagerの上層にODBMが設けられている。ODBMはデータベース管理オブジェクト61のクラスである。また、DBManagerは、ODBM内部で、DBMライブラリへのアクセスを簡単にするオブジェクトのクラス、すなわちデータベースアクセス部67のクラスである。ここで、クラスとは、オブジェクト内部のデータ構造とそれを操作する手続を定義したものをいう。これらODBM、DBManager、IdBoxは、本実施形態において新たに作成したライブラリである。アプリケーションは、これらのライブラリを使って作成される。尚、図2においては、アプリケーション51を、かかるライブラリを除く、その本来的な機能だけを有するものとして示している。
【0032】
DBManagerは、ODBMとDBMライブラリとの間でデータのやり取りを行うためのものである。DBMライブラリの持つDBMインターフェースという共通のインターフェースがあるが、DBManagerは、この共通のインターフェース機能を拡張した機能を有している。本実施形態では、DBファイルは、図2に示すように、サブストリーム格納部とルートストリーム格納部とに分けられている。DBファイルをこのような構造で構成し、かかるDBファイルにアクセスする機能がDBManagerに設けられているのである。具体的に、DBMライブラリのインターフェース機能を用いた場合は、文字列のキーとそれに対応するストリームとからなる形式のファイルに対して、文字列のキーを指定することにより、当該文字列のキーに対応するストリームにアクセスする。これに対し、DBManagerのインターフェース機能を用いた場合は、サブストリーム格納部とルートストリーム格納部とを有するDBファイルに対して、文字列のキー(ルート名)又は整数値のキー(Id)を指定することにより、当該キーに対応するストリームにアクセスする。
【0033】
また、ODBMクラス及びDBManagerクラスには、DBファイルに対するメソッド、ルートストリーム格納部に対するメソッド、サブストリーム格納部に対するメソッド等が定義されている。ここで、メソッドとは、オブジェクトの実行する手続を記述したプログラムをいう。DBファイルに対するメソッドとしては、DBファイルを開くためのOpenメソッドと、DBファイルを閉じるためのCloseメソッドとがある。ルートストリーム格納部に対するメソッドとしては、指定した文字列のキーに対応するストリームに格納されたオブジェクトを読み出すためのメソッド、指定した文字列のキーに対応するストリームにオブジェクトを保存するためのメソッド等がある。また、サブストリーム格納部に対するメソッドとしては、指定した整数値のキーに対応するストリームに格納されたオブジェクトを読み出すためのメソッド、指定した整数値のキーに対応するストリームにオブジェクトを保存するためのメソッド等がある。また、ODBMクラスには、分割オブジェクトを生成するためのメソッドも定義されている。
【0034】
次に、データベース管理オブジェクト61について詳しく説明する。上述したように、データベース管理オブジェクト61は、分割オブジェクト生成部66と、データベースアクセス部67と、分割オブジェクトキャッシュ部68とを有する。ここで、分割オブジェクト生成部66は、本発明の「分割オブジェクト生成手段」に対応し、分割オブジェクトキャッシュ部68は、本発明の「分割オブジェクト登録手段」に対応する。また、データベース管理オブジェクト66から、分割オブジェクト生成部66の機能と分割オブジェクトキャッシュ部68の機能とを除いたものが、本発明の「データ管理手段」に対応する。
【0035】
分割オブジェクト生成部66は、参照グラフに対して、一又は複数の分割オブジェクトを生成すると共に当該各分割オブジェクトに付与された参照情報に参照グラフ内の所定の要素データを設定して当該各分割オブジェクトを当該参照グラフに追加することにより、当該各分割オブジェクトによって参照グラフを複数の部分参照グラフに分割する。かかる分割オブジェクトの生成や分割オブジェクトによる参照グラフの分割は、分割オブジェクト生成部66がアプリケーション51からの指示を受けたときに行われる。この意味では、アプリケーション51が各分割オブジェクトを参照グラフに追加することにより参照グラフを複数の部分参照グラフに分割すると言い表すことができる。また、データベースアクセス部67は、アプリケーション51が参照グラフをメインメモリ31上に生成する際又はアプリケーション51が参照グラフを二次記憶装置32からメインメモリ31上に読み出す際に、文字列のキー又は整数値のキーを指定し、分割オブジェクトのコンテンツの単位で、二次記憶装置32にアクセスを行う。
【0036】
この分割オブジェクト生成部66は、分割オブジェクトを生成する度に、ユニークな識別番号を発生させ、当該分割オブジェクトに付与する。アプリケーション51はその分割オブジェクトを参照グラフに追加する。アプリケーション51は、必要なタイミングでデータベース管理オブジェクト61を介して分割オブジェクトを生成し、参照グラフに追加するように、予めプログラミングされている。このプログラミングに際しては、各部分参照グラフが、メインメモリ31上に読み込むことができないぐらい大きな容量を持つことがないように注意する必要がある。具体的には、アプリケーション51が要素データを所定の数だけ生成したとき、あるいは、メインメモリ31の使用している容量が所定の容量に達したときに、アプリケーション51は分割オブジェクトを生成して参照グラフに追加する。
【0037】
また、分割オブジェクト生成部66は、分割オブジェクトの削除も行う。ここで、分割オブジェクトを削除するということは、当該分割オブジェクトとそのコンテンツを削除するということである。例えば、参照グラフにおいて、ある分割オブジェクト以降のデータが不要になった場合、分割オブジェクト生成部66は、アプリケーション51から当該不要なデータを削除する旨の命令を受けると、データベースアクセス部67を介してDBファイルにアクセスし、当該分割オブジェクト以降の対応するデータを削除する。このとき、メインメモリ31上にある当該不要なデータはアプリケーション51が削除する。
【0038】
データベースアクセス部67は、分割オブジェクトのコンテンツ単位で二次記憶装置32のDBファイルにアクセスするが、このコンテンツ単位でアクセスする際に一番問題となるのは、分割オブジェクトのコンテンツをメインメモリ上に読み出す際に、メインメモリ上にそのコンテンツのコピーが複数作られてしまうことである。例えば、参照グラフ内の一つの分割オブジェクトが複数の要素データによって参照されている場合に、当該各参照を介して当該分割オブジェクトのコンテンツが読み出されると、このようなことが起こり得る。これでは、二次記憶装置上にあるデータとそれに対応するメインメモリ上の参照グラフの形が違ってしまうことになる。かかる問題を解消するために、本実施形態では、データベース管理オブジェクト61に分割オブジェクトキャッシュ部68を設けている。この分割オブジェクトキャッシュ部68は、メインメモリ31上に存在する分割オブジェクトの識別番号を登録するものである。
【0039】
例えば、アプリケーション51が所定の部分参照グラフを二次記憶装置32からメインメモリ31上に読み出す際に、データベース管理オブジェクト61は、当該部分参照グラフをコンテンツとして含んでいる分割オブジェクトの識別番号と同じ識別番号が分割オブジェクトキャッシュ部68に登録されているか否かを判断する。データベース管理オブジェクト61は、登録されていないと判断すると、当該分割オブジェクトのコンテンツを二次記憶装置32からメインメモリ31上に読み出す。一方、登録されていると判断すると、再度、当該分割オブジェクトのコンテンツを二次記憶装置32から読み出すことなく、メインメモリ31上に既に存在する当該分割オブジェクトの参照をアプリケーション51に返す。このように、分割オブジェクトキャッシュ部68は、分割オブジェクトの一意性、すなわちメインメモリ31上には同一の分割オブジェクトのコンテンツが二つ以上作られないことを保証するために用いられる。
【0040】
データベース管理オブジェクト61は、分割オブジェクトに対して、Open操作、Save操作、Close操作を行うことができる。Open操作は、当該分割オブジェクトのコンテンツを二次記憶装置32からメインメモリ31上に読み出す操作である。Save操作は、当該分割オブジェクトのコンテンツをメインメモリ31から二次記憶装置32に保存する操作である。また、Close操作は、当該分割オブジェクトのコンテンツをメインメモリ31から開放する操作である。
【0041】
これらの各操作についてもう少し詳しく説明する。実際に、Open操作、Save操作、Close操作は、図6のプログラム構成に示したIdBoxクラスのメソッドとして定義されている。データベース管理オブジェクト61は、Open操作を行う場合、IdBoxクラスのOpenメソッドを呼ぶ。これにより、データベース管理オブジェクト61は、当該分割オブジェクトのコンテンツ読み込み状態フラグが「Closed」であれば、DBファイルに格納されている当該分割オブジェクトのコンテンツをデシリアライズして、メインメモリ31上に読み出す。そして、データベース管理オブジェクト61は、当該分割オブジェクトのコンテンツ読み込み状態フラグを「Open」にすると共に、当該分割オブジェクトのコンテンツへの参照情報に所定の要素データを設定する。
【0042】
また、データベース管理オブジェクト61は、Save操作を行う場合、IdBoxクラスのSaveメソッドを呼ぶ。これにより、データベース管理オブジェクト61は、当該分割オブジェクトのコンテンツ読み込み状態フラグが「Closed」であれば、何もしないが、そのコンテンツ読み込み状態フラグが「Open」であれば、当該分割オブジェクトのコンテンツをシリアライズして、DBファイルに保存する。
【0043】
更に、データベース管理オブジェクト61は、Close操作を行う場合、IdBoxクラスのCloseメソッドを呼ぶ。これにより、データベース管理オブジェクト61は、当該分割オブジェクトのコンテンツへの参照情報をnullにすると共に、そのコンテンツ読み込み状態フラグを「Closed」にする。本実施形態では、分割オブジェクトのコンテンツをメインメモリ31上から開放するのは、Java(登録商標)実行環境の有するガーベジコレクションを利用する。Java(登録商標)の実行環境は、どのオブジェクトからも参照されていないオブジェクトや、名前が付けられておらずプログラム上でアクセス不可能なオブジェクトを、特定のタイミングでメインメモリ31上から削除する機能を有している。かかる機能をガーベジコレクションという。このため、例えば、IdBoxクラスのCloseメソッドを呼ぶことにより、当該分割オブジェクトのコンテンツのうちどのオブジェクトからも参照されなくなったオブジェクトは、ガーベジコレクションによる削除の対象となる。
【0044】
次に、本実施形態におけるシリアライズ機能について説明する。シリアライズは、上述したようにデータをバイト列に変換することであり、オブジェクト毎に行われる。Java(登録商標)実行環境には、標準的にシリアライズ機能が備わっているが、このシリアライズ機能を使うと、複数のオブジェクトが参照関係上、繋がっている場合、最初のオブジェクトに対してシリアライズを実行すると、その繋がっているすべてのオブジェクトに対してシリアライズが順次実行されてしまう。このため、本実施形態では、Java(登録商標)実行環境が持つシリアライズ機能をカスタマイズしている。すなわち、分割オブジェクトをシリアライズするときは、その分割オブジェクトの識別番号だけをシリアライズすると共に、当該分割オブジェクトよりも下位にあるオブジェクトについてはシリアライズしないことにしている。分割オブジェクト以外のオブジェクトをシリアライズするときには、当該オブジェクトより下位にあるオブジェクトもシリアライズする。したがって、本実施形態におけるシリアライズ機能では、分割オブジェクトのコンテンツ単位でシリアライズが実行される。これにより、分割オブジェクトのコンテンツに含まれる各オブジェクトはシリアライズされた後、一つにまとめられ、一つの可変長バイト列としてDBファイルのサブストリーム格納部に保存される。
【0045】
このように、本実施形態では、分割オブジェクトに対するシリアライズに関して、Java(登録商標)実行環境が持つシリアライズ機能をカスタマイズしているが、このカスタマイズは、図6のプログラム構成に示すIdBoxクラスのメソッドにより実現している。すなわち、分割オブジェクトに対しては当該メソッドによるシリアライズ機能が用いられ、分割オブジェクト以外の他のオブジェクトに対しては通常のJava(登録商標)実行環境が持つシリアライズ機能が用いられる。
【0046】
本実施形態では、参照グラフに一又は複数の分割オブジェクトを追加して、参照グラフを複数の部分参照グラフに分割したことにより、データベース管理オブジェクト61は、参照グラフを部分的に操作することができる。例えば、メインメモリ31上にはアプリケーション51が処理に必要とする部分参照グラフだけを置き、他の部分参照グラフは二次記憶装置に置いたままにするというような操作が可能である。このため、本実施形態の大規模データ取扱装置では、メインメモリ31の容量を超える大規模な参照グラフであっても取り扱うことができる。
【0047】
また、本実施形態では、参照グラフに分割オブジェクトを追加するという点で、OODB(object−oriented database)の概念を若干取り入れている。OODBと異なり、参照グラフに分割オブジェクトを追加する処理を別途行う必要があるが、この点は、実際、あまり問題とならない。参照グラフに分割オブジェクトを追加する処理を行うには、プログラムの書き方自体が変わるわけではなく、アプリケーションのプログラム中に、分割オブジェクトに対するOpen等の操作についてのプログラムを追加するだけでよいからである。また、メインメモリ上の参照グラフを扱う場合に近いプログラムの書き方で、二次記憶装置へのデータアクセスを行うことができる。このため、本実施形態の大規模データ取扱装置を容易に実現することができる。
【0048】
次に、本実施形態の大規模データ取扱装置において、大規模な参照グラフがどのように取り扱われるかについて具体的に説明する。いま、例えば、1000個の画像データ(要素データ)を順に配列することにより動画データを作成し、また、その作成した動画を再生する場合を考える。ここで、各画像データの容量が1MBであり、また、メインメモリ31の容量は1GB未満であるとする。
【0049】
従来、メインメモリの容量が1GB未満のマシンでは、図7(a)に示すような1000個の画像データからなる参照グラフをメインメモリ上に作ることはできない。これに対し、本実施形態の大規模データ取扱装置は、分割オブジェクトを追加しながら参照グラフを作成し、保存する機能F1と、その作成した参照グラフについて最初のオブジェクトから最後のオブジェクトまで順番に辿り、参照グラフの内容を読み取る機能F2とを有している。かかる機能F1,F2を利用して、例えば、図7(b)に示すように、各画像データの間に分割オブジェクトを挿入して参照グラフを1000個の部分参照グラフに分割することにより、メインメモリ31の容量よりも大きい容量の大規模な参照グラフを取り扱うことができる。
【0050】
最初に、上記の機能F1について説明する。図8は、本実施形態の大規模データ処理装置において、上記の機能F1により図7(b)に示す1000個の要素データからなる参照グラフを作成・保存する場合の処理手順を説明するためのフローチャートである。また、図9は図8に示す各処理の様子を模式的に示す図である。尚、以下では、参照グラフの各要素データを「ノード」とも称することにする。
【0051】
まず、アプリケーション51は、ODBMクラスのオブジェクト、すなわちデータベース管理オブジェクト61をメインメモリ31上に生成する(ステップS1)。ここで、データベース管理オブジェクト61の名前を例えば「db」とする。
【0052】
次に、アプリケーション51は、データベース管理オブジェクト「db」のOpenメソッドを呼ぶ(ステップS2)。このOpenメソッドは、ファイル名を指定してDBファイルを開くものである。この場合は、当該DBファイルは存在しないので、その指定した名前のDBファイルを作成して、開くことになる。これにより、その新規に作成したDBファイルは引き続き利用できる状態になる。ここで、その作成したDBファイルのファイル名を例えば「patent_sample」とする。
【0053】
次に、アプリケーション51は、所定の処理を実行することにより最初のノード(first_node)を生成する(ステップS3)。これは、アプリケーション51が1000個のノードからなる参照グラフのうち最初のノードを生成したという意味である。このときの様子は、図9(a)に示される。すなわち、1MBのノードが一つ作成されている。
【0054】
その後、アプリケーション51はデータベース管理オブジェクト「db」に分割オブジェクトを作成する旨の命令を出す。これにより、データベース管理オブジェクト「db」は、最初の分割オブジェクト(first_idbox)を生成する(ステップS4)。すなわち、データベース管理オブジェクト「db」は、識別番号を発生させ、その識別番号を有する分割オブジェクトを生成する。このとき、その分割オブジェクトにおいて、データベース管理オブジェクトへの参照情報には「db」を設定し、コンテンツへの参照情報には「first_node」を設定する。また、その分割オブジェクトにおける状態フラグを「Open」とする。このときの様子は、図9(b)に示される。この図9(b)において黒い丸は最初の分割オブジェクトを示している。そして、その分割オブジェクトから最初のノードに対して矢印が出ていることは、当該分割オブジェクトにおけるコンテンツへの参照情報に「first_node」が設定されたことを示している。
【0055】
次に、データベース管理オブジェクト「db」は、DBファイル「patent_sample」のルートストリーム格納部において、ルート名(文字列のキー)に例えば「large_list」という名前を付け、そのルート名に対応するストリームに最初の分割オブジェクトの識別番号を保存する(ステップS5)。このときの様子は、図9(c)に示される。この図9(c)において、点線で囲った部分が「large_list」と名付けられてDBファイル「patent_sample」に保存される。ここで、図9(c)において、最初の分割オブジェクトの半分だけが点線で囲まれている。これは、最初の分割オブジェクトには、データベース管理オブジェクトへの参照情報、識別番号、状態フラグ、コンテンツへの参照情報が含まれるが、これらのうち識別番号だけがDBファイル「patent_sample」に保存されるということを表現するためである。この点は、図9(c)以外の図でも、同様である。
【0056】
次に、データベース管理オブジェクト「db」は、「prev_idbox」という名前で最初の分割オブジェクトを指す(ステップS6)。この「prev_idbox」という名前は、以下に説明する「new_idbox」という名前と対立するもので、一つ前に生成された分割オブジェクトを指し示すために用いられる変数である。このときの様子は、図9(d)に示される。図9(d)では、最初の分割オブジェクトは、「prev_idbox」という名前で表されている。
【0057】
データベース管理オブジェクト「db」は、処理のループカウンタを有している。ステップS6の後、データベース管理オブジェクト「db」は、そのループカウンタの計数値Iを1に初期化する(ステップS7)。また、このループカウンタはその計数値Iが1000になるまでカウントする。
【0058】
その後、データベース管理オブジェクト「db」は、ループカウンタの計数値Iが1000より小さいか否か判断する(ステップS8)。その計数値Iが1000より小さい場合には、ステップS9に移行し、その計数値Iが1000であれば、ステップS16に移行する。
【0059】
ステップS9では、アプリケーション51は、所定の処理を実行することにより新しいノードを生成し、「new_node」という名前(変数)で指し示す。この「new_node」という変数は、最近に生成されたノードを指し示すためのものである。図9(e)では、最初のノードに加えて、さらに新しいノード「new_node」が生成されている。
【0060】
その後、アプリケーション51はデータベース管理オブジェクト「db」に分割オブジェクトを作成する旨の命令を出す。すると、データベース管理オブジェクト「db」は、新しい分割オブジェクトを生成し、「new_idbox」という名前(変数)で指し示す(ステップS10)。この「new_idbox」という変数は、最近に生成された分割オブジェクトを指し示すためのものである。このとき、データベース管理オブジェクト「db」は、新しい分割オブジェクト「new_idbox」において、データベース管理オブジェクトへの参照情報には「db」を設定し、コンテンツへの参照情報には「new_node」を設定する。また、その分割オブジェクト「new_idbox」における状態フラグを「Open」とする。このときの様子は、図9(e)に示される。図9(e)では、新しい分割オブジェクト「new_idbox」が生成され、その新しい分割オブジェクト「new_idbox」には、新しいノード「new_node」に向かう矢印が付けられている。
【0061】
次に、データベース管理オブジェクト「db」は、分割オブジェクト「prev_idbox」のコンテンツのうちのノード(この場合は、最初のノード)の参照情報に「new_idbox」を設定する(ステップS11)。このときの様子は、図9(f)に示される。この図9(f)では、分割オブジェクト「prev_idbox」のコンテンツのうちの最初のノードに、新しい分割オブジェクト「new_idbox」に向かう矢印が付けられている。
【0062】
次に、データベース管理オブジェクト「db」は、分割オブジェクト「prev_idbox」のSaveメソッドを呼ぶ(ステップS12)。このSaveメソッドにより、分割オブジェクト「prev_idbox」のコンテンツは、シリアライズされた後、DBファイル「patent_sample」に保存される。具体的には、データベース管理オブジェクト「db」は、DBファイル「patent_sample」のサブストリーム格納部において、Idに分割オブジェクト「prev_idbox」の識別番号を付け、このIdに対応するストリームに分割オブジェクト「prev_idbox」のコンテンツを保存する。このときの様子は、図9(g)に示される。この図9(g)では、右側の点線で囲った部分が、分割オブジェクト「prev_idbox」のコンテンツを表しており、かかるコンテンツがDBファイル「patent_sample」のサブストリーム格納部に保存される。
【0063】
次に、データベース管理オブジェクト「db」は、分割オブジェクト「prev_idbox」のCloseメソッドを呼ぶ(ステップS13)。このCloseメソッドにより、分割オブジェクト「prev_idbox」におけるコンテンツへの参照情報がnullにされると共に、その状態フラグが「Closed」とされる。このため、分割オブジェクト「prev_idbox」のコンテンツのうちのノードは、分割オブジェクト「prev_idbox」から参照されなくなる。このときの様子は、図9(h)に示される。すなわち、分割オブジェクト「prev_idbox」から当該ノードに向かう矢印がなくなる。したがって、分割オブジェクト「prev_idbox」のCloseメソッドを呼ぶと、分割オブジェクト「prev_idbox」のコンテンツのうちのノードは、ガーベジコレクションによるメインメモリ31上からの削除の対象となる。そして、ガーベジコレクションが実行されることにより、分割オブジェクト「prev_idbox」のコンテンツのうちのノードはメインメモリ31から開放される。すなわち、図9(h)において、右側の点線内において網掛けで示した部分がメインメモリ31上から削除される。尚、この時点では、分割オブジェクト「prev_idbox」自体は削除の対象とはならない。分割オブジェクト「prew_idbox」は、その名前でプログラム上参照されているからである。
【0064】
次に、データベース管理オブジェクト「db」は、「prev_idbox」という名前で新しい分割オブジェクト「new_idbox」を指し示す(ステップS14)。これにより、「prev_idbox」という変数は、新しい分割オブジェクトを指し示すことになる。このため、いままで「prev_idbox」という名前で指し示されていた分割オブジェクトは、プログラム上参照できなくなるので、ガーベジコレクションによるメインメモリ31上からの削除の対象となる。このときの様子は、図9(i)に示される。すなわち、図9(i)に示すように、左側に網掛けで示した部分に含まれる分割オブジェクトは、ガーベジコレクションによりメインメモリ31上から開放されることになる。
【0065】
このステップS14による処理が終了した時点で、メインメモリ31上に存在する参照グラフの状態は、ステップS6による処理が終了した時点でメインメモリ31上に存在する参照グラフの状態と全く同じである。
【0066】
ステップS14による処理の後、データベース管理オブジェクト「db」は、ループカウンタの計数値Iを1だけ増やす(ステップS15)。そして、ステップS8に移行する。こうして、ステップS9からステップS15までの処理を繰り返すことにより、1000個のノードからなる参照グラフが生成される。
【0067】
その後、ステップS8においてループカウンタの計数値Iが1000であると判断されると、すなわち、1000個のノードからなる参照グラフが作成されると、ステップS16に移行する。
【0068】
ステップS16では、データベース管理オブジェクト「db」は、分割オブジェクト「prev_idbox」のSaveメソッドを呼ぶ。これにより、分割オブジェクト「prev_idbox」のコンテンツは、シリアライズされた後、DBファイル「patent_sample」のサブストリーム格納部に保存される。この場合、当該分割オブジェクト「prev_idbox」の下位には分割オブジェクトはないので、当該分割オブジェクト「prev_idbox」のコンテンツはノードだけである。
【0069】
次に、データベース管理オブジェクト「db」は、分割オブジェクト「prev_idbox」のCloseメソッドを呼ぶ(ステップS17)。これにより、分割オブジェクト「prev_idbox」のコンテンツであるノードは、ガーベジコレクションが実行されることにより、メインメモリ31上から削除される。
【0070】
その後、アプリケーション51は、データベース管理オブジェクト「db」のCloseメソッドを呼ぶ(ステップS18)。このCloseメソッドにより、DBファイル「patent_sample」が閉じられる。以上により、1000個のノードからなる参照グラフが二次記憶装置32に保存され、図8の処理フローが終了する。
【0071】
次に、参照グラフの内容を読み出す機能F2について説明する。図10は、上記の機能F2により図8の処理フローにしたがって作成した参照グラフの最初のノードから最後のノードまで順番に辿り、その内容を読み出す場合の処理手順を説明するためのフローチャートである。また、図11は図10に示す各処理の様子を模式的に示す図である。ここで、アプリケーション51は、読み出そうとする参照グラフが二次記憶装置32内の「patent_sample」という名前のDBファイルに「large_list」という名前で保存されていることが分かっている。
【0072】
まず、アプリケーション51は、ODBMクラスのオブジェクト、すなわちデータベース管理オブジェクト61をメインメモリ31上に生成する(ステップS21)。ここで、データベース管理オブジェクト61の名前は「db」である。
【0073】
次に、アプリケーション51は、データベース管理オブジェクト「db」のOpenメソッドを呼ぶ(ステップS22)。このとき、ファイル名として、図8の処理フローで作成したDBファイルのファイル名「patent_sample」を指定する。これにより、DBファイル「patent_sample」が開かれる。
【0074】
次に、アプリケーション51はデータベース管理オブジェクト「db」に、「large_list」という名前で保存されているオブジェクト(データ)をメインメモリ31上に読み出す旨の命令を出す。これにより、データベース管理オブジェクト「db」は、DBファイル「patent_sample」から、「large_list」という名前で保存されているオブジェクトを読み出す(ステップS23)。具体的には、データベース管理オブジェクト「db」は、DBファイル「patent_sample」のルートストリーム格納部において、「large_list」というルート名に対応するストリームに保存されているオブジェクトをデシリアライズする。そして、そのデシリアライズされたオブジェクトをメインメモリ31上に読み出す。このとき、データベース管理オブジェクト61は、その読み出したオブジェクトを、「idbox」という名前(変数)で指し示す。この「idbox」という変数は、分割オブジェクトを指し示すためのものである。ここで、読み出したオブジェクトを「idbox」という名前で指し示すのは、データベース管理オブジェクト「db」が、図8の処理フローで作成されたDBファイルの構造を知っており、したがって、そのオブジェクトがIdBoxクラスのオブジェクト、すなわち分割オブジェクトであるということが予め分かっているからである。
【0075】
また、ここで読み出した分割オブジェクト「idbox」の識別番号としては、「large_list」というルート名に対応するストリームに保存されていた識別番号が用いられる。そして、データベース管理オブジェクト「db」は、分割オブジェクト「idbox」において、データベース管理オブジェクトへの参照情報に「db」を、コンテンツへの参照情報にnullを設定する。また、その状態フラグを「Closed」とする。このときの様子は、図11(a)に示される。この図11(a)では、分割オブジェクト「idbox」が一つ生成されている。
【0076】
その後、データベース管理オブジェクト「db」は、分割オブジェクト「idbox」コンテンツをDBファイル「patent_sample」から読み出す(ステップS24)。具体的には、データベース管理オブジェクト「db」は、DBファイル「patent_sample」のサブストリーム格納部において、分割オブジェクト「idbox」の識別情報と同じIdに対応するストリームに保存されているコンテンツをデシリアライズしてメインメモリ31上に読み出す。この読み出したコンテンツには、当該分割オブジェクトが参照グラフの最後のものでなければ、ノードとそれに続く他の分割オブジェクトの識別情報とを含んでいる。データベース管理オブジェクト「db」は、読み出したノードを「node」という名前(変数)で指し示す。この「node」という変数は、ノードを指し示すためのものである。そして、データベース管理オブジェクト「db」は、分割オブジェクト「idbox」において、コンテンツへの参照情報に「node」を設定し、その状態フラグを「Open」とする。また、分割オブジェクト「idbox」のコンテンツに含まれる他の分割オブジェクトの識別情報に基づいて、当該他の分割オブジェクトが生成される。このときの様子は、図11(b)に示される。この図11(b)では、当該他の分割オブジェクトは省略している。
【0077】
その後、アプリケーション51は、ステップS24でメインメモリ31上に取り出したノード「node」の内容を使って所定の処理を行う。そして、当該ノード「node」の内容を使った処理が終わると、ステップS25に移行する。
【0078】
ステップS25では、データベース管理オブジェクト「db」は、分割オブジェクト「idbox」のCloseメソッドを呼ぶ。これにより、分割オブジェクト「idbox」のコンテンツのうちのノード「node」は、分割オブジェクト「idbox」からの参照がなくなる。このときの様子は、図11(c)に示される。すなわち、図11(c)に示すように、分割オブジェクト「idbox」から当該ノード「node」に向かう矢印がなくなる。したがって、分割オブジェクト「idbox」のコンテンツのうちのノード「node」は、他に参照がなければ、ガーベジコレクションが実行されると、メインメモリ31上から削除される。
【0079】
次に、データベース管理オブジェクト「db」は、当該ノード「node」の次に他の分割オブジェクトが繋がっているか否かを判断する(ステップS26)。すなわち、図11(d)に示すように、当該ノード「node」の参照情報がnullでないか、nullであるかを判断する。当該ノード「node」の参照情報がnullでなく、その次に繋がる他の分割オブジェクトを指し示している場合には、データ管理オブジェクト「db」は、当該ノード「node」の次に繋がる他の分割オブジェクトを「idbox」という変数で指し示す(ステップS27)。このときの様子は、図11(e)に示される。すなわち、図11(e)に示すように、「idbox」という変数は、右側の分割オブジェクトを指し示すことになる。このため、いままで「idbox」という変数で指し示されていた左側の分割オブジェクトは、プログラム上参照できなくなるので、ガーベジコレクションによるメインメモリ31上からの削除の対象となる。すなわち、図11(e)において、左側に網掛けで示した部分に含まれる分割オブジェクトは、ガーベジコレクションによりメインメモリ31上から開放される。また、真ん中に示したノード「node」については、その「node」という変数(参照名)が次の処理ループ(ステップS24〜S27)において他のオブジェクトを指し示すようになったときに、ガーベジコレクションによりメインメモリ31上から開放されることになる。
【0080】
かかるステップS26の処理の後は、ステップS24に移行する。そして、ステップS24からステップS27までの処理を繰り返すことにより、参照グラフの最初のノードから最後のノードまで順番に辿り、その内容をメインメモリ31上に読み取ることができる。
【0081】
ステップS26において、当該ノード「node」の参照情報がnullであると判断されると、アプリケーション51は、当該ノード「node」が参照グラフの最後のノードであると認識し、データベース管理オブジェクト「db」のCloseメソッドを呼ぶ(ステップS28)。これにより、DBファイル「patent_sample」が閉じられる。以上で、図11の処理フローが終了する。
【0082】
本実施形態の大規模データ取扱装置では、参照グラフに一又は複数の分割オブジェクトを追加することにより、参照グラフを複数の部分参照グラフに分割すると共に、分割オブジェクトのコンテンツ単位で、二次記憶装置にデータアクセスを行う。このため、メインメモリ上にはアプリケーションが処理に必要とする部分参照グラフだけを置き、他の部分参照グラフは二次記憶装置に置いたままにするというような操作が可能である。また、メインメモリ上の参照グラフを扱う場合に近いプログラムの書き方で、二次記憶装置へのデータアクセスを実現できる。したがって、本実施形態の大規模データ取扱装置では、メインメモリの容量を超える大規模な参照グラフであっても、簡単で且つ安価な仕組みで取り扱うことができる。
【0083】
尚、本発明は上記の実施形態に限定されるものではなく、その要旨の範囲内において種々の変形が可能である。
【0084】
例えば、上記の実施形態では、アプリケーションがデータベース管理オブジェクトを生成する場合について説明したが、大規模データ取扱装置がデータベース管理オブジェクトの機能を有しており、その機能を利用して、分割オブジェクトの生成、二次記憶装置へのデータアクセス等を行うようにしてもよい。
【0085】
本発明の目的は、上述した実施形態の装置の機能を実現するソフトウェアのプログラムコード(実行形式を含む)を、その全体あるいは一部を記録した記録媒体により、本実施形態の装置に供給し、その装置のコンピュータ(又はCPU、MPU)が記録媒体に格納されたプログラムコードを読み出して、動作の全部あるいは一部を実行することによっても達成されることは言うまでもない。この場合、記録媒体から読み出されたプログラムコード自体が本実施形態の機能を実現することになり、そのプログラムコードを記録した記録媒体は本発明を構成することになる。
【0086】
プログラムコードを供給するための記録媒体としては、ROM、フロッピー(登録商標)ディスク、ハードディスク、光ディスク、光磁気ディスク、CD−ROM、CD−R、DVD−ROM、磁気テープ、不揮発性のメモリカード等を用いることができる。さらに、通信回線を介してダウンロードすることによってプログラムコードを供給するようにしてもよいし、JAVA(登録商標)などの技術を利用してプログラムコードを供給して実行するようにしてもよい。
【0087】
また、コンピュータが読み出したプログラムコードを実行することにより、本実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼動しているOSなどが実際の処理の一部又は全部を行い、その処理によって本実施形態の機能が実現される場合も本発明に含まれることは言うまでもない。
【0088】
更に、記録媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータが接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部又は全部を行い、その処理によって本実施形態の機能が実現される場合も本発明に含まれることは言うまでもない。
【0089】
加えて、本発明はコンピュータに上記の実施形態の装置の機能を実現させるためのプログラムを含むプログラム・プロダクトであってもよい。ここで、プログラム・プロダクトというのは、コンピュータ・プログラムだけでなく、プログラムを記録した記録媒体あるいはコンピュータを含むものである。
【0090】
【発明の効果】
以上説明したように本発明に係る大規模データ取扱装置では、参照グラフに一又は複数の分割オブジェクトを追加することにより、参照グラフを複数の部分参照グラフに分割すると共に、分割オブジェクトのコンテンツ単位で、二次記憶手段にデータアクセスを行う。このため、メインメモリ上にはアプリケーションプログラムが処理に必要とする部分参照グラフだけを置き、他の部分参照グラフは二次記憶手段に置いたままにするというような操作が可能である。また、メインメモリ上の参照グラフを扱う場合に近いプログラムの書き方で、二次記憶手段へのデータアクセスを実現できる。したがって、本発明の大規模データ取扱装置は、メインメモリの容量を超える大規模な参照グラフを、簡単で且つ安価な仕組みで取り扱うことができる。
【図面の簡単な説明】
【図1】本発明の一実施形態である大規模データ取扱装置の概略ブロック図である。
【図2】その大規模データ取扱装置における処理の様子を説明するための図である。
【図3】メインメモリ上の分割オブジェクトの内容を模式的に示した図である。
【図4】参照グラフの例を示す図である。
【図5】図2に示すメインメモリのメモリマップの一例を示す図である。
【図6】本実施形態の大規模データ処理装置におけるプログラムの構成を説明するための図である。
【図7】参照グラフの例を示す図である。
【図8】本実施形態の大規模データ処理装置において、図7(b)に示す1000個の要素データからなる参照グラフを作成・保存する場合の処理手順を説明するためのフローチャートである。
【図9】図8に示す各処理の様子を模式的に示す図である。
【図10】図8の処理フローにしたがって作成した参照グラフの最初の要素データから最後の要素データまで順番に辿り、その内容を読み出す場合の処理手順を説明するためのフローチャートである。
【図11】図10に示す各処理の様子を模式的に示す図である。
【符号の説明】
10 入力装置
20 表示装置
30 計算機
31 メインメモリ
32 二次記憶装置
33 中央処理装置
51 アプリケーション
61 データベース管理オブジェクト
66 分割オブジェクト生成部
67 データベースアクセス部
68 分割オブジェクトキャッシュ部
【発明の属する技術分野】
本発明は、オブジェクト指向プログラミング言語で記述されたアプリケーションプログラムが処理する大規模データを取り扱うことができる大規模データ取扱装置に関するものである。
【0002】
【従来の技術】
通常、オブジェクト指向プログラミング言語で記述されたアプリケーションを実行する際、そのアプリケーションがメインメモリ上で処理するデータは、アプリケーションから見た場合にメインメモリ上のオブジェクトの参照グラフとして表される。ここで、参照グラフに含まれる各データは、他のデータへの参照を含んでいる。特に、アプリケーションが処理するデータが大規模である場合は、そのアプリケーションの実行が困難なことがある。データがメインメモリ上に入りきらず、そのため、データ全体を参照グラフとしてメインメモリ上に生成すること自体ができなくなることがあるからである。
【0003】
このように、データがメインメモリに入りきらないくらい大規模になる場合、従来は、かかる大規模なデータを扱う方法として、次の二つの方法が用いられている。すなわち、第一の方法は、RDB(relational database)、OODB(object−oriented database)などを使うことにより、大規模なデータを取り扱う方法である(例えば、非特許文献1参照。)。また、第二の方法は、アプリケーションのプログラムを工夫することにより、データを小さな単位に分割し、その分割した単位でデータを取り扱う方法である(例えば、非特許文献2参照。)。
【0004】
【非特許文献1】
メアリー E.S.ルーミス著、野口善洋訳「アジソン ウェスレイ・トッパン 情報科学シリーズ・78 オブジェクトデータベースのエッセンス」第1版、株式会社トッパン、1996年4月、p.21−23
【非特許文献2】
メアリー E.S.ルーミス著、野口善洋訳「アジソン ウェスレイ・トッパン 情報科学シリーズ・78 オブジェクトデータベースのエッセンス」第1版、株式会社トッパン、1996年4月、p.20
【0005】
【発明が解決しようとする課題】
ところで、上記の第二の方法では、各アプリケーション毎にプログラムを工夫しなければならず、とても手間がかかるという問題がある。一方、第一の方法では、次のような問題がある。すなわち、RDBを使う場合は、データをRDBのテーブルで表現するとき、データをSQLという別の言語を介して扱うことになる。このため、メインメモリ上の参照グラフを扱うプログラムの書き方とは異なるプログラムを書く必要があり、煩雑である。また、RDBでは、参照を辿る操作一つ一つについて検索処理を行うことになり処理に時間がかかる。これに対し、OODBを使う場合は、RDBのようにプログラムを書く際の煩雑さはないが、OODB自体が高価であり、しかも、プログラムが要求する機能に対して、仕掛け自体が大掛かりなものになってしまうという問題がある。
【0006】
本発明は上記事情に基づいてなされたものであり、メインメモリに入りきらないような大規模データを、簡単で且つ安価な仕組みで取り扱うことができる大規模データ取扱装置を提供することを目的とするものである。
【0007】
【課題を解決するための手段】
上記の目的を達成するための請求項1記載の発明は、オブジェクト指向プログラミング言語で記述されたアプリケーションプログラムが処理する大規模データを取り扱う大規模データ取扱装置であって、前記アプリケーションプログラムが処理する、メインメモリ上に展開されたデータの集まりであって各データに付与された参照情報によってデータ間の参照関係が構築されている参照グラフに対して、識別情報を有する一又は複数の分割オブジェクトを生成すると共に当該各分割オブジェクトに付与された参照情報に前記参照グラフ内の所定のデータを設定して当該各分割オブジェクトを前記参照グラフに追加することにより、当該各分割オブジェクトによって前記参照グラフを複数の部分参照グラフに分割する分割オブジェクト生成手段と、前記参照グラフの参照関係の最上位に分割オブジェクトがある場合にあっては当該最上位の分割オブジェクトの識別情報を、その参照関係の最上位にデータがある場合にあっては当該データを含む最初の部分参照グラフ及び当該最初の部分参照グラフの直後にある分割オブジェクトの識別情報を、文字列のキーを付して格納すると共に、前記参照グラフにおける各分割オブジェクトのコンテンツ、すなわち、当該分割オブジェクトの直後にある部分参照グラフ及び当該部分参照グラフの直後に他の分割オブジェクトがある場合にはさらに当該他の分割オブジェクトの識別情報を、整数値のキーとしての当該分割オブジェクトの識別情報を付して格納する二次記憶手段と、前記アプリケーションプログラムが前記参照グラフを前記メインメモリ上に生成する際又は前記アプリケーションプログラムが前記参照グラフを前記二次記憶手段から前記メインメモリ上に読み出す際に、前記文字列のキー又は前記整数値のキーを指定し、分割オブジェクトのコンテンツの単位で、前記二次記憶手段にアクセスを行うデータ管理手段と、を備えることを特徴とするものである。
【0008】
請求項2記載の発明は、請求項1記載の大規模データ取扱装置において、前記メインメモリ上に存在する分割オブジェクトの識別情報を登録する分割オブジェクト登録手段を備えており、前記データ管理手段は、前記アプリケーションプログラムが所定の部分参照グラフを前記二次記憶手段から前記メインメモリ上に読み出す際に、当該部分参照グラフをコンテンツとして含んでいる分割オブジェクトの識別情報と同じ識別情報が前記分割オブジェクト登録手段に登録されていれば、前記メインメモリ上に既に存在する当該分割オブジェクトの参照を前記アプリケーションに返すことを特徴とするものである。
【0009】
上記の目的を達成するための請求項3記載の発明に係るコンピュータ読み取り可能な記録媒体は、請求項1又は2のいずれかに記載の大規模データ取扱装置の機能をコンピュータに実現させるためのプログラムを記録したものである。
【0010】
上記の目的を達成するための請求項4記載の発明に係るプログラムは、請求項1又は2のいずれかに記載の大規模データ取扱装置の機能をコンピュータに実現させるためのものである。
【0011】
【発明の実施の形態】
以下に本発明の一実施形態について図面を参照して説明する。図1は本発明の一実施形態である大規模データ取扱装置の概略ブロック図、図2はその大規模データ取扱装置における処理の様子を説明するための図である。
【0012】
本実施形態の大規模データ取扱装置は、図1に示すように、キーボードやマウス等の入力装置10と、液晶ディスプレイ等の表示装置20と、計算機(コンピュータ)30とを備える。計算機30は、メインメモリ31と、ハードディスク装置等の二次記憶装置32と、中央処理装置33とを有する。本実施形態では、オブジェクト指向プログラミング言語で記述されたアプリケーションが大規模なデータを処理する場合について考える。
【0013】
図2に本実施形態の大規模データ取扱装置においてアプリケーション実行時の処理の様子を示す。アプリケーションの実行時には、図2に示すように、当該アプリケーション51はメインメモリ31上に読み込まれる。また、このとき、アプリケーション51はメインメモリ31上にデータベース管理オブジェクト61を生成する。このデータベース管理オブジェクト61は、分割オブジェクト生成部66と、データベースアクセス部67と、分割オブジェクトキャッシュ部68とを有する。中央処理装置33は、メインメモリ31上に生成されたアプリケーション51とデータベース管理オブジェクト61とを実行することにより、アプリケーション51の機能とデータベース管理オブジェクト61の機能とを実現することになる。
【0014】
アプリケーション51が処理するデータはメインメモリ31上に展開される。図2では、かかるデータをメインメモリ31内の右下部にツリー構造で示している。ここでは、アプリケーション51がその本来の機能上処理するデータ(「要素データ」又は「アプリケーションデータ」)を、白い丸で表している。例えば、アプリケーション51が地図作成・閲覧ソフトである場合、アプリケーション51が本来の機能上処理する要素データは、複数の画像データであり、これらの画像データを繋ぎ合わせることにより地図全体を表す全体の画像データが得られる。
【0015】
本実施形態では、オブジェクト指向プログラミング言語で記述されたアプリケーションを対象としているので、メインメモリ31上に展開された各データには、他への参照を示す参照情報が付与されている。この参照情報は、当該データが他のどのデータを参照しているか或いはどのデータと繋がっているのかを示すものである。各データに付与された参照情報を順に辿ることにより、データ間の参照関係(繋がり関係)を知ることができる。ここで、参照情報は方向性を持っている。このため、図2では参照情報を矢印で表現している。矢印が引き出されている側のデータにその矢印に対応する参照情報が付与されている。矢印が指し示している側のデータにその矢印に対応する参照情報が付与されているわけではない。例えば、上述の画像データの場合、ある画像データが上下左右方向に他の画像データと繋がっていれば、当該画像データからは四つの矢印が引き出される、すなわち、当該画像データには四つの参照情報が付与されることになる。この場合、各参照情報には名前を付けて、それらを区別することになる。このように、メインメモリ31上に展開されたデータの集まりであって、各データに付与された参照情報によってデータ間の参照関係が構築されているものを、「参照グラフ」と称する。
【0016】
また、図2に示すように、参照グラフには、黒い丸で示すデータが埋め込まれている。かかるデータは、「分割オブジェクト」と称されるものであり、データベース管理オブジェクト61の分割オブジェクト生成部66により生成される。分割オブジェクトは、参照グラフがメインメモリ31上に生成される際に、当該参照グラフを複数の部分参照グラフに分割するためのものである。すなわち、分割オブジェクトは、参照グラフにおいて各部分参照グラフを仕切る役割を果たす。ここで、参照グラフには、要素データと分割オブジェクトが含まれるが、部分参照グラフには、要素データだけが含まれ、分割オブジェクトは含まれないものとする。また、参照グラフにおいて、白い丸で表したデータ、黒い丸で表したデータはともに、プログラムの観点からはオブジェクトとして扱われる。本実施形態の大規模データ取扱装置では、データベース管理オブジェクト61が設けられている点、参照グラフに複数の分割オブジェクトが追加されている点が、大きな特徴点である。
【0017】
図3はメインメモリ31上の分割オブジェクトの内容を模式的に示した図である。分割オブジェクトのデータ量は非常に小さい。分割オブジェクトは、図3に示すように、「データベース管理オブジェクトへの参照情報」、「識別番号」、「コンテンツ読み込み状態フラグ」、「コンテンツへの参照情報」という四つのデータを有する。尚、かかる四つのデータを有するのは、メインメモリ31上に存在する分割オブジェクトである。二次記憶装置32に格納されている分割オブジェクトは「識別番号」のみを有する。
【0018】
一般に、データベース管理オブジェクト61は、メインメモリ31上に複数生成されることができる。分割オブジェクトの有する「データベース管理オブジェクトへの参照情報」とは、当該分割オブジェクトを生成したデータベース管理オブジェクト61、すなわち当該分割オブジェクトが帰属するデータベース管理オブジェクト61を示すものである。かかる参照情報を調べることにより、当該分割オブジェクトを生成したデータベース管理オブジェクト61を認識することができる。また、データベース管理オブジェクト61の分割オブジェクト生成部66は、分割オブジェクトを生成する際に、ユニークな番号を発生させる。分割オブジェクトの有する「識別番号」とは、当該分割オブジェクトが帰属するデータベース管理オブジェクト61の分割オブジェクト生成部66から付与されたユニークな番号のことである。但し、帰属するデータベース管理オブジェクトが異なれば、複数の分割オブジェクトが同じ「識別番号」を有していてもよい。データベース管理オブジェクト61は、「識別番号」により分割オブジェクトを管理する。
【0019】
また、分割オブジェクトには、「コンテンツ読み込み状態フラグ」、「コンテンツへの参照情報」も含まれる。いま、分割オブジェクトのコンテンツについて説明する。分割オブジェクトのコンテンツとは、当該参照グラフにおけるオブジェクト間の参照関係上、当該分割オブジェクトの直後にある部分参照グラフ及び当該部分参照グラフの直後に他の分割オブジェクトがある場合にはさらに当該他の分割オブジェクトの識別番号をいう。当該他の分割オブジェクトについては、その識別番号だけが当該分割オブジェクトのコンテンツに含まれ、それ以外の情報は当該分割オブジェクトのコンテンツに含まれない。
【0020】
図4に参照グラフの例を示す。図4(a)に示す例の場合、分割オブジェクトD1の下位には他の分割オブジェクトはない。このため、分割オブジェクトD1のコンテンツは、その分割オブジェクトの直後にある部分参照グラフ、すなわち点線で囲まれた部分に含まれる複数の要素データである。また、図4(b)に示す例の場合、分割オブジェクトD2の下位には一つの分割オブジェクトD3がある。このため、分割オブジェクトD2のコンテンツは、点線で囲まれた部分に含まれる複数の要素データと、分割オブジェクトD3の識別番号とである。ここで、図4(b)において、分割オブジェクトD3の半分だけが点線で囲まれるように描いているのは、分割オブジェクトには、データベース管理オブジェクトへの参照情報、識別番号、状態フラグ、コンテンツへの参照情報が含まれるが、これらのうち識別番号だけが分割オブジェクトD2のコンテンツに含まれるということを表現するためである。
【0021】
尚、分割オブジェクトの下位とは、当該参照グラフにおける各オブジェクトの参照情報を順に辿るときに、当該分割オブジェクトから到達可能なオブジェクトを意味し、また、分割オブジェクトの上位とは、当該参照グラフにおける各オブジェクトの参照情報を順に辿るときに、当該分割オブジェクトに到達可能なオブジェクトを意味する。
【0022】
分割オブジェクトの有する「コンテンツ読み込み状態フラグ」とは、当該分割オブジェクトのコンテンツがメインメモリ31上に読み込まれた状態にあるか否かを示すものである。コンテンツがメインメモリ31上に読み込まれているときには「Open」フラグが、コンテンツがメインメモリ31上に読み込まれていないときには「Closed」フラグが立てられる。また、分割オブジェクトの有する「コンテンツへの参照情報」とは、当該分割オブジェクトのコンテンツのうち当該分割オブジェクトが参照する要素データを示すものである。
【0023】
図5は図2に示すメインメモリ31のメモリマップの一例を示す図である。アプリケーション51の実行時には、アプリケーション51のマシン語のコード(プログラム)が、メインメモリ31上に読み込まれる。メインメモリ31には、アプリケーション51が読み込まれる領域の他に、アプリケーション51の作業領域であるヒープ領域がある。このヒープ領域に、データベース管理オブジェクト61、要素データ、分割オブジェクトが格納される。この例では、アプリケーション51は、一つのデータベース管理オブジェクト61を生成しているが、一般にはデータベース管理オブジェクト61を二つ以上生成してもよい。要素データは、アプリケーション51により生成され、分割オブジェクトは、データベース管理オブジェクト61の分割オブジェクト生成部66により生成される。
【0024】
また、各分割オブジェクトが格納された領域には、「データベース管理オブジェクトへの参照情報」、「識別番号」、「コンテンツ読み込み状態フラグ」、「コンテンツへの参照情報」が含まれている。これらの詳細は上述したとおりである。尚、図5では、ヒープ領域のところどころに未使用の領域があるが、これは、アプリケーション51がオブジェクトを作成したり削除したりしているからである。
【0025】
メインメモリ31上の参照グラフは、二次記憶装置32内に生成されたデータベースファイル(DBファイル)に保存される。このDBファイルは所定のフォーマットで作成される。すなわち、DBファイルは、図2に示すように、ルートストリーム格納部と、サブストリーム格納部とに分けられている。ルートストリーム格納部は、参照グラフのうちその参照関係の上位の一部のデータを、文字列のキーを付して格納するものである。このルートストリーム格納部のデータ形式は、「ルート名」とそれに対応する「ストリーム」とからなる形式になっている。この「ルート名」が文字列のキーであり、「ルート名」としては、例えば当該参照グラフの全体に付けられる名前(ファイル名)等が用いられる。「ルート名」に対応する「ストリーム」には、その「ルート名」が付けられた参照グラフの参照関係の最上位に分割オブジェクトがある場合にあっては当該最上位の分割オブジェクトの識別番号が、その参照関係の最上位に要素データがある場合にあっては最初の部分参照グラフ及び当該最初の部分参照グラフの直後にある分割オブジェクトの識別番号が格納される。
【0026】
また、サブストリーム格納部は、各分割オブジェクトのコンテンツを、整数値のキーを付して格納するものである。このサブストリーム格納部のデータ形式は、「Id」とそれに対応する「ストリーム」とからなる形式になっている。この「Id」が整数値のキーであり、ここでは「Id」として当該分割オブジェクトの識別番号が用いられる。「Id」に対応する「ストリーム」には、その「Id」を有する分割オブジェクトのコンテンツが格納される。
【0027】
尚、メインメモリ31上のデータは、二次記憶装置32に格納される際に、シリアライズされる。シリアライズとは、直列化という意味で、データをシリアライズして可変長バイト列に変換することをいう。ここで、分割オブジェクトもシリアライズ可能である。かかるシリアライズされたデータが二次記憶装置32に保存される。これにより、当該データを永続化、すなわち、後日、当該データをメインメモリ31上に復元することができる。この復元の際には、シリアライズとは逆の操作であるデシリアライズが行われる。
【0028】
アプリケーション51は、データベース管理オブジェクト61に対して、DBファイルの作成、分割オブジェクトの生成・削除、オブジェクトの保存や読み出し等を指示する。一方、アプリケーション51は、参照グラフに対して、要素データの生成・更新・削除、分割オブジェクトの操作等を行う。また、データベース管理オブジェクト61は、参照グラフに対してシリアライズの実行を行う。更に、データベース管理オブジェクト61のデータベースアクセス部67は、二次記憶装置32のDBファイルに対して、キー(ルート名又はId)の検索、キーを指定してストリームへのオブジェクトの格納・ストリームからのオブジェクトの読み出し等を行う。このように、本実施形態では、アプリケーション51はデータベース管理オブジェクト61を介して二次記憶装置32にアクセスすることになる。
【0029】
アプリケーション51は、当該参照グラフのファイル名であるルート名だけを認識していればよく、当該参照グラフに含まれる各分割オブジェクトの識別情報を認識する必要はない。アプリケーション51は二次記憶装置32にアクセスする際にルート名だけを指定すれば、データベース管理オブジェクト61は、その指定したルート名に対応するストリーム、そのストリームに含まれる分割オブジェクトの識別番号、その識別番号と同じIdに対応するストリーム、そのストリームに含まれる分割オブジェクトの識別番号、・・・ 、というふうにして、当該参照グラフをその参照関係の最上位のオブジェクトから順に辿ることができる。すなわち、本実施形態では、データベース管理オブジェクト61は、分割オブジェクトのコンテンツ単位でサブストリーム格納部にアクセスすることができる。このような機能は、一般的なライブラリを利用して実現することができる。
【0030】
次に、本実施形態の大規模データ取扱装置におけるプログラム構成を説明する。図6は本実施形態の大規模データ処理装置におけるプログラムの構成を説明するための図である。
【0031】
プログラム構成の最上層には、アプリケーションがある。これは大規模な参照グラフを処理するアプリケーションである。例えば、地図や動画等を作成するためのアプリケーションである。一方、プログラム構成の最下層にはOS(Operating System)がある。このOSとしては、例えばマイクロソフト社製のOSを用いることができる。OSの上層にJava(登録商標)実行環境がある。そして、このJava(登録商標)実行環境の上層にIdBoxとDBMライブラリとがある。IdBoxは分割オブジェクトのクラスである。DBMライブラリとしては、DBMインターフェースを持つ任意のライブラリを使うことができる。DBMライブラリの上層にはDBManagerが設けられ、そのDBManagerの上層にODBMが設けられている。ODBMはデータベース管理オブジェクト61のクラスである。また、DBManagerは、ODBM内部で、DBMライブラリへのアクセスを簡単にするオブジェクトのクラス、すなわちデータベースアクセス部67のクラスである。ここで、クラスとは、オブジェクト内部のデータ構造とそれを操作する手続を定義したものをいう。これらODBM、DBManager、IdBoxは、本実施形態において新たに作成したライブラリである。アプリケーションは、これらのライブラリを使って作成される。尚、図2においては、アプリケーション51を、かかるライブラリを除く、その本来的な機能だけを有するものとして示している。
【0032】
DBManagerは、ODBMとDBMライブラリとの間でデータのやり取りを行うためのものである。DBMライブラリの持つDBMインターフェースという共通のインターフェースがあるが、DBManagerは、この共通のインターフェース機能を拡張した機能を有している。本実施形態では、DBファイルは、図2に示すように、サブストリーム格納部とルートストリーム格納部とに分けられている。DBファイルをこのような構造で構成し、かかるDBファイルにアクセスする機能がDBManagerに設けられているのである。具体的に、DBMライブラリのインターフェース機能を用いた場合は、文字列のキーとそれに対応するストリームとからなる形式のファイルに対して、文字列のキーを指定することにより、当該文字列のキーに対応するストリームにアクセスする。これに対し、DBManagerのインターフェース機能を用いた場合は、サブストリーム格納部とルートストリーム格納部とを有するDBファイルに対して、文字列のキー(ルート名)又は整数値のキー(Id)を指定することにより、当該キーに対応するストリームにアクセスする。
【0033】
また、ODBMクラス及びDBManagerクラスには、DBファイルに対するメソッド、ルートストリーム格納部に対するメソッド、サブストリーム格納部に対するメソッド等が定義されている。ここで、メソッドとは、オブジェクトの実行する手続を記述したプログラムをいう。DBファイルに対するメソッドとしては、DBファイルを開くためのOpenメソッドと、DBファイルを閉じるためのCloseメソッドとがある。ルートストリーム格納部に対するメソッドとしては、指定した文字列のキーに対応するストリームに格納されたオブジェクトを読み出すためのメソッド、指定した文字列のキーに対応するストリームにオブジェクトを保存するためのメソッド等がある。また、サブストリーム格納部に対するメソッドとしては、指定した整数値のキーに対応するストリームに格納されたオブジェクトを読み出すためのメソッド、指定した整数値のキーに対応するストリームにオブジェクトを保存するためのメソッド等がある。また、ODBMクラスには、分割オブジェクトを生成するためのメソッドも定義されている。
【0034】
次に、データベース管理オブジェクト61について詳しく説明する。上述したように、データベース管理オブジェクト61は、分割オブジェクト生成部66と、データベースアクセス部67と、分割オブジェクトキャッシュ部68とを有する。ここで、分割オブジェクト生成部66は、本発明の「分割オブジェクト生成手段」に対応し、分割オブジェクトキャッシュ部68は、本発明の「分割オブジェクト登録手段」に対応する。また、データベース管理オブジェクト66から、分割オブジェクト生成部66の機能と分割オブジェクトキャッシュ部68の機能とを除いたものが、本発明の「データ管理手段」に対応する。
【0035】
分割オブジェクト生成部66は、参照グラフに対して、一又は複数の分割オブジェクトを生成すると共に当該各分割オブジェクトに付与された参照情報に参照グラフ内の所定の要素データを設定して当該各分割オブジェクトを当該参照グラフに追加することにより、当該各分割オブジェクトによって参照グラフを複数の部分参照グラフに分割する。かかる分割オブジェクトの生成や分割オブジェクトによる参照グラフの分割は、分割オブジェクト生成部66がアプリケーション51からの指示を受けたときに行われる。この意味では、アプリケーション51が各分割オブジェクトを参照グラフに追加することにより参照グラフを複数の部分参照グラフに分割すると言い表すことができる。また、データベースアクセス部67は、アプリケーション51が参照グラフをメインメモリ31上に生成する際又はアプリケーション51が参照グラフを二次記憶装置32からメインメモリ31上に読み出す際に、文字列のキー又は整数値のキーを指定し、分割オブジェクトのコンテンツの単位で、二次記憶装置32にアクセスを行う。
【0036】
この分割オブジェクト生成部66は、分割オブジェクトを生成する度に、ユニークな識別番号を発生させ、当該分割オブジェクトに付与する。アプリケーション51はその分割オブジェクトを参照グラフに追加する。アプリケーション51は、必要なタイミングでデータベース管理オブジェクト61を介して分割オブジェクトを生成し、参照グラフに追加するように、予めプログラミングされている。このプログラミングに際しては、各部分参照グラフが、メインメモリ31上に読み込むことができないぐらい大きな容量を持つことがないように注意する必要がある。具体的には、アプリケーション51が要素データを所定の数だけ生成したとき、あるいは、メインメモリ31の使用している容量が所定の容量に達したときに、アプリケーション51は分割オブジェクトを生成して参照グラフに追加する。
【0037】
また、分割オブジェクト生成部66は、分割オブジェクトの削除も行う。ここで、分割オブジェクトを削除するということは、当該分割オブジェクトとそのコンテンツを削除するということである。例えば、参照グラフにおいて、ある分割オブジェクト以降のデータが不要になった場合、分割オブジェクト生成部66は、アプリケーション51から当該不要なデータを削除する旨の命令を受けると、データベースアクセス部67を介してDBファイルにアクセスし、当該分割オブジェクト以降の対応するデータを削除する。このとき、メインメモリ31上にある当該不要なデータはアプリケーション51が削除する。
【0038】
データベースアクセス部67は、分割オブジェクトのコンテンツ単位で二次記憶装置32のDBファイルにアクセスするが、このコンテンツ単位でアクセスする際に一番問題となるのは、分割オブジェクトのコンテンツをメインメモリ上に読み出す際に、メインメモリ上にそのコンテンツのコピーが複数作られてしまうことである。例えば、参照グラフ内の一つの分割オブジェクトが複数の要素データによって参照されている場合に、当該各参照を介して当該分割オブジェクトのコンテンツが読み出されると、このようなことが起こり得る。これでは、二次記憶装置上にあるデータとそれに対応するメインメモリ上の参照グラフの形が違ってしまうことになる。かかる問題を解消するために、本実施形態では、データベース管理オブジェクト61に分割オブジェクトキャッシュ部68を設けている。この分割オブジェクトキャッシュ部68は、メインメモリ31上に存在する分割オブジェクトの識別番号を登録するものである。
【0039】
例えば、アプリケーション51が所定の部分参照グラフを二次記憶装置32からメインメモリ31上に読み出す際に、データベース管理オブジェクト61は、当該部分参照グラフをコンテンツとして含んでいる分割オブジェクトの識別番号と同じ識別番号が分割オブジェクトキャッシュ部68に登録されているか否かを判断する。データベース管理オブジェクト61は、登録されていないと判断すると、当該分割オブジェクトのコンテンツを二次記憶装置32からメインメモリ31上に読み出す。一方、登録されていると判断すると、再度、当該分割オブジェクトのコンテンツを二次記憶装置32から読み出すことなく、メインメモリ31上に既に存在する当該分割オブジェクトの参照をアプリケーション51に返す。このように、分割オブジェクトキャッシュ部68は、分割オブジェクトの一意性、すなわちメインメモリ31上には同一の分割オブジェクトのコンテンツが二つ以上作られないことを保証するために用いられる。
【0040】
データベース管理オブジェクト61は、分割オブジェクトに対して、Open操作、Save操作、Close操作を行うことができる。Open操作は、当該分割オブジェクトのコンテンツを二次記憶装置32からメインメモリ31上に読み出す操作である。Save操作は、当該分割オブジェクトのコンテンツをメインメモリ31から二次記憶装置32に保存する操作である。また、Close操作は、当該分割オブジェクトのコンテンツをメインメモリ31から開放する操作である。
【0041】
これらの各操作についてもう少し詳しく説明する。実際に、Open操作、Save操作、Close操作は、図6のプログラム構成に示したIdBoxクラスのメソッドとして定義されている。データベース管理オブジェクト61は、Open操作を行う場合、IdBoxクラスのOpenメソッドを呼ぶ。これにより、データベース管理オブジェクト61は、当該分割オブジェクトのコンテンツ読み込み状態フラグが「Closed」であれば、DBファイルに格納されている当該分割オブジェクトのコンテンツをデシリアライズして、メインメモリ31上に読み出す。そして、データベース管理オブジェクト61は、当該分割オブジェクトのコンテンツ読み込み状態フラグを「Open」にすると共に、当該分割オブジェクトのコンテンツへの参照情報に所定の要素データを設定する。
【0042】
また、データベース管理オブジェクト61は、Save操作を行う場合、IdBoxクラスのSaveメソッドを呼ぶ。これにより、データベース管理オブジェクト61は、当該分割オブジェクトのコンテンツ読み込み状態フラグが「Closed」であれば、何もしないが、そのコンテンツ読み込み状態フラグが「Open」であれば、当該分割オブジェクトのコンテンツをシリアライズして、DBファイルに保存する。
【0043】
更に、データベース管理オブジェクト61は、Close操作を行う場合、IdBoxクラスのCloseメソッドを呼ぶ。これにより、データベース管理オブジェクト61は、当該分割オブジェクトのコンテンツへの参照情報をnullにすると共に、そのコンテンツ読み込み状態フラグを「Closed」にする。本実施形態では、分割オブジェクトのコンテンツをメインメモリ31上から開放するのは、Java(登録商標)実行環境の有するガーベジコレクションを利用する。Java(登録商標)の実行環境は、どのオブジェクトからも参照されていないオブジェクトや、名前が付けられておらずプログラム上でアクセス不可能なオブジェクトを、特定のタイミングでメインメモリ31上から削除する機能を有している。かかる機能をガーベジコレクションという。このため、例えば、IdBoxクラスのCloseメソッドを呼ぶことにより、当該分割オブジェクトのコンテンツのうちどのオブジェクトからも参照されなくなったオブジェクトは、ガーベジコレクションによる削除の対象となる。
【0044】
次に、本実施形態におけるシリアライズ機能について説明する。シリアライズは、上述したようにデータをバイト列に変換することであり、オブジェクト毎に行われる。Java(登録商標)実行環境には、標準的にシリアライズ機能が備わっているが、このシリアライズ機能を使うと、複数のオブジェクトが参照関係上、繋がっている場合、最初のオブジェクトに対してシリアライズを実行すると、その繋がっているすべてのオブジェクトに対してシリアライズが順次実行されてしまう。このため、本実施形態では、Java(登録商標)実行環境が持つシリアライズ機能をカスタマイズしている。すなわち、分割オブジェクトをシリアライズするときは、その分割オブジェクトの識別番号だけをシリアライズすると共に、当該分割オブジェクトよりも下位にあるオブジェクトについてはシリアライズしないことにしている。分割オブジェクト以外のオブジェクトをシリアライズするときには、当該オブジェクトより下位にあるオブジェクトもシリアライズする。したがって、本実施形態におけるシリアライズ機能では、分割オブジェクトのコンテンツ単位でシリアライズが実行される。これにより、分割オブジェクトのコンテンツに含まれる各オブジェクトはシリアライズされた後、一つにまとめられ、一つの可変長バイト列としてDBファイルのサブストリーム格納部に保存される。
【0045】
このように、本実施形態では、分割オブジェクトに対するシリアライズに関して、Java(登録商標)実行環境が持つシリアライズ機能をカスタマイズしているが、このカスタマイズは、図6のプログラム構成に示すIdBoxクラスのメソッドにより実現している。すなわち、分割オブジェクトに対しては当該メソッドによるシリアライズ機能が用いられ、分割オブジェクト以外の他のオブジェクトに対しては通常のJava(登録商標)実行環境が持つシリアライズ機能が用いられる。
【0046】
本実施形態では、参照グラフに一又は複数の分割オブジェクトを追加して、参照グラフを複数の部分参照グラフに分割したことにより、データベース管理オブジェクト61は、参照グラフを部分的に操作することができる。例えば、メインメモリ31上にはアプリケーション51が処理に必要とする部分参照グラフだけを置き、他の部分参照グラフは二次記憶装置に置いたままにするというような操作が可能である。このため、本実施形態の大規模データ取扱装置では、メインメモリ31の容量を超える大規模な参照グラフであっても取り扱うことができる。
【0047】
また、本実施形態では、参照グラフに分割オブジェクトを追加するという点で、OODB(object−oriented database)の概念を若干取り入れている。OODBと異なり、参照グラフに分割オブジェクトを追加する処理を別途行う必要があるが、この点は、実際、あまり問題とならない。参照グラフに分割オブジェクトを追加する処理を行うには、プログラムの書き方自体が変わるわけではなく、アプリケーションのプログラム中に、分割オブジェクトに対するOpen等の操作についてのプログラムを追加するだけでよいからである。また、メインメモリ上の参照グラフを扱う場合に近いプログラムの書き方で、二次記憶装置へのデータアクセスを行うことができる。このため、本実施形態の大規模データ取扱装置を容易に実現することができる。
【0048】
次に、本実施形態の大規模データ取扱装置において、大規模な参照グラフがどのように取り扱われるかについて具体的に説明する。いま、例えば、1000個の画像データ(要素データ)を順に配列することにより動画データを作成し、また、その作成した動画を再生する場合を考える。ここで、各画像データの容量が1MBであり、また、メインメモリ31の容量は1GB未満であるとする。
【0049】
従来、メインメモリの容量が1GB未満のマシンでは、図7(a)に示すような1000個の画像データからなる参照グラフをメインメモリ上に作ることはできない。これに対し、本実施形態の大規模データ取扱装置は、分割オブジェクトを追加しながら参照グラフを作成し、保存する機能F1と、その作成した参照グラフについて最初のオブジェクトから最後のオブジェクトまで順番に辿り、参照グラフの内容を読み取る機能F2とを有している。かかる機能F1,F2を利用して、例えば、図7(b)に示すように、各画像データの間に分割オブジェクトを挿入して参照グラフを1000個の部分参照グラフに分割することにより、メインメモリ31の容量よりも大きい容量の大規模な参照グラフを取り扱うことができる。
【0050】
最初に、上記の機能F1について説明する。図8は、本実施形態の大規模データ処理装置において、上記の機能F1により図7(b)に示す1000個の要素データからなる参照グラフを作成・保存する場合の処理手順を説明するためのフローチャートである。また、図9は図8に示す各処理の様子を模式的に示す図である。尚、以下では、参照グラフの各要素データを「ノード」とも称することにする。
【0051】
まず、アプリケーション51は、ODBMクラスのオブジェクト、すなわちデータベース管理オブジェクト61をメインメモリ31上に生成する(ステップS1)。ここで、データベース管理オブジェクト61の名前を例えば「db」とする。
【0052】
次に、アプリケーション51は、データベース管理オブジェクト「db」のOpenメソッドを呼ぶ(ステップS2)。このOpenメソッドは、ファイル名を指定してDBファイルを開くものである。この場合は、当該DBファイルは存在しないので、その指定した名前のDBファイルを作成して、開くことになる。これにより、その新規に作成したDBファイルは引き続き利用できる状態になる。ここで、その作成したDBファイルのファイル名を例えば「patent_sample」とする。
【0053】
次に、アプリケーション51は、所定の処理を実行することにより最初のノード(first_node)を生成する(ステップS3)。これは、アプリケーション51が1000個のノードからなる参照グラフのうち最初のノードを生成したという意味である。このときの様子は、図9(a)に示される。すなわち、1MBのノードが一つ作成されている。
【0054】
その後、アプリケーション51はデータベース管理オブジェクト「db」に分割オブジェクトを作成する旨の命令を出す。これにより、データベース管理オブジェクト「db」は、最初の分割オブジェクト(first_idbox)を生成する(ステップS4)。すなわち、データベース管理オブジェクト「db」は、識別番号を発生させ、その識別番号を有する分割オブジェクトを生成する。このとき、その分割オブジェクトにおいて、データベース管理オブジェクトへの参照情報には「db」を設定し、コンテンツへの参照情報には「first_node」を設定する。また、その分割オブジェクトにおける状態フラグを「Open」とする。このときの様子は、図9(b)に示される。この図9(b)において黒い丸は最初の分割オブジェクトを示している。そして、その分割オブジェクトから最初のノードに対して矢印が出ていることは、当該分割オブジェクトにおけるコンテンツへの参照情報に「first_node」が設定されたことを示している。
【0055】
次に、データベース管理オブジェクト「db」は、DBファイル「patent_sample」のルートストリーム格納部において、ルート名(文字列のキー)に例えば「large_list」という名前を付け、そのルート名に対応するストリームに最初の分割オブジェクトの識別番号を保存する(ステップS5)。このときの様子は、図9(c)に示される。この図9(c)において、点線で囲った部分が「large_list」と名付けられてDBファイル「patent_sample」に保存される。ここで、図9(c)において、最初の分割オブジェクトの半分だけが点線で囲まれている。これは、最初の分割オブジェクトには、データベース管理オブジェクトへの参照情報、識別番号、状態フラグ、コンテンツへの参照情報が含まれるが、これらのうち識別番号だけがDBファイル「patent_sample」に保存されるということを表現するためである。この点は、図9(c)以外の図でも、同様である。
【0056】
次に、データベース管理オブジェクト「db」は、「prev_idbox」という名前で最初の分割オブジェクトを指す(ステップS6)。この「prev_idbox」という名前は、以下に説明する「new_idbox」という名前と対立するもので、一つ前に生成された分割オブジェクトを指し示すために用いられる変数である。このときの様子は、図9(d)に示される。図9(d)では、最初の分割オブジェクトは、「prev_idbox」という名前で表されている。
【0057】
データベース管理オブジェクト「db」は、処理のループカウンタを有している。ステップS6の後、データベース管理オブジェクト「db」は、そのループカウンタの計数値Iを1に初期化する(ステップS7)。また、このループカウンタはその計数値Iが1000になるまでカウントする。
【0058】
その後、データベース管理オブジェクト「db」は、ループカウンタの計数値Iが1000より小さいか否か判断する(ステップS8)。その計数値Iが1000より小さい場合には、ステップS9に移行し、その計数値Iが1000であれば、ステップS16に移行する。
【0059】
ステップS9では、アプリケーション51は、所定の処理を実行することにより新しいノードを生成し、「new_node」という名前(変数)で指し示す。この「new_node」という変数は、最近に生成されたノードを指し示すためのものである。図9(e)では、最初のノードに加えて、さらに新しいノード「new_node」が生成されている。
【0060】
その後、アプリケーション51はデータベース管理オブジェクト「db」に分割オブジェクトを作成する旨の命令を出す。すると、データベース管理オブジェクト「db」は、新しい分割オブジェクトを生成し、「new_idbox」という名前(変数)で指し示す(ステップS10)。この「new_idbox」という変数は、最近に生成された分割オブジェクトを指し示すためのものである。このとき、データベース管理オブジェクト「db」は、新しい分割オブジェクト「new_idbox」において、データベース管理オブジェクトへの参照情報には「db」を設定し、コンテンツへの参照情報には「new_node」を設定する。また、その分割オブジェクト「new_idbox」における状態フラグを「Open」とする。このときの様子は、図9(e)に示される。図9(e)では、新しい分割オブジェクト「new_idbox」が生成され、その新しい分割オブジェクト「new_idbox」には、新しいノード「new_node」に向かう矢印が付けられている。
【0061】
次に、データベース管理オブジェクト「db」は、分割オブジェクト「prev_idbox」のコンテンツのうちのノード(この場合は、最初のノード)の参照情報に「new_idbox」を設定する(ステップS11)。このときの様子は、図9(f)に示される。この図9(f)では、分割オブジェクト「prev_idbox」のコンテンツのうちの最初のノードに、新しい分割オブジェクト「new_idbox」に向かう矢印が付けられている。
【0062】
次に、データベース管理オブジェクト「db」は、分割オブジェクト「prev_idbox」のSaveメソッドを呼ぶ(ステップS12)。このSaveメソッドにより、分割オブジェクト「prev_idbox」のコンテンツは、シリアライズされた後、DBファイル「patent_sample」に保存される。具体的には、データベース管理オブジェクト「db」は、DBファイル「patent_sample」のサブストリーム格納部において、Idに分割オブジェクト「prev_idbox」の識別番号を付け、このIdに対応するストリームに分割オブジェクト「prev_idbox」のコンテンツを保存する。このときの様子は、図9(g)に示される。この図9(g)では、右側の点線で囲った部分が、分割オブジェクト「prev_idbox」のコンテンツを表しており、かかるコンテンツがDBファイル「patent_sample」のサブストリーム格納部に保存される。
【0063】
次に、データベース管理オブジェクト「db」は、分割オブジェクト「prev_idbox」のCloseメソッドを呼ぶ(ステップS13)。このCloseメソッドにより、分割オブジェクト「prev_idbox」におけるコンテンツへの参照情報がnullにされると共に、その状態フラグが「Closed」とされる。このため、分割オブジェクト「prev_idbox」のコンテンツのうちのノードは、分割オブジェクト「prev_idbox」から参照されなくなる。このときの様子は、図9(h)に示される。すなわち、分割オブジェクト「prev_idbox」から当該ノードに向かう矢印がなくなる。したがって、分割オブジェクト「prev_idbox」のCloseメソッドを呼ぶと、分割オブジェクト「prev_idbox」のコンテンツのうちのノードは、ガーベジコレクションによるメインメモリ31上からの削除の対象となる。そして、ガーベジコレクションが実行されることにより、分割オブジェクト「prev_idbox」のコンテンツのうちのノードはメインメモリ31から開放される。すなわち、図9(h)において、右側の点線内において網掛けで示した部分がメインメモリ31上から削除される。尚、この時点では、分割オブジェクト「prev_idbox」自体は削除の対象とはならない。分割オブジェクト「prew_idbox」は、その名前でプログラム上参照されているからである。
【0064】
次に、データベース管理オブジェクト「db」は、「prev_idbox」という名前で新しい分割オブジェクト「new_idbox」を指し示す(ステップS14)。これにより、「prev_idbox」という変数は、新しい分割オブジェクトを指し示すことになる。このため、いままで「prev_idbox」という名前で指し示されていた分割オブジェクトは、プログラム上参照できなくなるので、ガーベジコレクションによるメインメモリ31上からの削除の対象となる。このときの様子は、図9(i)に示される。すなわち、図9(i)に示すように、左側に網掛けで示した部分に含まれる分割オブジェクトは、ガーベジコレクションによりメインメモリ31上から開放されることになる。
【0065】
このステップS14による処理が終了した時点で、メインメモリ31上に存在する参照グラフの状態は、ステップS6による処理が終了した時点でメインメモリ31上に存在する参照グラフの状態と全く同じである。
【0066】
ステップS14による処理の後、データベース管理オブジェクト「db」は、ループカウンタの計数値Iを1だけ増やす(ステップS15)。そして、ステップS8に移行する。こうして、ステップS9からステップS15までの処理を繰り返すことにより、1000個のノードからなる参照グラフが生成される。
【0067】
その後、ステップS8においてループカウンタの計数値Iが1000であると判断されると、すなわち、1000個のノードからなる参照グラフが作成されると、ステップS16に移行する。
【0068】
ステップS16では、データベース管理オブジェクト「db」は、分割オブジェクト「prev_idbox」のSaveメソッドを呼ぶ。これにより、分割オブジェクト「prev_idbox」のコンテンツは、シリアライズされた後、DBファイル「patent_sample」のサブストリーム格納部に保存される。この場合、当該分割オブジェクト「prev_idbox」の下位には分割オブジェクトはないので、当該分割オブジェクト「prev_idbox」のコンテンツはノードだけである。
【0069】
次に、データベース管理オブジェクト「db」は、分割オブジェクト「prev_idbox」のCloseメソッドを呼ぶ(ステップS17)。これにより、分割オブジェクト「prev_idbox」のコンテンツであるノードは、ガーベジコレクションが実行されることにより、メインメモリ31上から削除される。
【0070】
その後、アプリケーション51は、データベース管理オブジェクト「db」のCloseメソッドを呼ぶ(ステップS18)。このCloseメソッドにより、DBファイル「patent_sample」が閉じられる。以上により、1000個のノードからなる参照グラフが二次記憶装置32に保存され、図8の処理フローが終了する。
【0071】
次に、参照グラフの内容を読み出す機能F2について説明する。図10は、上記の機能F2により図8の処理フローにしたがって作成した参照グラフの最初のノードから最後のノードまで順番に辿り、その内容を読み出す場合の処理手順を説明するためのフローチャートである。また、図11は図10に示す各処理の様子を模式的に示す図である。ここで、アプリケーション51は、読み出そうとする参照グラフが二次記憶装置32内の「patent_sample」という名前のDBファイルに「large_list」という名前で保存されていることが分かっている。
【0072】
まず、アプリケーション51は、ODBMクラスのオブジェクト、すなわちデータベース管理オブジェクト61をメインメモリ31上に生成する(ステップS21)。ここで、データベース管理オブジェクト61の名前は「db」である。
【0073】
次に、アプリケーション51は、データベース管理オブジェクト「db」のOpenメソッドを呼ぶ(ステップS22)。このとき、ファイル名として、図8の処理フローで作成したDBファイルのファイル名「patent_sample」を指定する。これにより、DBファイル「patent_sample」が開かれる。
【0074】
次に、アプリケーション51はデータベース管理オブジェクト「db」に、「large_list」という名前で保存されているオブジェクト(データ)をメインメモリ31上に読み出す旨の命令を出す。これにより、データベース管理オブジェクト「db」は、DBファイル「patent_sample」から、「large_list」という名前で保存されているオブジェクトを読み出す(ステップS23)。具体的には、データベース管理オブジェクト「db」は、DBファイル「patent_sample」のルートストリーム格納部において、「large_list」というルート名に対応するストリームに保存されているオブジェクトをデシリアライズする。そして、そのデシリアライズされたオブジェクトをメインメモリ31上に読み出す。このとき、データベース管理オブジェクト61は、その読み出したオブジェクトを、「idbox」という名前(変数)で指し示す。この「idbox」という変数は、分割オブジェクトを指し示すためのものである。ここで、読み出したオブジェクトを「idbox」という名前で指し示すのは、データベース管理オブジェクト「db」が、図8の処理フローで作成されたDBファイルの構造を知っており、したがって、そのオブジェクトがIdBoxクラスのオブジェクト、すなわち分割オブジェクトであるということが予め分かっているからである。
【0075】
また、ここで読み出した分割オブジェクト「idbox」の識別番号としては、「large_list」というルート名に対応するストリームに保存されていた識別番号が用いられる。そして、データベース管理オブジェクト「db」は、分割オブジェクト「idbox」において、データベース管理オブジェクトへの参照情報に「db」を、コンテンツへの参照情報にnullを設定する。また、その状態フラグを「Closed」とする。このときの様子は、図11(a)に示される。この図11(a)では、分割オブジェクト「idbox」が一つ生成されている。
【0076】
その後、データベース管理オブジェクト「db」は、分割オブジェクト「idbox」コンテンツをDBファイル「patent_sample」から読み出す(ステップS24)。具体的には、データベース管理オブジェクト「db」は、DBファイル「patent_sample」のサブストリーム格納部において、分割オブジェクト「idbox」の識別情報と同じIdに対応するストリームに保存されているコンテンツをデシリアライズしてメインメモリ31上に読み出す。この読み出したコンテンツには、当該分割オブジェクトが参照グラフの最後のものでなければ、ノードとそれに続く他の分割オブジェクトの識別情報とを含んでいる。データベース管理オブジェクト「db」は、読み出したノードを「node」という名前(変数)で指し示す。この「node」という変数は、ノードを指し示すためのものである。そして、データベース管理オブジェクト「db」は、分割オブジェクト「idbox」において、コンテンツへの参照情報に「node」を設定し、その状態フラグを「Open」とする。また、分割オブジェクト「idbox」のコンテンツに含まれる他の分割オブジェクトの識別情報に基づいて、当該他の分割オブジェクトが生成される。このときの様子は、図11(b)に示される。この図11(b)では、当該他の分割オブジェクトは省略している。
【0077】
その後、アプリケーション51は、ステップS24でメインメモリ31上に取り出したノード「node」の内容を使って所定の処理を行う。そして、当該ノード「node」の内容を使った処理が終わると、ステップS25に移行する。
【0078】
ステップS25では、データベース管理オブジェクト「db」は、分割オブジェクト「idbox」のCloseメソッドを呼ぶ。これにより、分割オブジェクト「idbox」のコンテンツのうちのノード「node」は、分割オブジェクト「idbox」からの参照がなくなる。このときの様子は、図11(c)に示される。すなわち、図11(c)に示すように、分割オブジェクト「idbox」から当該ノード「node」に向かう矢印がなくなる。したがって、分割オブジェクト「idbox」のコンテンツのうちのノード「node」は、他に参照がなければ、ガーベジコレクションが実行されると、メインメモリ31上から削除される。
【0079】
次に、データベース管理オブジェクト「db」は、当該ノード「node」の次に他の分割オブジェクトが繋がっているか否かを判断する(ステップS26)。すなわち、図11(d)に示すように、当該ノード「node」の参照情報がnullでないか、nullであるかを判断する。当該ノード「node」の参照情報がnullでなく、その次に繋がる他の分割オブジェクトを指し示している場合には、データ管理オブジェクト「db」は、当該ノード「node」の次に繋がる他の分割オブジェクトを「idbox」という変数で指し示す(ステップS27)。このときの様子は、図11(e)に示される。すなわち、図11(e)に示すように、「idbox」という変数は、右側の分割オブジェクトを指し示すことになる。このため、いままで「idbox」という変数で指し示されていた左側の分割オブジェクトは、プログラム上参照できなくなるので、ガーベジコレクションによるメインメモリ31上からの削除の対象となる。すなわち、図11(e)において、左側に網掛けで示した部分に含まれる分割オブジェクトは、ガーベジコレクションによりメインメモリ31上から開放される。また、真ん中に示したノード「node」については、その「node」という変数(参照名)が次の処理ループ(ステップS24〜S27)において他のオブジェクトを指し示すようになったときに、ガーベジコレクションによりメインメモリ31上から開放されることになる。
【0080】
かかるステップS26の処理の後は、ステップS24に移行する。そして、ステップS24からステップS27までの処理を繰り返すことにより、参照グラフの最初のノードから最後のノードまで順番に辿り、その内容をメインメモリ31上に読み取ることができる。
【0081】
ステップS26において、当該ノード「node」の参照情報がnullであると判断されると、アプリケーション51は、当該ノード「node」が参照グラフの最後のノードであると認識し、データベース管理オブジェクト「db」のCloseメソッドを呼ぶ(ステップS28)。これにより、DBファイル「patent_sample」が閉じられる。以上で、図11の処理フローが終了する。
【0082】
本実施形態の大規模データ取扱装置では、参照グラフに一又は複数の分割オブジェクトを追加することにより、参照グラフを複数の部分参照グラフに分割すると共に、分割オブジェクトのコンテンツ単位で、二次記憶装置にデータアクセスを行う。このため、メインメモリ上にはアプリケーションが処理に必要とする部分参照グラフだけを置き、他の部分参照グラフは二次記憶装置に置いたままにするというような操作が可能である。また、メインメモリ上の参照グラフを扱う場合に近いプログラムの書き方で、二次記憶装置へのデータアクセスを実現できる。したがって、本実施形態の大規模データ取扱装置では、メインメモリの容量を超える大規模な参照グラフであっても、簡単で且つ安価な仕組みで取り扱うことができる。
【0083】
尚、本発明は上記の実施形態に限定されるものではなく、その要旨の範囲内において種々の変形が可能である。
【0084】
例えば、上記の実施形態では、アプリケーションがデータベース管理オブジェクトを生成する場合について説明したが、大規模データ取扱装置がデータベース管理オブジェクトの機能を有しており、その機能を利用して、分割オブジェクトの生成、二次記憶装置へのデータアクセス等を行うようにしてもよい。
【0085】
本発明の目的は、上述した実施形態の装置の機能を実現するソフトウェアのプログラムコード(実行形式を含む)を、その全体あるいは一部を記録した記録媒体により、本実施形態の装置に供給し、その装置のコンピュータ(又はCPU、MPU)が記録媒体に格納されたプログラムコードを読み出して、動作の全部あるいは一部を実行することによっても達成されることは言うまでもない。この場合、記録媒体から読み出されたプログラムコード自体が本実施形態の機能を実現することになり、そのプログラムコードを記録した記録媒体は本発明を構成することになる。
【0086】
プログラムコードを供給するための記録媒体としては、ROM、フロッピー(登録商標)ディスク、ハードディスク、光ディスク、光磁気ディスク、CD−ROM、CD−R、DVD−ROM、磁気テープ、不揮発性のメモリカード等を用いることができる。さらに、通信回線を介してダウンロードすることによってプログラムコードを供給するようにしてもよいし、JAVA(登録商標)などの技術を利用してプログラムコードを供給して実行するようにしてもよい。
【0087】
また、コンピュータが読み出したプログラムコードを実行することにより、本実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼動しているOSなどが実際の処理の一部又は全部を行い、その処理によって本実施形態の機能が実現される場合も本発明に含まれることは言うまでもない。
【0088】
更に、記録媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータが接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部又は全部を行い、その処理によって本実施形態の機能が実現される場合も本発明に含まれることは言うまでもない。
【0089】
加えて、本発明はコンピュータに上記の実施形態の装置の機能を実現させるためのプログラムを含むプログラム・プロダクトであってもよい。ここで、プログラム・プロダクトというのは、コンピュータ・プログラムだけでなく、プログラムを記録した記録媒体あるいはコンピュータを含むものである。
【0090】
【発明の効果】
以上説明したように本発明に係る大規模データ取扱装置では、参照グラフに一又は複数の分割オブジェクトを追加することにより、参照グラフを複数の部分参照グラフに分割すると共に、分割オブジェクトのコンテンツ単位で、二次記憶手段にデータアクセスを行う。このため、メインメモリ上にはアプリケーションプログラムが処理に必要とする部分参照グラフだけを置き、他の部分参照グラフは二次記憶手段に置いたままにするというような操作が可能である。また、メインメモリ上の参照グラフを扱う場合に近いプログラムの書き方で、二次記憶手段へのデータアクセスを実現できる。したがって、本発明の大規模データ取扱装置は、メインメモリの容量を超える大規模な参照グラフを、簡単で且つ安価な仕組みで取り扱うことができる。
【図面の簡単な説明】
【図1】本発明の一実施形態である大規模データ取扱装置の概略ブロック図である。
【図2】その大規模データ取扱装置における処理の様子を説明するための図である。
【図3】メインメモリ上の分割オブジェクトの内容を模式的に示した図である。
【図4】参照グラフの例を示す図である。
【図5】図2に示すメインメモリのメモリマップの一例を示す図である。
【図6】本実施形態の大規模データ処理装置におけるプログラムの構成を説明するための図である。
【図7】参照グラフの例を示す図である。
【図8】本実施形態の大規模データ処理装置において、図7(b)に示す1000個の要素データからなる参照グラフを作成・保存する場合の処理手順を説明するためのフローチャートである。
【図9】図8に示す各処理の様子を模式的に示す図である。
【図10】図8の処理フローにしたがって作成した参照グラフの最初の要素データから最後の要素データまで順番に辿り、その内容を読み出す場合の処理手順を説明するためのフローチャートである。
【図11】図10に示す各処理の様子を模式的に示す図である。
【符号の説明】
10 入力装置
20 表示装置
30 計算機
31 メインメモリ
32 二次記憶装置
33 中央処理装置
51 アプリケーション
61 データベース管理オブジェクト
66 分割オブジェクト生成部
67 データベースアクセス部
68 分割オブジェクトキャッシュ部
Claims (4)
- オブジェクト指向プログラミング言語で記述されたアプリケーションプログラムが処理する大規模データを取り扱う大規模データ取扱装置であって、
前記アプリケーションプログラムが処理する、メインメモリ上に展開されたデータの集まりであって各データに付与された参照情報によってデータ間の参照関係が構築されている参照グラフに対して、識別情報を有する一又は複数の分割オブジェクトを生成すると共に当該各分割オブジェクトに付与された参照情報に前記参照グラフ内の所定のデータを設定して当該各分割オブジェクトを前記参照グラフに追加することにより、当該各分割オブジェクトによって前記参照グラフを複数の部分参照グラフに分割する分割オブジェクト生成手段と、
前記参照グラフの参照関係の最上位に分割オブジェクトがある場合にあっては当該最上位の分割オブジェクトの識別情報を、その参照関係の最上位にデータがある場合にあっては当該データを含む最初の部分参照グラフ及び当該最初の部分参照グラフの直後にある分割オブジェクトの識別情報を、文字列のキーを付して格納すると共に、前記参照グラフにおける各分割オブジェクトのコンテンツ、すなわち、当該分割オブジェクトの直後にある部分参照グラフ及び当該部分参照グラフの直後に他の分割オブジェクトがある場合にはさらに当該他の分割オブジェクトの識別情報を、整数値のキーとしての当該分割オブジェクトの識別情報を付して格納する二次記憶手段と、
前記アプリケーションプログラムが前記参照グラフを前記メインメモリ上に生成する際又は前記アプリケーションプログラムが前記参照グラフを前記二次記憶手段から前記メインメモリ上に読み出す際に、前記文字列のキー又は前記整数値のキーを指定し、分割オブジェクトのコンテンツの単位で、前記二次記憶手段にアクセスを行うデータ管理手段と、
を備えることを特徴とする大規模データ取扱装置。 - 前記メインメモリ上に存在する分割オブジェクトの識別情報を登録する分割オブジェクト登録手段を備えており、
前記データ管理手段は、前記アプリケーションプログラムが所定の部分参照グラフを前記二次記憶手段から前記メインメモリ上に読み出す際に、当該部分参照グラフをコンテンツとして含んでいる分割オブジェクトの識別情報と同じ識別情報が前記分割オブジェクト登録手段に登録されていれば、前記メインメモリ上に既に存在する当該分割オブジェクトの参照を前記アプリケーションに返すことを特徴とする請求項1記載の大規模データ取扱装置。 - 請求項1又は2のいずれかに記載の大規模データ取扱装置の機能をコンピュータに実現させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
- 請求項1又は2のいずれかに記載の大規模データ取扱装置の機能をコンピュータに実現させるためのプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003128187A JP2004334436A (ja) | 2003-05-06 | 2003-05-06 | 大規模データ取扱装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003128187A JP2004334436A (ja) | 2003-05-06 | 2003-05-06 | 大規模データ取扱装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004334436A true JP2004334436A (ja) | 2004-11-25 |
Family
ID=33504434
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003128187A Withdrawn JP2004334436A (ja) | 2003-05-06 | 2003-05-06 | 大規模データ取扱装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2004334436A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006236328A (ja) * | 2005-02-24 | 2006-09-07 | Microsoft Corp | ファイルシステムアイテムおよび関連エンティティのシリアライゼーション |
JP2008530668A (ja) * | 2005-02-09 | 2008-08-07 | ドイチェ ポスト アーゲー | データベースのバックアップ方法 |
-
2003
- 2003-05-06 JP JP2003128187A patent/JP2004334436A/ja not_active Withdrawn
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008530668A (ja) * | 2005-02-09 | 2008-08-07 | ドイチェ ポスト アーゲー | データベースのバックアップ方法 |
JP2006236328A (ja) * | 2005-02-24 | 2006-09-07 | Microsoft Corp | ファイルシステムアイテムおよび関連エンティティのシリアライゼーション |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7730099B2 (en) | Storage and retrieval of richly typed hierarchical network models | |
JP4141556B2 (ja) | 構造化文書管理方法及びその実施装置並びにその処理プログラムを記録した媒体 | |
US20070150809A1 (en) | Division program, combination program and information processing method | |
US20080098037A1 (en) | Markup language based database upgrades | |
US10585871B2 (en) | Database engine for mobile devices | |
US20200401623A1 (en) | Autolayout of visualizations based on graph data | |
US20080288510A1 (en) | Data model for a common language | |
JP2001101042A (ja) | データ管理システム及びデータ管理方法 | |
CN104794567B (zh) | 一种基于HBase的传染病数据管理方法 | |
JP5108252B2 (ja) | インデクス更新方法及びそのシステム | |
JP2004334436A (ja) | 大規模データ取扱装置 | |
US8775746B2 (en) | Information processing system and method | |
CN114816247A (zh) | 一种逻辑数据获取方法及装置 | |
CA2593883A1 (en) | Markup language based database upgrades | |
JP4825504B2 (ja) | データ登録・検索システムおよびデータ登録・検索方法 | |
Deppisch et al. | Managing complex objects in the Darmstadt database kernel system | |
JP3061385B2 (ja) | データ管理装置およびデータ管理方法 | |
JP3590211B2 (ja) | データベース管理方式 | |
JP3016255B2 (ja) | データベース管理システム | |
Lindholm et al. | How to edit gigabyte XML files on a mobile phone with XAS, RefTrees, and RAXS | |
JP2005284575A (ja) | タグ付き構造化文書格納システム、そのプログラム、及びその方法。 | |
RU105770U1 (ru) | Архитектура для хранения и представления данных в эмуляторе | |
JPH02116936A (ja) | 再編成方式 | |
CN116204598A (zh) | 基于Java全自动的对象关系映射方法、系统、设备及存储介质 | |
JPH0785079A (ja) | 情報ファイルの管理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A300 | Application deemed to be withdrawn because no request for examination was validly filed |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20060801 |