JP2014520323A - 累積移動平均に基づく多重検索ツリーのノードを分割する方法および装置 - Google Patents

累積移動平均に基づく多重検索ツリーのノードを分割する方法および装置 Download PDF

Info

Publication number
JP2014520323A
JP2014520323A JP2014514775A JP2014514775A JP2014520323A JP 2014520323 A JP2014520323 A JP 2014520323A JP 2014514775 A JP2014514775 A JP 2014514775A JP 2014514775 A JP2014514775 A JP 2014514775A JP 2014520323 A JP2014520323 A JP 2014520323A
Authority
JP
Japan
Prior art keywords
node
record
moving average
cumulative moving
division
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.)
Granted
Application number
JP2014514775A
Other languages
English (en)
Other versions
JP5774213B2 (ja
Inventor
ヨン キム,ガプ
シク ソ,キュン
シク パク,ブ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Naver Cloud Corp
Original Assignee
Naver Cloud Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Naver Cloud Corp filed Critical Naver Cloud Corp
Publication of JP2014520323A publication Critical patent/JP2014520323A/ja
Application granted granted Critical
Publication of JP5774213B2 publication Critical patent/JP5774213B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9027Trees
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

累積移動平均に基づいて多重検索ツリーのノードを分割する方法および装置が提供される。ノードにレコードが挿入されるとき、挿入されたレコードの順に基づいて累積移動平均が更新されてもよい。累積移動平均の値が大きい場合、分割されたノードのうちで左側の分割ノードにより多くのレコードを格納することにより、多重検索ツリーのために使用される記憶容量の効率を向上させることができ、多重検索ツリーの高さを低めることができる。
【選択図】図4

Description

以下に示される実施形態は、多重検索ツリーを提供するための方法および装置に関する。
累積移動平均に基づいて多重検索ツリーのノードを分割する方法と、この方法を使用する多重検索ツリーを提供する記憶装置が開示される。
多重検索ツリーとは、次数(degree)が2よりも大きい探索ツリーを意味する。
多重検索ツリーは、同じ数のレコードを含む二分木に比べ、その高さがさらに低くなる。
ツリーの高さが低くなれば、ツリー内で特定のレコードを探索するために記憶装置にアクセスする回数を減らすことができ、探索、挿入、および削除などのような多重検索ツリーの演算速度がより速くなる。
高さを低くするために、多重検索ツリーはバランスを維持する。バランスを維持するために、多重検索ツリーにレコードが挿入されたり、多重検索ツリー内のレコードが削除されたりするとき、レコードが挿入または削除されるノードまたは前記ノードと関連するノードは分割または回転することがある。
一般的に、ノードが分割されるとき、分割されるノード内に格納されたレコードは、分割によって生成された2つのノードにそれぞれ同数個が分配される。
本発明の一実施形態は、ノードの累積移動平均に基づいてノードを分割する多重検索ツリーのノード分割方法を提供することができる。
本発明の一実施形態は、累積移動平均に基づいて多重検索ツリーのノードを分割する記憶装置を提供することができる。
本発明の一側によれば、第1ノードにレコードを挿入するステップ、レコードの第1ノード内の位置値に基づいて第1ノードの累積移動平均を計算するステップ、累積移動平均に基づいて第1ノードの分割位置を計算するステップ、および分割位置を基準として第1ノードを第2ノードおよび第3ノードに分割するステップを含む、多重検索ツリーのノード分割方法が提供される。
位置値は、レコードが挿入されたスロットの番号を第1ノード内のレコードの数で割った値であってもよい。
第1ノードの累積移動平均を計算するステップは、レコードが挿入されたスロットの番号を第1ノード内のレコードの数で割った値、累積移動平均、第1ノード内のレコードの数、および第1ノードに任意のレコードが挿入されるたびに1ずつ増加する定数に基づいて累積移動平均を更新するステップを含んでもよい。
累積移動平均が指定された範囲内の値である場合、分割位置は、昇順に整列した分割対象レコード全体の長さの中間であってもよい。
累積移動平均が指定された範囲内の値である場合、分割位置は、昇順に整列した分割対象レコード全体の長さを予め指定された割合で割った位置であってもよい。
累積移動平均が指定された範囲内の値である場合、分割位置は、昇順に整列した分割対象レコード全体の長さを累積移動平均の割合で割った位置であってもよい。
多重検索ツリーのレコードの長さは、可変であってもよい。
レコードは、データベースのインデックスであってもよい。
多重検索ツリーは、BツリーまたはB+ツリーであってもよい。
本発明の他の一側によれば、多重検索ツリーの第1ノードにレコードを挿入する挿入処理部、レコードの第1ノード内の位置値に基づいて第1ノードの累積移動平均を計算する累積移動平均計算部、および累積移動平均に基づいて第1ノードの分割位置を計算し、分割位置を基準として第1ノードを第2ノードおよび第3ノードに分割する分割処理部を含む、記憶装置が提供される。
累積移動平均計算部は、レコードが挿入されたスロットの番号を第1ノード内のレコードの数で割った値、累積移動平均、第1ノード内のレコードの数、および第1ノードに任意のレコードが挿入されるたびに1ずつ増加する定数に基づいて累積移動平均を更新することにより、第1ノードの累積移動平均を計算してもよい。
分割処理部は、累積移動平均が指定された範囲内の値である場合、昇順に整列した分割対象レコード全体の長さの中間を分割位置として決めてもよい。
分割処理部は、累積移動平均が指定された範囲内の値である場合、昇順に整列した分割対象レコード全体の長さを予め指定された割合で割った位置を分割位置として決めてもよい。
分割処理部は、累積移動平均が指定された範囲内の値である場合、昇順に整列した分割対象レコード全体の長さを累積移動平均の割合で割った位置を分割位置として決めてもよい。
累積移動平均に基づいて多重検索ツリーのノードを分割することにより、多重検索ツリーに割り当てられた記憶容量を効率的に活用する方法および装置が提供される。
累積移動平均に基づいて多重検索ツリーのノードの分割位置を決めることにより、ノードに挿入されたレコードの値のパターンに応じてノードを分割する多重検索ツリーの分割方法およびこの分割方法を使用する装置が提供される。
多重検索ツリーに順にレコードが挿入される過程を示す図である。 多重検索ツリーに順にレコードが挿入される過程を示す図である。 多重検索ツリーのノードに値が順に増加するレコードが挿入される場合の問題点を示す図である。 本発明の一実施形態に係る多重検索ツリーにレコードを挿入する方法を示すフローチャートである。 本発明の一例に係る累積移動平均を計算する方法を説明する。 本発明の一例に係るノードの累積移動平均に基づいてノードの分割位置を決める方法を説明する。 本発明の一例に係る固定長さレコードがSPによって分割される方法を説明する。 本発明の一例に係る可変長さレコードがSPによって分割される方法を説明する。 本発明の一例に係る記憶装置900の構造図である。
以下、本発明の一実施形態について、添付の図面を参照しながら詳細に説明する。しかし、本発明は、実施形態によって制限され、限定されるものではない。なお、各図面に提示された同じ参照符号は同じ部材を示す。
本発明の実施形態および実施例において、多重検索ツリーは、B−ツリー、B+ツリー、またはその他のB−ツリーに基づいたツリーであってもよい。
多重検索ツリーがB+ツリーである場合、本発明の実施形態および実施例において説明された多重検索ツリーは、データノードを省略し、インデックスノードのみを示したツリーであってもよい。例えば、多重検索ツリーに特定のレコードを連続的に挿入する動作は、多重検索ツリーのインデックスノードにレコードが挿入される場合のみを示したものであってもよい。
また、多重検索ツリーのルート(root)ノードは、レコードを含んでもよく、含まなくてもよい。ルートノードがレコードを含まない場合、ルートノードは空のままで、ルートノードの下位ノードにのみレコードが挿入されてもよい。
本発明の実施形態および実施例において、レコードは、鍵を含んだ全体データを意味してもよい。また、レコードは、全体データのうちで鍵のみを意味してもよい。すなわち、本発明の実施形態および実施例のレコードは、鍵に代替されてもよい。また、ノードに格納されるレコードが鍵のみを意味する場合、鍵に対応する全体データは、ポインタなどを通じて鍵からリンクされてもよく、鍵を通じてアクセスされてもよい。
本発明の実施形態および実施例において、レコードまたは鍵は、データベースのインデックス(index)であってもよい。この場合、多重検索ツリーは、データベースの特定のインデックスを管理するためのものであってもよい。
図1および図2は、本発明の一実施例に係る多重検索ツリーに順にレコードが挿入される過程を示している。
レコードが多重検索ツリーに挿入されるために、レコードの値は、多重検索ツリーのノード内に挿入されたレコードの値と比較される。図1および図2において、挿入されるレコードの値は順に増加している。
図1および図2の多重検索ツリーの次数(degree)は3である。すなわち、多重検索ツリーのノード内には、最大で2つのレコードが挿入されるようになる。多重検索ツリーのノードは、多重検索ツリーの次数がnであるとき、n−1個のスロットを有する。レコードはスロットのうちの1つに挿入される。
図1の第1ツリー110は、空の多重検索ツリーにレコード「10」が挿入されたものである。
図1の第2ツリー120は、第1ツリー110にレコード「20」が追加で挿入された結果を示している。
図1の第3ツリー130は、第2ツリー120にレコード「30」が追加で挿入されたものである。
第2ツリー120のノード122内には、これ以上のレコードが挿入される容量(すなわち、スロット)がない。したがって、第2ツリー120のノード122は、2つのノード(134および136)に分割される。また、分割された2つのノード(134および136)の親ノードとして、新たなルートノード132が生成される。
このとき、第3ツリー130の3つのノード(132、134、および136)は、それぞれ1つのレコードのみを含む。すなわち、第3ツリー130は、第3ツリー130が含むことができるレコードの最大数の半分だけのレコードのみを含んでいる。したがって、第3ツリー130のために割り当てられた記憶容量が無駄になる。
図1の第4ツリー140は、第3ツリー130にレコード「40」が追加で挿入されたものである。
多重検索ツリーの特性上、ツリー内のどのレコードよりも大きい値を有するレコードは、多重検索ツリーの最右側の末端ノードに挿入される。
図2の第1ツリー210は、図1に示す第4ツリー140にレコード「50」が追加で挿入されたものである。
レコード「50」は、第4ツリー140の最右側の末端ノード142に挿入されなければならないが、最右側の末端ノード142内には空き容量がない。したがって、最右側の末端ノード142は、図2の第1ツリー210において2つのノード(214および216)に分割される。
分割された2つのノード(214および216)はそれぞれ1つのレコードを含み、中間値を有するレコード「40」は、分割された2つのノード(214および216)の親ノード212に伝達される。親ノード212内には空き容量があるため、レコード「40」は親ノード212内に挿入される。
図2の第2ツリー220は、図2の第1ツリー210にレコード「60」が追加で挿入されたものである。
第1ツリー210の最右側の末端ノード216内には空き容量があるため、レコード「60」は第2ツリー220の最右側の末端ノード224に挿入される。
図2の第3ツリー230は、図2の第2ツリー220にレコード「70」が追加で挿入されたものである。
第2ツリー220の最右側の末端ノード224内には空き容量がない。
したがって、最右側の末端ノード224は、2つのノード(238および240)に分割される。
分割された2つのノード(238および240)はそれぞれ1つのレコードを含み、中間値を有するレコード「60」は、第2ツリー220の最右側の末端ノード224の親ノード222に挿入されなければならない。しかし、親ノード222内には空き容量がないため、親ノード222は2つのノード(234および236)に再分割される。
親ノード222はルートノードであるため、親ノード222が分割しながら新たなルートノード232が生成される。
新たなルートノード232は、親ノード222が分割されることによって生成された2つのノード(234および236)を子ノードとして有する。
2つのノード(234および236)はそれぞれ1つのレコードを含み、親ノード220が含んでいた1)レコード「20」、および2)レコード「40」と、最右側の末端ノード224の分割によって親ノード220に伝達された、3)レコード「60」のうちで中間値を有するレコード「40」は、新たなルートノード232に挿入される。
第3ツリー230のノードはそれぞれ1つのレコードのみを含む。すなわち、第3ツリー230は、第3ツリー230が含むことができるレコードの最大数の半分だけのレコードのみを含んでいる。したがって、第3ツリー230のために割り当てられた記憶容量が無駄になる。
また、この後、第3ツリー230に挿入されるレコードの値が増加し続ければ、多重検索ツリーの特性上、1)第3ツリー230のそれぞれの高さにおける最右側ノード(232、236、および240)、および2)、最右側ノード(232、236、および240)の分割によって生成されたノードにのみレコードが挿入され、その他のノード(例えば、ノード234)にはこれ以上のレコードが挿入されない。
したがって、例えば、多重検索ツリーのノードが分割されるとき、分割によって生成された2つのノードが常に同じ数のレコードを有する場合(または、分割によって生成された2つのノードが有するレコードの数に常に1だけの差がある場合)、特定のパターンを有するレコード(例えば、値が増加し続けるレコードまたは値が減少し続けるレコード)が多重検索ツリーに挿入されるとき、多重検索ツリーに割り当てられた記憶容量が無駄になり、多重検索ツリーの高さが必要以上に高くなることがある。
図3は、本発明の一例に係る多重検索ツリーのノードに値が順に増加するレコードが挿入される場合の問題点を示している。
第1ツリー310のノード330内にはレコードが挿入されている。ノード330内には空き容量がない。
第2ツリー350は、第1ツリー310のノード330内に新たなレコード「90」が挿入された結果を示している。
ノード330内には空き容量がないため、新たなレコード「90」が挿入されるためには、ノード330が分割されなければならない。
ノード330内のレコードおよび新たなレコード「90」の中間値は、レコード「50」である。
したがって、レコード「50」を基準として、ノード330は、第1分割されたノード360および第2分割されたノード370に分割される。すなわち、第1分割されたノード360は、ノード330内のレコードおよび新たなレコード「90」のうちの中間値以下の値を有するノードを含む。また、第2分割されたノード370は、ノード330内のレコードおよび新たなレコード「90」のうちの中間値以上の値を有するノードを含む。
多重検索ツリーの次数がn+1であるとき、第1分割されたノード360および第2分割されたノード370は、それぞれn/2つのレコードを有してもよい。
中間値であるレコード「50」は、ノード330の親ノード320に挿入のために伝達される。親ノード320も空き容量を有していない場合、上述したように親ノード320も分割される。
この後、多重検索ツリーに挿入されるレコードの値が増加し続ける場合、多重検索ツリーの特性上、第1分割されたノード360にはこれ以上レコードが挿入されない。したがって、第1分割されたノード360のために割り当てられた記憶容量が無駄になる。
したがって、多重検索ツリーのノードが分割されるとき、ノードに挿入されてきたレコードがなす特定のパターンに基づいてノードを分割する基準となるレコードを決める方法が求められる。
図4は、本発明の一実施形態に係る多重検索ツリーにレコードを挿入する方法を示すフローチャートである。
多重検索ツリーに挿入されるレコードを追加レコードと命名する。
ステップ410で、追加レコードが挿入されるノードが検索される。検索されたノードを対象ノードと命名する。
ステップ420で、対象ノード内に追加レコードを挿入する空き容量があるか否かが検査される。すなわち、対象ノード内のレコードの数がノードに割り当てられたスロットの数よりも小さいか否かが検査される。
対象ノード内に追加レコードを挿入する空き容量があれば、対象ノードに追加レコードを挿入し、対象ノードの累積移動平均を計算するステップ(430、440、および450)が実行される。
対象ノード内に追加レコードを挿入する空き容量がなければ、追加レコードを多重検索ツリーに挿入するために、対象ノードを分割するステップ(460、470、および480)が実行される。
まず、対象ノード内に追加レコードを挿入する空き容量がある場合に実行されるステップ(430、440、および450)について説明する。
レコード挿入ステップ430で、対象ノードに追加レコードが挿入される。
追加レコードの挿入後、下記のステップ(440および450)で、追加レコードの対象ノード内の位置値に基づいて対象ノードの累積移動平均(cumulative moving average)(または、移動平均(running average))が計算される。
挿入位置計算ステップ440で、追加レコードが対象ノード内に挿入された位置に基づいて追加レコードの対象ノード内の位置値が計算される。
追加レコードの位置値は、0以上1以下の値であってもよい。
追加レコードの位置値は、追加レコードが挿入されたスロットの番号(index)を対象ノード内のレコード(すなわち、対象ノード内に格納されたレコード)の数で割った値であってもよい。
スロットの番号は0または1から始まってもよい。下記の実施形態では、スロットの番号が1から始まるものと見なす。
累積移動平均計算ステップ450で、追加レコードの位置値に基づいて対象ノードの累積移動平均が計算される。
レコードを含まないノードの累積移動平均は、0または1に初期化されてもよい。
累積移動平均は、下記の数式(1)に基づいて計算されてもよい。
Figure 2014520323
ここで、CAi−1は、追加レコードが挿入される前の対象ノードの累積移動平均である。また、CAは、追加レコードが挿入された後に更新された累積移動平均である。
iはシーケンス(sequence)である。すなわち、対象ノードに任意のレコードが挿入されるたびに1ずつ増加する定数である。iは1から始まってもよい。
は追加レコードの位置値である。xにおいて、iはxが対象ノードにi番目に挿入されたレコードの位置値であることを示す。すなわち、対象ノードの累積移動平均を計算するために使用された位置値は、順にx、x、x、・・・、xである。
削除(delete)、演算、または分割(split)演算に基づいて対象ノード内のレコードの数が減ることがある。このような場合、増加し続ける変数であるiが使用される場合、削除または分割後に対象ノードに挿入されるレコードの位置値が、累積移動平均の更新において過度に少なく反映されることがある。
したがって、ノード内のレコードの数を反映して累積移動平均を更新するために、下記の数式(2)に基づいて累積移動平均が計算されてもよい。
Figure 2014520323
ここで、Iは、iおよび対象ノード内のレコードの数nのうちの最小値を意味する。すなわち、I=MIN(i、n)である。
数式(1)および数式(2)を参照しながら上述したように、対象ノードの累積移動平均は、追加レコードが挿入されたスロットの番号を対象ノード内のレコードの数nで割った値x、累積移動平均CAi−1、対象ノード内のレコードの数n、および対象ノードに任意のレコードが挿入されるたびに1ずつ増加する定数iに基づいて計算されてもよい。
下記では、レコードの挿入によってノードの累積移動平均が計算される一例について、図5を参照しながら詳しく説明する。
累積移動平均は、ノードのヘッダ(header)に保存されてもよい。すなわち、対象ノードに対して計算された累積移動平均は、対象ノードのヘッダに保存されてもよく、以後には更新のために対象ノードのヘッダから抽出されてもよい。
次に、対象ノード内に追加レコードを挿入する空き容量がない場合に実行されるステップ(460、470、および480)について説明する。
分割位置計算ステップ460で、対象ノードの累積移動平均に基づいて分割対象レコードの分割位置が計算される。
分割対象レコードとは、対象ノードが分割されるとき、分割によって生成される2つのノードのうちの1つのノードに含まれるレコード、および対象ノードの親ノードに伝達されるレコードを意味してもよい。
すなわち、分割対象レコードとは、対象ノード内のレコードおよび追加レコードを意味してもよい。また、分割対象レコードは、対象ノード内のレコードを含んでもよい。
分割位置は、分割対象レコードが昇順に羅列した一連(series)のうちで特定の位置を示してもよい。
対象ノードの分割位置は、対象ノード内のレコードおよび追加レコードのうち、対象ノードが分割されるときに対象ノードの親ノードに伝達されるレコードを示してもよい。すなわち、対象ノードの分割位置が計算されれば、計算された分割位置に対応するレコードが分割の基準となってもよく、分割の基準となったレコードが分割のために対象ノードの親ノードに伝達されてもよい。
計算された分割位置に対応するレコードを基準レコードと命名する。
ノードの累積移動平均に基づいてノードの分割位置を計算する具体的な方法については、図6〜図8を参照しながら詳しく後述する。
ノード分割ステップ470で、分割位置を基準として、対象ノードは左側分割ノードおよび右側分割ノードに分割される。
すなわち、基準レコードの値よりも小さな値を有するレコードは左側分割ノードに含まれてもよく、基準レコードの値よりも大きな値を有するレコードは右側分割ノードに含まれてもよい。
また、分割対象レコードが昇順に整列したとき、分割対象レコードのうちで基準レコードよりも前に位置するレコードは左側分割ノードに含まれてもよく、分割対象レコードのうちで基準レコードよりも後ろに位置するレコードは右側分割ノードに含まれてもよい。
この後、ステップ410が再実行されることにより、基準レコードは挿入のために対象ノードの親ノードに伝達されてもよい。
分割されたノード初期化ステップ480で、左側分割ノードおよび右側分割ノードはそれぞれ初期化されてもよい。
左側分割ノードの累積移動平均は、対象ノードの累積移動平均に初期化されてもよい。また、右側分割ノードの累積移動平均は、対象ノードの累積移動平均に初期化されてもよい。
左側分割ノードのシーケンスiは0に初期化されてもよい。このようなシーケンスiの初期化は、左側分割ノードに新たに挿入されるレコードが左側分割ノードの累積移動平均に高い影響を与えるようにする。また、右側分割ノードのシーケンスiは0に初期化されてもよい。
ステップ(460、470、および480)が実行されれば、ステップ410が再実行される。
再実行されるステップ410は、ステップ470で、左側分割ノードおよび右側分割ノードに含まれないレコード(すなわち、基準レコード)を対象ノードの親ノードに挿入するステップであってもよい。すなわち、追加レコードは、ステップ470の基準レコードに変更されてもよい。また、再実行されたステップ410で検索されたノードは、以前の対象ノードの親ノードであってもよい。
上述されたステップ(410〜480)を含む多重検索ツリーにレコードを挿入する方法は、多重検索ツリーのノード分割方法として見なされてもよい。すなわち、ステップ(430〜450)は、分割対象ノードの累積移動平均を計算するステップとしてもよく、ステップ(460〜480)は、計算された累積移動平均に基づいて分割対象ノードを分割するステップとしてもよい。
図5は、本発明の一例に係る累積移動平均を計算する方法を説明している。
第1ノード510は空白ノードである。空白ノードのシーケンスiの初期値は0であってもよい。また、空白ノードの初期累積移動平均CAは、0または1であってもよい。
第2ノード520は、第1ノード510にレコード「40」が挿入されたノードである。
新たなレコードが挿入されることにより、シーケンスiは1増加する。したがって、このときのシーケンスiの値は1である。
レコード「40」は、第2ノード520内の1つのレコードのうちで一番目の位置に挿入された。したがって、レコード「40」の位置値xは1である。
シーケンスiの値は1であり、第2ノード520内に挿入されたレコードの数は1である。したがって、Iの値は1である。
数式(2)により、第2ノード520の累積移動平均CAは1である。
第3ノード530は、第2ノード520にレコード「80」が挿入されたノードである。
新たなレコードが挿入されることにより、シーケンスiは1増加する。したがって、このときのシーケンスiの値は2である。
レコード「80」は、第3ノード530内の2つのレコードのうちで二番目の位置に挿入された。したがって、レコード「80」の位置値xは2/2=1である。
シーケンスiの値は2であり、第3ノード530内に挿入されたレコードの数は2である。したがって、Iの値は2である。
数式(2)により、第3ノード530の累積移動平均CAは1である。
第2ノード520および第3ノード530を検討すれば、新たに挿入されたレコードがノード内のレコードのうちで最も後ろに位置すれば(すなわち、新たに挿入されたレコードの値がノード内のレコードそれぞれの値以上であれば)、ノードの累積移動平均は1に維持されることがあり、1により近い値に増加することが分かる。
第4ノード540は、第2ノード520にレコード「20」が挿入されたノードである。
新たなレコードが挿入されることにより、シーケンスiは1増加する。したがって、このときのシーケンスiの値は2である。
レコード「20」は、第4ノード540内の2つのレコードのうちで一番目の位置に挿入された。したがって、レコード「20」の位置値xは1/2である。
シーケンスiの値は2であり、第4ノード540内に挿入されたレコードの数は2である。したがって、Iの値は2である。
数式(2)により、第4ノード540の累積移動平均CAは3/4である。
第5ノード550は、第4ノード540にレコード「10」が挿入されたノードである。
新たなレコードが挿入されることにより、シーケンスiは1増加する。したがって、このときのシーケンスiの値は3である。
レコード「10」は、第5ノード550内の3つのレコードのうちで一番目の位置に挿入された。したがって、レコード「10」の位置値xは1/3である。
シーケンスiの値は3であり、第5ノード550内に挿入されたレコードの数は3である。したがって、Iの値は3である。
数式(2)により、第5ノード550の累積移動平均CAは22/36である。
第2ノード520、第4ノード540、および第5ノード550を検討すれば、新たに挿入されたレコードがノード内のレコードのうちで最も前に位置すれば(すなわち、新たに挿入されたレコードの値がノード内のレコードそれぞれの値以下であれば)、ノードの累積移動平均は0により近い値に減少することが分かる。
ノード内に挿入されるレコードの値が示すパターンが漸進的な増加に近いほど、ノードの累積移動平均が1に近くなってもよい。したがって、ノードの累積移動平均が1に近ければ、ノードを分割するとき、左側分割ノード(すなわち、低い値を有するレコードが挿入されるノード)に多くのレコードを保存し、右側分割ノード(すなわち、高い値を有するレコードが挿入されるノード)に少ないレコードを保存することにより、左側分割ノードおよび右側分割ノードに割り当てられた保存場所が効率的に使用されるようにできる。
これとは反対に、ノードの累積移動平均が0に近ければ、ノードを分割するとき、左側分割ノードに少ないレコードを保存し、右側分割ノードに少ないレコードを保存することにより、左側分割ノードおよび右側分割ノードに割り当てられた保存場所が効率的に使用されるようにできる。
すなわち、ノードの累積移動平均に基づいてノードを分割することにより、分割されたノードに割り当てられた保存場所を効率的に使用できるようになる。また、ノードの累積移動平均に基づいてノードを分割することにより、多重検索ツリーの高さをさらに低めることができる。
図6は、本発明の一例に係るノードの累積移動平均に基づいてノードの分割位置を決める方法を説明している。
ノードの分割位置は、ノードの累積移動平均に比例して決められてもよい。
以下、ノードの累積移動平均をCA(Cumulative moving average)と略述し、ノードの分割位置をSP(split point)と略述する。昇順に整列した分割対象レコードの全体の長さをTRL(total record length)と略述する。
例えば、CAの値が1であれば、SPはTRLの終端となってもよい。
ここで、分割対象レコードは、図4を参照しながら上述した分割対象レコードを示してもよい。すなわち、分割対象レコードは、ノード(すなわち、図4の対象ノード)内に既に挿入されたレコード、およびノード内に新たに挿入されるレコード(すなわち、図4の追加レコード)を意味してもよい。
すなわち、CAの値が1であれば、分割対象レコードはすべて左側分割ノードに含まれてもよく、右側分割ノードは空のノードであってもよい。
例えば、CA値が0または0に極めて近い値であれば、SPはTRLの始め(すなわち、0)であってもよい。
すなわち、CAの値が0であれば、分割対象レコードはすべて右側分割ノードに含まれてもよく、左側分割ノードは空のノードであってもよい。
または、CAに比例して昇順に整列した分割対象レコードのうち、基準レコードが決められてもよい。このとき、SPは、決められた基準レコードを示す値を有してもよい。
例えば、CAが0.5であれば、SPは昇順に整列した分割対象レコードのうちで中間値(すなわち、上位50%の値)を有するレコードを示す値を有してもよい。
図6に示すように、SPは、CAが属する範囲に基づいて決められてもよい。
図6のグラフ610は、CAの分布を示している。
CAが第1指定された範囲(例えば、t以上またはt以下)内の値である場合、SPはTRLの中間を示してもよい。すなわち、SPの値は、TRLに0.5を掛けた値であってもよい。
CAが第2指定された範囲(例えば、t以上またはt以下、またはt以上またはt以下)内の値である場合、SPは、TRLをCAの割合で割った位置を示してもよい。すなわち、SPの値は、TRLにCAを掛けた値であってもよい。
CAが第3指定された範囲(例えば、t以下またはt以上)内の値である場合、SPは、TRLを予め指定された割合(例えば、P%またはP%)で割った位置を示してもよい。SPの値は、TRLにP/100(または、P/100)を掛けた値であってもよい。前記のPおよびPは例示的なものである。すなわち、SPの値は、TRLにPを掛けた値であってもよい。Pは、0以上1以下の自然数であってもよい。
上述したt、t、t、およびtは、特定の値であってもよい。例えば、tの値は0.05であってもよい。tの値は0.2であってもよい。tの値は0.8であってもよい。tの値は0.95であってもよい。
図7は、本発明の一例に係る固定長さレコードがSPによって分割される方法を説明している。
対象ノード710は、4つのレコード(712、714、716、および718)を含んでいる。
対象ノード710にレコード「40」720が挿入されれば、分割対象レコード(712、714、716、718、および720)は、昇順に整列する場合、レコード「10」712、レコード「20」714、レコード「30」716、レコード「40」720、およびレコード「50」718の順になる。
SPがTRLの中間である場合、SPが示すレコードはレコード「30」716である。したがって、レコード「30」716が基準レコードとして決まる。
対象ノード710が分割されれば、左側分割ノード740は基準レコード716よりも前に位置したレコード(712および714)を含み、右側分割ノード750は基準レコード716よりも後ろに位置したレコード(720および718)を含む。
基準レコード716は、対象ノード710の親ノード730に挿入される。
図8は、本発明の一例に係る可変長さレコードがSPによって分割される方法を説明している。
対象ノード810は、4つのレコード(812、814、816、および718)を含む。レコード「AA」812の長さは2である。レコード「BBBB」814の長さは4である。レコード「C」816の長さは1である。レコード「DD」818の長さは2である。
対象ノード810に長さが2であるレコード「EE」820が挿入されれば、分割対象レコード(812、814、816、818、および820)は、昇順に整列する場合、レコード「AA」812、レコード「BBBB」814、レコード「C」816、レコード「DD」718、およびレコード「EE」820の順となる。このとき、TRLは11である。
SPがTRLの中間である場合、SPの値は6である。したがって、分割対象レコードの一連のうち、前から6だけ離れた位置がSPになってもよい。
これは、分割対象レコードが占める記憶領域のうち、前から6番目の記憶単位(例えば、バイト(byte)、ワード(word)、またはフィールド(field)を示してもよい。
分割対象レコードのうちでSPの値に対応する位置を占めるレコードは、レコード「BBBB」814である。したがって、レコード「BBBB」814が基準レコードとして決まる。
対象ノード810が分割されれば、左側分割ノード840は基準レコード814よりも前に位置したレコード812を含み、右側分割ノード850は基準レコード814よりも後ろに位置したレコード(816、818、および820)を含む。
図9は、本発明の一例に係る記憶装置900の構造図である。
記憶装置900は、挿入処理部910、累積移動平均計算部920、分割処理部930、および格納部940を含んでもよい。
挿入処理部910は、ステップ(410、420、および430)を実行してもよい。
例えば、挿入処理部910は、多重検索ツリーの第1ノードにレコードを挿入してもよい。
累積移動平均計算部920は、ステップ(440および450)を実行してもよい。
例えば、累積移動平均計算部920は、挿入されたレコードの第1ノード内の位置値に基づいて第1ノードの累積移動平均を計算してもよい。
位置値は、レコードが挿入されたスロットの番号を第1ノード内のレコードの数で割った値であってもよい。
また、累積移動平均計算部920は、1)レコードが挿入されたスロットの番号を第1ノード内のレコードの数で割った値、2)累積移動平均、3)第1ノード内のレコードの数、および4)第1ノードに任意のレコードが挿入されるたびに1ずつ増加する定数に基づいて累積移動平均を更新することにより、第1ノードの累積移動平均を計算してもよい。
累積移動平均計算部920は、上述した数式(1)または数式(2)に基づいて累積移動平均を計算してもよい。
分割処理部930は、ステップ(460、470、および480)を実行してもよい。
例えば、分割処理部930は、累積移動平均に基づいて第1ノードの分割位置を計算してもよく、計算された分割位置を基準として第1ノードを第2ノードおよび第3ノードに分割してもよい。
分割処理部930は、累積移動平均が指定された範囲内の値である場合、昇順に整列した分割対象レコードの全体の長さの中間を分割位置として決めてもよい。
分割処理部930は、累積移動平均が指定された範囲内の値である場合、昇順に整列した分割対象レコードの全体の長さを予め指定された割合で割る位置を分割位置として決めてもよい。
分割処理部930は、累積移動平均が指定された範囲内の値である場合、昇順に整列した分割対象レコードの全体の長さを累積移動平均の割合で割る位置を分割位置として決めてもよい。
記憶部940は、多重検索ツリーを格納してもよい。
記憶部940は、多重検索ツリーを構成するノードを格納してもよい。
記憶部940は、ノードのヘッダにノードの累積移動平均およびシーケンスを格納してもよい。
図1〜図8を参照しながら上述した本発明の一実施形態に係る技術的内容は、本実施例にそのまま適用されてもよい。したがって、より詳細な説明は、以下では省略する。
構成要素(910、920、および930)の機能は、単一な制御部(図示せず)で実行されてもよい。このとき、制御部は、単一(single)または複数(multi)チップ(chip)、プロセッサ(processor)、またはコア(core)を示してもよい。構成要素(910、920、および930)それぞれは、制御部で実行される関数(function)、ライブラリ(library)、サービス(service)、プロセス(process)、スレッド(thread)、またはモジュール(module)を示してもよい。
本発明の一実施形態に係る方法は、多様なコンピュータ手段によって実行が可能なプログラム命令形態で実現されてコンピュータで読み取り可能な媒体に記録されてもよい。コンピュータで読み取り可能な媒体は、プログラム命令、データファイル、データ構造などを単独または組み合わせて含んでもよい。媒体に記録されるプログラム命令は、実施形態のために特別に設計されて構成されたものであってもよく、コンピュータソフトウェアの当業者に公知されて使用可能なものであってもよい。コンピュータで読み取り可能な記録媒体の例としては、ハードディスク、フロッピー(登録商標)ディスク、および磁気テープのような磁気媒体(magnetic media)、CD−ROM、DVDのような光記録媒体(optical media)、フロプティカルディスク(floptical disk)のような磁気−光媒体(magneto−optical media)、およびROM、RAM、フラッシュメモリなどのようなプログラム命令を格納して実行するように特別に構成されたハードウェア装置が含まれる。プログラム命令の例としては、コンパイラによって生成されるもののような機械語コードだけではなく、インタプリタなどを使用してコンピュータによって実行される高級言語コードを含む。上述したハードウェア装置は、実施形態の動作を実行するために1つ以上のソフトウェアモジュールとして作動するように構成されてもよく、その逆も同じである。
以上のように、本発明は限定された実施例と図面に基づいて説明されたが、本発明は前記の実施例に限定されるものではなく、本発明が属する分野において通常の知識を有する者であれば、このような記載から多様な修正および変形が可能である。
したがって、本発明の範囲は、説明された実施例に限定されて定められてはならず、添付の特許請求の範囲だけではなく、この特許請求の範囲と均等なものに基づいて定められなければならない。

