(57)【特許請求の範囲】
【請求項１】
コンピュータに、
データベースに記憶され、第１の数値のデータ項目を含む第１のレコードに対する更新処理の要求であって、前記第１の数値から第２の数値を減算する要求を受け付けた場合に、少なくとも前記データ項目の値として前記第２の数値を有する分割レコードを含む複数の分割レコードを、前記第１のレコードを分割することにより生成し、
生成した前記第２の数値を有する分割レコードに対して、前記更新処理を適用する
ことを含む処理を実行させることを特徴とする更新処理プログラム。
【請求項２】
前記複数の分割レコードは、前記第２の数値を有する分割レコードと、前記データ項目の値として前記第１の数値から前記第２の数値を減算した値を有する分割レコードとを含む、
請求項１記載の更新処理プログラム。
【請求項３】
前記コンピュータに、
前記複数の分割レコードを含む前記第１のレコードを参照する要求を受け付けた場合に、前記複数の分割レコードの各々が有する数値を合計した値を参照させる
ことを含む処理を実行させるための請求項１または請求項２記載の更新処理プログラム。
【請求項４】
前記複数の分割レコードを含む第１のレコードに対する更新処理として減算の要求を受け付けた場合に、値の合計が前記第２の数値以上となるように選択した分割レコードを前記第２の数値を有する分割レコードとする請求項１〜請求項３のいずれか１項記載の更新処理プログラム。
【請求項５】
同一の要求に基づいて生成され、かつ前記更新処理の適用状態が同一の複数の分割レコードの各々が有する値を合計することにより、前記複数の分割レコードをマージする請求項１〜請求項４のいずれか１項記載の更新処理プログラム。
【請求項６】
データベースに記憶され、第１の数値のデータ項目を含む第１のレコードに対する更新処理の要求であって、前記第１の数値から第２の数値を減算する要求を受け付けた場合に、少なくとも前記データ項目の値として前記第２の数値を有する分割レコードを含む複数の分割レコードを、前記第１のレコードを分割することにより生成し、生成した前記第２の数値を有する分割レコードに対して、前記更新処理を適用する更新処理部
を含む更新処理装置。
【請求項７】
コンピュータが、
データベースに記憶され、第１の数値のデータ項目を含む第１のレコードに対する更新処理の要求であって、前記第１の数値から第２の数値を減算する要求を受け付けた場合に、少なくとも前記データ項目の値として前記第２の数値を有する分割レコードを含む複数の分割レコードを、前記第１のレコードを分割することにより生成し、
生成した前記第２の数値を有する分割レコードに対して、前記更新処理を適用する
ことを含む処理を実行する更新処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、更新処理プログラム、更新処理装置、及び更新処理方法に関する。
【背景技術】
【０００２】
情報処理装置の性能向上による処理の集約や利用者の増加などの要因で、多くのトランザクションが一つのシステムで動作するようになっている。このように、多くのトランザクションが動作するシステムでは、同時に実行できるトランザクションの数を多くすること、すなわち、トランザクションの同時実行性を向上させることが、システムの性能向上のために必要である。
【０００３】
また、トランザクション処理によりデータベースに格納されたレコードを更新する場合には、データベースの整合性を保つために、更新対象のレコードに排他制御を適用した上で、レコードの更新を行う。この場合、同時に実行されるトランザクションの数が増加すると、トランザクションが互いにブロックし合うロックスラッシングと呼ばれる現象が発生する。ロックスラッシングが発生すると、スループット（時間当たりの完了トランザクション数）が低下し、トランザクションの同時実行性が向上しなくなる。
【０００４】
特に、ＳＳＤ（Solid State Drive）、フラッシュメモリ、インメモリデータベースなどの技術によりＩ／Ｏ（Input／Output）性能が向上した環境では、Ｉ／Ｏ性能ではなく、上記のような排他制御がボトルネックになることが目立ってくる。トランザクションの同時実行性を向上させるためには、レコードの排他制御によるボトルネックを改善する技術が必要である。
【０００５】
そこで、排他制御によりブロックされるトランザクションを減少させる技術として、ｒｅａｄｅｒ／ｗｒｉｔｅｒロックという方式が存在する。ｒｅａｄｅｒ／ｗｒｉｔｅｒロックでは、参照処理に対するロックと、更新処理に対するロックとの２種類のロックを用いることで、レコードの参照処理同士は互いにブロックしないようにしている。また、ＭＶＣＣ（MultiVersion Concurrency Control）や２コピーバージョニングという方式が存在する。これらの方式では、複数の版のデータを持つことで、レコードの参照処理同士、及び参照処理と更新処理とが互いにブロックしないようにしている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特表２００７−５０１４６８号公報
【特許文献２】特開平１０−９１４８９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、排他制御によりブロックされるトランザクションを減少させる技術では、更新処理に対しては、レコードを排他的にロックするため、同じレコードを同時に更新することはできない。このように、更新処理に対してレコードを排他的にロックするのは、トランザクション処理の信頼性を保証するためである。レコードを排他的にロックしてしまえば、そのレコードの正しさを担保することは可能である。しかし、一つのトランザクションによる更新処理の完了まで、他のトランザクションによる更新処理を完全にブロックしてしまい、トランザクションの同時実行性を向上させることができない、という問題がある。
【０００８】
本発明は、一つの側面として、同一レコードに対する更新処理の同時実行性を向上させることを目的とする。
【課題を解決するための手段】
【０００９】
一つの態様として、データベースに記憶され、第１の数値のデータ項目を含む第１のレコードに対する更新処理の要求であって、前記第１の数値から第２の数値を減算する要求を受け付ける。その場合、少なくとも前記データ項目の値として前記第２の数値を有する分割レコードを含む複数の分割レコードを、前記第１のレコードを分割することにより生成する。そして、生成した前記第２の数値を有する分割レコードに対して、前記更新処理を適用する。
【発明の効果】
【００１０】
一つの側面として、同一レコードに対する更新処理の同時実行性を向上させることができる、という効果を有する。
【図面の簡単な説明】
【００１１】
【図１】参考手法による要素の分割を説明するための図である。
【図２】参考手法による要素の分割を説明するための図である。
【図３】参考手法による要素の分割を説明するための図である。
【図４】システムの概略構成を示すブロック図である。
【図５】第１及び第２実施形態に係る更新処理装置の機能ブロック図である。
【図６】レコードの多重集合による表現を説明するための図である。
【図７】要素の形式を説明するための図である。
【図８】加算時の要素の生成を説明するための図である。
【図９】減算時の要素の生成を説明するための図である。
【図１０】減算時の要素の生成を説明するための図である。
【図１１】更新処理装置として機能するコンピュータの概略構成を示すブロック図である。
【図１２】データベース管理処理の一例を示すフローチャートである。
【図１３】更新処理の一例を示すフローチャートである。
【図１４】レコード変更処理の一例を示すフローチャートである。
【図１５】減算処理の一例を示すフローチャートである。
【図１６】トランザクション制御処理の一例を示すフローチャートである。
【図１７】トランザクション確定処理の一例を示すフローチャートである。
【図１８】トランザクションキャンセル処理の一例を示すフローチャートである。
【図１９】参照処理の一例を示すフローチャートである。
【図２０】マージ処理を説明するための図である。
【図２１】マージ処理の一例を示すフローチャートである。
【図２２】要素の可視性の判定を説明するための図である。
【図２３】マージ処理を説明するための図である。
【図２４】要素数の増加を抑制する他の方法を説明するための図である。
【図２５】要素数の増加を抑制する他の方法を説明するための図である。
【図２６】要素数の増加を抑制する他の方法を説明するための図である。
【発明を実施するための形態】
【００１２】
以下、図面を参照して本発明の実施形態の一例について説明する。以下の各実施形態では、レコードの数値項目（詳細は後述）の値を表す要素として、更新処理に応じた要素を動的に生成する。そして、生成した要素を含む複数の要素のうち、更新処理の対象となる要素に対して排他処理（ロック）を行い、更新処理を適用する。
【００１３】
まず、各実施形態の詳細を説明する前に、更新処理に応じた要素を動的に生成する理由を説明するために、数値項目に対する更新処理、及び数値項目の値を予め複数の要素に分割しておく場合の問題点について説明する。
【００１４】
トランザクション処理において、更新処理を適用するレコードをロックして、他のトランザクションによる更新処理をブロックするのは、トランザクション処理の信頼性を保証するためである。
【００１５】
しかし、システムの用途や業務によっては、他のトランザクションによる更新処理を完全にブロックしなくても、処理の正しさを保証できる場合がある。例えば、商品の在庫の状態を表すレコードに対して、出荷時に在庫数から出荷数を減算したり、入荷時に在庫数に入荷数を加算したりする処理がある。一般に、商品の在庫数が０を下回らないという制約を満たせば、出荷処理中に入荷処理を行ったり、入荷処理中に出荷処理を行ったりすることが可能である。
【００１６】
また、他にも、口座の残高を表すレコードに対して、出金時に残高を減らしたり、入金時に残高を増やしたりする処理がある。この場合も、所定の制約を満たす入出金の処理であれば、入金処理中に出金処理を行ったり、出金処理中に入金処理を行ったりすることも可能である。
【００１７】
あるものの「数」、「個数」、「量」などの数学的に「濃度（ｃａｒｄｉｎａｌｔｙ）」を表現する値を有する項目を、本実施形態では「数値項目」という。上記の例のように、数値項目に対する更新処理では、その値が所定値（例えば０）を下回らないという制約など、所定の制約を満たせば、同一のレコードに対して同時に更新処理を行える場合がある。
【００１８】
このような数値項目に対する更新処理の性質を利用して、レコードを同時に更新できるようにするために、数値項目の値を予め複数の要素に分割しておく手法（以下、参考手法という）が考えられる。例えば、ある商品のレコードの「個数」という数値項目の値が「１００」の場合、｛２０，３０，５０｝の各値を有する３つの要素に分割しておく。
【００１９】
上記のように数値項目が複数の要素に分割された状態で、あるトランザクションの要求で商品を２０個出荷することを表す更新処理を行う場合、数値項目「個数」の分割された要素のうち、値「２０」を有する要素をロックし、残りの値「３０」を有する要素、及び値「５０」を有する要素はそのままにする（ロックしない）。これにより値「２０」を有する要素をロックしたトランザクションが完了していない状態でも、値「３０」を有する要素及び値「５０」を有する要素はロックされていないため、例えば、別のトランザクションの要求で商品を３０個出荷することを表す更新処理がブロックされずに動作可能である。この場合は、別のトランザクションにより値「３０」を有する要素がロックされる。
【００２０】
このように、数値項目が有する元の値を複数の要素に分割した場合、複数の要素のうちのある要素をロックした１つのトランザクションが確定（コミット）した場合でも、キャンセル（ロールバック）した場合でも、在庫が０以上であることは保証されている。よって、更新処理の正しさを保ったまま、レコード単位での排他が不要となる。そのため、同じレコードを更新する複数のトランザクションが互いにブロックされず、同時に実行可能になる。
【００２１】
ここで、数値項目の値の分割数が多いほど、同時に多数のトランザクションが同一レコードを更新できるようになる。しかし、要素が増えるほどデータ量が大きくなるため、要素のためのリソース使用量が増加する。具体的には、データを保存しておくためのディスクの使用量が増加する。また、数値項目を含むレコードを参照する場合、分割された各要素が有する値の合計を求める必要がある。合計を求めるためには、各要素のデータにアクセスする必要があり、ディスク上の各要素のデータにアクセスするためには、各要素に対してのＩ／Ｏ処理、データの一時的なメモリへの保持、キャッシュの使用等が必要である。このため、Ｉ／Ｏ時間の増加により、参照処理自体の処理時間が増加したり、例えばキャッシュから他の処理のデータが追い出される等の理由によるキャッシュ効率の悪化で、他の処理の処理時間が遅延したりするなどの問題が生じる場合がある。
【００２２】
一方、要素のためのリソース使用量を抑えるために、分割する要素の数を少なくすると、同時実行可能なトランザクションの数が少なくなってしまう。参考手法では、トランザクションの同時実行可能な上限数は、分割した要素の数と等しいためである。例えば、図１に示すように、元のデータにおける各レコードの数値項目をそれぞれ２つの要素に分割した場合では、同一の品目（同一のレコード）に対して、更新処理を同時実行可能なトランザクションは２つまでである。従って、図１の例に示すように、品目「にんじん」のレコードに対して、「にんじん１０個出荷」という２つのトランザクションによる更新処理中には、品目「にんじん」のレコードの数値項目の２つの要素は各々ロックされる。従って、他のトランザクションは、品目「にんじん」のレコードに対する更新処理を実行できない。
【００２３】
また、トランザクションによる更新要求を受け取る前は、どのレコードがどの程度、同時に更新されるのかを把握することはできないため、参考手法では、全てのレコードを同じように分割しておく必要がある。例えば、同時に最大４件の更新処理を可能にしたい場合、図２に示すように、元のデータにおける各レコードの数値項目をそれぞれ４つの要素に分割しておく必要がある。従って、レコード数が多い場合や同時実行数を多くしたい場合には、リソース使用量が増加する問題が顕著になる。また、ある瞬間で見た場合に、同時に実行される更新処理の数が最大数に満たないレコード（図２の例では「たまねぎ」）や、全く更新されていないレコード（図２の例では「しいたけ」）が存在する場合がある。このように、更新されていない状況にもかかわらず、数値項目が複数の要素に分割されていると、無駄なリソースを消費してしまう。すなわち、あまり更新されないレコードに対しては、分割のメリットが少ないにもかかわらず、リソース使用量の増加というコストを払う必要がある。
【００２４】
また、例えば、図３に示すように、品目「にんじん」のレコードの数値項目（個数「１５０」）を｛５０，５０，５０｝の各値を有する３つの要素に分割した場合、最大で３つのトランザクションによって同時に更新処理を実行可能である。しかし、３つのトランザクションがそれぞれ「にんじん１０個出荷」の更新処理を行う場合、まだ出荷可能な在庫数（ここでは、レコード上あと１２０個が出荷可能な在庫数）があるにもかかわらず、別のトランザクションは更新処理を実行できない。
【００２５】
さらに、例えば、図３に示すように、品目「たまねぎ」のレコードの数値項目（個数「１００」）を｛４０，３０，３０｝の各値を有する３つの要素に分割した場合に、トランザクションにより「たまねぎ８０個出荷」の更新処理が要求されたとする。この場合、数値項目「個数」の値の合計が８０個に達するように要素を選択してロックする必要があるため、結局全ての要素をロックすることになる。このような場合、数値項目を３つの要素に分割したにもかかわらず、同時に１つの更新処理しか実行できない。
【００２６】
上記のような問題は、どのレコードが、いつ、どんな内容（いくつ減算または加算）で更新されるかが事前には分からないために発生する。そこで、本実施形態では、このような問題を解決するために、数値項目を事前に分割するのではなく、要求に応じて動的に要素を生成する。
【００２７】
なお、特開平１０−９１４８９には、１つのレコードを分割して格納する方式について記述されている。この方式による分割は、大きなサイズのレコードを物理的に小さなサイズに分割するもので、レコードの数値項目の値を分割（意味的な分割）するものではない。そのため、特開平１０−９１４８９に記載の方式では、数値の加減算を伴う更新処理を複数のトランザクションから同時に行う場合、その更新処理の正しさを保つことができない。
【００２８】
以下、各実施形態について詳細に説明する。
【００２９】
＜第１実施形態＞
以下、第１実施形態に係る更新処理装置の詳細について説明する。図４に示すように、第１実施形態に係る更新処理装置１０は、複数のクライアント装置３０の各々と、記憶装置２０と接続されている。
【００３０】
記憶装置２０には、処理対象のデータが格納されたデータベース２１（図５も参照）等の各種情報が記憶される。記憶装置２０は、更新処理装置１０に設けられてもよいし、更新処理装置１０とは別の外部装置として設けられた記憶装置であってもよい。また、記憶装置２０は、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、ＵＳＢメモリ等の可搬型記憶媒体であってもよい。
【００３１】
クライアント装置３０は、例えばパーソナルコンピュータ（ＰＣ）、ノート型ＰＣ、携帯端末、スマートフォン等の装置である。クライアント装置３０上では、データベース２１に格納されたデータを利用するアプリケーションが動作する。
【００３２】
更新処理装置１０は、記憶装置２０に記憶されたデータベース２１に対する処理を管理するデータベース管理システムとして機能する。具体的には、更新処理装置１０は、クライアント装置３０上で動作するアプリケーションから、記憶装置２０に記憶されたデータベース２１に対する処理の要求を受け付け、データベース２１に対する処理を実行し、処理結果をクライアント装置３０に返送する。本実施形態では、クライアント装置３０から、トランザクション処理の要求を受け付けるものとする。
【００３３】
図５に示すように、記憶装置２０には、データベース２１と、データ定義情報２２と、管理情報２３とが記憶される。データベース２１は複数のテーブルを有し、各テーブルは複数のレコードを有する。レコードは複数の項目（列、カラム）を有し、各項目には、それぞれ定義されたデータ型の値が格納される。データ定義情報２２は、データベース２１が有する各テーブルのテーブル名等の情報、テーブル毎の各項目のデータ型等の情報である。本実施形態では、特に数値項目を特定する必要がある。そこで、上述したような濃度を表す値が格納される項目に対しては、数値項目であることを示す特別なデータ型を定義したり、通常の数値型の項目の付加的な情報として、濃度を表す値が格納される項目であることを表現したデータ型を定義したりしておく。管理情報２３は、トランザクション毎に付与される識別情報（トランザクションＩＤ）、各レコードまたは各要素の状態等の情報（詳細は後述）である。
【００３４】
また、図５に、第１実施形態に係る更新処理装置１０の機能ブロック図を示す。更新処理装置１０は、要求受付部１１と、要求解析部１２と、更新処理部１３と、トランザクション制御部１４と、参照処理部１５と、応答返送部１６とを備える。
【００３５】
要求受付部１１は、クライアント装置３０から送信された、トランザクションによるデータベース２１に格納されたレコードに対する処理の要求を受け付け、受け付けた要求を要求解析部１２へ受け渡す。要求には、例えばレコードの主キーの値やレコードの識別情報（レコードＩＤ）等、処理対象のレコードを特定するレコード特定情報が含まれる。また、要求には、例えば項目名や項目に対応する列番号等、処理対象のレコードの中で更新対象となる項目を特定する項目特定情報が含まれる。さらに、要求には、処理対象の項目に対してどのような処理を行うかを表す処理内容情報が含まれる。また、要求には、トランザクションＩＤが付与されている場合には、その要求により実行される更新処理が属するトランザクションのトランザクションＩＤも含まれる。
【００３６】
上述したように、本実施形態では、数値項目に対する更新処理に対して動的に要素を生成する。数値項目に対する更新処理としては、例えば、数値項目が有する値に対する加算、減算等である。数値項目に対する加算または減算の処理の要求には、例えば、数値項目Ａの値から１０減算する場合は「Ａ−＝１０」、１０加算する場合は「Ａ＋＝１０」のような処理内容情報が含まれる。
【００３７】
要求解析部１２は、受け渡された要求に含まれる処理内容情報に基づいて、クライアント装置３０からの処理の要求の種別を解析する。要求解析部１２は、要求がデータベース２１に格納されたレコードの更新を要求する更新要求の場合には、要求を更新処理部１３へ受け渡す。また、要求解析部１２は、要求が、トランザクションの開始、確定、またはキャンセルを制御するためのトランザクション制御要求の場合には、要求をトランザクション制御部１４へ受け渡す。また、要求がデータベース２１に格納されたレコードを参照することを要求する参照要求の場合には、要求を参照処理部１５へ受け渡す。
【００３８】
更新処理部１３は、受け渡された更新要求に含まれるレコード特定情報及び項目特定情報に基づいて更新対象のレコード及び項目を特定し、更新要求に含まれる処理内容情報に応じた更新処理を実行する。この際、更新処理部１３は、データ定義情報２２を参照して、更新対象の項目が数値項目か否かを判定する。
【００３９】
なお、数値項目か否かデータ定義情報２２を参照して判定する方法とは別の方法として、データベース管理システムの機能で内部的に追加された項目の性質に基づいて判定することもできる。具体的には、図６に示すように、格納されるレコードに対して、データベース管理システムがその内容を自動で確認し、同じ内容を持つレコードを内部で物理的に１つのレコードにまとめ、その内容と個数（濃度）とを持つように圧縮する場合がある。この場合、この個数の項目は、利用者によって数値項目としてデータ型が定義されていなくても、数値項目であると判定することができる。
【００４０】
更新処理部１３は、更新対象の項目が数値項目で、その数値項目に対する更新処理の内容が加算または減算の場合に、数値項目の要素として、更新処理に応じた要素を生成し、生成した要素に更新処理を適用する。
【００４１】
要素の形式は、例えば図７のＡに示すように、レコードの識別子と各要素とを対応付けた形式とすることができる。図７のＡの例では、１品目１レコードとして取り扱うデータベースにおける項目「品目」をレコードの識別子として用いている。また、要素の他の形式としては、図７のＢに示すように、レコードの内部で、数値項目が複数の要素を有する形式とすることができる。また、図７のＣに示すように、元のレコードとは別に、生成した要素の領域を用意し、元のレコードからポインタなどを利用して、そのレコードの数値項目の要素を参照する形式とすることができる。本実施形態では、図７のＡに示す形式を用いて説明する。なお、要素の形式は上記の例に限定されず、要素の有する値が、レコードの数値項目の値を表すものであればよい。また、１品目１レコードとして取り扱う場合に限定されず、本実施形態における各要素を各レコードとして扱ってもよい。
【００４２】
更新処理部１３は、更新処理が「加算」の場合には、加算する値を有する要素を生成する。また、更新処理部１３は、生成した要素の状態として、トランザクションが確定された場合に追加される要素であるが、未だトランザクションが未確定の状態であることを表す「追加中」を設定する。状態が「追加中」の要素は、ロック状態であることを表し、他のトランザクションによる更新処理をブロックする。なお、詳細は後述するが、トランザクションの確定によりロックが解除された要素の状態は「有効」または「無効」に設定される。状態が「有効」の要素は、トランザクションによる更新処理の対象とすることができる。状態が「無効」の要素は、トランザクションによる更新処理の対象とすることはできない。
【００４３】
また、更新処理部１３は、要求に含まれるトランザクションＩＤを取得し、設定した状態及びトランザクションＩＤを、生成した要素の管理情報２３として記憶装置２０に記憶する。
【００４４】
例えば、現在の在庫数１０個の品目「にんじん」に対する５個の入荷を表す更新処理は、図８に示すように、「品目：にんじん，個数：１０」というレコードの数値項目である項目「個数」の値に、「５」を加算する処理となる。この場合、元の数値項目の値「１０」を元の要素とし、元の要素は変更することなく、新たに値「５」を有する要素を生成し、その要素の状態を「追加中」に設定する。これにより、既にトランザクションが確定している１０個という在庫に対しては出荷処理（減算）を表す更新処理を同時に行うことが可能である。また元の要素に関係なく加算処理のための要素を生成するため、複数の入荷処理（加算）を表す更新処理の各々を同時に行うことも可能である。
【００４５】
なお、図８の「追加ＸＩＤ」及び「削除ＸＩＤ」は、それぞれ加算処理のトランザクションを示すトランザクションＩＤ、及び減算処理のトランザクションを示すトランザクションＩＤである。図８の例で生成された要素は、追加ＸＩＤ＝Ｔｘ１０１のトランザクションに属する更新処理の要求に応じて生成された要素であることを表す。また、図８では、各要素の管理情報２３を各要素と併記しているが、管理情報２３は、要素を識別する識別情報と対応付けられて記憶装置２０に記憶されていればよく、データベース２１とは別の領域に記憶されてもよい。
【００４６】
また、更新処理部１３は、更新処理が「減算」の場合には、減算する値を有する要素を生成すると共に、元の要素から減算する値を減算する。また、更新処理部１３は、生成した要素の状態として、トランザクションが確定されることにより削除対象となる要素であるが、未だトランザクションが未確定の状態であることを表す「削除中」を設定する。状態が「削除中」の要素は、ロック状態であることを表し、他のトランザクションによる更新処理をブロックする。また、更新処理部１３は、上記の加算処理の場合と同様に、設定した状態及びトランザクションＩＤを、生成した要素の管理情報２３として記憶装置２０に記憶する。
【００４７】
例えば、現在の在庫数１０個の品目「にんじん」に対する４個の出荷を表す更新処理は、図９に示すように、「品目：にんじん，個数：１０」というレコードの数値項目である項目「個数」の値から、「４」を減算する処理となる。この場合、元の数値項目の値「１０」を元の要素とし、元の要素から「４」を減算すると共に、新たに値「４」を有する要素を生成する。なお、ここで生成する要素の管理情報は、元の要素の管理情報をコピーする。すなわち、元の数値項目の値「１０」を、減算後の個数である値「６」を有する要素と、減算する値「４」を有する要素とに分割したことになる。更新処理部１３は、生成した要素の状態を「削除中」に設定する。これにより、残りの６個という在庫に対しては出荷処理（減算）を表す更新処理を同時に行うことが可能である。また、上記の加算処理の場合と同様に、他の入荷処理（加算）に対応する更新処理を同時に行うことも可能である。
【００４８】
また、更新処理部１３は、設定した状態、及び減算処理のトランザクションを示すトランザクションＩＤ（図９の例では、削除ＸＩＤ＝Ｔｘ１０２）を管理情報２３として記憶装置２０に記憶する。なお、元の要素からコピーした、その要素を追加した際のトランザクションＩＤ（図９の例では、追加ＸＩＤ＝Ｔｘ０）もあわせて管理情報２３として記憶しておく。これにより、この要素は、追加ＸＩＤ＝Ｔｘ０のトランザクションで追加され、削除ＸＩＤ＝Ｔｘ１０２のトランザクションで削除対象となった、という履歴を管理することができる。
【００４９】
また、更新処理部１３は、更新処理が「減算」の場合であって、更新対象の数値項目に対して、既に複数の要素が存在する場合には、値の合計が減算する値以上となるように、状態が「有効」の要素を複数選択する。そして、更新処理部１３は、選択した複数の要素の各々の状態を「削除中」に設定する。要素の選択は、例えばランダムに選択してもよいし、管理情報２３を参照して、古い要素から順に選択してもよいし、値の小さな要素から選択してもよい。また、更新処理部１３は、選択した複数の要素が有する値の合計が減算する値を超える場合には、選択した複数の要素のうちのいずれかを元の要素として、上記と同様に減算する値を有する要素を分割すればよい。
【００５０】
例えば、図１０を参照して、現在の在庫数１０個の品目「にんじん」のレコードの数値項目「個数」が、値「６」を有する要素（要素１）及び値「４」を有する要素（要素２）を有する場合において、にんじん８個を出荷する出荷処理について説明する。図１０に示すように、要素が有する値の合計が８個になるまで要素を選択すると、要素１及び要素２が選択される。ただし、２つの要素の合計では余りが出るため、一方の要素（ここでは要素２）を上記と同様に分割し、要素１の値との合計が８個になる値「２」を有する新たな要素を生成すると共に、要素２から生成した要素の値を減算する。そして、減算したい値を有する要素群、ここでは要素１及び生成した要素の各々の状態を「削除中」に設定する。
【００５１】
トランザクション制御部１４は、受け渡されたトランザクション制御要求に含まれる処理内容情報に基づいて、トランザクション制御要求の種別が、「開始」、「確定（コミット）」、または「キャンセル（ロールバック）」のいずれであるかを判定する。トランザクション制御要求の種別が「開始」の場合には、トランザクション制御部１４は、開始されるトランザクションに対してトランザクションＩＤを付与し、応答返送部１６を介して、クライアント装置３０に通知する。クライアント装置３０では、同一のトランザクションに属する処理を要求する場合には、付与されたトランザクションＩＤを要求に含める。なお、要求にトランザクションＩＤが含まれない場合は、トランザクション制御要求の種別を「開始」と判定することができる。トランザクション制御部１４は、付与したトランザクションＩＤを管理情報２３として記憶装置２０に記憶する。
【００５２】
また、トランザクション制御部１４は、トランザクション制御要求の種別が「確定」の場合には、状態が「追加中」に設定されている要素の状態を「有効」に変更する。これにより、要素に設定されているロックが解除される。また、トランザクション制御部１４は、状態が「削除中」に設定されている要素の状態を「無効」に変更する。これにより、その要素を削除対象とする。トランザクション制御部１４は、同一のトランザクションに属する更新処理により更新中となっている全ての要素の状態を変更すると、応答返送部１６に、トランザクションの確定完了を通知する。これにより、同一のトランザクションに属する更新処理が全て実行されることを保証する。
【００５３】
また、トランザクション制御部１４は、トランザクション制御要求の種別が「キャンセル」の場合には、状態が「追加中」に設定されている要素を削除し、状態が「削除中」に設定されている要素の状態を「有効」に変更する。これにより、各要素の有する値の合計が、加算処理または減算処理の前の値に戻る。トランザクション制御部１４は、同一のトランザクションに属する更新処理で更新中にされた要素を全て元に戻すと、応答返送部１６に、トランザクションのキャンセル完了を通知する。これにより、同一のトランザクションに属する更新処理が全て実行されないことを保証する。
【００５４】
なお、トランザクション制御部１４は、数値項目以外の項目に対する更新処理等に対してレコードに設定されているロックを解除して、トランザクションの確定またはキャンセルを実行する。
【００５５】
参照処理部１５は、受け渡された参照要求に含まれるレコード特定情報が示すレコードを、データベース２１から取得し、応答返送部１６へ受け渡す。この際、取得したレコードが数値項目を含み、かつその数値項目が複数の要素を有する場合には、参照処理部１５は、複数の要素の各々が有する値を合計した値を受け渡す。これにより、利用者からは要素が分割されていることは意識されない。
【００５６】
応答返送部１６は、更新処理部１３、トランザクション制御部１４、及び参照処理部１５の各々から受け渡された各種情報を、クライアント装置３０に返送する。
【００５７】
更新処理装置１０は、例えば図１１に示すコンピュータ４０で実現することができる。コンピュータ４０はＣＰＵ４２と、メモリ４４と、不揮発性の記憶部４６と、入出力インターフェース（Ｉ／Ｆ）４７と、ネットワークＩ／Ｆ４８とを備えている。ＣＰＵ４２と、メモリ４４と、記憶部４６と、入出力Ｉ／Ｆ４７と、ネットワークＩ／Ｆ４８とは、バス４９を介して互いに接続されている。
【００５８】
記憶部４６は、ＨＤＤ（Hard Disk Drive）、ＳＳＤ（solid state drive）、フラッシュメモリ等によって実現できる。記録媒体としての記憶部４６には、コンピュータ４０を更新処理装置１０として機能させるためのデータベース管理プログラム５０が記憶されている。ＣＰＵ４２は、データベース管理プログラム５０を記憶部４６から読み出してメモリ４４に展開し、データベース管理プログラム５０が有するプロセスを順次実行する。
【００５９】
データベース管理プログラム５０は、要求受付プロセス５１と、要求解析プロセス５２と、更新処理プロセス５３と、トランザクション制御プロセス５４と、参照処理プロセス５５と、応答返送プロセス５６とを有する。ＣＰＵ４２は、要求受付プロセス５１を実行することで、図５に示す要求受付部１１として動作する。また、ＣＰＵ４２は、要求解析プロセス５２を実行することで、図５に示す要求解析部１２として動作する。また、ＣＰＵ４２は、更新処理プロセス５３を実行することで、図５に示す更新処理部１３として動作する。また、ＣＰＵ４２は、トランザクション制御プロセス５４を実行することで、図５に示すトランザクション制御部１４として動作する。また、ＣＰＵ４２は、参照処理プロセス５５を実行することで、図５に示す参照処理部１５として動作する。また、ＣＰＵ４２は、応答返送プロセス５６を実行することで、図５に示す応答返送部１６として動作する。これにより、データベース管理プログラム５０を実行したコンピュータ４０が、更新処理装置１０として機能することになる。
【００６０】
なお、更新処理装置１０は、例えば半導体集積回路、より詳しくはＡＳＩＣ（Application Specific Integrated Circuit）等で実現することも可能である。
【００６１】
次に、第１実施形態の作用を説明する。更新処理装置１０では、図１２に示すデータベース管理処理が実行される。
【００６２】
図１２に示すデータベース管理処理のステップＳ１００で、要求受付部１１が、クライアント装置３０から送信された、トランザクションによるデータベース２１に格納されたレコードに対する処理の要求を受け付け、受け付けた要求を要求解析部１２へ受け渡す。要求には、処理対象のレコード特定情報、項目特定情報、処理内容情報等が含まれる。
【００６３】
次に、ステップＳ２００で、要求解析部１２は、受け渡された要求に含まれる処理内容情報に基づいて、クライアント装置３０からの処理の要求の種別を解析する。要求解析部１２による解析結果が更新要求の場合には、処理はステップＳ３００へ移行し、後述する更新処理が実行される。解析結果がトランザクション制御要求の場合には、処理はステップＳ４００へ移行し、後述するトランザクション制御処理が実行される。解析結果が参照要求の場合には、処理はステップＳ５００へ移行し、後述する参照処理が実行される。
【００６４】
次に、ステップＳ６００で、応答返送部１６が、更新処理、トランザクション制御処理、または参照処理の処理結果を示す各種情報を、クライアント装置３０に返送する。
【００６５】
次に、図１３を参照して、図１２のステップＳ３００で実行される更新処理について説明する。
【００６６】
図１３に示す更新処理のステップＳ３１０で、更新処理部１３が、要求解析部１２から受け渡された更新要求に含まれる処理内容情報を参照して、更新要求の種別を判定する。例えば、ＳＱＬ文で記述された更新要求に、処理内容情報としてＩＮＳＥＲＴ文が含まれている場合には、更新処理部１３は、更新要求の種別を、データベース２１への新規レコードの追加であると判定する。また、例えば、処理内容情報としてＤＥＬＥＴＥ文が含まれている場合には、更新処理部１３は、更新要求の種別を、データベース２１の既存レコードの削除であると判定する。また、例えば、処理内容情報としてＵＰＤＡＴＥ文が含まれている場合には、更新処理部１３は、更新要求の種別を、指定されたレコードの変更であると判定する。
【００６７】
更新処理部１３による更新要求の種別の判定結果が新規レコードの追加の場合、処理はステップＳ３２０へ移行し、更新処理部１３が、例えばＩＮＳＥＲＴ文に従って新規レコードを追加する。種別の判定結果が既存レコードの削除の場合、処理はステップＳ３３０へ移行し、更新処理部１３が、例えばＤＥＬＥＴＥ文に従って既存レコードを削除する。種別の判定結果がレコードの変更の場合、処理はステップＳ３４０へ移行し、後述するレコード変更処理が実行される。種別の判定結果が、新規レコードの追加、既存レコードの削除、及びレコードの変更のいずれでもない場合には、処理はステップＳ３５０へ移行し、更新処理部１３が、処理内容情報に従った更新処理を実行する。いずれかの更新処理が実行されると、処理は図１２に示すデータベース管理処理にリターンする。
【００６８】
次に、図１４を参照して、図１３のステップＳ３４０で実行されるレコード変更処理について説明する。
【００６９】
図１４のレコード変更処理のステップＳ３４１で、更新処理部１３が、受け渡された更新要求に含まれるレコード特定情報及び項目特定情報に基づいて更新対象のレコード及び項目を特定する。また、更新処理部１３は、データ定義情報２２を参照して、更新対象の項目が数値項目か否かを判定する。更新対象の項目が数値項目の場合には、処理はステップＳ３４３へ移行する。一方、数値項目ではない場合には、処理はステップＳ３４２へ移行し、更新処理部１３が、処理内容情報に従って特定した項目を変更し、図１３に示す更新処理にリターンする。
【００７０】
ステップＳ３４３では、更新処理部１３が、数値項目に対する更新処理が、加算処理か、減算処理か、またはそれ以外の処理かを判定する。加算処理または減算処理以外の数値項目に対するその他の処理の場合には、処理はステップＳ３４４へ移行する。ステップＳ３４４では、更新処理部１３が、数値項目に対するその他の処理を実行する。例えば、その他の処理が、更新対象の数値項目への値の代入の場合には、更新処理部１３は、更新対象のレコードの数値項目についての全ての要素の状態を「削除中」に設定する。そして、代入したい値を持つ新しい要素を生成し、状態を「追加中」に設定する。
【００７１】
また、数値項目に対する更新処理が加算処理の場合には、処理はステップＳ３４５へ移行する。ステップＳ３４５では、更新処理部１３が、加算する値を有する要素を生成し、状態を「追加中」に設定する。また、更新処理部１３は、設定した状態、及びトランザクションＩＤを管理情報２３として記憶装置２０に記憶する。
【００７２】
また、数値項目に対する更新処理が減算処理の場合には、処理はステップＳ３５０へ移行し、後述する減算処理が実行される。レコードの変更処理としていずれかの更新処理が行われると、処理は図１３に示す更新処理へリターンする。
【００７３】
次に、図１５を参照して、図１４のステップＳ３５０で実行される減算処理について説明する。
【００７４】
図１５の減算処理のステップＳ３５１で、更新処理部１３が、減算する値を変数ｘに設定する。次に、ステップＳ３５２で、更新処理部１３が、更新対象の数値項目の状態が「有効」の要素のうち、未選択の要素から次に処理対象となる要素を選択する。次に、ステップＳ３５３で、更新処理部１３が、上記ステップＳ３５２で、次の要素を選択できたか否かを判定する。選択できた場合には、処理はステップＳ３５４へ移行する。
【００７５】
ステップＳ３５４では、更新処理部１３が、選択した要素が有する値を変数ｙに設定する。次に、ステップＳ３５５で、更新処理部１３が、ｙがｘより大きいか否かを判定する。ｙ＞ｘの場合には、処理はステップＳ３５６へ移行し、ｙ≦ｘの場合には、処理はステップＳ３５９へ移行する。
【００７６】
ステップＳ３５６では、更新処理部１３が、上記ステップＳ３５２で選択した要素が有する値を、ｘ（減算する値）に変更し、状態を「削除中」に設定する。次に、ステップＳ３５７で、更新処理部１３が、「ｙ−ｘ」の値を有し、かつ選択した要素と同じ管理情報を有する新たな要素を生成する。ここで、「選択した要素と同じ管理情報」とは、上記ステップＳ３５６で状態を「削除中」に設定する前の管理情報である。次に、ステップＳ３５８で、更新処理部１３が、更新処理が成功したことを応答返送部１６に通知して、図１４に示すレコード変更処理にリターンする。
【００７７】
一方、ステップＳ３５９では、更新処理部１３が、ｙとｘとが等しい値か否かを判定する。ｙ＝ｘの場合には、処理はステップＳ３６０へ移行し、ｙ＜ｘの場合には、処理はステップＳ３６１へ移行する。
【００７８】
ステップＳ３６０では、更新処理部１３が、選択した要素の状態を「削除中」に設定し、ステップＳ３５８へ移行する。なお、ステップＳ３５５またはＳ３５９が肯定判定の場合は、ここまでに選択した要素が有する値の合計が、減算する値に達したことを示す。特に、ステップＳ３５５が肯定判定の場合は余りが出る場合、ステップＳ３５９が肯定判定の場合は余りが出ない場合である。一方、ステップＳ３５９が否定判定の場合は、ここまでに選択した要素が有する値の合計が、減算する値に達していないことを示す。
【００７９】
ステップＳ３６１では、更新処理部１３が、選択した要素の状態を「削除中」に設定する。次に、ステップＳ３６２で、更新処理部１３が、減算する値のうち、選択した要素が有する値の合計分を除いた残りの値について、次の要素の選択を繰り返すために、変数ｘに「ｘ−ｙ」を設定し、処理はステップＳ３５２に戻る。未だ残りの値があり、かつ全ての要素の選択が終了している場合には、ステップＳ３５３で否定判定となり、処理はステップＳ３６３へ移行する。この場合、減算する値分の要素を選択できなかったことを示しているため、ステップＳ３６３で、更新処理部１３が、更新処理が失敗したことを応答返送部１６に通知して、図１４に示すレコード変更処理にリターンする。
【００８０】
次に、図１６を参照して、図１２のステップＳ４００で実行されるトランザクション制御処理について説明する。
【００８１】
図１６に示すトランザクション制御処理のステップＳ４１０で、トランザクション制御部１４が、受け渡されたトランザクション制御要求に含まれる処理内容情報に基づいて、トランザクション制御要求の種別を判定する。種別は、「開始」、「確定」、または「キャンセル」のいずれかである。例えば、ＳＱＬ文で記述されたトランザクション制御要求に、処理内容情報としてトランザクション制御処理の開始を示すＢＥＧＩＮ文が含まれている場合に、トランザクション制御要求の種別を「開始」と判定する。また、トランザクション制御要求にトランザクションＩＤが含まれていない場合に、そのトランザクション制御要求の種別を「開始」と判定してもよい。また、例えば、処理内容情報としてＣＯＭＭＩＴ文が含まれている場合には、トランザクション制御部１４は、トランザクション制御要求の種別を「確定」と判定する。また、例えば、処理内容情報としてＲＯＬＬＢＡＣＫ文が含まれている場合には、トランザクション制御部１４は、トランザクション制御要求の種別を、「キャンセル」と判定する。
【００８２】
トランザクション制御部１４によるトランザクション制御要求の種別の判定結果が「開始」の場合、処理はステップＳ４２０へ移行し、トランザクション制御部１４が、開始されるトランザクションに対してトランザクションＩＤを付与する。そして、トランザクション制御部１４が、付与したトランザクションＩＤを応答返送部１６に通知する。種別の判定結果が「確定」の場合、処理はステップＳ４３０へ移行し、後述するトランザクション確定処理が実行される。また、種別の判定結果が「キャンセル」の場合、処理はステップＳ４４０へ移行し、後述するトランザクションキャンセル処理が実行される。いずれかのトランザクション制御処理が実行されると、処理は図１２に示すデータベース管理処理にリターンする。
【００８３】
次に、図１７を参照して、図１６のステップＳ４３０で実行されるトランザクション確定処理について説明する。
【００８４】
図１７に示すトランザクション確定処理のステップＳ４３１で、トランザクション制御部１４が、トランザクション制御要求に含まれるトランザクションＩＤのトランザクションに属する未選択の更新処理から、次に処理対象となる更新処理を選択する。次に、ステップＳ４３２で、トランザクション制御部１４が、上記ステップＳ４３１で、次の更新処理を選択できたか否かを判定する。選択できた場合には、処理はステップＳ４３３へ移行する。
【００８５】
ステップＳ４３３では、トランザクション制御部１４が、上記ステップＳ４３１で選択した更新処理が、数値項目に対する更新処理か否かを判定する。数値項目に対する更新処理の場合には、処理はステップＳ４３４へ移行し、数値項目以外の項目に対する更新処理の場合には、処理はステップＳ４３６へ移行する。
【００８６】
ステップＳ４３４では、トランザクション制御部１４が、選択した更新処理の対象であるレコードの数値項目の要素のうち、状態が「追加中」に設定されている要素の状態を「有効」に変更する。次に、ステップＳ４３５で、トランザクション制御部１４が、選択した更新処理の対象であるレコードの数値項目の要素のうち、状態が「削除中」に設定されている要素の状態を「無効」に変更する。選択した更新処理の対象であるレコードの数値項目の全ての要素の確定処理が終了すると、処理はステップＳ４３１に戻る。
【００８７】
一方、ステップＳ４３６では、更新処理の対象であるレコードについて、例えば、更新中の状態を確定状態にする等の通常の確定処理を実行し、処理はステップＳ４３１に戻る。
【００８８】
トランザクション制御要求に含まれるトランザクションＩＤのトランザクションに属する更新処理の全てについて確定処理が終了すると、ステップＳ４３２で否定判定されて、ステップＳ４３７へ移行する。ステップＳ４３７では、トランザクション制御部１４が、トランザクションの確定完了を応答返送部１６に通知し、図１６に示すトランザクション制御処理にリターンする。
【００８９】
次に、図１８を参照して、図１６のステップＳ４４０で実行されるトランザクションキャンセル処理について説明する。
【００９０】
図１８に示すトランザクション確定処理のステップＳ４４１で、上記ステップＳ４３１と同様に、トランザクション制御部１４が、次の更新処理を選択する。次に、ステップＳ４４２で、トランザクション制御部１４が、上記ステップＳ４３２と同様に、上記ステップＳ４４１で、次の更新処理を選択できたか否かを判定する。選択できた場合には、処理はステップＳ４４３へ移行する。
【００９１】
ステップＳ４４３では、トランザクション制御部１４が、上記ステップＳ４４１で選択した更新処理が、数値項目に対する更新処理か否かを判定する。数値項目に対する更新処理の場合には、処理はステップＳ４４４へ移行し、数値項目以外の項目に対する更新処理の場合には、処理はステップＳ４４６へ移行する。
【００９２】
ステップＳ４４４では、トランザクション制御部１４が、選択した更新処理の対象であるレコードの数値項目の要素のうち、状態が「追加中」に設定されている要素を削除する。次に、ステップＳ４４５で、トランザクション制御部１４が、選択した更新処理の対象であるレコードの数値項目の要素のうち、状態が「削除中」に設定されている要素の状態を「有効」に変更する。選択した更新処理の対象であるレコードの数値項目の全ての要素の確定処理が終了すると、処理はステップＳ４４１に戻る。
【００９３】
一方、ステップＳ４４６では、更新処理の対象であるレコードについて、例えば、更新中の状態を更新前の状態に戻す等の通常のキャンセル処理を実行し、処理はステップＳ４４１に戻る。
【００９４】
トランザクション制御要求に含まれるトランザクションＩＤのトランザクションに属する更新処理の全てについてキャンセル処理が終了すると、ステップＳ４４２で否定判定されて、処理はステップＳ４４７へ移行する。ステップＳ４４７では、トランザクション制御部１４が、トランザクションのキャンセル完了を応答返送部１６に通知し、図１６に示すトランザクション制御処理にリターンする。
【００９５】
次に、図１９を参照して、図１２のステップＳ５００で実行される参照処理について説明する。
【００９６】
図１９に示す参照処理のステップＳ５１０で、参照処理部１５が、受け渡された参照要求に含まれるレコード特定情報が示すレコードを、データベース２１から取得する。次に、ステップＳ５２０で、参照処理部１５が、取得したレコードに、複数の要素を有する数値項目を含むレコードが存在するか否かを判定する。存在する場合には、処理はステップＳ５３０へ移行し、参照処理部１５が、複数の要素の各々が有する値を合計し、ステップ５４０へ移行する。
【００９７】
一方、ステップＳ５２０で否定判定された場合には、処理はステップＳ５３０をスキップしてステップＳ５４０へ移行する。ステップＳ５４０では、参照処理部１５が、取得したレコードを応答返送部１６へ受け渡す。この際、上記ステップＳ５３０で複数の要素の値を合計している場合には、対象のレコードの数値項目の値として、合計した値を返す。そして、参照処理を終了し、処理は図１２に示すデータベース管理処理にリターンする。
【００９８】
以上説明したように、第１実施形態に係る更新処理装置１０によれば、数値項目に対する更新処理の要求があった際に、更新処理の内容に応じて動的に要素を生成する。そして、生成した要素を更新処理の対象としてロックすることで、残りの要素については他の更新処理の対象とすることができる。そのため、同一レコードに対する更新処理の同時実行性を向上させることができる。
【００９９】
また、更新処理の対象とならないレコードについては新たな要素を生成しないため、同時実行数を考慮して事前に複数の要素に分割する参考手法に比べ、リソース使用量を抑制することができる。例えば、全レコードがＮ件で、１つのレコードに対して同時にＭ個のトランザクションから更新可能であることを保証したい場合を考える。どのレコードが更新の対象となるかは事前には分からないため、参考手法では、事前に全てのレコードをＭ個の要素に分割する必要があり、トータルでＮ×Ｍ個の要素に分割しておく必要がある。これに対し、本実施形態では、更新要求に応じて要素を生成するため、最大でＮ＋Ｍ−１個の要素になる。一般にＭと比較してＮは大きいため、参考手法に対する本実施形態における必要なリソース使用量の比は、下記（１）式に示すように近似することができる。
【０１００】
【数１】
0006402537.tif 000002
【０１０１】
すなわち、本実施形態によれば、リソースの使用量を、参考手法に比べ、１／Ｍにまで削減することができる。
【０１０２】
また、要素の数の合計を、全レコード件数Ｎのｋ倍（ｋ＞１）以下になるように保証したい場合、どのレコードが更新の対象となるかは事前には分からないため、参考手法では、例えば事前に全てのレコードの要素を均等に分割する必要がある。そのため、各レコードの要素をｋ個に分割することになる。この場合、１つのレコードに対するトランザクションの同時実行数はｋとなる。これに対し、本実施形態では、更新要求に応じて要素を生成するため、１つのレコードに対するトランザクションの同時実行数は、最大でｋＮ−Ｎ＋１となる。上記と同様に、参考手法に対する本実施形態における必要なリソース使用量の比を求めると、下記（２）式に示すようになる。
【０１０３】
【数２】
0006402537.tif 000003
【０１０４】
例えば、ｋ＝２のとき、参考手法では、同一レコードに対するトランザクションの同時実行数は２であるのに対し、本実施形態ではＮ＋１となる。すなわち、参考手法の約Ｎ／２倍のトランザクションを同時に実行可能である。ｋを大きくした場合、差はさらに大きくなりＮ倍に近づく。
【０１０５】
また、ｒｅａｄｅｒ／ｗｒｉｔｅｒロック、ＭＶＣＣ、コピーバージョニング方式等の従来技術では、同一のレコードは同時に更新できない。そのため、更新中のレコードを更新しようとする後続のトランザクションは、先行のトランザクションがコミット（確定）かロールバック（キャンセル）されてレコードのロックが解除されるまでブロックされ、待機状態となる。また、先行のトランザクションが完了（コミットｏｒロールバック）するか否かは、先行のトランザクションを要求したアプリケーションの振舞いに依存する。アプリケーションの振舞いはデータベース管理システムからは制御できないため、データベース管理システムから見ると、更新したいレコードのロックがいつ解除されるか分からない。そのため、例えば後続のトランザクションに対してのレスポンスは、データベース管理システムからコントロールできないものとなる。
【０１０６】
一方、本実施形態では、更新処理に応じて要素を生成し、１つのレコードが有する複数の要素のうち、必要な要素のみをロックすることで、同一のレコードに対する更新処理であっても、ロックされていない要素に対する更新処理であればブロックされない。すなわち、データベース管理システムとして機能する本実施形態に係る更新処理装置１０は、いつ解除されるか分からないロック解除を待つ必要がなく、トランザクションを要求したアプリケーションへのレスポンスをコントロールできるようになる。
【０１０７】
また、トランザクション処理の信頼性を保証するためにデータベース管理システムが持つべき性質として、ＡＣＩＤと略される性質が知られている。ＡＣＩＤとは、Ａｔｏｍｉｃｉｔｙ（原子性）、Ｃｏｎｓｉｓｔｅｎｃｙ／Ｃｏｒｒｅｃｔｎｅｓｓ（一貫性）、Ｉｓｏｌａｔｉｏｎ（独立性）、及びＤｕｒａｂｉｌｉｔｙ（永続性）の４つの性質の頭文字をとったものである。
【０１０８】
上記実施形態では、更新処理に応じて新たに要素を生成し、更新処理の対象となる要素をロックする。また、要素を生成する際には、数値項目の値が所定値（上記実施形態では“０”）を下回らないという制約を満たさない場合には、トランザクションを確定しないようにしている。これにより、Ｃｏｎｓｉｓｔｅｎｃｙ／Ｃｏｒｒｅｃｔｎｅｓｓが保たれる。
【０１０９】
また、Ａｔｏｍｉｃｉｔｙ（原子性）とは、同一のトランザクションに属する更新処理が全て実行されるか、または全く実行されないかのいずれかであることを保証する性質の事である。本実施形態では、トランザクションを確定（コミット）する場合、更新処理の要求に応じて生成した要素の各々について、状態が「追加中」の要素の状態を「有効」に変更し、状態が「削除中」の要素の状態を「無効」に変更する。また、トランザクションをキャンセル（ロールバック）する場合は、状態が「追加中」の要素を削除し、状態が「削除中」の要素の状態を「有効」に変更する。これにより、Ａｔｏｍｉｃｉｔｙが保たれる。
【０１１０】
また、Ｉｓｏｌａｔｉｏｎ（独立性）とは、トランザクション内で行われる更新処理が他のトランザクションから隠蔽される性質のことで、分離性や隔離性などとも呼ばれる。リレーショナルデータベースの問合せ言語の標準的な規格であるＳＱＬでは、いくつかの独立性のレベルが規定されている。その中のよく使われるものとして、ＲＥＡＤ  ＣＯＭＭＩＴＴＥＤやＲＥＰＥＡＴＡＢＬＥ  ＲＥＡＤという分離レベルがある。本実施形態においても、生成した要素を含む複数の要素の各々を、１つのレコードのように扱うことで、このような分離レベルを実現することが可能である。
【０１１１】
具体的には、ＲＥＡＤ  ＣＯＭＭＩＴＴＥＤ分離レベルは、他のトランザクションによる更新中の状態を参照せず、完了した状態だけを読み取るという分離レベルである。通常のデータベースの処理でＲＥＡＤ  ＣＯＭＭＩＴＴＥＤ分離レベルを実現するためには、例えば更新中のレコードに、更新中であることを示すフラグなどの印と、どのトランザクションが更新しているかを識別するＩＤなどの情報とを付与する方法がある。本実施形態においても、各要素に更新中か否かを表す印（「追加中」または「削除中」の状態）と、トランザクションの識別子（トランザクションＩＤ）を付与する。これにより、更新中（加算中または減算中）の要素を判別できるため、更新中の要素を参照しないようにすることができる。
【０１１２】
また、トランザクションが開始される前までにコミットされたデータのみを参照するＲＥＰＥＡＴＡＢＬＥ  ＲＥＡＤ分離レベルや、ＳＱＬでは規定されていないがよく使われるＳｎａｐｓｈｏｔ  Ｉｓｏｌａｔｉｏｎという分離レベルが存在する。これらの分離レベルを実現する場合は、例えば各レコードに、トランザクションからの可視性（そのレコードを見るべきかどうか）を判別するための情報を付与して、トランザクションの分離を実現する方法が用いられている。可視性を判別する情報とは、例えば、そのレコードを追加または削除した時刻と追加または削除したトランザクションの識別子等である。
【０１１３】
本実施形態においても、トランザクション確定処理において、各要素の状態を「追加中」から「有効」に変更する際の確定時刻、及び「削除中」から「無効」に変更する際の確定時刻を要素毎に記憶しておき、可視性判別のための情報として用いることができる。これにより、ＲＥＰＥＡＴＡＢＬＥ  ＲＥＡＤ分離レベル等のトランザクションの分離レベルを実現できる。
【０１１４】
また、Ｄｕｒａｂｉｌｉｔｙ（永続性）とは、トランザクションを完了した場合、そのトランザクションによる更新処理の結果が永続的になって失われない性質のことである。本実施形態においても、各要素を通常のデータベースにおけるレコードのように扱って永続化することで、Ｄｕｒａｂｉｌｉｔｙを実現することができる。
【０１１５】
＜第２実施形態＞
次に、第２実施形態について説明する。
【０１１６】
第１実施形態に係る更新処理装置１０は、加算処理または減算処理に応じて新たな要素を生成する。この場合、トランザクションの確定処理やキャンセル処理により、生成した要素の状態が「有効」または「無効」となって、要素の数が増える。この場合、同一レコードに対するトランザクションの同時実行数が少ない場合でも、多くの要素が存在する場合があり、リソース使用量に無駄が生じる場合がある。
【０１１７】
そこで、第２実施形態では、同一レコードの複数の要素の中で、１つにまとめても問題ない要素同士をマージするマージ処理を行う。
【０１１８】
図５に、第２実施形態に係る更新処理装置２１０の機能ブロック図を示す。なお、第１実施形態に係る更新処理装置１０と同様の部分については、同一符号を付して、詳細な説明を省略する。更新処理装置２１０は、要求受付部１１と、要求解析部１２と、更新処理部２１３と、トランザクション制御部１４と、参照処理部１５と、応答返送部１６とを備える。
【０１１９】
更新処理部２１３は、第１実施形態における更新処理部１３の処理に加え、１つのレコードの数値項目に対する複数の要素のマージ処理を行う。
【０１２０】
ここで、マージ処理の際、どの要素をマージ処理の対象とするかを、トランザクションの制御、及びＡＣＩＤの実現に影響がないように決定する。例えば、更新中（加算処理における「追加中」の状態、及び減算処理における「削除中」の状態）の要素と、更新中ではない要素（「有効」または「無効」の状態）とをマージしてしまうと、更新中の状態の要素を生成した更新処理が属するトランザクションの原子性や独立性を実現することができない。また、ある実行中のトランザクションが開始する前に生成された要素と、開始してから生成された要素とをマージしてしまうと、トランザクションの独立性のレベルの１つであるＲＥＰＥＡＴＡＢＬＥ  ＲＥＡＤ分離レベルを実現できない。
【０１２１】
そこで、上記のようなトランザクションの性質を保つようにマージするために、更新処理部２１３は、要素同士のマージの際、以下の要件を判定する。まず、その要素が更新中か否かを判定する。更新中の要素と更新中ではない要素とはマージすることはできない。また、更新処理部２１３は、更新中の要素については、各要素の状態、及び各要素を生成した更新処理が属するトランザクションが同一か否かを判定する。状態及びトランザクションが同一の場合にマージが可能である。さらに、更新処理部２１３は、更新中でない要素については、各要素の可視性が同一か否かを判定する。
【０１２２】
更新処理部２１３は、所定のタイミングで上記の判定を行い、マージしてもよいと判定した要素同士をマージする。
【０１２３】
ここで、マージ処理を行うタイミングについて説明する。マージ処理では、マージ可能か否かの上記判定を行うために、同一レコードに対する各要素の状態を確認する処理が必要である。またマージ処理を実施した場合には、マージ処理の対象となる要素の更新処理が必要である。マージ処理のためのこれらの追加の処理コストを減らすために、他の処理を行う延長でマージ処理が可能か否かの判定及びマージ処理自体を行うことが効率的である。
【０１２４】
効率良くマージ処理を行うタイミングとして、減算処理時が挙げられる。減算処理の場合、減算する値に達するまで要素を選択する処理があり、このタイミングで、選択されなかった要素に対してマージ可能か否かの判定及びマージ処理を行うことで、マージ処理のための追加の処理コストを減らすことができる。
【０１２５】
また、別のタイミングとして、参照処理時が挙げられる。参照処理では、複数の要素の各々が有する値の合計を計算するために、複数の要素の各々にアクセスする。そこで、各要素にアクセスしたタイミングで、マージ可能か否かの判定及びマージ処理も行うことで、マージ処理のための追加の処理コストを減らすことができる。
【０１２６】
さらに別のタイミングとして、データベース管理システムの機能として更新処理装置２１０が定期的に行う、データの参照を伴う処理時が挙げられる。データベース管理システムでは、不要な領域の回収、統計情報の計算等のために定期的にデータを参照する処理を行う場合がある。この処理のタイミングで、マージ可能か否かの判定及びマージ処理も行うことで、マージ処理のための追加の処理コストを減らすことができる。
【０１２７】
また、過去の更新処理の実績に基づいて、複数の要素を持つレコードに対する更新処理が今後も続くと判定される場合には、マージ処理の実行を一旦保留してもよい。この場合、マージ処理のための追加処理のコスト、及び更新処理に伴う新たな要素の生成のためのコストを削減することができる。そして、更新処理の負荷が下がったタイミングでマージ処理を実行してもよい。
【０１２８】
更新処理部２１３は、マージ処理が可能な複数の要素が存在すると判定した場合には、図２０に示すように、複数の要素で共通の管理情報及び可視情報（詳細は後述）を有し、各要素が有する値の合計を値として有する新たな要素を生成する。そして、更新処理部２１３は、マージ処理の対象となった元の要素を削除する。
【０１２９】
更新処理装置２１０は、第１実施形態と同様に、例えば図１１に示すコンピュータ４０で実現することができる。記録媒体としての記憶部４６には、コンピュータ４０を更新処理装置２１０として機能させるためのデータベース管理プログラム２５０が記憶されている。ＣＰＵ４２は、データベース管理プログラム２５０を記憶部４６から読み出してメモリ４４に展開し、データベース管理プログラム２５０が有するプロセスを順次実行する。
【０１３０】
データベース管理プログラム２５０は、要求受付プロセス５１と、要求解析プロセス５２と、更新処理プロセス２５３と、トランザクション制御プロセス５４と、参照処理プロセス５５と、応答返送プロセス５６とを有する。ＣＰＵ４２は、更新処理プロセス２５３を実行することで、図５に示す更新処理部２１３として動作する。他のプロセスについては第１実施形態と同様である。これにより、データベース管理プログラム２５０を実行したコンピュータ４０が、更新処理装置２１０として機能することになる。
【０１３１】
なお、更新処理装置２１０は、例えば半導体集積回路、より詳しくはＡＳＩＣ等で実現することも可能である。
【０１３２】
次に、第２実施形態の作用を説明する。更新処理装置２１０では、第１実施形態と同様、図１２に示すデータベース管理処理が実行される。なお、図１７に示すトランザクション確定処理のステップＳ４３４及びＳ４３５では、各要素の状態を変更した時刻を、要素毎に確定時刻として記憶装置２０に記憶する。この確定時刻は、ＲＥＰＥＡＴＡＢＬＥ  ＲＥＡＤ分離レベルを実現するための可視情報として用いられる。そして、更新処理装置２１０では、上述したような所定のタイミングで、図２１に示すマージ処理を実行する。なお、ここでは、説明を簡単にするため、要素Ａと要素Ｂとのマージ可能性を判定し、マージ可能な場合に要素Ａと要素Ｂとをマージするマージ処理について説明する。
【０１３３】
図２１に示すマージ処理のステップＳ７１０で、同一のレコードの数値項目の要素Ａと要素Ｂとの状態が同一か否かを判定する。両要素の状態が「追加中」、「削除中」、「有効」、または「無効」のいずれかで同一の場合には、処理はステップＳ７２０へ移行し、両要素の状態が異なる場合はマージ不可であるため、マージ処理を終了する。
【０１３４】
ステップＳ７２０では、更新処理部２１３が、両要素の状態が未確定状態、すなわち「追加中」または「削除中」か否かを判定する。両要素の状態が未確定状態の場合には、処理はステップＳ７３０へ移行し、確定状態の場合、すなわち「有効」または「無効」の場合には、処理はステップＳ７７０へ移行する。
【０１３５】
ステップＳ７３０では、更新処理部２１３が、両要素の状態が「追加中」か否かを判定する。「追加中」の場合には、処理はステップＳ７４０へ移行し、更新処理部２１３が、両要素のトランザクションＩＤを参照して、両要素を生成した更新処理が属するトランザクションが同一か否かを判定する。肯定判定の場合には、両要素は、状態及びトランザクション共に同一であるため、更新処理部２１３が、要素Ａと要素Ｂとはマージ可能であると判定し、処理はステップＳ７５０へ移行する。一方、上記ステップＳ７４０で、トランザクションが異なると判定された場合には、両要素はマージ不可であるため、マージ処理を終了する。
【０１３６】
また、上記ステップＳ７３０で否定判定された場合、すなわち両要素の状態が「削除中」の場合には、処理はステップＳ７６０へ移行し、更新処理部２１３が、上記ステップＳ７４０と同様に、両要素のトランザクションが同一か否かを判定する。トランザクションが同一の場合には、処理はステップＳ７９０へ移行し、トランザクションが異なる場合には、両要素はマージ不可であるため、マージ処理を終了する。
【０１３７】
また、上記ステップＳ７２０で、両要素の状態が確定状態であると判定されてステップＳ７７０へ移行すると、更新処理部２１３が、両要素の状態が「有効」か否かを判定する。「有効」の場合には、処理はステップＳ７９０へ移行し、「無効」の場合には、処理はステップＳ７８０へ移行する。
【０１３８】
ステップＳ７８０及びＳ７９０では、両要素の可視性が同一か否かを判定する。ここで、可視性が同一とは、両方の要素共見える、または両方の要素共見えないトランザクションしか存在しないことをいう。例えば、トランザクションの分離レベルが、ＲＥＡＤ  ＣＯＭＭＩＴＴＥＤの場合、「「見える」とは、その要素が、トランザクションによる更新処理の対象となることが可能である、すなわち、その要素の状態が「有効」であることを表す。また、「見えない」とは、その要素が、トランザクションによる更新処理の対象となることが不可である、すなわち、その要素の状態が更新中、または「無効」であることを表す。
【０１３９】
トランザクションの分離レベルとして、ＲＥＰＥＡＴＡＢＬＥ  ＲＥＡＤ分離レベルを実現することを前提とすると、トランザクションは、トランザクション開始以前に確定した状態のみを参照する。従って、図２２に示すように、要素Ａの状態が「追加中」から「有効」に変更された確定時刻から、要素Ｂの状態が「追加中」から「有効」に変更された確定時刻までの期間Ｐに開始したトランザクションは、要素Ａは見えるが、要素Ｂは見えないことになる。また、要素Ａの状態が「削除中」から「無効」に変更された確定時刻から、要素Ｂの状態が「削除中」から「無効」に変更された確定時刻までの期間Ｑに開始したトランザクションは、要素Ａは見えないが、要素Ｂは見えることになる。
【０１４０】
従って、期間ＰまたはＱに開始したトランザクションが存在する場合には、要素Ａと要素Ｂとの可視性は同一にはならない。ただし、期間ＰまたはＱに開始したトランザクションが既に確定している場合には、そのトランザクションが現時点でいずれかの要素を見るまたは見ないという状況にはならないため、期間ＰまたはＱに開始したトランザクションから除外してよい。
【０１４１】
図２１のマージ処理の説明に戻って、ステップＳ７８０で、更新処理部２１３が、両要素の状態が「無効」に変更された確定時刻間（図２１の期間Ｑ）に開始した未確定のトランザクションが存在するか否かを判定する。存在する場合には、両要素の可視性は同一ではなく、両要素はマージ不可であるため、マージ処理を終了する。該当のトランザクションが存在しない場合には、処理はステップＳ７９０へ移行する。
【０１４２】
ステップＳ７９０では、更新処理部２１３が、両要素の状態が「有効」に変更された確定時刻間（図２１の期間Ｐ）に開始した未確定のトランザクションが存在するか否かを判定する。存在する場合には、両要素の可視性は同一ではなく、両要素はマージ不可であるため、マージ処理を終了する。該当のトランザクションが存在しない場合には、更新処理部２１３が、両要素の可視性は同一であると判定し、処理はステップＳ７５０へ移行する。
【０１４３】
ステップＳ７５０では、更新処理部２１３が、要素Ａと要素Ｂとで共通する管理情報（トランザクションＩＤ及び状態）及び可視情報（確定時刻）を有し、要素Ａ及び要素Ｂの各々が有する値の合計を値として有する新たな要素を生成する。そして、更新処理部２１３は、要素Ａ及び要素Ｂを削除して、マージ処理を終了する。
【０１４４】
なお、上記のマージ処理では、２つの要素をマージする場合で説明したが、３つ以上の要素をマージする場合でも同様に行うことができる。
【０１４５】
以上説明したように、第２実施形態に係る更新処理装置２１０によれば、状態及びトランザクションが同一の要素同士、また、可視性が同一の要素同士をマージするため、要素数の増加を抑制し、リソース使用量を抑制することができる。
【０１４６】
なお、第２実施形態では、トランザクションの分離レベルをＲＥＰＥＡＴＡＢＬＥ  ＲＥＡＤ分離レベルとしたため、トランザクション確定処理における各要素の確定時刻も可視情報として用いたが、分離レベルはこれに限定されない。分離レベルが厳しくない場合には、状態及びトランザクションが同一か否かで、マージするか否かを判定してもよい。
【０１４７】
例えば、図２３に示すように、元の要素に対して減算処理を行い、そのトランザクションをキャンセル（ロールバック）した場合、減算処理により生成した要素（要素１）と元の要素とは、状態及びトランザクションが同一であるためマージ可能であると判定し、元の要素と要素１とをマージすることができる。これにより、減算処理に応じて生成された要素１が、ロールバック後も残ることなく、要素数の増加を抑制することができる。
【０１４８】
なお、第２実施形態では、要素同士をマージすることにより、要素数の増加を抑制する場合について説明したが、マージ以外の方法で要素数の増加を抑制することもできる。
【０１４９】
例えば、同一レコードに対して、同一のトランザクションに属する更新処理により、複数回の加算処理が実行される場合を考える。例えば、図２４に示すように、同一のトランザクション（追加ＸＩＤ＝Ｔｘ１０１）で、５個の加算処理と４個の加算処理があった場合、各々の加算処理で、新たに要素１及び要素２が生成される。要素１と要素２とは、状態及びトランザクションが同一であるため、マージされる。ここで、５個の加算処理により生成された要素１が存在する状態で、４個の加算処理を行う場合、新たな要素を生成するのではなく、要素１の値「５」を、「５」に「４」を加算した値に更新することにより、２つ目の加算処理を行ってもよい。
【０１５０】
また、例えば、同一レコードに対して、同一のトランザクションに属する更新処理により、複数回の減算処理が実行される場合を考える。例えば、図２５に示すように、同一のトランザクション（削除ＸＩＤ＝Ｔｘ１０２）で、５個の減算処理と４個の減算処理があった場合、各々の減算処理で、新たに要素１及び要素２が生成される。要素１と要素２とは、状態及びトランザクションが同一であるため、マージされる。ここで、５個の減算処理により生成された要素１が存在する状態で、４個の減算処理を行う場合、新たな要素を生成するのではなく、元の要素から減算した値「４」を、要素１に移動すればよい。すなわち、要素１の値「５」を、減算する値の合計（５＋４）に更新することにより、２つ目の減算処理を行ってもよい。
【０１５１】
なお、上記実施形態では、加算処理を行ったトランザクションがロールバックされた場合、加算処理により生成された要素を削除している（図１８のステップＳ４４４）が、一旦、要素の状態を「無効」としてもよい。例えば、図２６に示すように、加算処理により生成された要素１の状態を、ロールバック時に「無効」に変更する。この場合、要素１は、どのトランザクションからも見えない要素となる。そこで、要素１を回収（削除）することにより、要素数の増加を抑制することができる。
【０１５２】
また、上記では開示の技術に係る更新処理プログラムの一例であるデータベース管理プログラム５０及び２５０が記憶部４６に予め記憶（インストール）されている態様を説明したが、これに限定されない。開示の技術に係る更新処理プログラムは、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、ＵＳＢメモリ等の記録媒体に記録された形態で提供することも可能である。
【０１５３】
以上の各実施形態に関し、更に以下の付記を開示する。
【０１５４】
（付記１）
コンピュータに、
データベースに記憶され、第１の数値のデータ項目を含む第１のレコードに対する更新処理の要求であって、前記第１の数値に第２の数値を加算または減算する要求を受け付けた場合に、前記第１のレコードに基づいて、少なくとも前記データ項目の値として前記第２の数値を有する分割レコードを含む複数の分割レコードを生成し、
生成した前記第２の数値を有する分割レコードに対して、前記更新処理を適用する
ことを含む処理を実行させることを特徴とする更新処理プログラム。
【０１５５】
（付記２）
前記更新処理が減算の場合、前記複数の分割レコードは、前記第２の数値を有する分割レコードと、前記データ項目の値として前記第１の数値から前記第２の数値を減算した値を有する分割レコードとを含む、
付記１記載の更新処理プログラム。
【０１５６】
（付記３）
前記コンピュータに、
前記複数の分割レコードを含む前記第１のレコードを参照する要求を受け付けた場合に、前記複数の分割レコードの各々が有する数値を合計した値を参照させる
ことを含む処理を実行させるための付記１または付記２記載の更新処理プログラム。
【０１５７】
（付記４）
前記複数の分割レコードを含む第１のレコードに対する更新処理として減算の要求を受け付けた場合に、値の合計が前記第２の数値以上となるように選択した分割レコードを前記第２の数値を有する分割レコードとする付記１〜付記３のいずれか１項記載の更新処理プログラム。
【０１５８】
（付記５）
同一の要求に基づいて生成され、かつ前記更新処理の適用状態が同一の複数の分割レコードの各々が有する値を合計することにより、前記複数の分割レコードをマージする付記１〜付記４のいずれか１項記載の更新処理プログラム。
【０１５９】
（付記６）
データベースに記憶され、第１の数値のデータ項目を含む第１のレコードに対する更新処理の要求であって、前記第１の数値に第２の数値を加算または減算する要求を受け付けた場合に、前記第１のレコードに基づいて、少なくとも前記データ項目の値として前記第２の数値を有する分割レコードを含む複数の分割レコードを生成し、生成した前記第２の数値を有する分割レコードに対して、前記更新処理を適用する更新処理部
を含む更新処理装置。
【０１６０】
（付記７）
前記更新処理が減算の場合、前記複数の分割レコードは、前記第２の数値を有する分割レコードと、前記データ項目の値として前記第１の数値から前記第２の数値を減算した値を有する分割レコードとを含む、
付記６記載の更新処理装置。
【０１６１】
（付記８）
前記複数の分割レコードを含む前記第１のレコードを参照する要求を受け付けた場合に、前記複数の分割レコードの各々が有する数値を合計した値を参照させる参照処理部をさらに含む付記６または付記７記載の更新処理装置。
【０１６２】
（付記９）
前記更新処理部は、前記複数の分割レコードを含む第１のレコードに対する更新処理として減算の要求を受け付けた場合に、値の合計が前記第２の数値以上となるように選択した分割レコードを前記第２の数値を有する分割レコードとする付記６〜付記８のいずれか１項記載の更新処理装置。
【０１６３】
（付記１０）
前記更新処理部は、同一の要求に基づいて生成され、かつ前記更新処理の適用状態が同一の複数の分割レコードの各々が有する値を合計することにより、前記複数の分割レコードをマージする付記６〜付記９のいずれか１項記載の更新処理装置。
【０１６４】
（付記１１）
コンピュータに、
データベースに記憶され、第１の数値のデータ項目を含む第１のレコードに対する更新処理の要求であって、前記第１の数値に第２の数値を加算または減算する要求を受け付けた場合に、前記第１のレコードに基づいて、少なくとも前記データ項目の値として前記第２の数値を有する分割レコードを含む複数の分割レコードを生成し、
生成した前記第２の数値を有する分割レコードに対して、前記更新処理を適用する
ことを含む処理を実行させる更新処理方法。
【０１６５】
（付記１２）
前記更新処理が減算の場合、前記複数の分割レコードは、前記第２の数値を有する分割レコードと、前記データ項目の値として前記第１の数値から前記第２の数値を減算した値を有する分割レコードとを含む、
付記１１記載の更新処理方法。
【０１６６】
（付記１３）
前記コンピュータに、
前記複数の分割レコードを含む前記第１のレコードを参照する要求を受け付けた場合に、前記複数の分割レコードの各々が有する数値を合計した値を参照させる
ことを含む処理を実行させる付記１１または付記１２記載の更新処理方法。
【０１６７】
（付記１４）
前記複数の分割レコードを含む第１のレコードに対する更新処理として減算の要求を受け付けた場合に、値の合計が前記第２の数値以上となるように選択した分割レコードを前記第２の数値を有する分割レコードとする付記１１〜付記１３のいずれか１項記載の更新処理方法。
【０１６８】
（付記１５）
同一の要求に基づいて生成され、かつ前記更新処理の適用状態が同一の複数の分割レコードの各々が有する値を合計することにより、前記複数の分割レコードをマージする付記１１〜付記１４のいずれか１項記載の更新処理方法。
【０１６９】
（付記１６）
コンピュータに、
データベースに記憶され、かつ要素が有する値により第１の数値が表される数値の項目を含むレコードに対する更新処理の要求であって、前記第１の数値に第２の数値を加算または減算する要求を受け付けた場合に、前記第１の数値を有する第１の要素に基づいて、前記第２の数値を有する第２の要素を生成し、
生成した前記第２の要素に対して、前記更新処理を適用する
ことを含む処理を実行させるための更新処理プログラム。
【符号の説明】
【０１７０】
１０、２１０  更新処理装置
１１   要求受付部
１２   要求解析部
１３、２１３  更新処理部
１４   トランザクション制御部
１５   参照処理部
１６   応答返送部
２０   記憶装置
２１   データベース
２２   データ定義情報
２３   管理情報
４０   コンピュータ
４２   ＣＰＵ
４４   メモリ
４６   記憶部
５０、２５０  データベース管理プログラム
【図１】
0006402537.tif 000004
【図２】
0006402537.tif 000005
【図３】
0006402537.tif 000006
【図４】
0006402537.tif 000007
【図５】
0006402537.tif 000008
【図６】
0006402537.tif 000009
【図７】
0006402537.tif 000010
【図８】
0006402537.tif 000011
【図９】
0006402537.tif 000012
【図１０】
0006402537.tif 000013
【図１１】
0006402537.tif 000014
【図１２】
0006402537.tif 000015
【図１３】
0006402537.tif 000016
【図１４】
0006402537.tif 000017
【図１５】
0006402537.tif 000018
【図１６】
0006402537.tif 000019
【図１７】
0006402537.tif 000020
【図１８】
0006402537.tif 000021
【図１９】
0006402537.tif 000022
【図２０】
0006402537.tif 000023
【図２１】
0006402537.tif 000024
【図２２】
0006402537.tif 000025
【図２３】
0006402537.tif 000026
【図２４】
0006402537.tif 000027
【図２５】
0006402537.tif 000028
【図２６】
0006402537.tif 000029