(57)【要約】【課題】格納すべきデータ量を最小限に抑えて更新と参照（検索）の同時実行制御を容易に行うことのできる同時実行制御方法及び装置を提供する。【解決手段】更新前後の第１データ群をそれぞれ別の記憶エリアに記憶し、複数の索引語のうちの１つにそれぞれ対応し当該索引語を含むデータ群の識別子がそれぞれ登録された複数のテーブルのなかから、検索要求で指定された索引語に対応するテーブル群を選択し、第１データ群の更新が終了した後にテーブル群が選択された場合検索要求の受付時刻が更新の開始時刻より前であるとき、更新前後の第１データ群のうちの更新前にのみ含まれる第１索引語に対応する第１テーブルと更新後にのみ含まれる第２索引語に対応する第２テーブルのうち第１テーブルがテーブル群に含まれているときに更新前の第１データ群を出力し、受付時刻が開始時刻より後のときテーブル群に第２テーブルが含まれているときに更新後の第１データ群を出力する。【選択図】      図１
2005234945.tif 000002
【特許請求の範囲】
【請求項１】
識別子の与えられた複数のデータ群のうちの１つである第１のデータ群について、更新前のデータを含む更新前の第１のデータ群と更新後のデータを含む更新後の第１のデータ群とをそれぞれ別の記憶エリアに記憶する第１のステップと、
複数の索引語と、当該複数の索引語のうちの１つにそれぞれ対応し、当該索引語を含むデータをもつデータ群の識別子がそれぞれ登録された複数のテーブルを記憶手段に記憶する第２のステップと、
検索要求を受け付ける第３のステップと、
前記複数のテーブルのうち前記検索要求で指定された索引語に対応するテーブル群を選択する第４のステップと、
（ａ）前記第１のデータ群の更新が終了する前に前記第５のステップでテーブル群が選択された場合、更新前後の第１のデータ群のうちの更新前の第１のデータ群にのみ含まれる第１の索引語に対応する第１のテーブルと、更新前後の第１のデータ群のうちの更新後の第１のデータ群にのみ含まれる第２の索引語に対応する第２のテーブルとのうち少なくとも前記第１のテーブルが前記テーブル群に含まれているときに、更新前の第１のデータ群を検索結果として出力し、（ｂ）前記第１のデータ群の更新が終了した後に前記選択ステップでテーブル群が選択された場合、前記検索要求を受け付けた時刻である第１の時刻が前記更新の開始時刻である第２の時刻より前であるときには、前記テーブル群に第１及び第２のテーブルのうち少なくとも第１のテーブルが含まれているときに更新前の第１のデータ群を出力し、前記第１の時刻が前記第２の時刻より後であるときには、前記テーブル群に第１及び第２のテーブルのうち少なくとも第２のテーブルが含まれているときに更新後の第１のデータ群を検索結果として出力する第５のステップと、
を有することを特徴とする同時実行制御方法。
【請求項２】
識別子の与えられた複数のデータ群のうちの１つである第１のデータ群について、更新前のデータを含む更新前の第１のデータ群と更新後のデータを含む更新後の第１のデータ群とをそれぞれ別の記憶エリアに記憶する第１の記憶手段と、
複数の索引語と、当該複数の索引語のうちの１つにそれぞれ対応し、当該索引語を含むデータをもつデータ群の識別子がそれぞれ登録された複数のテーブルを記憶する第２の記憶手段と、
検索要求を受け付ける手段と、
前記複数のテーブルのうち前記検索要求で指定された索引語に対応するテーブル群を選択する選択手段と、
（ａ）前記第１のデータ群の更新が終了する前に前記選択手段でテーブル群が選択された場合、更新前後の第１のデータ群のうちの更新前の第１のデータ群にのみ含まれる第１の索引語に対応する第１のテーブルと、更新前後の第１のデータ群のうちの更新後の第１のデータ群にのみ含まれる第２の索引語に対応する第２のテーブルとのうち少なくとも第１のテーブルが前記テーブル群に含まれているときに、更新前の第１のデータ群を検索結果として出力し、（ｂ）前記第１のデータ群の更新が終了した後に前記選択手段でテーブル群が選択された場合、前記検索要求を受け付けた時刻である第１の時刻が前記更新の開始時刻である第２の時刻より前であるときには、前記テーブル群に第１及び第２のテーブルのうち少なくとも第１のテーブルが含まれているときに更新前の第１のデータ群を出力し、前記第１の時刻が前記第２の時刻より後であるときには、前記テーブル群に第１及び第２のテーブルのうち少なくとも第２のテーブルが含まれているときに更新後の第１のデータ群を検索結果として出力する出力手段と、
を具備したことを特徴とする同時実行制御装置。
【請求項３】
前記第１のテーブルと前記第２のテーブルには、前記第１のデータ群の更新が終了した後に、前記第２の時刻が前記第１のデータ群に対応する第１の識別子に対応付けて登録されることを特徴とする請求項２記載の同時制御装置。
【請求項４】
前記第１のデータ群の更新が終了した後に、更新前の第１のデータ群が記憶されている記憶エリアに対応する第１の位置情報と、更新後の第１のデータ群が記憶されている記憶エリアに対応する第２の位置情報とを含むバージョンデータを記憶する第３の記憶手段をさらに具備し、
前記出力手段は、前記第１のデータ群の更新が終了した後に前記選択手段でテーブル群が選択された場合、前記第１の時刻が前記第２の時刻より前であるときには、前記バージョンデータから前記第１の位置情報を取得し、前記第１の時刻が前記第２の時刻より後であるときには前記バージョンデータから前記第２の位置情報を取得することを特徴とする請求項２記載の同時実行制御装置。
【請求項５】
前記第１のデータ群の更新が終了した後、前記第２の時刻より前に受け付けられた各検索要求の検索処理終了の検知時に、前記第１の位置情報に対応する記憶エリアから更新前の第１のデータ群を削除する削除手段をさらに具備し、
前記第１のテーブルと前記第２のテーブルには、前記第１の識別子とともに、前記第１のデータ群の更新開始時から前記検知時までは、前記記憶手段に記憶された更新後及び更新前の第１のデータ群を確認する必要がある旨を表し、前記検知時後は確認不要を表すフラグ情報がそれぞれ登録されていることを特徴とする請求項４記載の同時実行制御装置。
【請求項６】
前記出力手段は、前記第１のデータ群の更新が終了する前に、前記選択手段で第１及び第２のテーブルのうちの少なくとも１つを含むテーブル群が選択された場合、前記フラグ情報が確認要を表すときには、前記記憶手段に記憶された更新前の第１のデータ群を確認することにより当該更新前の第１のデータ群の出力可否を判断し、
前記第１のデータ群の更新が終了した後に、前記選択手段で前記第１及び第２のテーブルのうちの少なくとも１つを含むテーブル群が選択された場合、前記フラグ情報が確認要を表すとき、前記第１の時刻が前記第２の時刻より前であるときには前記記憶手段に記憶された更新前の第１のデータ群を確認することにより当該更新前の第１のデータ群の出力可否を判断し、前記第１の時刻が前記第２の時刻より後であるときには前記記憶手段に記憶された更新後の第１のデータ群を確認することにより当該更新後の第１のデータ群の出力可否を判断することを特徴とする請求項５記載の同時実行制御装置。
【請求項７】
前記時刻は、更新が終了する度に「１」だけインクリメントされることを特徴とする請求項２記載の同時実行制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、更新処理と参照処理（検索処理）の同時実行制御を行うデータベースシステムに関する。
【背景技術】
【０００２】
従来からデータベースシステムにおいて同時実行制御によるデータベーストランザクション(更新、参照（検索）、などから成る処理単位)の管理が行われている。この同時実行制御とは、複数のユーザがデータベースシステムにおいて同じデータに対して同時にトランザクション、つまり更新、参照などのアクセスを行おうとするとき、排他制御を行ってデータの整合を保証しようとするものである。
【０００３】
通常データベースでは、トランザクションがデータにアクセスしようとするとき、専有ロックや共有ロックなどのロックをかけて他のトランザクションのアクセスに対して制限を加える方法がとられる。通常、２相ロックにより、トランザクション開始で順次、データ操作を行う前にロックをかけて、トランザクション終了時までロックを解放しない。このようなロック方式では、他のトランザクションのアクセスが制限されてしまうため、更新トランザクションにより検索トランザクションが待たされてしまう問題が発生してしまう。
【０００４】
マルチバージョン方式では、更新トランザクションは更新するデータの複製をとってから更新するので、複製データを他の検索トランザクションが同時にアクセスすることができるようになる（例えば、特許文献１、特許文献２参照）。
【特許文献１】特開平６−２８３１５号公報
【特許文献２】特開２００３−１４０９５１公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
従来、マルチバージョン方式により更新と参照（検索）の同時実行制御を行う場合、更新処理の前後に発生する検索処理のために更新前と更新後のデータベースの状態をそれぞれ保持する必要があり、そのために要する記憶容量が膨大になるという問題点があった。
【０００６】
そこで、本発明は、上記問題点に鑑み、格納すべきデータ量を最小限に抑えて更新と参照（検索）の同時実行制御を容易に行うことのできる同時実行制御方法及び装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明は、識別子の与えられた複数のデータ群のうちの１つである第１のデータ群について、更新前のデータを含む更新前の第１のデータ群と更新後のデータを含む更新後の第１のデータ群とをそれぞれ別の記憶エリアに記憶し、複数の索引語と、当該複数の索引語のうちの１つにそれぞれ対応し、当該索引語を含むデータをもつデータ群の識別子がそれぞれ登録された複数のテーブルのなかから、検索要求で指定された索引語に対応するテーブル群を選択し、（ａ）前記第１のデータ群の更新が終了する前にテーブル群が選択された場合、更新前後の第１のデータ群のうちの更新前の第１のデータ群にのみ含まれる第１の索引語に対応する第１のテーブルと、更新前後の第１のデータ群のうちの更新後の第１のデータ群にのみ含まれる第２の索引語に対応する第２のテーブルとのうち少なくとも前記第１のテーブルが前記テーブル群に含まれているときに、更新前の第１のデータ群を検索結果として出力し、（ｂ）前記第１のデータ群の更新が終了した後にテーブル群が選択された場合、前記検索要求を受け付けた時刻である第１の時刻が前記更新の開始時刻である第２の時刻より前であるときには、前記テーブル群に第１及び第２のテーブルのうち少なくとも第１のテーブルが含まれているときに更新前の第１のデータ群を出力し、前記第１の時刻が前記第２の時刻より後であるときには、前記テーブル群に第１及び第２のテーブルのうち少なくとも第２のテーブルが含まれているときに更新後の第１のデータ群を検索結果として出力する。
【発明の効果】
【０００８】
格納すべきデータ量を最小限に抑えて更新と参照（検索）の同時実行制御を容易に行うことができる。
【発明を実施するための最良の形態】
【０００９】
図１は、本実施形態に係る同時実行制御装置を適用した情報管理装置の構成例を示したものである。図１に示すように、情報管理装置１は、更新処理部２、コミット処理部３、参照処理部４、バージョンデータ管理部５、時刻管理部６、テーブル記憶部１０を有し、さらに、索引データ記憶部２１とマップテーブル記憶部２２とオブジェクトデータ記憶部２３を有するデータベース２０が接続して構成されている。
【００１０】
情報管理装置１には、複数の（ここでは、例えば２台の）端末ＴＥ１〜ＴＥ２が所定のネットワーク等を介して接続され、当該端末からデータ更新やデータ参照やデータコミットなどの要求を受ける。
【００１１】
更新処理部２は、端末からのデータ更新要求を受けてデータベース２０にアクセスして、オブジェクトデータや索引データの更新を行う。
【００１２】
コミット処理部３は、端末からのコミット要求を受けて、更新処理部２を介して行った更新内容を確定するための処理を行う。コミットとは、ここでは、更新確定と同義である。
【００１３】
参照処理部４は、端末からの（オブジェクトデータを検索するためのキーワードを含む）データ参照要求を受けて、オブジェクトデータ記憶部２３から当該キーワードを含むオブジェクトデータを検索して要求元の端末へ送信する。
【００１４】
時刻管理部６は、更新処理終了の度に（コミット処理終了の度に）、「１」だけインクリメントされる時刻を記憶、更新する。
【００１５】
テーブル記憶部１０には、更新ログテーブル１１、バージョンデータテーブル１２、参照ログテーブル１３が記憶されている。
【００１６】
オブジェクトデータ記憶部２３には、更新・参照（検索）対象の複数のオブジェクトデータが記憶されている。オブジェクトデータは、論理オブジェクトＩＤと物理オブジェクトＩＤにて指定される。論理オブジェクトＩＤとは、物理的なオブジェクト配置場所を考慮しないオブジェクトＩＤである。論理オブジェクトＩＤとは、物理的なオブジェクト配置場所（オブジェクトデータ記憶部２３に対応する記憶領域内の当該オブジェクトデータが記憶されている位置）から算出されるオブジェクトＩＤである。通常、索引データでの発生位置は論理オブジェクトＩＤにて表現される。論理オブジェクトＩＤから物理オブジェクトＩＤへの変換は、マップテーブル記憶部２２に記憶されているマップテーブルを使って行われる。
【００１７】
図２は、オブジェクトデータ記憶部２３におけるオブジェクトデータの記憶例を模式的に示したものである。１つのオブジェクトデータは、複数のデータ（要素データ）をそれらの順序関係（あるいは上下関係）に従ってリンクして構成されている。
【００１８】
オブジェクトデータ記憶部２３内のオブジェクトデータの格納エリアは、当該オブジェクトデータを構成する要素データを格納する記憶領域である複数のスロットから構成されている。各スロットは、スロットＩＤで特定するものとする。従って、各要素データは、当該要素データを含むオブジェクトデータの論理オブジェクトＩＤ（あるいは当該論理オブジェクトＩＤに対応する物理オブジェクトＩＤ）、当該要素データの格納されているスロットのスロットＩＤとで特定する。
【００１９】
例えば、オブジェクトデータ記憶部２３の物理オブジェクトＩＤ「ＰＯＩＤ５」に格納されているオブジェクトデータは、“メモリ”と“データベース”という２つの要素データをこの順序で繋げて構成されたものである。“メモリ”と“データベース”という各要素データは、スロットＩＤ「ＳＬＯＴ０」と「ＳＬＯＴ１」というスロットにそれぞれ格納されている。また、オブジェクトデータ記憶部２３の物理オブジェクトＩＤ「ＰＯＩＤ６」に格納されているオブジェクトデータは、“ＸＭＬ”と“データ”という２つの要素データをこの順序で繋げて構成されたものである。“ＸＭＬ”と“データ”という各要素データは、スロットＩＤ「ＳＬＯＴ０」と「ＳＬＯＴ１」というスロットにそれぞれ格納されている。このように、各オブジェクトデータは、リスト形式のデータ構造を有している。
【００２０】
また、各オブジェクトデータの格納領域の先頭スロットは、リストの先頭要素データのスロットへのポインタ情報（例えば先頭要素データのスロットＩＤ）が格納され、各スロットには、次の要素データの格納されているスロットへのポインタ情報（スロットＩＤ）が要素データとともに格納されている。従ってポインタ情報によるチェーンをたどることでリストの各要素データをたどれる。
【００２１】
図３は、索引データ記憶部２１に記憶される索引データの記憶例を模式的に示したものである。ここでは索引データとは、少なくとも数値（日付や時刻などを含む），単語，語彙からなる索引語と、当該索引語を含む要素データをもつオブジェクトデータの論理オブジェクトＩＤと、当該要素データのスロットＩＤとを対応付けたものである。すなわち、索引語から当該索引語をもつ（当該索引語の発生している）要素データおよびオブジェクトデータを探し出すためのデータである。
【００２２】
図３において、索引データは、「語彙」欄と「発生位置テーブル」欄から構成されている。「語彙」欄には、複数の索引語が登録されている。各語彙に対して、論理オブジェクトＩＤとスロットＩＤと、さらに、当該論理オブジェクトＩＤとスロットＩＤとで特定される要素データが更新により削除されるものなのかあるいは挿入されるものなのかを示す情報と、当該要素データが実際にオブジェクトデータ記憶部２３に記憶されているか否かを確認する必要があるか否かを示す情報と、更新時刻とを組とした発生位置テーブルが登録されている。
【００２３】
例えば「語彙」欄中の索引語“メモリ”、“データベース”に対して、それぞれ1つの発生位置テーブルが対応付けられており、当該発生位置テーブルには、当該索引語を含む要素データと、この要素データのオブジェクトデータにおける発生位置等を示した発生位置データが登録されている。
【００２４】
発生位置テーブルは、図３に示すように、「発生位置」欄と「削除挿入」欄と「確認要否」欄と「更新時刻」欄とからなる。「発生位置」欄には、索引語が発生する要素データと当該要素データをもつオブジェクトデータを特定するための論理オブジェクトＩＤとスロットＩＤとを１組とするデータが登録されている。「削除挿入」欄には、当該要素データが削除予定なのか挿入予定なのか判別するための情報が登録されている。ここでは、例えば削除予定であれば「削」挿入予定であれば「挿」が登録される。「確認要否」欄には、データ参照（データ検索）時、当該要素データがオブジェクトデータ記憶部２３に実際に記憶されているか否か（有効なのか無効なのか）チェックの必要の有無を表すための情報（フラグ情報）が登録されている。ここでは、例えばチェックの必要があれば「要」、必要でなければ「否」が登録される。「更新時刻」欄には、当該要素データが更新された時刻（更新確認（コミット）された時刻）が登録される。
【００２５】
図３では、索引データの「語彙」欄の“メモリ”に対応付けられている発生位置テーブルに、「ＬＯＩＤ５、ＳＬＯＴ０、挿、否、Ｔｉｍｅ６」というレコード（発生位置データ）が登録されている。これは「論理オブジェクトＩＤ「ＬＯＩＤ５」を持つオブジェクトデータのスロットＩＤ「ＳＬＯＴ０」のスロット（「０」番目のスロット）に“メモリ”という語彙が発生している。更新時刻は「Ｔｉｍｅ６」でコミットされている。データ参照を行う場合にスロットチェックが不要である」という意味である。
【００２６】
図４は、マップテーブル記憶部２２に記憶されているマップテーブルの一例を示したものである。マップテーブルは、論理オブジェクトＩＤ（ＬＯＩＤ）と当該論理オブジェクトＩＤをもつオブジェクトデータの物理オブジェクトＩＤ（ＰＯＩＤ）であってコミットされたときの物理オブジェクトＩＤとを１組とする複数のデータが登録されたものである。例えば、論理オブジェクトＩＤ「ＬＯＩＤ５」は物理オブジェクトＩＤ「ＰＯＩＤ５」に変換されるということを意味している。
【００２７】
データ更新の要求が入力したとき、更新処理部２にて、索引データの更新、オブジェクトデータの更新が行われる。データ更新はコミットされる（更新が確定する）まで、更新開始から更新が確定するまでに受け付けた参照処理に対しては更新前の結果のみ見えて、更新後の結果が見えないように制御しなければならない。このため、情報管理装置１は、バージョンデータテーブル１２を用いて、データ参照処理に対する更新内容の見え方を制御している。
【００２８】
バージョンデータ管理部５は、オブジェクトデータ記憶部２３の更新前の状態しか見せられない参照処理が終了した時点で、バージョンデータテーブル１２や索引データ記憶部２１内の索引データを更新するとともに、オブジェクトデータ記憶部２３の不要となった記憶領域を開放する。
【００２９】
コミット要求が入力したとき、コミット処理部３はデータ更新が確定されたものとみなして、マップテーブル記憶部２２に記憶されているマップテーブルや索引データ記憶部２１に記憶されている索引データの更新を行う。また、コミット前後にわたって参照処理部４で実行されている参照処理のために、更新前の結果を見せる必要がある。このためにバージョンデータテーブル１２の更新を行う。
【００３０】
データ参照の要求が入力したとき、参照処理部４は、索引データのアクセスからオブジェクトデータへのアクセス、あるいは直接的にオブジェクトデータへのアクセスが行われる。データ参照のルールとして、データ参照要求を受け付けたときの状態のオブジェクトデータ記憶部２３に対する参照でなければならない。すなわち、コミットされたオブジェクトデータ記憶部２３のスナップショットがあったとして、これに対する参照が行われなければ、データ一貫性が失われてしまうからである。
【００３１】
参照処理部４における、索引データのアクセスから開始する場合の基本的な動作は、索引データから条件を満足する（条件として指定された数値、記号、語彙などを含む）要素データの発生位置データの集合を取り出し、マップテーブル記憶部２２に記憶されているマップテーブルにて論理オブジェクトＩＤから物理オブジェクトＩＤへの変換を行って、オブジェクトデータ記憶部２３内のオブジェクトデータにアクセスする。直接的にオブジェクトデータへのアクセスする場合の基本的な動作は、マップテーブルにて論理オブジェクトＩＤから物理オブジェクトＩＤへの変換を行って、オブジェクトデータ記憶部２３内のオブジェクトデータにアクセスする。
【００３２】
ここで、図５を参照して、オブジェクトデータの更新（更新処理ＴＸＮ２）開始前に開始され、当該更新がコミットされた後も継続している検索処理（参照処理Ｑｕｅｒｙ３、Ｑｕｅｒｙ４）と、当該更新がコミットされた後に開始される検索処理（参照処理Ｑｕｅｒｙ２）とが混在する場合について説明する。すなわち、このような場合、参照処理Ｑｕｅｒｙ３、Ｑｕｅｒｙ４には当該更新前のオブジェクトデータを参照対象とし、参照処理Ｑｕｅｒｙ２には当該更新後の（更新結果の）オブジェクトデータを参照対象とする切替を行う。
【００３３】
図５は、２つの更新処理と４つの参照処理のそれぞれの発生時と終了時を時系列に示したものである。図５には、以下の更新処理と参照処理を示している。なお、図５において、時刻「Ｔｉｍｅ６」から「Ｔｉｍｅ７」、「Ｔｉｍｅ７」から「Ｔｉｍｅ８」等の時刻の更新は、図５では表されていない更新処理がコミットされたために、時刻が更新されている。
【００３４】
時刻「Ｔｉｍｅ６」に更新処理ＴＸＮ１が発生し、論理オブジェクトＩＤ「ＬＯＩＤ５」のオブジェクトデータ（“メモリ”，“データベース”）を格納した。
【００３５】
時刻「Ｔｉｍｅ７」に参照処理Ｑｕｅｒｙ１が発生し、語彙“メモリ”を含むオブジェクトデータの検索（参照）処理が開始され、時刻「Ｔｉｍｅ７」の間に当該検索処理は終了した。
【００３６】
時刻「Ｔｉｍｅ７」に参照処理Ｑｕｅｒｙ３が発生し、語彙“メモリ”と“半導体”を含むオブジェクトデータの検索（参照）処理が開始され、当該検索処理は時刻「Ｔｉｍｅ９」に終了した。
【００３７】
時刻「Ｔｉｍｅ７」に参照処理Ｑｕｅｒｙ４が発生し、語彙“ディスク”を含むオブジェクトデータの検索（参照）処理が開始され、当該検索処置は時刻「Ｔｉｍｅ９」に終了した。
【００３８】
時刻「Ｔｉｍｅ８」に更新処理ＴＸＮ２が発生し、論理オブジェクトＩＤ「ＬＯＩＤ５」のオブジェクトデータの“メモリ”を“ディスク”に更新した。
【００３９】
時刻「Ｔｉｍｅ９」に参照処理Ｑｕｅｒｙ２が発生し、語彙“メモリ”を含むオブジェクトデータの検索（参照）処理が開始され、時刻「Ｔｉｍｅ９」の間に当該検索処理は終了した。
【００４０】
図５に示した状態の場合、各参照処理の参照対象は、当該参照処理の参照要求の発生した時点において既にコミットされているオブジェクトデータのみである。例えば、参照処理Ｑｕｅｒｙ１では、更新処理ＴＸＮ１の更新結果までが参照対象となり、論理オブジェクトＩＤ「ＬＯＩＤ５」のオブジェクトデータ（“メモリ”，“データベース”）を参照することができる。参照処理Ｑｕｅｒｙ２では、更新処理ＴＸＮ２での更新結果までが参照対象となり、当該オブジェクトデータ（“メモリ”，“データベース”）は参照できない。代わって、更新処理ＴＸＮ２での更新結果（“ディスク”，“データベース”）が参照対象となる。
【００４１】
参照処理Ｑｕｅｒｙ３やＱｕｅｒｙ４では、これらの参照要求の発生時前に既にコミットされている更新処理ＴＸＮ１の更新結果までが参照対象となる。しかし、これら参照処理中に更新処理ＴＸＮ２が発生し、更新がコミットされているので、更新処理ＴＸＮ２の終了後（コミット後）に、この更新結果を参照処理Ｑｕｅｒｙ３やＱｕｅｒｙ４の参照対象とならないように制御する必要がある。すなわち、参照処理Ｑｕｅｒｙ３やＱｕｅｒｙ４は、更新処理ＴＸＮ２が発生する以前のオブジェクトデータを参照対象とするべきなので、更新処理ＴＸＮ２が終了後も更新処理ＴＸＮ２の更新前のオブジェクトデータを保持しておく。そして、少なくとも参照処理Ｑｕｅｒｙ３やＱｕｅｒｙ４が終了するまで、これら参照処理Ｑｕｅｒｙ３やＱｕｅｒｙ４に対しては、更新処理ＴＸＮ２の更新前のオブジェクトデータをみせ、更新処理ＴＸＮ２終了後に参照要求を行った検索処理（例えば、図５では参照処理Ｑｕｅｒｙ２）に対しては、更新処理ＴＸＮ２の更新後のオブジェクトデータをみせるという切替を行う。
【００４２】
次に、図６に示すフローチャートを参照して、図１の情報管理装置１の更新処理動作について説明する。
【００４３】
なお、ここでは、図５の更新処理ＴＸＮ２の更新処理動作を例にとり説明し、当該更新前のオブジェクトデータ記憶部２３、索引データ記憶部２１、マップテーブル記憶部２２の状態は、それぞれ図２〜図４に示すような状態であるとする。
【００４４】
例えば、端末ＴＥ１から、論理オブジェクトＩＤ「ＬＯＩＤ５」のオブジェクトデータ(“メモリ”,“データベース”)に対する更新要求であって、当該オブジェクトデータの先頭の要素データ“メモリ”を“ディスク”に変更する更新要求メッセージが送られてきたとする。この更新は、図５の更新処理ＴＸＮ２に対応する。
【００４５】
当該更新要求メッセージは、更新処理部２で受け取られる。更新処理部２は、まず、時刻管理部６から、現在の時刻（更新時刻）を得る（ステップＳ１）。ここで時刻とは、情報管理装置１が起動してからシリアルにふられていく番号であり、コミット処理により「1」だけ増加する。すなわち、時刻を見れば、更新が確定した時点（更新がコミットされた時点）と参照要求の発生した時点との時間的な前後関係がわかるものとする。
【００４６】
なお、更新処理部２で当該更新要求を受け取った時点（時刻「Ｔｉｍｅ８」）では、図５からも明らかなように、時刻「Ｔｉｍｅ７」に発生した参照要求が２件あり（Ｑｕｅｒｙ３、Ｑｕｅｒｙ４）、これらの参照処理は今だ継続中である。時刻「Ｔｉｍｅ８」における参照ログテーブル１３を図７に示す。図７に示すように、参照ログテーブル１３には、現時点において参照処理が継続中である参照処理の数が、当該参照処理の発生時刻別に登録されている。例えば、図７には、時刻「Ｔｉｍｅ７」に発生した参照処理（Ｑｕｅｒｙ３、Ｑｕｅｒｙ４）の数として「２」が登録されている。
【００４７】
次に、更新処理部２は、更新対象のオブジェクトデータの複製を、オブジェクトデータ記憶部２３内の未使用の記憶エリアに格納する。そして、更新された新たな要素データは、未使用スロットに格納する（ステップＳ２）。
【００４８】
例えば、図９に示すように、更新対象の物理オブジェクトＩＤ「ＰＯＩＤ５」のオブジェクトデータの複製は、オブジェクトデータ記憶部２３内の空きエリアである、物理オブジェクトＩＤ「ＰＯＩＤ２１」に格納し、先頭スロットの要素データに代わる新たな要素データである“ディスク”が空きのスロット（スロットＩＤ「ＳＬＯＴ２」）に格納される。
【００４９】
このように、更新前のオブジェクトデータをそのまま残しておき、当該更新前のオブジェクトデータの複製に更新を行ったものを新たなオブジェクトデータとして更新前のオブジェクトデータとは別の格納エリアに格納する。そして、更新前の先頭スロット「ＳＬＯＴ０」を使わずに、未使用のスロット「ＳＬＯＴ２」を新たな先頭の要素データ“ディスク”用に割当てることにより、次のようにして、発生位置データの有効性、無効性をコントロールすることができる。
【００５０】
（Ａ）発生位置テーブルの「確認要否」欄が「要」であり、実際にオブジェクトデータ記憶部２３に当該発生位置データで表されたスロットが存在しなければ、当該発生位置データは無効である。
【００５１】
（Ｂ）発生位置テーブルの「確認要否」欄が「要」であり、実際にオブジェクトデータ記憶部２３に当該発生位置データで表されたスロットが存在すれば、当該発生位置データは有効である。
【００５２】
（Ｃ）発生位置テーブルの「確認要否」欄が「否」であれば、当該発生位置データは有効である。
【００５３】
と判断することができる。このような判断は後述する参照処理において行われる。
【００５４】
更新処理部２は、オブジェクトデータ記憶部２３内のオブジェクトデータの更新に伴い、当該更新により追加された新たな要素データに対応する索引データの更新、当該更新により削除された要素データに対応する索引データの更新を行う（ステップＳ３）。具体的には、追加された新たな要素データに対応する索引語と発生位置データの発生位置テーブルへの追加（図３の索引データへのデータの追加）を行う。このとき発生位置テーブルへ追加された新たな発生位置データの「削除挿入」欄は「挿」、「確認要否」欄は「要」となり、「更新時刻」欄には更新時刻は登録されていない。また、削除される要素データに対応する発生位置データ内の「確認要否」欄の「否」を「要」とする。
【００５５】
例えば、ここでは、“メモリ”という要素データが“ディスク”に書き換える更新であるから、まず、図１０に示すように、索引データの「語彙」欄の“ディスク”という語彙に対応付けて、発生位置が論理オブジェクトＩＤ「ＬＯＩＤ５」とスロットＩＤ「ＳＬＯＴ０」である新たな発生位置データを発生位置テーブルへ追加する。また、“メモリ”という要素データは削除予定であるから、図１０に示すように、当該要素データに対応する発生位置データ内の「確認要否」欄の「否」を「要」とする。
【００５６】
次に、図１１に示すフローチャートを参照して、図１の情報管理装置１のコミット処理動作について説明する。コミット処理とは、更新処理により更新内容を確定するための処理であり、コミット処理が終了することで、当該更新処理が終了する。ここでは、更新処理ＴＸＮ２を終了するためのコミット処理を例にとり説明する。
【００５７】
端末ＴＥ１から、前述したように、“メモリ”という要素データが“ディスク”に書き換える更新に対しコミットするためのコミット要求メッセージが情報管理装置１へ送信される。当該コミット要求メッセージは、コミット処理部３で受け取られる（ステップＳ１１）。
【００５８】
コミット処理部３では、当該コミット要求を受け付けると、図１２に示すように、バージョンデータテーブル１２に、当該更新の更新時刻（ここでは例えば「Ｔｉｍｅ８」）、更新対象のオブジェクトデータの論理オブジェクトＩＤ（ここでは例えば「ＬＯＩＤ５」）、更新後のオブジェクトデータの格納されている新たな物理オブジェクトＩＤ（ここでは例えば「ＰＯＩＤ２１」）、当該更新前のオブジェクトデータの格納されている物理オブジェクトＩＤ（ここでは例えば「ＰＯＩＤ５」）を登録する（ステップＳ１２）。
【００５９】
バージョンデータテーブル１２には、図１２に示すように、更新のコミット時に、当該更新の開始時刻である更新時刻と、当該更新の更新対象のオブジェクトデータの論理オブジェクトＩＤ（ＬＯＩＤ）と、更新後のオブジェクトデータの格納されている新たな物理オブジェクトＩＤ（ＮｅｗＰＯＩＤ）と、更新前のオブジェクトデータの格納されている物理オブジェクトＩＤ（ＯｌｄＰＯＩＤ）とが登録される。
【００６０】
例えば、図１２に示したバージョンデータテーブル１２には、時刻「Ｔｉｍｅ８」にて、論理オブジェクトＩＤ「ＬＯＩＤ５」のオブジェクトデータの物理オブジェクトＩＤが「ＰＯＩＤ５」から「ＰＯＩＤ２１」に変更されたことを示している。時刻「Ｔｉｍｅ８」よりも前の時点で開始された参照処理において、論理オブジェクトＩＤ「ＬＯＩＤ５」のオブジェクトＩＤを参照しようとすれば、オブジェクトデータ記憶部２３内の物理オブジェクトＩＤ「ＰＯＩＤ５」にアクセスすれば良いことになる。
【００６１】
バージョンデータテーブル１２は「更新時刻」欄の時刻にて降順にソートされている。
【００６２】
コミット処理部３は、次に、索引データ記憶部２１に記憶されている、更新前の要素データに対応する発生位置データの「削除挿入」欄と「更新時刻」欄を更新するとともに、更新後の要素データに対応する発生位置データの「更新時刻」欄を更新する（ステップＳ１３）。具体的には、更新により、削除予定の要素データに対応する発生位置データの「削除挿入」欄に「削」を登録し、「更新時刻」欄に、当該更新処理で取得した時刻を登録する。また、更新により追加（挿入）予定の要素データに対応する発生位置データの「更新時刻」欄に、当該更新処理で取得した時刻を登録する。
【００６３】
例えば、図１３に示すように、論理オブジェクトＩＤ「ＬＯＩＤ５」のオブジェクトデータの“メモリ”という要素データが“ディスク”という要素データに書き換えられた場合には、更新前の要素データ“メモリ”に対応する発生位置データ１０１は削除予定であるので、「削除挿入」欄の「挿」を「削」に書換え、「更新時刻」欄に、当該更新処理で取得した時刻「Ｔｉｍｅ８」を登録する。また、更新後の要素データ“ディスク”に対応する発生位置データ１０２の「更新時刻」欄に、当該更新処理で取得した時刻「Ｔｉｍｅ８」を登録する。
【００６４】
コミット処理部３は、次に、マップテーブル記憶部２２に記憶されているマップテーブルを更新する（ステップＳ１４）。すなわち、コミットされた更新結果をマップテーブルに反映させるべく、図１４に示すように、更新対象のオブジェクトデータの論理オブジェクトＩＤに対応付ける物理オブジェクトＩＤを、更新前の更新後のオブジェクトデータの格納されている物理オブジェクトＩＤに書き換える。
【００６５】
図１４では、論理オブジェクトＩＤ「ＬＯＩＤ５」に対応する物理オブジェクトＩＤが「ＰＯＩＤ５」から、更新後のオブジェクトデータの格納されている物理オブジェクトＩＤ「ＰＯＩＤ２１」に書き換えられている。
【００６６】
コミット処理部３は、さらに、更新ログテーブル１１に、更新処理の最初に取得した時刻（ここでは「Ｔｉｍｅ８」）と、更新対象のオブジェクトデータの物理オブジェクトＩＤ（ここでは、「ＰＯＩＤ５」）を、図８に示すように更新ログテーブル１１に登録する（ステップＳ１５）。更新ログテーブル１１には、図８に示すように、更新処理の発生した時刻（更新時刻）と、当該更新処理により更新対象となったオブジェクトデータの物理オブジェクトＩＤとを１組とした更新ログが登録される。
【００６７】
最後に、時刻を１つインクリメントする（ステップＳ１６）。ここでは、「Ｔｉｍｅ８」から「Ｔｉｍｅ９」に更新される。
【００６８】
次に、図１５〜図１７に示すフローチャートを参照して、図１の情報管理装置１の参照処理動作について説明する。ここでは、図５の参照処理ＱＵＥＲＹ３の参照処理動作を例にとり説明する。この場合、図５からも明らかなように、当該参照処理ＱＵＥＲＹ３の参照要求を受けた時点では、継続中の更新処理は存在しない。オブジェクトデータ記憶部２３内のオブジェクトデータは全てコミットされた状態である。従って、更新ログテーブル１１にはレコードが存在しない。また、参照ログテーブル１３には、図１８に示すように、時刻「Ｔｉｍｅ７」に開始された参照処理ＱＵＥＲＹ１に対応する参照ログのレコードが記録されている。
【００６９】
この状態で、端末ＴＥ１から「“メモリ”と“半導体”のうちのいずれか一方を含むオブジェクトデータを取り出す」旨の参照要求メッセージが情報管理装置１へ送信される。当該参照要求メッセージは参照処理部４で受け取られる。
【００７０】
参照処理部４では、当該参照要求メッセージを受け付けると、まず、時刻管理部６から現在の時刻（参照時刻）Ｔｑを得る。ここでは、「Ｔｉｍｅ７」が得られる。この結果、参照ログテーブル１３の「Ｔｉｍｅ７」に対応する参照数は１つ増加されて「２」に更新される（ステップＳ２１）。
【００７１】
次に、参照処理部４は、索引データ記憶部２１にアクセスして、索引データ中の「語彙」欄の“メモリ”、“半導体”に対応付けて記憶されている位置発生テーブルから発生位置データの集合を得る（ステップＳ２２）。なお、ここで発生位置データを収集する際には、「更新時刻」欄に更新時刻が記載されずに空欄（あるいは「ＮＵＬＬ」）となっている発生位置データは除くようにしてもよい。「更新時刻」欄が空欄（あるいは「ＮＵＬＬ」）となっている発生位置データは、前述したように、更新中であるがコミットされていない要素データの発生位置データであるからである。また、「削除挿入」欄が「挿」のときには「更新時刻」欄の時刻が当該参照処理の参照処理時刻Ｔｑ以前のもの、「削除挿入」欄が「削」のときには「更新時刻」欄の時刻が当該参照処理の参照処理時刻Ｔｑ以前以後にかかわりなく時刻が登録されていれば収集するようにしてもよい。
【００７２】
以下、（ケースＸ１）他の全てのトランザクション（例えば、この例では更新処理ＴＸＮ２）が開始する前に、参照処理部４がデータベース２０にアクセスする場合と、（ケースＸ２）他の少なくとも１つのトランザクション（例えば、この例では更新処理ＴＸＮ２）が開始しているが、コミットはされていないときに、参照処理部４がデータベース２０にアクセスする場合と、（ケースＸ３）全てのトランザクション（この例では更新処理ＴＸＮ２）が終了後に参照処理部４がデータベース２０にアクセスする場合とに分けて説明する。
【００７３】
（ケースＸ１）他の全てのトランザクション（例えば、この例では更新処理ＴＸＮ２）が開始する前に、参照処理部４がデータベース２０にアクセスする場合。
【００７４】
オブジェクトデータ記憶部２３と索引データ記憶部２１とマップテーブル記憶部２２の状態は、図２〜図３に示した状態である。従って、ステップＳ２２では、図３に示した索引データから、発生位置データ１０１を含む発生位置データの集合を得る。
【００７５】
得られた発生位置データのそれぞれについて、ステップＳ２４〜ステップＳ３３の処理を繰り返す（ステップＳ２３〜ステップＳ３４）。すなわち、ステップＳ２４では、発生位置データ内の「確認要否」欄をチェックする。（ケースＸ１）の場合、得られた全ての発生位置データの「確認要否」欄は「否」となっていることが期待できるので、ここでは、ステップＳ３１へ進む。ステップＳ３１では、現在処理対象の発生位置データから論理オブジェクトＩＤ（ＬＯＩＤ）を取り出し、マップテーブルから当該ＬＯＩＤに対応する物理オブジェクトＩＤ（ＰＯＩＤ）を得る。例えば、現在処理対象の発生位置データが発生位置データ１０１である場合、論理オブジェクトＩＤは「ＬＯＩＤ５」であるので、図４に示したマップテーブルから物理オブジェクトＩＤ「ＰＯＩＤ５」が得られる。そして、ステップＳ３３へ進み、オブジェクトデータ記憶部２３の物理オブジェクトＩＤ「ＰＯＩＤ５」に対応する記憶エリアからオブジェクトデータを読み出す。
【００７６】
以上のステップＳ２４〜ステップＳ３４の処理をステップＳ２２で得られた全ての発生位置データについて行う。
【００７７】
その後、図１７のステップＳ５１へ進む。
【００７８】
（ケースＸ２）他の少なくとも１つのトランザクション（例えば、この例では更新処理ＴＸＮ２）が開始しているがコミットはされていないときに、参照処理部４がデータベース２０にアクセスする場合。
【００７９】
オブジェクトデータ記憶部２３は、図９に示した状態であり、索引データ記憶部２１は、図１０に示した状態であり、マップテーブル記憶部２２は図４に示した状態である。この場合も、ステップＳ２２では、図１０に示した索引データから、発生位置データ１０１を含む発生位置データの集合を得る。なお、例えば“メモリ”に対応付けて記憶されている発生位置データであっても、「更新時刻」欄が空欄（あるいは「ＮＵＬＬ」）となっている発生位置データは、前述したように、更新中であるがコミットされていない要素データの発生位置データであり、そのような発生位置データは除くようにしてもよい。  得られた発生位置データのそれぞれについて、ステップＳ２４〜ステップＳ３３の処理を繰り返す（ステップＳ２３〜ステップＳ３４）。すなわち、ステップＳ２４では、発生位置データ内の「確認要否」欄をチェックする。（ケースＸ２）の場合、更新処理ＴＸＮ２が開始されているが、まだ、コミットはされていない。従って、「確認要否」欄は「要」となっている発生位置データも存在する。例えば、発生位置データ１０１は、図１０からも明らかなように、現在更新中であるので、「確認要否」欄は「要」となっている。この場合には、図１６のステップＳ６１へ進む。
【００８０】
ステップＳ６１では、現在処理対象の発生位置データの「削除挿入」欄をチェックする。「削除挿入」欄が「削」となっているときには、ステップＳ６２へ進み、参照ログテーブル１３内で現在最も古い参照時刻を取得し、当該参照時刻と処理対象の発生位置データの「更新時刻」欄の更新時刻と比較する。処理対象の発生位置データの更新時刻が、取得した参照時刻より以前のものであるときには、ステップＳ６４へ進み、発生位置データの集合から当該処理対象の発生位置データを削除し、図１５のステップＳ３４へ進む。一方、処理対象の発生位置データの更新時刻が、取得した参照時刻以降のものであるときには、ステップＳ６５へ進む。
【００８１】
ステップＳ６１で、現在処理対象の発生位置データの「削除挿入」欄が「挿」となっているときには、ステップＳ６３へ進み、参照ログテーブル１３内で現在最も古い参照時刻を取得し、当該参照時刻と処理対象の発生位置データの「更新時刻」欄の更新時刻と比較する。処理対象の発生位置データの更新時刻が、取得した参照時刻より前であるときには、ステップＳ６６へ進み、当該処理対象の発生位置データ内の「確認要否」欄を「要」から「否」へ書き換える。その後、ステップＳ６６´へ進み、当該発生位置データのＬＯＩＤに対応するＰＯＩＤをマップデータから取得し、ステップＳ７２へ進み、オブジェクトデータ記憶部２３内の当該得られたＰＯＩＤに対応する記憶エリアからオブジェクトデータを読み出す。
【００８２】
一方、ステップＳ６３において、処理対象の発生位置データの更新時刻が、取得した参照時刻以降であるときには、ステップＳ６５へ進む。
【００８３】
ステップＳ６５では、バージョンデータテーブル１２を参照し、現在処理対象となっている発生位置データ内の論理オブジェクトＩＤに対するコミットされた更新があるか否かチェックする。そして、そのようなレコード（バージョンデータ）が存在すれば、ステップＳ６７へ進み、存在しなければステップＳ６８へ進む。
【００８４】
ステップＳ６７では、当該バージョンデータに含まれる更新時刻と現在の参照処理の開始時に取得した時刻（参照時刻）とを比較する。バージョンデータの更新時刻が参照時刻より以前であれば、当該更新結果の参照は可能であるので、ステップＳ６９へ進む。バージョンデータの更新時刻が参照時刻より後であれば、当該更新結果の参照は不可能であるので、ステップＳ７０へ進む。
【００８５】
ステップＳ６９では、当該バージョンデータから「ＮｅｗＰＯＩＤ」を取出し、ステップＳ７０では、当該バージョンデータから「ＯｌｄＰＯＩＤ」を取出す。その後、（「確認要否」欄が「要」であったので）、ステップＳ７１へ進み、得られたＰＯＩＤに対応するオブジェクトデータ記憶部２３内の記憶エリアに、処理対象の発生位置データで指定されているスロットＩＤをもつスロットが存在するかを確認する。当該スロットＩＤのスロットが存在するときには、ステップＳ７２へ進み、オブジェクトデータ記憶部２３内の当該得られたＰＯＩＤに対応する記憶エリアからオブジェクトデータを読み出す。ステップＳ７１において、当該スロットＩＤをもつスロットが存在しないときには、当該ＰＯＩＤからのオブジェクトデータの読出は行わず、図１５のステップＳ３４へ進み、次の処理対象とすべき発生位置データがあるか否かを調べる。
【００８６】
ステップＳ６８では、処理対象の発生位置データ内のＬＯＩＤに対応するＰＯＩＤをマップデータから得、ステップＳ７１へ進む。
【００８７】
現在行っている参照処理ＱＵＥＲＹ３の開始時刻（参照時刻Ｔｉｍｅ７）以降に開始され、現在処理対象となっている発生位置データ内の論理オブジェクトＩＤに対するコミットされた更新があり、当該更新処理に対応するバージョンデータが存在すれば、ステップＳ７０へ進む。現在行っている参照処理ＱＵＥＲＹ３の開始時刻（参照時刻Ｔｉｍｅ７）より前に、現在処理対象となっている発生位置データ内の論理オブジェクトＩＤに対するコミットされた更新があり、当該更新処理に対応するバージョンデータが存在すれば、ステップＳ６９へ進む。
【００８８】
上記以外の処理は、（ケースＸ１）の場合と同様である。
【００８９】
（ケースＸ３）全てのトランザクション（この例では更新処理ＴＸＮ２）が終了後に参照処理部４がデータベース２０にアクセスする場合。
【００９０】
オブジェクトデータ記憶部２３は図９に示した状態であり、索引データ記憶部２１は図１３に示した状態であり、マップテーブル記憶部２２の状態は図１４に示した状態である。また、バージョンデータテーブル１２には、図１２に示したように、更新処理ＴＸＮ２による更新（更新時刻「Ｔｉｍｅ８」）に関するレコード２０１が記録されている。この場合、ステップＳ２２では、図１３に示した索引データから、発生位置データ１０１を含む発生位置データの集合を得る。
【００９１】
得られた発生位置データのそれぞれについて、ステップＳ２４〜ステップＳ３３の処理を繰り返す（ステップＳ２３〜ステップＳ３４）。すなわち、ステップＳ２４では、発生位置データ内の「確認要否」欄をチェックする。（ケースＸ３）の場合、更新処理ＴＸＮ２がコミットされているので、「確認要否」欄は「要」となっている発生位置データが存在する。例えば、発生位置データ１０１は、図１３からも明らかなように、「確認要否」欄は「要」となっている。この場合には、図１６のステップＳ６１へ進む。
【００９２】
ステップＳ６１では、発生位置データ１０１の「削除挿入」欄が「削」となっているので、ステップＳ６２へ進む。発生位置データ１０１の更新時刻「Ｔｉｍｅ８」より前に開始された参照処理ＱＵＥＲＹ３やＱＵＥＲＹ４が存在するため、ステップＳ６２からステップＳ６５へ進む。バージョンデータテーブル１２を参照すると、バージョンデータテーブル１２には、現在行っている参照処理ＱＵＥＲＹ３の開始時刻（参照時刻Ｔｉｍｅ７）以降に開始されて既にコミットされた更新処理ＴＸＮ２の更新時刻「Ｔｉｍｅ８」のバージョンデータ２０１が存在する。当該更新処理の更新対象は論理オブジェクトＩＤ「ＬＯＩＤ５」のオブジェクトデータである。
【００９３】
現在処理対象の発生位置データ１０１に含まれる論理オブジェクトＩＤは「ＬＯＩＤ５」、スロットＩＤ「ＳＬＯＴ０」である。バージョンデータテーブル１２内に、バージョンデータ２０１が存在し、バージョンデータ内の更新時刻「Ｔｉｍｅ８」が現在行っている参照処理ＱＵＥＲＹ３の開始時刻（参照時刻Ｔｉｍｅ７）より後であることから、ステップＳ６７からステップＳ７０へ進む。ステップＳ７０では、バージョンデータテーブル１２のレコード２０１からＯｌｄＰＯＩＤ「ＰＯＩＤ５」を取り出す。そして、そして、ステップＳ７１へ進み、オブジェクトデータ記憶部２３の物理オブジェクトＩＤ「ＰＯＩＤ５」に対応する記憶エリアに、スロットＩＤ「ＳＬＯＴ０」のスロットが存在するかチェックする。この場合、当該スロットは存在するので、ステップＳ７２へ進み、当該記憶エリアから当該オブジェクトデータを読み出す。その後、図１５のステップＳ３４へ進む。
【００９４】
上記以外の処理は（ケースＸ１）の場合と同様である。
【００９５】
（ケースＸ１）〜（ケースＸ３）のそれぞれの場合において、以上のステップＳ２４〜ステップＳ３４の処理を実行することにより、ステップＳ２２で得られた発生位置データの集合から、参照結果としてのオブジェクトデータが得られたので、図１７のステップＳ５１へ進み、参照処理部４は参照ログテーブル１３の参照時刻「Ｔｉｍｅ７」の参照数の数を１つ減ずる。
【００９６】
このとき参照時刻「Ｔｉｍｅ７」の参照数が「０」になったときにはステップＳ５３へ進み、参照数が「１」以上のときには処理は終了する。ステップＳ５３以降の処理は、バージョンデータ管理部５で行われる。
【００９７】
ステップＳ５３では、参照ログテーブル１３から参照数が「０」となったレコードを削除する。その後、参照ログテーブル１３中で現在最も古い参照時刻を取得し、当該参照時刻と、更新ログテーブル１１内の更新時刻とを比較する。更新ログテーブル１１内に、当該参照時刻より以前の更新時刻のレコードが存在する場合には、ステップＳ５５へ進み、存在しない場合には処理を終了する。
【００９８】
例えば、図５から、参照時刻「Ｔｉｍｅ７」の参照数が「０」となったとき（時刻「Ｔｉｍｅ９」）、すなわち、参照処理ＱＵＥＲＹ３，ＱＵＥＲＹ４が終了したとき、参照ログテーブル１１内で最も古い参照時刻は「Ｔｉｍｅ９」である。このとき、更新ログテーブル１１は、図８に示す状態である。この場合、ステップＳ５４において、更新時刻「Ｔｉｍｅ８」の更新ログが検知される。そして、ステップＳ５５では、図１２のバージョンデータテーブル１２から更新時刻「Ｔｉｍｅ８」のバージョンデータ２０１を削除するとともに、更新ログテーブル１１から更新時刻「Ｔｉｍｅ８」の更新ログを削除する。
【００９９】
次に、ステップＳ５６では、バージョンデータ管理部５は、ステップＳ５５で削除したバージョンデータ中の「ＯｌｄＰＯＩＤ」に対応する、オブジェクトデータ記憶部２３内の記憶エリアを解放する（空きの記憶エリアとする）。  例えば、ステップＳ５５において、図１２の更新時刻「Ｔｉｍｅ８」のバージョンデータ２０１が削除された場合、「ＯｌｄＰＯＩＤ」は「ＰＯＩＤ５」であるから、ステップＳ５６において、オブジェクトデータ記憶部２３内の「ＰＯＩＤ５」に対応する記憶エリアが解放されて、「ＰＯＩＤ５」に対応する記憶エリアは空き記憶エリアとなる。  なお、図１７では、不要となった更新ログデータとバージョンデータを削除してから（ステップＳ５５）、オブジェクトデータ記憶部２３の記憶エリアの開放（ステップＳ５６）をおこなっているが、先に、ステップＳ５６を行った後に、ステップＳ５５の処理を行うようにしてもよい。
【０１００】
次に、図５の参照処理ＱＵＥＲＹ４の参照処理動作を例にとり、図１５〜図１７に示すフローチャートを参照して、図１の情報管理装置１の参照処理動作について説明する。なお、ここでは、前述の図５の参照処理ＱＵＥＲＹ３の参照処理動作と異なる部分について説明する。参照処理ＱＵＥＲＹ４は、“ディスク”を含むオブジェクトデータを取り出す参照処理である。参照処理ＱＵＥＲＹ４は、図５に示すように、参照処理ＱＵＥＲＹ３と同じ時刻に開始され、同じ時刻にコミットされて終了するものとする。
【０１０１】
図５からも明らかなように、前述の参照処理ＱＵＥＲＹ３の場合と同様、参照処理ＱＵＥＲＹ４の参照要求を受けた時点では、継続中の更新処理は存在しない。オブジェクトデータ記憶部２３内のオブジェクトデータは全てコミットされた状態である。また、更新ログテーブル１１にはレコードが存在しない。参照ログテーブル１３には、図１８に示すように、時刻「Ｔｉｍｅ７」に開始された参照処理ＱＵＥＲＹ１に対応する参照ログのレコードが記録されている。
【０１０２】
図１５のステップＳ２１で、端末ＴＥ１から送信された「“ディスク”を含むオブジェクトデータを取り出す」旨の参照要求メッセージが情報管理装置１の参照処理部４で受け取られると、参照処理部４は、索引データ記憶部２１にアクセスして、索引データ中の「語彙」欄の“ディスク”に対応付けて記憶されている発生位置テーブルから発生位置データの集合を得る（ステップＳ２２）。
【０１０３】
更新処理ＴＸＮ２開始前に、参照処理部４がデータベース２０にアクセスする場合（ケースＸ１）は、前述の参照処理ＱＵＥＲＹ３の場合と同様である。更新処理ＴＸＮ２が開始されているが、コミットはされていないときに、参照処理部４がデータベース２０にアクセスする場合（ケースＸ２）、ステップＳ２２では、図１０に示した索引データ中の発生位置データ１０２は無視される。「更新時刻」欄が空欄（あるいは「ＮＵＬＬ」）となっているからである。
【０１０４】
更新処理ＴＸＮ２による更新がコミットされた後に参照処理部４がデータベース２０にアクセスする場合（ケースＸ３）には、ステップＳ２２では、図１３に示した索引データ中の発生位置データ１０２が得られる。発生位置データ１０２の「確認要否」欄は「要」、「削除挿入」欄は「挿」であるから、図１６のステップＳ６１、ステップＳ６３へ進む。発生位置データ１０２の「更新時刻」は「Ｔｉｍｅ８」であり、これより前に開始された更新処理ＱＵＥＲＹ３やＱＵＥＲＹ４が存在するから、ステップＳ６５へ進み、発生位置データ１０２内の論理オブジェクトＩＤ「ＬＯＩＤ５」に対するバージョンデータ２０１を取得し、ステップＳ６７へ進む。ステップＳ６７では、当該バージョンデータに含まれる更新時刻「Ｔｉｍｅ８」が、現在の参照処理の開始時に取得した時刻（参照時刻「Ｔｉｍｅ７」）よりも後であるから、ステップＳ７０へ進み、当該バージョンデータ２０１から「ＯｌｄＰＯＩＤ」を取出す。その後の処理は、前述同様である。
【０１０５】
次に、図５の参照処理ＱＵＥＲＹ２の参照処理動作を例にとり、図１５〜図１７に示すフローチャートを参照して、図１の情報管理装置１の参照処理動作について説明する。なお、ここでは、前述の図５の参照処理ＱＵＥＲＹ３の参照処理動作と異なる部分について説明する。参照処理ＱＵＥＲＹ２は、“メモリ”を含むオブジェクトデータを取り出す参照処理である。参照処理ＱＵＥＲＹ２は、図５に示すように、更新処理ＴＸＮ２終了後（コミット後）の時刻「Ｔｉｍｅ９」に開始する。また、参照処理ＱＵＥＲＹ２開始時には、参照処理ＱＵＥＲＹ３、４も処理継続中である。
【０１０６】
更新処理ＴＸＮ２による更新がコミットされた後は、オブジェクトデータ記憶部２３は図９に示した状態であり、索引データ記憶部２１は図１３に示した状態であり、マップテーブル記憶部２２の状態は図１４に示した状態である。また、バージョンデータテーブル１２には、図１２に示したように、更新処理ＴＸＮ２による更新（更新時刻「Ｔｉｍｅ８」）に関するレコード２０１が記録されている。この場合、ステップＳ２２では、図１３に示した索引データから、発生位置データ１０１を含む発生位置データの集合を得る。
【０１０７】
得られた発生位置データのそれぞれについて、ステップＳ２４〜ステップＳ３３の処理を繰り返す（ステップＳ２３〜ステップＳ３４）。すなわち、ステップＳ２４では、発生位置データ内の「確認要否」欄をチェックする。発生位置データ１０１は、図１３からも明らかなように、「確認要否」欄は「要」となっている。この場合には、図１６のステップＳ６１へ進む。
【０１０８】
ステップＳ２５では、発生位置データ１０１の「削除挿入」欄が「削」となっているので、ステップＳ６２へ進む。処理対象の発生位置データ１０１の「更新時刻」欄の更新時刻より前に開始された参照処理がまだ継続中であるから、ステップＳ６５へ進む。
【０１０９】
現在処理対象の発生位置データ１０１に含まれる論理オブジェクトＩＤ「ＬＯＩＤ５」に対応するバージョンデータ２０１がバージョンデータテーブル１２内に存在し、当該バージョンデータ２０１の更新時刻「Ｔｉｍｅ８」が参照時刻「Ｔｉｍｅ９」より以前であることからステップＳ６７、Ｓ６９へと進む。ステップＳ６９では、バージョンデータテーブル１２のレコード２０１からＮｅｗＰＯＩＤ「ＰＯＩＤ２１」を取り出す。そして、ステップＳ７１へ進み、得られたＰＯＩＤに対応するオブジェクトデータ記憶部２３内の記憶エリアに、処理対象の発生位置データ１０１で指定されているスロットＩＤ「ＳＬＯＴ０」をもつスロットが存在するかを確認する。この場合、「ＰＯＩＤ２１」の記憶エリアは図９に示すように、スロットＩＤ「ＳＬＯＴ０」のスロットは存在しないので（“メモリ”を削除する更新がコミットされているので）、図１５のステップＳ３４へ進む。
【０１１０】
以上の更新、参照処理をまとめると、次のようになる。
【０１１１】
オブジェクトデータの更新処理では、まず、更新開始時の時刻（更新時刻）を取得する。更新対象のオブジェクトデータの記憶エリアとは別の記憶エリアに当該更新対象のオブジェクトデータの複製を格納し、当該複製の記憶エリア上で更新する。そして、更新確定後（コミット後）には、更新時刻と、更新対象のオブジェクトデータのＬＯＩＤ（論理オブジェクトＩＤ）と更新前のオブジェクトデータの記憶エリアのアドレスを表すＰＯＩＤ（物理オブジェクトＩＤ）と更新後のオブジェクトデータの記憶エリアのアドレスを表すＰＯＩＤとを１組とするバージョンデータを格納しておく。
【０１１２】
更新対象のオブジェクトデータが、更新処理開始前に開始され、更新処理終了後（コミット後）も継続している参照処理（第１の参照処理）の参照対象となったときには、当該第１の参照処理には更新前の状態をみせ、更新処理終了後に開始された参照処理（第２の参照処理）の参照対象となったときには更新後の状態をみせるよう、更新対象であったオブジェクトデータを切り替えるために、バージョンデータが参照される。
【０１１３】
索引データは、語彙、数値、記号などの索引語と、当該索引語を含む要素データおよび当該要素データをもつオブジェクトデータを特定するための発生位置データ（当該索引語の発生位置をＬＯＩＤとスロットＩＤとで表している）とを対応付けるものである。オブジェクトデータの更新処理により追加（新規追加も含む）あるいは削除される要素データの発生位置データには、当該更新処理の更新時刻も含まれている。また、発生位置データが上記第１の参照処理と上記第２の参照処理とにアクセスされたときには、第１の参照処理には更新前のオブジェクトデータのＰＯＩＤを提供し、第２の参照処理には更新後のオブジェクトデータのＰＯＩＤを提供するための上記バージョンデータへの参照することとなるが、その結果、所望の語彙を含むスロットが更新前のオブジェクトデータには含まれ、更新後のオブジェクトデータには含まれていない、あるいは、その逆の場合もありえる。そこで、必ず所望の語彙を含むオブジェクトデータが得られるように、得られたＰＯＩＤに対応する記憶エリア内に当該発生位置データにて指定されたスロットＩＤのスロットがあるかの確認を指示するフラグ情報（「確認要否」欄の情報）が当該発生位置データに含まれている。
【０１１４】
参照処理の際にはまず、参照処理開始時の時刻（参照時刻）を取得する。索引データを参照して、所望の語彙を含む要素データの発生位置データの集合を求める。  得られた各発生位置データについて、当該発生位置データに含まれる更新時刻が参照時刻より後あるいは「ＮＵｌｌ」であるときには更新前のオブジェクトデータが格納されているＰＯＩＤが提供され、該発生位置データに含まれる更新時刻が参照時刻より前であるときには更新後のオブジェクトデータが格納されているＰＯＩＤが提供される。
【０１１５】
得られた発生位置データの「確認要否」欄に「要」が記録された発生位置データについては、得られたＰＯＩＤに対応する記憶エリアに当該発生位置データで指定されているスロットＩＤのスロットが実際に存在するか否かを確認し、存在するときには、当該ＰＯＩＤの記憶エリアからオブジェクトデータを読み出す。
【０１１６】
その結果、図５の参照処理Ｑｕｅｒｙ２は、更新処理ＴＸＮ２での更新がコミットされた後に開始された参照処理であるから、論理オブジェクトＩＤ「ＬＯＩＤ５」の更新前の物理オブジェクトＩＤ「ＰＯＩＤ５」のオブジェクトデータ（“メモリ”，“データベース”）は参照できない。また、参照処理Ｑｕｅｒｙ３やＱｕｅｒｙ４では、これらの参照要求の発生時前に既にコミットされている更新処理ＴＸＮ１の更新結果までが参照対象となり、これら参照処理中に発生しコミットされた更新処理ＴＸＮ２の更新結果は参照対象とならない。
【０１１７】
このように、上記実施形態では、更新処理開始前に開始された参照処理はもちろんのこと、その中でも特に、更新処理終了後（コミット後）も継続している参照処理（第１の参照処理）に対しては更新前の状態を提供し、更新処理終了後に開始された参照処理（第２の参照処理）に対しては更新後の状態を提供するといった、更新対象であったオブジェクトデータの切り替えを容易に行うことができる。すなわち、参照処理中にデータベース内の更新がなされたとしても、当該参照処理に対しては、参照要求時のデータベース内の状態を維持することができるのである。
【図面の簡単な説明】
【０１１８】
【図１】本発明の実施形態に係る情報管理装置の構成例を示した図。
【図２】オブジェクトデータ記憶部におけるオブジェクトデータの記憶例を模式的に示した図。
【図３】索引データ記憶部に記憶される索引データの記憶例を模式的に示した図。
【図４】マップテーブル記憶部に記憶されているマップテーブルの一例を示した図。
【図５】更新処理と参照処理の同時実行制御を説明するための図。
【図６】更新処理動作を説明するためのフローチャート。
【図７】参照ログテーブルの一例を示した図。
【図８】更新ログテーブルの一例を示した図。
【図９】更新後のオブジェクトデータ記憶部の様子を示した図。
【図１０】更新後の索引データ記憶部の様子を示した図。
【図１１】コミット処理動作を説明するためのフローチャート。
【図１２】バージョンデータテーブルの一例を示した図。
【図１３】コミット後の索引データ記憶部の様子を示した図。
【図１４】コミット後のマップテーブルを示した図。
【図１５】参照処理動作を説明するためのフローチャート。
【図１６】参照処理動作を説明するためのフローチャート。
【図１７】参照処理動作を説明するためのフローチャート。
【図１８】参照処理ＱＵＥＲＹ３の参照要求を受けた時点における参照ログテーブルを示した図。
【符号の説明】
【０１１９】
１…情報管理装置、２…更新処理部、３…コミット処理部、４…参照処理部、５…バージョンデータ管理部、６…時刻管理部、１０…テーブル記憶部、１１…更新ログテーブル、１２…バージョンデータテーブル、１３…参照ログテーブル、２０…データベース、２１…索引データ記憶部、２２…マップテーブル記憶部、２３…オブジェクトデータ記憶部、ＴＥ１、ＴＥ２…端末。
【図１】
2005234945.tif 000003
【図２】
2005234945.tif 000004
【図３】
2005234945.tif 000005
【図４】
2005234945.tif 000006
【図５】
2005234945.tif 000007
【図６】
2005234945.tif 000008
【図７】
2005234945.tif 000009
【図８】
2005234945.tif 000010
【図９】
2005234945.tif 000011
【図１０】
2005234945.tif 000012
【図１１】
2005234945.tif 000013
【図１２】
2005234945.tif 000014
【図１３】
2005234945.tif 000015
【図１４】
2005234945.tif 000016
【図１５】
2005234945.tif 000017
【図１６】
2005234945.tif 000018
【図１７】
2005234945.tif 000019
【図１８】
2005234945.tif 000020