Claims (19)

  1. 第1ノードにレコードを挿入するステップ、
    前記レコードの前記第1ノード内の位置値に基づいて前記第1ノードの累積移動平均を計算するステップ、
    前記累積移動平均に基づいて前記第1ノードの分割位置を計算するステップ、および
    前記分割位置を基準として前記第1ノードを第2ノードおよび第3ノードに分割するステップ
    を含む、多重検索ツリーのノード分割方法。
  2. 前記位置値は、前記レコードが挿入されたスロットの番号を前記第1ノード内のレコードの数で割った値である、請求項1に記載の多重検索ツリーのノード分割方法。
  3. 前記第1ノードの累積移動平均を計算するステップは、
    前記レコードが挿入されたスロットの番号を前記第1ノード内のレコードの数で割った値、前記累積移動平均、前記第1ノード内のレコードの数、および前記第1ノードに任意のレコードが挿入されるたびに1ずつ増加する定数に基づいて前記累積移動平均を更新するステップ
    を含む、請求項1に記載の多重検索ツリーのノード分割方法。
  4. 前記累積移動平均は、下記の数式(1)に基づいて計算される、請求項3に記載の多重検索ツリーのノード分割方法。
    Figure 2014520323
    CAi−1は、前記レコードが挿入される前の前記第1ノードの累積移動平均である。CAは、前記レコードが挿入された後に更新された前記累積移動平均である。Iは、iおよび前記第1ノード内のレコードの数のうちの最小値である。xは、前記レコードが挿入されたスロットの番号を前記第1ノード内のレコードの数で割った値である。iは前記第1ノードに任意のレコードが挿入されるたびに1ずつ増加する定数である。
  5. 前記累積移動平均が指定された範囲内の値である場合、前記分割位置は、昇順に整列した分割対象レコードの全体の長さの中間である、請求項1に記載の多重検索ツリーのノード分割方法。
  6. 前記累積移動平均が指定された範囲内の値である場合、前記分割位置は、昇順に整列した分割対象レコードの全体の長さを予め指定された割合で割る位置である、請求項1に記載の多重検索ツリーのノード分割方法。
  7. 前記累積移動平均が指定された範囲内の値である場合、前記分割位置は、昇順に整列した分割対象レコードの全体の長さを前記累積移動平均の割合で分割する位置である、請求項1に記載の多重検索ツリーのノード分割方法。
  8. 前記多重検索ツリーのレコードの長さは可変である、請求項1に記載の多重検索ツリーのノード分割方法。
  9. 前記レコードはデータベースのインデックスである、請求項1に記載の多重検索ツリーのノード分割方法。
  10. 前記多重検索ツリーはBツリーまたはB+ツリーである、請求項1に記載の多重検索ツリーのノード分割方法。
  11. 請求項1乃至10のいずれか一項に記載の多重検索ツリーのノード分割方法を実行するプログラムを記録した、コンピュータ読み取り可能な記録媒体。
  12. 多重検索ツリーの第1ノードにレコードを挿入する挿入処理部、
    前記レコードの前記第1ノード内の位置値に基づいて前記第1ノードの累積移動平均を計算する累積移動平均計算部、および
    前記累積移動平均に基づいて前記第1ノードの分割位置を計算し、前記分割位置を基準として前記第1ノードを第2ノードおよび第3ノードに分割する分割処理部
    を含む、記憶装置。
  13. 前記位置の値は、前記レコードが挿入されたスロットの番号を前記第1ノード内のレコードの数で割った値である、請求項12に記載の記憶装置。
  14. 前記累積移動平均計算部は、前記レコードが挿入されたスロットの番号を前記第1ノード内のレコードの数で割った値で、前記累積移動平均、前記第1ノード内のレコードの数、および前記第1ノードに任意のレコードが挿入されるたびに1ずつ増加する定数に基づいて前記累積移動平均を更新することにより、前記第1ノードの累積移動平均を計算する、請求項12に記載の記憶装置。
  15. 前記累積移動平均計算部は、下記の数式(2)に基づいて前記累積移動平均を計算する、請求項12に記載の記憶装置。
    Figure 2014520323
    CAi−1は、前記レコードが挿入される前の前記第1ノードの累積移動平均である。CAは、前記レコードが挿入された後に更新された前記累積移動平均である。Iは、iおよび前記第1ノード内のレコードの数のうちの最小値である。xは、前記レコードが挿入されたスロットの番号を前記第1ノード内のレコードの数で割った値である。iは、前記第1ノードに任意のレコードが挿入されるたびに1ずつ増加する定数である。
  16. 前記分割処理部は、前記累積移動平均が指定された範囲内の値である場合、昇順に整列した分割対象レコードの全体の長さの中間を前記分割位置として決める、請求項12に記載の記憶装置。
  17. 前記分割処理部は、前記累積移動平均が指定された範囲内の値である場合、昇順に整列した分割対象レコードの全体の長さを予め指定された割合で割る位置を前記分割位置として決める、請求項12に記載の記憶装置。
  18. 前記分割処理部は、前記累積移動平均が指定された範囲内の値である場合、昇順に整列した分割対象レコードの全体の長さを前記累積移動平均の割合で割る位置を前記分割位置として決める、請求項12に記載の記憶装置。
  19. 前記多重検索ツリーのレコードの長さは可変である、請求項12に記載の記憶装置。
