JP4306023B2 - トランザクション処理向けストレージ方法および装置、トランザクショナルストレージ - Google Patents
トランザクション処理向けストレージ方法および装置、トランザクショナルストレージ Download PDFInfo
- Publication number
- JP4306023B2 JP4306023B2 JP15900899A JP15900899A JP4306023B2 JP 4306023 B2 JP4306023 B2 JP 4306023B2 JP 15900899 A JP15900899 A JP 15900899A JP 15900899 A JP15900899 A JP 15900899A JP 4306023 B2 JP4306023 B2 JP 4306023B2
- Authority
- JP
- Japan
- Prior art keywords
- record
- transaction
- block
- index
- storage
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Description
【発明の属する技術分野】
本発明はコンピュータシステムに関し、特に応用プログラムに適した新たな機能を追加・拡張可能な二次記憶装置及び方法に関する。
【0002】
【従来の技術】
今日のコンピュータシステムの主要な構成要素は、コンピュータ(プロセッサとメモリ、周辺機器からなる)とネットワークと二次記憶装置(ストレージ)である。これまでストレージは、コンピュータに付属する装置として存在することが多かった。しかし近年、このような状況が変化しつつある。
【0003】
第1に、ネットワークの普及により、複数のコンピュータがストレージを共有する機会が増えた。他のコンピュータからのネットワーク経由のストレージ入出力が、ストレージを接続したコンピュータのプロセッサ処理能力がボトルネックとなって滞る事態を招いている。第2に、ストレージ容量およびストレージに対する要求スループットは、年々増大している。「データウェアハウス用途のストレージ容量の要求は、9ヶ月で2倍になる」という予測(Greg’s Law)もある。このため、1つのコンピュータに接続するストレージ数が増大し、やはりコンピュータがストレージ入出力のボトルネックとなる恐れが出てきている。第3に、ハードディスク制御用LSIの高集積化の進行によって、ストレージの高機能化の可能性の増大している。
【0004】
これらの背景から、ストレージの制御用LSIに新たな機能を付加することが考えられている。新たな機能の候補は、ネットワークインタフェースと、応用プログラム向けの高度機能である。
【0005】
ネットワークインタフェースをストレージが備えることにより、ストレージをネットワークに直結することができる。これによりストレージは、複数のコンピュータからの入出力要求を、1つのコンピュータを介することなく、直接受けることができる。
【0006】
また、現在、ストレージとコンピュータとの間の最も代表的なインタフェースはブロック入出力であるが、これよりも応用毎の高度機能(例えばソーティング、画像処理、データベースシステムの基本演算、例えば選択処理、写像処理、結合処理、集計処理等)をストレージが備えることにより、コンピュータのプロセッサ処理の一部をストレージが受け持つことが可能となる。
【0007】
一方、ストレージの利用分野の中で、トランザクション処理(データベースのトランザクション処理やオンライントランザクション処理システムのトランザクション処理)は特に高い性能が要請される分野である。データベース処理でもトランザクション処理でも、一連の処理はトランザクションという単位で実行される。トランザクションは、トランザクション開始からトランザクション終了までの間に、データベースに対して1つ以上の参照や更新を行う。トランザクションの終了には2種類の方法があり、1つはコミット(正常終了)、もう1つはアボート(異常終了)である。コミットの場合、トランザクション中に行われた参照や更新が実際に行われたことになる。アボートの場合、トランザクション中に行われた参照や更新はすべて取り消される。
【0008】
トランザクションは一般に、ACID性(Atomicity、Consistency、Isolation、Durability)の4つの性質を実現している。これらの性質により、あるトランザクションは並行して実行中の別のトランザクションの変更を見ることはないし、あるトランザクションがコミットした場合には、該トランザクションが行った変更はすべてデータベース中、特にステーブルストレージ(電源断や、ソフトウェア、ハードウェアの故障等、一定範囲の障害に耐えうる記憶装置)に保存される。
【0009】
トランザクションを高性能化することは、企業の情報システムの構築にとって非常に重要である。なぜなら、トランザクションはコンピュータが関係する企業活動の、ほとんどすべての場面で用いられているためである。例えば、銀行のATMを用いた入金、出金はそれぞれ1つのトランザクションであるし、スーパーマーケットで商品を購入する際、レジスターでは商品の計算をすると同時にPOSシステムにどの商品が何個売れたかをトランザクションで記録している。企業活動のほとんどが、トランザクションによって記録、管理されていると言っても過言ではない。
【0010】
トランザクションが処理の対象とするのは、データベースシステムの1かたまりのデータである。例えばリレーショナルデータベースでは、1つ1つの型のデータ(整数型、文字列型、固定長小数点型等)はカラムと呼ばれ、カラムが1つ以上集まってできる1つの論理的なデータの単位をレコードと呼ぶ。1つ以上のレコードは1つの表に格納される。例えば従業員のデータベースであれば、従業員全員のデータを1つの表「従業員表」に格納し、従業員表の1つのレコードが1人の従業員に対応し、「氏名」、「従業員番号」、「生年月日」、「住所」、「性別」、「役職」等のカラムが該レコードに含まれる、といった様に、データベースが構成される。1つのトランザクションは例えば、「従業員番号が1000番のレコードの役職が「係長」であれば「課長」に変更せよ」といった一連のデータベース処理を実現できる。
【0011】
【発明が解決しようとする課題】
トランザクションは高度なソフトウェア処理であるため、コンピュータのプロセッサに高い負荷を生じる。また、データベースを参照、更新する処理であるため、ストレージに対する負荷も高い。
【0012】
現在多くのコンピュータシステムは、ブロック(例えば2KBや4KB等の固定長のデータ)を単位としてコンピュータとストレージの間の入出力を行っている。ブロックは多くの場合多数のレコードを含む。いま、コンピュータがあるトランザクションを実行し、あるレコードに対する参照が行われたとする。この際、コンピュータはストレージから、該レコードを格納したブロックの読み出しを行い、該参照を完了する。ここで、該レコードがブロックのサイズの1/10だったと仮定すると、コンピュータからストレージに転送したデータのうち、1/10のみが活用され、残りの9/10は読み出しを行ったにもかかわらずまったく使われない無駄なデータだったことになる。このことは、大規模なデータベースシステムで参照局所性の低いトランザクション群を実行している場合に顕著になる。書き込みの場合も、同様である。コンピュータ、ストレージとも、データの読み出しおよび書き込みには処理装置と入出力信号線を使用するため、無駄なデータの読み出し、書き込みは極力削減されるべきである。
【0013】
すなわち、ブロック入出力による無駄なデータの入出力を削減することが本発明が解決すべき第1の課題である。
【0014】
また、従来のストレージでは読み出しと書き込みのインタフェースを提供しているが更新(読み出しと書き込みを同時に行う)のインタフェースはまれである。トランザクションでは更新が非常に多いが、従来は更新対象のブロックをストレージから読み出して、プロセッサが書きかえて、ストレージに書き込むという2回の入出力操作で実現していた。この入出力は、理想的には「更新」という1回の入出力で実現できる。特に、レコード単位の更新の機能をストレージが提供すれば、トランザクションが行う入出力のデータ量は、従来に比べ大幅に削減できる。
【0015】
すなわち、更新に伴う無駄な入出力を削減することが本発明が解決すべき第2の課題である。
【0016】
またデータベースシステムでは、レコードの指定には、何通りもの方法が提供されている。あるテーブルのあるレコードを指定するために、例えば、テーブル自身をスキャン(補助データ構造を使わない方法)、インデックスを経由してレコードに到達する方法、ハッシュインデックスを経由してレコードに到達する方法等である。ストレージが仮にレコード単位の入出力を提供したとしても、レコードの指定方法が1通りだけでは、十分に高速な入出力は見込めない。
【0017】
すなわち、レコードの指定方法として、直接的なレコードの指定のみならず、データベースが利用するテーブルおよびインデックスの探索方法を提供し、効率的なレコードアクセスを実現することが、本発明が解決すべき第3の課題である。
【0018】
また、データベースでは、一般に複数のストレージ装置を用いるので、表やインデックスの定義情報(ディクショナリ情報)はすべてのストレージ装置に存在するとは限らない。レコード単位の入出力やインデックスの利用には、ディクショナリ情報が必要であるが、従来はこのような高度な情報をやりとりする方法は、ストレージには存在しなかった。
【0019】
すなわち、任意のストレージでディクショナリ情報を利用可能にすることが、本発明が解決すべき第4の課題である。
【0020】
また上記のように、トランザクションの実行中に行われる更新は、アボートによって取り消される可能性がある。このため、従来はあるトランザクション中で起こった更新をディスク中のデータベース(以後ディスク中のデータベースのことをステーブルデータベースと呼ぶ)に書き込んでおり、該トランザクションがアボートした場合、データベースシステムは、別に作成しておいたログ(トランザクションの活動記録)を元にステーブルデータベースに対して該トランザクションが行った変更を元に戻す一連の入出力を行う。これもストレージがブロック単位の入出力(読み出しと書き込み)のインタフェースのみを提供しているためである。このアボートに伴う入出力も、ストレージがトランザクションのコミットやアボートを意識したインタフェースを提供していれば削減できる無駄な入出力である。
【0021】
すなわち、トランザクションの実現(コミットやアボート)による無駄なデータの入出力を削減することが本発明が解決すべき第5の課題である。
【0022】
また同様に、アボートする際の効率をあげるためにはコミット前のデータはできるだけステーブルデータベースに書き込むべきではないことが分かる。従来のストレージはトランザクションの概念を理解していないため、書き込みを指示されたブロックはその時に書き込まれ(物理的にディスクに書き込まれるか、バッテリーバックアップされたキャッシュメモリ領域に格納される)あとから書き込みを取り消す方法は提供されていなかった。
【0023】
すなわち、トランザクションがストレージに書き込んだデータを取り消す方法を提供しトランザクションがアボートした際の無駄な入出力を削減することが、本発明の解決すべき第6の課題である。
【0024】
1つのストレージはアベイラビリティ向上の目的で、複数のコンピュータから共有されることがある。また、1つのコンピュータ上のデータベースシステムにおいても、ブロック単位入出力とレコード単位入出力を併用する場合が多いと考えられる。この際、レコード単位で操作しているレコードをブロック単位で別の経路からアクセスすると、データの不整合が起こりうる。複数のコンピュータが同一のデータにアクセスしようとする場合もまったく同様である。
【0025】
すなわち、レコード単位入出力とブロック単位入出力の整合性を持たせ、同一のデータをレコード単位でもブロック単位でも処理でき、複数のコンピュータからも共有できるようにすることが、本発明の解決すべき第7の課題である。
【0026】
【課題を解決するための手段】
本発明では、トランザクションを意識した機能およびインタフェースを持つストレージ「トランザクショナルストレージ」とそれを用いたコンピュータシステムによって、上記の課題を解決する。
【0027】
ブロック入出力による無駄なデータの入出力を削減する第1の課題を解決するため、トランザクショナルストレージはレコード単位の入出力機能およびインタフェースを備える。
【0028】
更新に伴う無駄な入出力を削減する第2の課題を解決するため、トランザクショナルストレージはレコードを更新する機能およびインタフェースを備える。更新時に、必要に応じて更新前データを返す。更新前データは、トランザクションの活動記録であるログを作成する際等に利用できる。
【0029】
レコードの指定方法として、直接的なレコードの指定のみならず、データベースが利用するテーブルおよびインデックスの探索方法を実現し、効率的なレコードアクセスを実現する第3の課題を解決するため、トランザクショナルストレージは(a)ブロック番号とレコード番号によるレコード指定インタフェース、(b)テーブルと条件によるレコード指定インタフェース、(c)インデックスと条件によるレコード指定インタフェース、(d)インデックス中間ノードと条件によるレコード指定インタフェース、の4種類のレコード指定インタフェースを備える。
【0030】
任意のストレージでディクショナリ情報を利用可能にする第4の課題を解決するため、トランザクショナルストレージはコンピュータからディクショナリ情報を入力するインタフェースを備える。
【0031】
トランザクションの実現(コミットやアボート)による無駄なデータの入出力を削減する第5の課題を解決するため、トランザクショナルストレージは、コミットのインタフェースとアボートのインタフェースを備える。
【0032】
トランザクションがストレージに書き込んだデータを取り消す方法を提供しトランザクションがアボートした際の無駄な入出力を削減する第6の課題を解決するため、トランザクショナルストレージは、コミット前キャッシュとコミット後キャッシュを備える。コミット前キャッシュの内容はストレージには書き込まれないため、アボートの処理はディスクの操作を伴わずに実現可能となる。
【0033】
レコード単位入出力とブロック単位入出力の整合性を持たせ、同一のデータをレコード単位でもブロック単位でも処理でき、複数のコンピュータからも共有できるようにすること第7の課題を解決するために、トランザクショナルストレージはレコードおよびブロックのロック(排他制御)インタフェースを備える。
【0034】
以上により、トランザクション処理に伴ってコンピュータのプロセッサおよびストレージに生じる高い負荷を削減し、大規模なデータベースシステムおよびトランザクション処理システムの実現が可能となる。
【0035】
【発明の実施の形態】
本発明の実施の一形態を,図面を参照しながら説明する。なお簡単のため、以下に述べる発明の実施の形態を単に「実施例」と呼ぶ。
【0036】
全体構成
図1を用いて、本実施例の全体構成を説明する。
【0037】
図1の全体101は、本実施例が好適に用いられるコンピュータシステムであり、入出力信号線103と、入出力信号線103によって相互接続された1つ以上のコンピュータ102、102’、…および1つ以上のトランザクショナルストレージ(TS)104からなる。
【0038】
入出力信号線103は、コンピュータとストレージを専用につなぐケーブル(SCSIケーブル等)でも構わないし、ネットワークでも差し支えない。ネットワークは、ある団体(企業や学校や類似の団体)の全体や位置部門でよく使用されるLANでもよく、また地理的に分散した複数の地点を結合するWANの一部または全部でもよい。また入出力信号線103は、計算機間結合網や並列計算機内部のプロセッサ要素間の結合網でもよい。
【0039】
コンピュータ102、102’、…は、いわゆるパーソナル・コンピュータ、ワークステーション、並列計算機、大型計算機、小型携帯型コンピュータ等、任意のコンピュータでよい。
【0040】
なお、図1に示したコンピュータ102、102’、…、入出力信号線103、TS104の数と構成は、例として示したもので、本発明の範囲を限定するものではない。
【0041】
TS104は、拡張型の二次記憶装置(ストレージ)である。TS104は1つ以上のディスク111とトランザクショナルストレージコントローラ(TSC)105とからなる。
【0042】
ディスク111は電源断後もデータを保持することが可能な記憶媒体(二次記憶)である。ディスク111のデータ格納単位には、セクタ、トラック等さまざまな呼称があるが、本実施例では一括してブロックと記す。ディスク111は複数のブロックからなり、ブロック単位の入出力を行うことができる。二次記憶がハードディスクであれば、多くの場合ブロックは固定長で512バイトないし4Kバイトである。メインフレーム計算機用のハードディスクであれば、ブロックは固定長の場合と可変長の場合がある。また、テープドライブ等の二次記憶もブロックはその装置毎に決まっている。なお、ブロック単位でなくバイト単位の入出力インタフェースを提供する二次記憶もあるが、ブロックを1バイトと考えることによって本発明を適用することができる。
【0043】
TSC105はTS104の制御を行う部分である。TSC105はさらにネットワーク制御部106、トランザクション処理部107、コミット後キャッシュ108、コミット前キャッシュ109、ディスク制御部110からなる。
【0044】
ネットワーク制御部106は、コンピュータ102、102’、…をはじめとする外部から入出力信号線103経由で送られてくる入出力要求やその他の通信を受け、また入出力要求への応答やその他の通信を入出力信号線103へ送り出す。トランザクション処理部107は、TS104が提供する各種機能を実現する部分である。各種機能の詳細については、後で詳しく述べる。コミット後キャッシュ108は、コミットしたトランザクションが行った更新を保持する記憶領域である。コミット前キャッシュ109は、まだコミットしていないトランザクションが行った更新を保持する記憶領域である。ディスク制御部110は、ディスク111にブロックの読み出し・書き込みを行わせる制御を行う。ネットワーク制御部106、ディスク制御部110については、従来技術としてよく知られているため、ここではこれ以上詳しく説明しない。
【0045】
入出力処理部112は、コンピュータ102、102’、…に存在し、TS104を利用する。典型的には入出力処理部112はデータベース管理システムのソフトウェアの一部である。
【0046】
トランザクショナルストレージインタフェース113は、TS104とコンピュータ102、102’、…をはじめとする外部とのインタフェースである。トランザクションの処理を行うため、レコード操作、カラム操作、トランザクション操作等を含む。
【0047】
以上が本実施例の全体構成である。
【0048】
トランザクショナルストレージのデータ構造
図2を用いて、トランザクショナルストレージの内部データ構造であるロックテーブル、トランザクションテーブル、DBテーブルテーブル、インデックステーブルの構成についてを説明する。
【0049】
ロックテーブル200はブロックまたはレコードと、ロックとの対応表である。ロックテーブル200の1つの行が1つのロックに対応する。ブロックID201はストレージ上のブロックの一意な番号である。レコードID202はブロック中のレコードの一意な番号である。ブロックIDとレコードIDの対によって、レコードを一意に特定することができる。レコードID202に指定が無い場合は、ブロックを指定したロックであることを意味する。ロック情報203はロックの情報である。典型的には、トランザクションIDとロックモードを格納する。
【0050】
トランザクションテーブル210は、活動中のトランザクションの表である。各トランザクションには一意な識別子が割り当てられており、それがトランザクションID211に格納されている。トランザクションがアクセス中のブロックまたはレコードがブロックID212とレコードID213で保持される。ブロックID212とレコードID213は対で1つのレコードを特定する。
【0051】
DBテーブルテーブル220は、データベースの表を管理する。それぞれの行が1つの表に対応する。各表は一意な名前であるテーブルIDが与えられており、それがテーブルID221に格納されている。先頭ブロックID222は表が格納されている先頭のブロック番号である。先頭ブロックIDで指定される1つ以上のブロックにテーブルID221で識別される表が格納されていることを意味する。本実施例では、トランザクション処理部107は先頭ブロックからどのように表が格納されているかを知っており、先頭ブロックIDから該表のすべてのブロックを参照できる。
【0052】
インデックステーブル230は、データベースのインデックスを管理する。それぞれの行が1つのインデックスに対応する。各インデックスは一意な名前であるインデックスIDが与えられており、それがインデックスID231に格納されている。先頭ブロックID222はインデックスが格納されている先頭のブロック番号である。先頭ブロックIDで指定される1つ以上のブロックにインデックスID231で識別されるインデックスが格納されていることを意味する。本実施例では、トランザクション処理部107は先頭ブロックからどのようにインデックスが格納されているかを知っており、先頭ブロックIDから該インデックスのすべてのブロックを参照できる。
【0053】
コミットログ240は、現在活動中のトランザクションの活動記録である。それぞれの行が、トランザクションが行った1つの操作に対応する。トランザクションID241は操作を行ったトランザクションのID、ブロックID242とレコードID243は対で操作対象のレコードを指定する。カラムID244は必要に応じてカラム(インデックスの場合は何個目のインデックスエントリか)を指定する。操作245は行った操作であり、更新、削除、挿入が典型的な操作である。前データ246と後データ247はそれぞれ更新前後のデータである。
【0054】
ロックテーブル200、トランザクションテーブル210、DBテーブルテーブル220、インデックステーブル230は、TSC105上のメモリに保持されても、ディスク上に保持されても差し支えない。コミットログ240は、ディスクの特定部分に保持されるか、TSC105のメモリであって、電源バックアップ、二重化等、ステーブルストレージとしての性質を満たしたメモリに保持される。
【0055】
図3を用いて、トランザクショナルストレージの内部データ構造であるテーブルディクショナリ、インデックスディクショナリ、コミット後キャッシュ、コミット前キャッシュの構成について説明する。
【0056】
テーブルディクショナリ300は、データベースの表の定義を格納する。テーブルID301は表の一意な名前、カラムID302は表の中でのカラムの一意な名前、データ型303はカラムのデータ型である。
【0057】
同様に、インデックスディクショナリ310は、データベースのインデックスの定義を格納する。インデックスID311はインデックスの一意な名前、カラムID312は表の中でのカラムの一意な名前、データ型313はカラムのデータ型である。
【0058】
コミット前キャッシュ320は、まだコミットされていないトランザクションによって変更されたデータベースの行である。トランザクションID321はトランザクションID、ブロックID322とレコードID323は対で1つのレコードを指定する。データ324は更新後のデータである。
【0059】
同様にコミット後キャッシュ330は、コミットされたがステーブルデータベースに反映されていないトランザクションによって変更されたデータベースの行である。ブロックID331とレコードID332は対で1つのレコードを指定する。データ333は更新後のデータである。
【0060】
コミット後キャッシュ330はディスクの特定部分に保持されるか、TSC105のメモリであって、電源バックアップ、二重化等、ステーブルストレージとしての性質を満たしたメモリに保持される。
【0061】
トランザクショナルストレージの機能
次に、トランザクショナルストレージの機能と対応するトランザクショナルストレージインタフェース113について説明する。
【0062】
トランザクション制御機能:
トランザクションID BeginTransaction();
bool CommitTransaction(トランザクションID); bool PrepareCommitTransaction(トランザクションID);
void AbortTransaction(トランザクションID);BeginTransaction()、CommitTransaction()、PrepareCommitTransaction()、AbortTransaction()は、トランザクションの制御機能である。コンピュータ102はTS104に対してBeginTransaction()を発行し、新たなトランザクションの開始を宣言する。返り値はトランザクションIDである。CommitTransaction()は、トランザクションを正常終了させるよう試みる。返り値は、トランザクションが正常終了したか否かである。PrepareCommitTransaction()は、複数のTS104が1つのトランザクションをコミットさせようとする際に使う、ツーフェーズコミットの第1フェーズである。PrepareCommitTransaction()でツーフェーズコミットを開始した場合、第2フェーズの開始はCommitTransaction()で行う。AbortTransaction()はトランザクションをアボートさせる。
【0063】
レコードおよびカラム操作機能:
record ReadRecord(トランザクションID、レコード指定・、ロックモード・);
void WriteRecord(トランザクションID、レコード指定、新レコード・、ロックモード・);
record UpdateRecord(トランザクションID、レコード指定、新レコード・、ロックモード・);
void InsertRecord(トランザクションID、レコード指定、新レコード・、ロックモード・);
record DeleteRecord(トランザクションID、レコード指定);
Column ReadColumn(トランザクションID、カラム指定・、ロックモード・);
void WriteColumn(トランザクションID、カラム指定、新カラム・、ロックモード・);
Column UpdateColumn(トランザクションID、カラム指定、新カラム・、ロックモード・);
ReadRecord()、WriteRecord()、UpdateRecord()、InsertRecord()、DeleteRecord()、ReadColumn()、WriteColumn()、UpdateColumn()は、レコード単位入出力およびカラム単位入出力の機能である。
【0064】
ReadRecord()はトランザクションIDと後述するレコード指定とを指定し、1つのレコードを返り値として返す。なお、この機能の拡張として、レコードの選択条件を指定して1つ以上のレコードを返す機能を実現することは容易である。後述する他のインタフェースも同様である。WriteRecord()と UpdateRecord()はトランザクションID、レコード指定、新レコードのデータを指定し、レコードの更新を行う。UpdateRecord()は旧レコードの値を返り値として返す。InsertRecord()は、トランザクションID、レコード指定、新レコードのデータを指定し、レコードの挿入を行う。DeleteRecord()は、トランザクションIDとレコード指定を指定し、レコードの削除を行う。いずれの場合も「ロックモード」は各操作の正常終了時に、レコードをどのようなモードでロックするかを指定する。
【0065】
ReadColumn()、WriteColumn()、UpdateColumn()は、カラム単位の操作であり、ReadRecord()、WriteRecord()、UpdateRecord()にそれぞれ対応する。レコード指定のかわりにカラム指定を用いる。その他の動作は、ReadColumn()、WriteColumn()、UpdateColumn()と同様である。
【0066】
インデックス操作機能:
void InsertIndex(トランザクションID、インデックスID、インデックス指定);
void UpdateIndex(トランザクションID、インデックスID、インデックス指定、値);
void DeleteIndex(トランザクションID、インデックスID、インデックス指定);
InsertIndex()、UpdateIndex()、DeleteIndex()はインデックスを操作する機能である。トランザクションID、インデックスID、および後述するインデックス指定を指定し、インデックスの一部分の挿入、更新、削除をそれぞれ行う。
【0067】
ロックつきブロック単位入出力機能およびロック機能:
Block ReadBlockWithLock(ブロック指定、ロックモード);
void WriteBlockWithLock(ブロック指定、ロックモード、ブロック);
Block LockRecord(レコード指定、ロックモード);
void LockBlock(ブロック指定、ロックモード);
ReadBlockWithLock()と WriteBLockWithLock()は、ロックを伴ってブロック単位入出力を行う機能である。後述するブロック指定によってブロックを指定し、ロックモード(read、write、intention等)でロックを指定する。また、LockRecord()と LockBlock()は、ロックを単独で操作する機能である。上述のReadRecord()、WriteRecord()等で自動的にロックは取得されるが、得にロックの状態を変更したいときにLockRecord()や LockBlock()の機能を用いる。
【0068】
ディクショナリ情報入出力:
void GetTableDictionary(テーブルID、ディクショナリ); void GetIndexDictionary(インデックスID、ディクショナリ);
GetTableDictionary()は、テーブルIDに対応するテーブルのディクショナリ情報(何個目のカラムがどのような型のデータか)をコンピュータから受け取りテーブルディクショナリ300に格納する。同様にGetIndexDictionary()は、テーブルIDに対応するテーブルのディクショナリ情報(何個目のカラムがどのような型のデータか)をコンピュータから受け取り、インデックスディクショナリ310に格納する。
【0069】
次に、レコード、ブロック、カラム、インデックスの指定方法について説明する。
【0070】
レコード指定:
レコード指定には、「ブロックID、レコードID」によるレコード直接指定、「テーブルID、カラムID=値、カラムID=値、…」によるテーブルスキャン指定、「インデックスID、カラムID=値、カラムID=値、…」によるインデックススキャン指定、「インデックスのブロックID、カラムID=値、カラムID=値、…」によるインデックス部分スキャン指定、の4種類がある。ここで、「カラムID=値、カラムID=値、…」の部分はレコード絞り込みのための条件である。本実施例ではカラム毎の等号条件を用いてレコードの絞り込みを行っているが、本発明はこれに限定されるものではなく、不等号条件、NULL条件、カラムとカラムの二項条件等でも差し支えない。以下の記述も同様である。
【0071】
レコード直接指定はブロックIDとレコードIDによって1つのレコードを指定する。テーブルスキャン指定は、テーブルIDでテーブルを指定し、1つ以上の「カラムID=値」によってレコードの絞り込みを行い、1つのレコードを指定する(条件にあう最初のレコードが指定されたものとみなす)。この際、テーブルに含まれるブロックの解釈は、テーブルディクショナリ300に格納されている情報を用いて行う。
【0072】
インデックススキャン指定では、インデックスIDで検索すべきインデックスを指定し、1つ以上の「カラムID=値」によって与えられたキー値によってインデックスを検索する。また、インデックス部分スキャン指定では、インデックスの中間部分(例えばインデックスがBツリーで実現されている場合、ルートノード以外のノードを格納したブロック)をブロックIDで指定し、そこから1つ以上の「カラムID=値」によってインデックスを検索する。インデックスに含まれるブロックの解釈は、インデックスディクショナリ310に格納されている情報を用いて行う。
【0073】
先に述べた通り、レコード直接指定以外の指定法では、複数レコードを指定することが自然にできる。
【0074】
ブロック指定:
ブロック指定には、「ブロックID」によるブロック直接指定、「テーブルID、カラムID=値、カラムID=値、…」によるテーブルスキャン指定、「インデックスID、カラムID=値、カラムID=値、…」によるインデックススキャン指定、「インデックスのブロックID、カラムID=値、カラムID=値、…」によるインデックス部分スキャン指定、の4種類がある。ブロック指定はレコード指定と同じであるが、指定に該当するレコードを含むブロックが指定されたものとみなす。
【0075】
カラム指定:
カラム指定は「レコード指定、カラムID」で行う。レコード指定は、上述のレコード指定のうち任意の1つを用いる。
【0076】
インデックス指定:
「インデックスID、カラムID=値、カラムID=値、…」によるインデックススキャン指定、「インデックスのブロックID、カラムID=値、カラムID=値、…」によるインデックス部分スキャン指定、の2種類がある。
【0077】
以上がレコード、ブロック、カラム、インデックスの指定方法である。なお、これらの指定に対するレコード、ブロック、カラム、インデックスに対するアクセスの実現は、データベース管理システムと同様の方法をトランザクション処理部107が行う。この方法は公知の技術であるため、ここでは特に改めて説明しない。
【0078】
以下、最も典型的な処理であるトランザクショナルストレージ中でのReadRecord()、WriteRecord()、CommitTransaction()、AbortTransaction()の処理の流れ、およびコンピュータ側からトランザクショナルストレージを呼び出す処理について、流れ図を用いて説明する。
【0079】
図4を用いて、ReadRecord処理の流れについて説明する。
【0080】
TS104がReadRecord(トランザクションID、レコード指定)の要求をコンピュータ102から受け取ると、該要求はTSC105のネットワーク制御部106が受け取り、トランザクション処理部107へ渡される。トランザクション処理部107では、レコード指定を解釈し、ブロックIDとレコードIDを得る(ステップ401)。次に、トランザクションIDとブロックIDとレコードIDを用いて、該トランザクションID・ブロックID・レコードIDの組に合致するエントリがコミット前キャッシュ320に存在するかを判定する(ステップ402)。ステップ402の結果が真(Y)の場合、ステップ403へ、偽(N)の場合ステップ404へ制御を移す。
【0081】
ステップ403では、「該ブロックID、該レコードID」を用いてロックテーブル200を検索してロック情報203を得、ロック情報203のロックモードと該要求で指定されたロックモードとを比較し、より強い方(readよりwriteが強い。intentionよりreadが強い等、よく知られたロックの強さによる)を該ロック情報203に格納する。指定がなければread lockを格納する。そして、データ324に格納されているレコードを返答し、正常終了する(場合によってはすでにそのレコードが削除されたことを意味する「削除」が返る)。
【0082】
ステップ404では、「該ブロックID、該レコードID」を用いてロックテーブル200を検索し、(1)対応するロック情報203がないか、または(2)ロック情報203に保持されているトランザクションIDが上記トランザクションIDであるか、または(3)他のトランザクションが保持しているロックがread lockであるか、のいずれかの条件を満たすか否かを判定する。判定が真(Y)なら、ステップ405に制御を移す。一方判定が偽(N)なら、他のトランザクションがすでにアクセス対象のレコードのロックを取得していることになるため、該要求は異常終了する。
【0083】
ステップ405では該ブロックID・レコードIDの組に合致するエントリがコミット後キャッシュ330に存在するかを判定する。存在すれば(判定Y)ステップ408、存在しなければ(判定N)ステップ406へ制御を移す。
【0084】
ステップ406では、ディスク制御部110に制御がわたり、ディスク111から該ブロックIDのブロックが取り出される。続くステップ407では、取り出したブロック中を検索し、該レコードIDに合致するレコードを得、ステップ408に制御を移す。
【0085】
ステップ408では、「該ブロックID、該レコードID」を用いてロックテーブル200を検索してロック情報203を得、ロック情報203のロックモード(もしあれば)と該要求で指定されたロックモードとを比較し、より強い方(readよりwriteが強い。intentionよりreadが強い等、よく知られたロックの強さによる)を該ロック情報203に格納する。指定がなければread lockを格納する。すでにread lockが他のトランザクションによって取得されている場合、新たなエントリを作成してロックテーブル200に格納する。
【0086】
ステップ409では、「該トランザクションID、該ブロックID、該レコードID、結果のレコード」をコミット前キャッシュ320に登録する。コミット前キャッシュ320があふれた場合には、ステーブルデータベース(すなわちディスク111)に一部または全部を書き戻す。そして結果のレコードを返答して、正常終了する。
【0087】
以上がReadRecord処理の流れである。
【0088】
図5を用いて、WriteRecord処理の流れについて説明する。
【0089】
TS104がWriteRecord(トランザクションID、レコード指定、新レコード)の要求をコンピュータ102から受け取ると、該要求はTSC105のネットワーク制御部106が受け取り、トランザクション処理部107へ渡される。トランザクション処理部107では、レコード指定を解釈し、ブロックIDとレコードIDを得る(ステップ501)。次に、トランザクションIDとブロックIDとレコードIDを用いて、該トランザクションID・ブロックID・レコードIDの組に合致するエントリがコミット前キャッシュ320に存在するかを判定する(ステップ502)。ステップ502の結果が真(Y)の場合、ステップ503へ、偽(N)の場合ステップ504へ制御を移す。
【0090】
ステップ503では、「該ブロックID、該レコードID」を用いてロックテーブル200を検索してロック情報203を得、ロック情報203のロックモードと該要求で指定されたロックモードとを比較し、より強い方(readよりwriteが強い。intentionよりreadが強い等、よく知られたロックの強さによる)を該ロック情報203に格納する。指定がなければwrite lockを格納する。そして、データ324に格納されているレコードを旧レコードとして以降の処理を続ける。
【0091】
ステップ504では、「該ブロックID、該レコードID」を用いてロックテーブル200を検索し、(1)対応するロック情報203がないか、または(2)ロック情報203に保持されているトランザクションIDが上記トランザクションIDであるか、を判定する。判定が真(Y)なら、ステップ505に制御を移す。一方判定が偽(N)なら、他のトランザクションがすでにアクセス対象のレコードのロックを取得していることになるため、該要求は異常終了する。
【0092】
ステップ505では該ブロックID・レコードIDの組に合致するエントリがコミット後キャッシュ330に存在するかを判定する。存在すれば(判定Y)データ333を旧レコードとしてステップ508へ制御を移し、存在しなければ(判定N)ステップ506へ制御を移す。
【0093】
ステップ506では、ディスク制御部110に制御がわたり、ディスク111から該ブロックIDのブロックが取り出される。続くステップ507では、取り出したブロック中を検索し、該レコードIDに合致するレコードを得てこれを旧レコードとし、ステップ508に制御を移す。
【0094】
ステップ508では、「該ブロックID、該レコードID」を用いてロックテーブル200を検索してロック情報203を得、ロック情報203のロックモードと該要求で指定されたロックモードとを比較し、より強い方(readよりwriteが強い。intentionよりreadが強い等、よく知られたロックの強さによる)を該ロック情報203に格納する。指定がなければwrite lockを格納する。
【0095】
ステップ509では、「該トランザクションID、該ブロックID、該レコードID、新レコード」をコミット前キャッシュ320に登録する。コミット前キャッシュがあふれた場合には、ステーブルデータベースに一部または全部を書き戻す。
【0096】
ステップ510では、コミットログ240に本操作での変更を記録する。すなわち、「該トランザクションID、該ブロックID、該レコードID、_、更新、旧レコード、新レコード」をコミット前キャッシュ320に追記する。そして正常終了する。
【0097】
以上がWriteRecord処理の流れである。
【0098】
図6を用いて、Commit処理の流れについて説明する。
【0099】
TS104がCommitTransaction(トランザクションID)の要求をコンピュータ102から受け取ると、該要求はTSC105のネットワーク制御部106が受け取り、トランザクション処理部107へ渡される。トランザクション処理部107では、以下の処理を行う。
【0100】
ステップ601で、コミット前キャッシュ320をスキャンし、トランザクションID321が該要求のトランザクションIDに等しいエントリのうち、データ324が「削除」でないエントリをコミット後キャッシュ330に移動する。この際「ブロックID322、レコードID323、データ324」を「ブロックID331、レコードID332、データ333」とする。この際コミット後キャッシュ330があふれた場合には、コミット後キャッシュ330の一部または全部をステーブルデータベースに移動する。
【0101】
また、トランザクションID321が該要求のトランザクションIDに等しいエントリのうち、データ324が「削除」であるエントリはディスク制御部110経由で対応するレコードの削除を行う。
【0102】
ステップ602で、トランザクションテーブル210をスキャンしてロックテーブル200の解放を行う。すなわち、トランザクションテーブル210中でトランザクションID211が該要求のトランザクションIDに等しいエントリを検索し、条件に合致するエントリのブロックID212とレコードID213の対それぞれについて、ロックテーブル200を検索する。そして、条件に合致するロックテーブル200のエントリのそれぞれについて、ロック情報203に該要求のトランザクションIDが格納されていれば、該エントリを削除する。
【0103】
ステップ603で、トランザクションテーブル210のトランザクションID211が該要求のトランザクションIDを用いて検索し、対応するエントリを削除する。
【0104】
ステップ604で、コミットログ240中でトランザクションID241が該要求のトランザクションIDと等しいエントリを検索し、条件に合致するエントリを削除する。
【0105】
以上がCommit処理の流れである。
【0106】
図7を用いて、Commit処理の流れについて説明する。
【0107】
TS104がAbortTransaction(トランザクションID)の要求をコンピュータ102から受け取ると、該要求はTSC105のネットワーク制御部106が受け取り、トランザクション処理部107へ渡される。トランザクション処理部107では、以下の処理を行う。
【0108】
ステップ701で、コミットログ240中でトランザクションID241が該要求のトランザクションIDと等しいエントリを後方から前方へ検索し、条件に合致するエントリのそれぞれについて、コミット後キャッシュ330またはステーブルデータベース中で「ブロックID242、レコードID243」・、カラムID244・」で指定されるレコードを得て、そのレコードの値を後データ247から前データ246へ戻す。
【0109】
ステップ702で、トランザクションテーブル210をスキャンしてロックテーブル200の解放を行う。すなわち、トランザクションテーブル210中でトランザクションID211が該要求のトランザクションIDに等しいエントリを検索し、条件に合致するエントリのブロックID212とレコードID213の対それぞれについて、ロックテーブル200を検索する。そして、条件に合致するロックテーブル200のエントリのそれぞれについて、ロック情報203に該要求のトランザクションIDが格納されていれば、該エントリを削除する。
【0110】
ステップ703で、トランザクションテーブル210のトランザクションID211が該要求のトランザクションIDを用いて検索し、対応するエントリを削除する。
【0111】
ステップ704で、コミットログ240中でトランザクションID241が該要求のトランザクションIDと等しいエントリを検索し、条件に合致するエントリを削除する。
【0112】
以上がAbort処理の流れである。
【0113】
図8を用いて、ReadRecord処理の要求を発行する際のコンピュータ102側の処理の流れについて説明する。
【0114】
ステップ801で、アクセスメソッドを決定する。すなわち、アクセスしようとするレコードをインデックスを用いてアクセスするか、インデックスを用いずにアクセスするか、また、インデックスを用いる場合にはどのインデックスを用いるかを決定する。この処理はデータベース管理システムでよく用いられる処理である。
【0115】
ステップ802で、インデックスを使用するか否かによって、ステップ803(インデックスを用いない場合)またはステップ804(インデックスを用いる場合)に制御を移す。
【0116】
ステップ803では、レコード指定をテーブルスキャンとしてReadRecord()処理をTS104へ要求する。
【0117】
ステップ804では、コンピュータ102のメモリ上にインデックスのすべてが存在するか否かを判定する。存在すれば(Y)ステップ805へ、存在しなければ(N)ステップ806へ制御を移す。
【0118】
ステップ805では、インデックスをアクセスしてブロックIDとレコードIDを得、レコード指定をレコード直接指定としてReadRecord()処理をTS104へ要求する。
【0119】
ステップ806では、コンピュータ102のメモリ上にインデックスの一部が存在するか否かを判定する。存在すれば(Y)ステップ807へ、存在しなければ(N)ステップ808へ制御を移す。
【0120】
ステップ807では、コンピュータ102のメモリ上に存在するインデックスをアクセスしてインデックスの中間ノードを得、レコード指定をインデックス部分スキャン指定としてReadRecord()処理をTS104へ要求する。
【0121】
ステップ808では、使用するインデックスのインデックスIDを用いて、レコード指定をインデックススキャン指定としてReadRecord()処理をTS104へ要求する。
【0122】
最後にステップ809で、TS104から結果を得る。以上がReadRecord処理の要求を発行する際のコンピュータ102側の処理の流れである。この流れは、WriteRecord、InsertRecord、DeleteRecord、また、カラム単位の操作でも同様である。
【0123】
【発明の効果】
以上述べた本発明の、トランザクションを意識した機能およびインタフェースを持つストレージ「トランザクショナルストレージ」とそれを用いたコンピュータシステムによって、従来のトランザクション処理に伴う以下の課題が解決される。
【0124】
(1)トランザクショナルストレージのレコード単位の入出力機能およびインタフェースにより、ブロック入出力による無駄なデータの入出力が削減される。
【0125】
(2)トランザクショナルストレージの、レコードを更新する機能およびインタフェースにより、更新に伴う無駄な入出力が削減される。更新時には、必要に応じて更新前データを返すことにより、ログを効率的に作成できる。
【0126】
(3)トランザクショナルストレージが(a)ブロック番号とレコード番号によるレコード指定インタフェース、(b)テーブルと条件によるレコード指定インタフェース、(c)インデックスと条件によるレコード指定インタフェース、(d)インデックス中間ノードと条件によるレコード指定インタフェース、の4種類のレコード指定インタフェースを備えることにより、効率的なレコードアクセスが実現される。
【0127】
(4)トランザクショナルストレージがコンピュータからディクショナリ情報を入力するインタフェースを備えることにより、任意のストレージでディクショナリ情報が利用可能となる。
【0128】
(5)トランザクショナルストレージがコミットのインタフェースとアボートのインタフェースを備えることにより、トランザクションの実現(コミットやアボート)による無駄なデータの入出力が削減される。
【0129】
(6)トランザクショナルストレージが、コミット前キャッシュとコミット後キャッシュを備え、書き込んだデータを取り消す方法を提供することにより、トランザクションがアボートした際の無駄な入出力が削減される。
【0130】
(7)トランザクショナルストレージがレコードおよびブロックのロック(排他制御)インタフェースを備えることにより、同一のデータをレコード単位でもブロック単位でも処理でき、複数のコンピュータからの共有が可能になる。
【0131】
以上により、トランザクション処理に伴ってコンピュータのプロセッサおよびストレージに生じる高い負荷を削減し、大規模なデータベースシステムおよびトランザクション処理システムの実現が可能となる。
【図面の簡単な説明】
【図1】本実施例の全体構成を示すブロック図。
【図2】トランザクショナルストレージの内部データの構成図。
【図3】トランザクショナルストレージのディクショナリとキャッシュの構成図。
【図4】ReadRecord処理の流れ図。
【図5】WriteRecord処理の流れ図。
【図6】Commit処理の流れ図。
【図7】Abort処理の流れ図。
【図8】コンピュータ側処理の流れ図。
【符号の説明】
101:全体
102:コンピュータ
103:入出力信号線
104:TS
105:TSC
106:ネットワーク制御部
107:トランザクション処理部
108:コミット後キャッシュ
109:コミット前キャッシュ
110:ディスク制御部
111:ディスク
112:入出力処理部
113:トランザクショナルストレージインタフェース。
Claims (1)
- 計算機システムであって、
計算機と、
前記計算機に接続されるストレージシステムを備え、
前記ストレージシステムは、外部装置に接続される制御装置と、
前記制御装置に接続されるディスク装置と、を有し、
前記ディスク装置は、コンピュータのトランザクション処理の対象データで、一つ以上のカラムからなるレコードを複数有するテーブルを複数備えたデータベースを、固定のブロックを単位として、前記レコードのうち少なくとも一以上を各ブロックに格納し
前記制御装置は、
コミット前のデータを保持する第一のキャッシュ領域とコミット後のデータを保持する第二のキャッシュ領域と、
前記ブロックを一意に識別するブロックIDと、前記ブロック内でレコードを一意に識別するレコードIDとを含むレコードの指定を、前記計算機から受け、レコードを選択する第1のインタフェースと、
テーブルを一意に識別するテーブルIDと、レコード絞り込みのための条件とを含むレコードの指定とを前記計算機から受け、該当するレコードを選択する第2のインタフェースと、
インデックスを一意に識別するインデックスIDと該インデックスを検索するためのレコード絞り込みのための条件とを含むレコードの指定を前記計算機から受け、レコードを選択する第3のインタフェースと、
インデックスの中間ノードを一意に識別するブロックIDと、該インデックスを検索するためのレコード絞り込みのための条件とを含むレコードの指定を受けてレコードを選択する第4のインタフェースと、により構成される入出力制御部と、
前記第1、第2、第3及び第4のインタフェースいずれかで選択されたレコードが前記第1のキャッシュ領域に存在するか否かを判断し、存在する場合は、前記第1の記憶領域に存在するレコードに対する制御権を取得し、存在しない場合は、前記第2の記憶領域に存在するか否かを判断し、存在する場合は、前記第2の記憶領域に存在するレコードに対する制御権を取得し、前記選択されたレコードを前記第1の記憶領域に格納し、前記第2の記憶領域に存在しない場合は、前記ディスク装置から該当するレコードを取得するトランザクション処理部と、を備え、
前記計算機は、前記データベースの少なくとも一部に関連するインデクス情報を保持し、
前記インデクス情報を用いてデータベースを構成するレコードのいずれかにアクセスする場合、前記インデクス情報が前記データベースの全てに関連する場合は、前記インデクス情報を検索し、該当するブロックIDとレコードIDとを含むレコードの指定を含む前記ストレージシステムに読み出しリクエストを発行し、
前記インデクス情報が前記データベースの一部に関連する場合は、前記インデクス情報を検索し、スキャン要求とともに、検索で得られたレコードIDを含むレコードの指定を含む読み出しリクエストを前記ストレージシステムに発行し、
前記インデクス情報を前記計算機が有さない場合は、スキャン要求とともに前記ストレージシステムに読み出しリクエストを発行する入出力管理部を有する、ことを特徴とする計算機システム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP15900899A JP4306023B2 (ja) | 1999-06-07 | 1999-06-07 | トランザクション処理向けストレージ方法および装置、トランザクショナルストレージ |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP15900899A JP4306023B2 (ja) | 1999-06-07 | 1999-06-07 | トランザクション処理向けストレージ方法および装置、トランザクショナルストレージ |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2000347909A JP2000347909A (ja) | 2000-12-15 |
JP2000347909A5 JP2000347909A5 (ja) | 2006-03-23 |
JP4306023B2 true JP4306023B2 (ja) | 2009-07-29 |
Family
ID=15684238
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP15900899A Expired - Fee Related JP4306023B2 (ja) | 1999-06-07 | 1999-06-07 | トランザクション処理向けストレージ方法および装置、トランザクショナルストレージ |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP4306023B2 (ja) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4518485B2 (ja) * | 2004-10-20 | 2010-08-04 | 株式会社日立製作所 | データベースの再編成方法、ストレージ装置及びストレージシステム |
JP5721056B2 (ja) * | 2011-05-10 | 2015-05-20 | 日本電気株式会社 | トランザクション処理装置、トランザクション処理方法およびトランザクション処理プログラム |
US10684986B2 (en) * | 2013-08-28 | 2020-06-16 | Biosense Webster (Israel) Ltd. | Double buffering with atomic transactions for the persistent storage of real-time data flows |
EP3136245B1 (en) | 2014-04-23 | 2019-07-03 | Hitachi, Ltd. | Computer |
US9952805B2 (en) | 2014-09-11 | 2018-04-24 | Hitachi, Ltd. | Storage system and data write method using a logical volume to either store data successfully onto a first memory or send a failure response to a server computer if the storage attempt fails |
-
1999
- 1999-06-07 JP JP15900899A patent/JP4306023B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2000347909A (ja) | 2000-12-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11914568B2 (en) | High-performance database engine implementing a positional delta tree update system | |
US10268746B2 (en) | Mechanism to run OLTP workload on in-memory database under memory pressure | |
JP2520570B2 (ja) | コミット済みデ―タの抽出をデ―タベ―ス・システムから制御装置へオフロ―ドするための方法 | |
EP3047397B1 (en) | Mirroring, in memory, data from disk to improve query performance | |
US9058351B2 (en) | Apparatus and method for read optimized bulk data storage | |
US7418544B2 (en) | Method and system for log structured relational database objects | |
US8046334B2 (en) | Dual access to concurrent data in a database management system | |
US11567921B2 (en) | Rowgroup consolidation with global delta accumulation and versioning in distributed systems | |
CN103765393B (zh) | 存储系统 | |
US10754854B2 (en) | Consistent query of local indexes | |
US20070239751A1 (en) | Generic database manipulator | |
US8260758B2 (en) | Utilizing shared numeric locks | |
JPH04337850A (ja) | データベース・トランザクション及び照会処理システム | |
JPH0212460A (ja) | 索引木への並列アクセスのためのデータ・アクセス方法およびデータ処理システム | |
US20120284244A1 (en) | Transaction processing device, transaction processing method and transaction processing program | |
US20020147736A1 (en) | System and method for reorganizing stored data | |
JP4306023B2 (ja) | トランザクション処理向けストレージ方法および装置、トランザクショナルストレージ | |
US6556994B1 (en) | Method and system for improving concurrency through early release of unnecessary locks | |
WO2024109415A1 (zh) | 一种数据库重分布的方法、系统、设备集群及存储介质 | |
JP2024144901A (ja) | データベース管理方法、データベース管理プログラムおよび情報処理装置 | |
JP4245282B2 (ja) | 書き込み遅延データベース管理方法、装置、プログラム、及び記録媒体 | |
JPH1185585A (ja) | 完全メモリ常駐型インデックス方法および装置 | |
WO2022212026A1 (en) | Rowgroup consolidation with global delta accumulation and versioning in distributed systems | |
JP2002063055A (ja) | 書き込み遅延データベース管理方式及びシステム | |
Korotkevitch et al. | Optimistic Isolation Levels |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20051130 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20051130 |
|
RD01 | Notification of change of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7421 Effective date: 20060417 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20081222 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20090113 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20090312 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20090414 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20090427 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120515 Year of fee payment: 3 |
|
LAPS | Cancellation because of no payment of annual fees |