JP2014514775A 2011-06-08 2011-06-08 累積移動平均に基づく多重検索ツリーのノードを分割する方法および装置 Active JP5774213B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/KR2011/004213 WO2012169675A1 (ko) 2011-06-08 2011-06-08 누적 이동 평균에 기반하여 다원 탐색 트리의 노드를 분할하는 방법 및 장치

Publications (2)

Publication Number Publication Date
JP2014520323A true JP2014520323A (ja) 2014-08-21
JP5774213B2 JP5774213B2 (ja) 2015-09-09

Family

ID=47296220

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014514775A Active JP5774213B2 (ja) 2011-06-08 2011-06-08 累積移動平均に基づく多重検索ツリーのノードを分割する方法および装置

Country Status (3)

Country Link
JP (1) JP5774213B2 (ja)
KR (1) KR101242860B1 (ja)
WO (1) WO2012169675A1 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101477017B1 (ko) * 2013-03-29 2014-12-29 주식회사 알티베이스 공유메모리 내의 인덱스 운용 장치 및 방법
KR102000627B1 (ko) * 2019-01-04 2019-07-16 (주)공간인소프트 데이터 갱신 방법 및 그 장치
KR102031928B1 (ko) * 2019-03-25 2019-10-14 엘아이지넥스원 주식회사 이진 트리를 이용한 고속 펄스열 추출 장치 및 방법

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10124363A (ja) * 1996-10-22 1998-05-15 Fuji Xerox Co Ltd 順編成索引管理方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100233365B1 (ko) * 1996-12-13 1999-12-01 윤덕용 Hg-트리 색인 구조 및 그의 삽입, 삭제, 검색 방법
KR20020049767A (ko) * 2000-12-20 2002-06-26 오길록 접근 빈도에 따른 데이터 구조체계의 재구성 장치 및 그방법

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10124363A (ja) * 1996-10-22 1998-05-15 Fuji Xerox Co Ltd 順編成索引管理方法

Also Published As

Publication number Publication date
WO2012169675A1 (ko) 2012-12-13
KR101242860B1 (ko) 2013-03-12
JP5774213B2 (ja) 2015-09-09
KR20130009575A (ko) 2013-01-23

Similar Documents

Publication Publication Date Title
US10740308B2 (en) Key_Value data storage system
JP6028567B2 (ja) データ格納プログラム、データ検索プログラム、データ格納装置、データ検索装置、データ格納方法及びデータ検索方法
KR101467589B1 (ko) 데이터 구조를 가지는 하나 이상의 장치 판독가능 매체, 및장치 실행가능 명령어를 구비한 하나 이상의 장치 판독가능 매체
JP6598996B2 (ja) データ準備のためのシグニチャベースのキャッシュ最適化
CN105426373B (zh) 一种数据库同步方法与设备
US11681679B2 (en) Systems and methods for performing tree-structured dataset operations
US11048678B2 (en) Bulk-load for B-trees
JP6192877B1 (ja) データ処理システム及びデータ処理方法
EP2751667A1 (en) Parallel operation on b+ trees
JP6598997B2 (ja) データ準備のためのキャッシュ最適化
JP5774213B2 (ja) 累積移動平均に基づく多重検索ツリーのノードを分割する方法および装置
US20110153677A1 (en) Apparatus and method for managing index information of high-dimensional data
JP5790755B2 (ja) データベース管理装置及びデータベース管理方法
US9594785B2 (en) Database management device and database management method
US9235578B2 (en) Data partitioning apparatus and data partitioning method
CN109189343B (zh) 一种元数据落盘方法、装置、设备及计算机可读存储介质
CN111666302A (zh) 用户排名的查询方法、装置、设备及存储介质
JP2008065716A (ja) データ管理装置、データ管理方法及びデータ管理プログラム
KR20080052091A (ko) 데이터에 대한 검색을 수행하기 위한 자료구조를 기록한 컴퓨터로 읽을 수 있는 기록매체, 그 자료구조를 이용하여 데이터를 검색, 저장, 삭제하는 방법
KR102047233B1 (ko) 이중 부하 분산을 이용한 메타데이터 검색 시스템 및 이중 부하 분산을 통한 데이터베이스 관리 방법
CN109760044A (zh) 一种数据处理方法及装置
JP3810575B2 (ja) 相関ルール抽出装置、および記録媒体
JP5061741B2 (ja) 情報処理装置及びそれに用いる順序付きデータ管理方法並びにそのプログラム
CN117950653A (zh) 一种可视化流程构建方法
JPH0581101A (ja) キーの記憶割り当て方法

Legal Events

Date Code Title Description
A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20141010

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20141205

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150115

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150203

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150428

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: 20150602

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150630

R150 Certificate of patent or registration of utility model

Ref document number: 5774213

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250