(58)【調査した分野】(Int.Cl.,DB名)
【背景技術】
【0002】
データ格納容量を増大させるために、「垂直拡張」及び「水平拡張」が用いられてもよい。垂直拡張は、データを格納するためにより仕様の優れた機器を用いる方法を意味する。水平拡張は、データを格納する機器を追加することによってデータ格納容量の拡大を試みる方法である。垂直拡張は機器が処理できる容量を超過したデータを処理することができない。したがって、一般に、インターネット企業のような大容量のデータを処理しなければならない複数の企業は、水平拡張を用いて大容量のデータを処理する。
【0003】
一般的に、関係型データベース管理システム(Relational Database Management System;RDBMS)には原子性(Atomicity)、一貫性(Consistency)、独立性(Isolation)及び永続性(Durability)、すなわちACID特性が要求される。
【0004】
RDBMSが同一のデータに対する複数の複製(replica)を維持する場合、RDBMSは複製のために複数の複製のうちマスタ及び1つ以上のスレーブを指定してもよい。RDBMSは、一貫性のために同期化された書込み演算を行なってもよい。一般的な同期化された書込み演算過程は、下記のステップ(1)から(6)の通りである。
(1)クライアントがマスタに書込みを要請
(2)マスタが要請された書込みを行う
(3)マスタがスレーブに書込みを要請
(4)スレーブが要請された書込みを行う
(5)マスタがスレーブから書込み要請に対する応答を受信
(6)マスタがクライアントに書込み結果を通知
【0005】
RDBMSにおいて一貫性は極めて重要である。したがって、スレーブは、マスタと完全に同一の情報を有しなければならない。
【0006】
前述されたステップ(1)から(6)のうち、スレーブで障害が発生すると、RDBMSはRDBMSのアーキテクチャーにより書込み演算そのものが失敗したものと見なす。
【0007】
ネットワークの発展に伴って、ネットワークを介してアクセスできる多量のデータが発生している。このようなデータを処理するためにクラウドコンピュータのような分散処理システムが導入されているが、従来におけるRDBMSは、このような分散処理システムのための拡張性を支援することができないという限界がある。
【0008】
したがって、従来のRDBMSが有するC(一貫性(Consistency))及び可用性(availability)特性のいずれか1つを放棄し、P(分割耐性(Partition Tolerance))の特性を導入するための様々な試みが行われた。このような試みのうち、代表的なものがNo−SQL(Not only SQL)である。
【0009】
No−SQLは、キー・バリュー(key−valued)データベース(Database;DB)、ドキュメント指向(document−oriented)DB、グラフDB、及び列指向(column−oriented)DBなどで区分してもよい。
【0010】
そのうち、ドキュメント指向DBの複製方式は、RDBMSの複製方式に類似する。例えば、ドキュメント指向DBの複製は、マスタ及びスレーブに分類されて行われる。ただし、スレーブに書込みを行うとき、RDBMSは一貫性のために同期化された書込み過程を行うものの、ドキュメント指向DB(例えば、MongoDB)は同期化された書込み及び非同期化された書込みを同時に用いることができる。
【0011】
関係型データベース管理システムはその特性上、水平に拡張されることはできない。したがって、RDBMSを大容量のデータのために用いる場合、シャーディング(sharding)(または、データ分割)によってRDBMSの全体容量が拡張されてもよい。すなわち、同一のスキーマを用いて異なるデータを格納する1つ以上のRDBMS機器を用いてもよい。
【0012】
1つ以上のRDBMS機器を用いる場合、いずれのRDBMS機器があるかを把握しているアプリケーションサーバを用いてもよく、別途のミドルウェア(middleware)によって実際のデータ位置が隠匿されてもよい。
【0013】
シャーディング(または、データ分割)を用いる場合、より大きな容量のデータを処理するためにRDBMS機器が追加されるとき、1つ以上のRDBMS機器の間にデータを再分配しなければならないという問題が発生する。このようなデータの再分配は、RDBMS機器の運用中に行われることがある。しかし、データの再分配には時間がかかるため、即時性が落ちるという問題がある。データを分散して格納するために、分散キー・バリューDBを用いてもよい。分散キー・バリューDBは、一貫するハッシュ(consistent hashing)方式を用いることによってデータを分散して格納してもよい。一貫するハッシュ方式は、データ拡張において構造的な利点を有する。すなわち、一貫するハッシュ方式を用いるデータ格納システムは、サーバを追加することによって処理可能な全体データ量を増加させることができる。しかし、このようなハッシュ方式は、大小の概念を支援しないため、範囲検索に脆弱であり、2次元以上のデータを処理できない。
【0014】
分散キー・バリューDBを用いるシステム内のデータは、ハッシュによって分散する。したがって、範囲検索のために順次に検索結果を取得することができず、検索範囲内のキーをそれぞれ照会しなければならない。
【0015】
例えば、Aというフィールドの値が1から10の間のデータを探す場合、RDBMSでは範囲検索のために「select*from foo where A>=1andA<=10」のようなクエリを用いてもよい。一方、キー・バリューDBは、1から10までのデータをそれぞれ照会しなければならない。
【0016】
したがって、ハッシュを用いるキー・バリューDBは、2次元以上のデータを処理する空間的インデックスを有することはできない。すなわち、特定の空間内にあるいずれかのデータを処理しなければならない場合、空間内にあるデータはキー・バリューDBの様々なノード(すなわち、サーバ)に分散して格納されているため、様々なノードのいずれのノードでも完全なインデックスを取り揃えることができない。
【発明の概要】
【発明が解決しようとする課題】
【0017】
本発明の目的は、メッセージングチャネルを用いて1つ以上のノードがデータアクセス要請を処理する装置及び方法を提供する。
【0018】
本発明の目的は、データアクセス要請を選択されたノードに送信し、選択されたノードの要請に応じてデータアクセス要請を1つ以上のノードにマルチキャストする装置及び方法を提供する。
【0019】
本発明の目的は、ツリー構造で構成された1つ以上の格納領域を用いてデータを格納する装置及び方法を提供する。
【0020】
本発明の目的は、階層的なキーを用いてデータが格納される格納領域を決定する装置及び方法を提供する。
【課題を解決するための手段】
【0021】
本発明の一実施形態によると、1つ以上のノードのうち選択されたノードがデータアクセス要請を受信し、前記選択されたノードが前記データアクセス要請のマルチキャスト要請をメッセージングチャネルに送信し、前記メッセージングチャネルが前記マルチキャスト要請を受信して前記データアクセス要請を前記1つ以上のノードにマルチキャストし、前記1つ以上のノードそれぞれが前記マルチキャストを受信して前記データアクセス要請を処理することを含み、前記1つ以上のノードは、前記データに対する複製を含むことを特徴とするデータ管理方法が提供される。
【0022】
前記データ管理方法は、メッセージングチャネルがクライアントから前記データアクセス要請を受信すること、前記メッセージングチャネルが前記1つ以上のノードのうち前記選択されたノードを決定すること、前記メッセージングチャネルが前記データアクセス要請を前記選択されたノードに送信すること、をさらに含んでもよい。
【0023】
データアクセス要請は、データの読み出し、書込み、挿入、削除、または更新のいずれか1つ以であってもよい。
【0024】
本発明の他の実施形態によると、データアクセス要請に対するマルチキャスト要請を受信し、1つ以上のノードに前記データアクセス要請を送信すること、を含み、前記1つ以上のノードは、前記データアクセス要請が要請するデータに対する複製を含むノードであることを特徴とするデータ管理方法が提供される。
【0025】
前記データ管理方法は、クライアントから前記データアクセス要請を受信すること、前記1つ以上のノードのうち選択されるノードを決定すること、前記データアクセス要請を前記選択されたノードに送信すること、をさらに含んでもよい。
【0026】
前記ノードを決定することは、ラウンドロビン方式またはロードバランシングに基づいて前記1つ以上のノードのうち前記選択されるノードを決定してもよい。
【0027】
本発明の他の実施形態によると、端末がクライアントからデータアクセス要請を処理する方法において、クライアントによって送信されたデータアクセス要請が送信され、前記データアクセス要請のマルチキャスト要請をメッセージングチャネルに送信し、前記メッセージングチャネルからマルチキャストを介して前記データアクセス要請を受信し、データアクセス要請を処理すること、を含むデータ管理方法が提供される。
【0028】
データアクセス要請が送信されることは、メッセージングチャネルからデータアクセス要請を受信することを含んでもよい。
【0029】
本発明の一実施形態によると、同一のデータの複製を含む1つ以上のノードと、データアクセス要請を前記1つ以上のノードに送信するメッセージングチャネルと、を含み、前記1つ以上のノードのいずれか1つのノードは、前記データアクセス要請のマルチキャスト要請を前記メッセージングチャネルに送信し、前記メッセージングチャネルは、前記マルチキャスト要請を受信して前記データアクセス要請を前記1つ以上のノードにマルチキャストし、前記1つ以上のノードそれぞれは、前記マルチキャストによって前記データアクセス要請を処理することを特徴とするデータ管理システムが提供される。
【0030】
前記メッセージングチャネルは、クライアントからデータアクセス要請を受信し、前記1つ以上のノードのいずれか1つのノードを選択して前記データアクセス要請を前記選択されたノードに送信してもよい。
【0031】
前記メッセージングチャネルは、ラウンドロビン方式またはロードバランシングに基づいて前記1つ以上のノードのうち前記1つのノードを選択してもよい。
【0032】
本発明の一実施形態によると、クライアントからデータアクセス要請を受信する受信部と、データ格納装置においてデータの格納領域を有する1つ以上のノードのうち選択されるノードを決定する制御部と、データアクセス要請を前記選択されたノードに送信する送信部と、を備え、前記受信部は、前記選択されたノードから前記データアクセス要請のマルチキャスト要請を受信し、前記送信部は、前記第1要請を前記1つ以上のノードにマルチキャストすることを特徴とするメッセージングチャネルが提供される。
【0033】
本発明の一実施形態によると、ツリー構造で構成された1つ以上の格納領域を含み(各格納領域は前記ツリーにおける1つのノードに対応)、前記1つ以上の格納領域それぞれには0個以上のサブキーを有する階層的なキーが割り当てられ、前記1つ以上の格納領域のうち任意の第1格納領域をルートにするサブツリー内の格納領域は、前記第1格納領域の第1キーに対応するデータを格納し、前記第1キーは、第2キーに1つ以上のサブキーが連鎖されたキーであり、前記第2キーは、第2格納領域のキーであり、前記第2格納領域は、前記第1格納領域の親格納領域であることを特徴とするデータ格納装置が提供される。
【0034】
前記1つ以上の格納領域のそれぞれは、関係型データベース機器であってもよい。前記1つ以上の格納領域のそれぞれは、関係型データベースのインデックス、キー、および命令を理解および処理するミドルウェアを含んでもよい。
【0035】
前記階層的なキーは、英数字及び区分子を組み合わせた文字列であってもよい。
【0036】
第1キーに対応するデータは、データのキーの接頭語のいずれか1つが前記第1キーと同一のデータを意味してもよい。
【0037】
接頭語は、前記データのキーのn個のサブキーのうち前のi個のサブキーであってもよい。
【0038】
iは1以上n以下であってもよい。
【0039】
前記第1格納領域は、前記第1格納領域のキーに対応するデータのうち、前記第1格納領域の子格納領域のキーに対応しないデータを格納してもよい。
【0040】
前記データ格納装置に第3格納領域を追加する場合、前記第3格納領域の第3キーに対応するデータを前記第1格納領域から前記第3格納領域に移動させ、前記第3格納領域は、前記第1格納領域の子格納領域であってもよい。
【0041】
前記第1格納領域の格納量が予め定義された基準に達したとき、前記第3格納領域の追加及び前記データ移動を行ってもよい。
【0042】
前記第1格納領域は、前記第1格納領域の1つ以上の子格納領域に検索範囲に対応するキーを有するデータの第1目録を要請し、前記第1格納領域が格納したデータのうち、前記検索範囲に対応するデータの第2目録を前記要請に応じて返還された前記第1目録に併合して前記検索範囲に対する結果として返還してもよい。
【0043】
本発明の一実施形態によると、1つ以上の格納領域をツリー構造で構成し(各格納領域は前記ツリーにおける1つのノードに対応)、前記1つ以上の格納領域それぞれに0個以上のサブキーを有する階層的なキーを割り当て、前記1つ以上の格納領域のうち、任意の第1格納領域をルートにするサブツリー内の格納領域内に前記第1格納領域の第1キーに対応するデータを格納することを含み、前記第1キーは、第2キーに1つ以上のサブキーが連鎖されたキーであり、前記第2キーは、第2格納領域のキーであり、前記第2格納領域は、前記第1格納領域の親格納領域であることを特徴とするデータ格納方法が提供される。
【0044】
前記格納することは、第1格納領域のキーに対応するデータのうち、第1格納領域の子格納領域のキーに対応しないデータを第1格納領域に格納することを含んでもよい。
【0045】
前記データ格納方法は、第1格納領域の子格納領域として、1つ以上の格納領域に検索範囲に第3格納領域を追加すること、第3格納領域の第3キーに対応するデータを第1格納領域から第3格納領域に移動させること、をさらに含んでもよい。
【0046】
前記第3格納領域を追加することおよび前記データを移動させることは、第1格納領域の格納量が予め定義された基準に達したとき行なわれてもよい。
【0047】
前記データ格納方法は、第1格納領域の1つ以上の子格納領域に検索範囲に対応するキーを有するデータの第1目録を要請しと、1つ以上の子格納領域が第1目録を返還し、第1格納領域が格納したデータのうち、検索範囲に対応するデータの第2目録を返還された第1目録に併合して検索範囲に対する結果として返還すること、をさらに含んでもよい。
【発明の効果】
【0048】
本発明によると、マルチキャストを介して1つ以上のノードが同時にデータ要請を処理することによって、データの一貫性を維持する装置及び方法を提供することができる。
【0049】
本発明によると、1つ以上のノードがメッセージングチャネルとの接続のみを維持することによって、ノードの挿入、削除、または故障を容易に処理できるデータ管理システムを提供することができる。
【0050】
本発明によると、ロードバランシングを考慮して、1つ以上のノードのうちクライアントのデータアクセス要請を処理するノードを選択する装置及び方法を提供することができる。
【0051】
本発明によると、ツリー構造で構成された1つ以上の格納領域を用いてデータを格納する装置及び方法を提供することができる。
【0052】
本発明によると、階層的なキーを用いてデータが格納される格納領域を決定する装置及び方法を提供することができる。
【0053】
本発明によると、データを格納することによって、ツリー構造で格納領域を拡張し、拡張された格納領域にデータを移動する装置及び方法を提供することができる。
【0054】
本発明によると、クエリを子ノードに対応する子格納領域に送信し、子格納領域から返還されたデータ目録をクエリの検索結果として併合して返還する装置及び方法を提供することができる。
【発明を実施するための形態】
【0056】
以下、本発明の一実施形態を図面を参照しながら詳細に説明する。しかし、本発明は、以下の実施形態に制限されることはなく、限定されることもない。各図面に示された同一の参照符号は同一の部材を示す。
【0057】
後述する本発明の実施形態は、キー・バリューDBを用いる分散処理システムをマルチマスタ方式により実現する方法を提供する。
【0058】
データ管理システムを実現するとき、障害対応(fault tolerance)及びロードバランシング(load balancing)などのために、同一のデータを有する複数のノードが構成される必要がある。ノードは、いずれかの作業を処理する1つの単位を意味する。例えば、ノードは、1つの物理的又は論理的なサーバ(または、DB)であってもよい。
【0059】
本発明においてクラスタは、複数の複製から構成された1つの集合を意味する。クラスタは、1つ以上のノードを含んでもよい。クラスタ内の1つ以上のノードは、クライアントに同一のデータを提供する。
【0060】
図1は、マスタ−スレーブ構造における非同期的な書込みを説明するための図である。
【0061】
前述された一貫性の代わりに、可用性または性能に重点をおく場合、複製のために様々な方式が用いられる。例えば、マスタ−スレーブ構造でも非同期化された書込みが適用されてもよい。No−SQLでマスタ−スレーブモデルを用いて複製が2つ以上ある場合、複製のいずれか1つ(または、1つ以上)に対しては同期化された書込みが適用されてもよく、残りの複製には非同期化された書込みが適用されてもよい。
【0062】
マスタ−スレーブ構造における非同期的な書込み過程は、下記のステップ(1)からステップ(4)の通りである。
(1)クライアント110が書込み要請150
(2)マスタ120が要請された書込みを行う160
(3)マスタ120がスレーブ130(または、1つ以上のスレーブ132、134及び136)に非同期的な書込みを要請170
(4)マスタ120がクライアント110に書込み結果を通知180
【0063】
上記のようなステップで、スレーブ130で入出力(Input/Output;IO)が行われるときは、クライアント110が書込み要請の結果を把握するときと重なる。したがって、スレーブ130に障害が発生することで書込みが正しく行われない場合、後に一貫性において問題が生じる。
【0064】
図2は、マルチマスタの複製方式を説明する。
【0065】
データの一貫性が重要な(すなわち、複数のデータのいずれもが正しいデータであることが重要な)RDBMSは、マスタ−スレーブモデルを用いるが、No−SQLを用いるDBはマルチ(Multi)マスタ(または、No−マスタ)の複製方式を用いてもよい。
【0066】
マルチマスタモデルが用いられる場合、複製の数を初期に指定する必要がある。
【0067】
第1ノード210、第2ノード220、及び第3ノード230は、それぞれマルチマスタモデルの複製である。
【0068】
マルチマスタモデルを用いるシステムでは、同一の内容を格納する複製それぞれに異なるクライアントがアクセスして情報を更新することで、一貫性を有さない情報が様々なクライアントに送信されることがある。
【0069】
2つのクライアントがそれぞれ第1ノード210及び第3ノード230に対して情報Aの更新を要請すると、次に情報Aを読込んだクライアントは、いつ、どのノード(例えば、第1ノード210または第3ノード230)を介して情報Aにアクセスするかに応じて、異なる値を取得する。情報Aに対する更新された内容が異なるノードで全て複製される前にクライアントが情報Aを読込む場合、クライアントはどのノードを介して情報Aをアクセスしたかに応じて異なる値を取得する。または、第1ノード210及び第3ノード230でAに対する更新が互いに異なるように行われた場合、クライアントはどのノードを介して情報Aにアクセスしたかに応じて異なる値を取得する。
【0070】
前述されたように、明示的なマスタがない状態で、複製関係にある異なる複数のノードそれぞれにほとんど同時に情報更新が要請された場合、どのノードが有する情報が正しいのかを把握する必要がある。
【0071】
したがって、マルチマスタモデルを用いるシステムは、情報を読み出すときに情報に対する補正を行う。このような補正は、読み出し補正(read repair)であり、読み出し補正はシステムの読み出し性能を低下させる恐れがある。
【0072】
図3は、本発明の一例に係るデータ管理システムの構造を示す図である。
【0073】
データ管理システム300(以下、システム300と称する)は、複製を用いてデータを格納するシステムである。システム300は、メッセージングチャネル320及び1つ以上のノード330を含む。システム300は、レベル(Level;L)4スイッチ325をさらに含んでもよい。
【0074】
説明の便宜のために、図示された1つ以上のノード330は、同一のデータを格納及び提供する複製(クラスタ)を示す。1つ以上のノード330は、マルチマスタ方式によって動作されてもよい。図示していないが、システム300は、他のデータに対する複製を含む複数のノードをさらに含んで構成されてもよい。
【0075】
システム300は、クライアント310からのデータアクセス要請を処理する。データアクセス要請は、システム300内の特定データに対する読み出し(read)、書込み(write)、挿入(insert)、削除(delete)、または、更新(update)要請であってもよい。
【0076】
クライアント310は複数であってもよい。すなわち、システム300は、各クライアント310からデータアクセス要請を受信してもよく、データアクセス要請を処理してもよい。クライアント310は、データの要請を示す要請メッセージを送信することによって、シスム300にデータを要請する。
【0077】
メッセージングチャネル320は、システムでクライアント310とデータを格納している1つ以上のノード330との間のメッセージを処理するミドルティア(middle−tier)の役割を行う。メッセージングチャネル320は、ルータの役割を行うメッセージ基盤ミドルウェア(Message Oriented Middleware;MOM)またはメッセージ基盤ミドルウェアが搭載されたサーバであってもよい。また、メッセージングチャネル320は、処理容量を拡張するために、複数のサーバまたはソフトウェアデーモン(daemon)で構成されてもよい。
【0078】
メッセージングチャネル320と接続される1つ以上のノード330は、固有のアドレス体系を用いる。メッセージングチャネル320で各ノードにメッセージを送信するためにアドレスを指定する方法は、(1)ユニキャスト(unicast)、(2)エニーキャスト(anycast)、及び(3)マルチキャスト(または、ブロードキャスト)のいずれか1つ以上であってもよい。アドレスを指定する方法に応じて、メッセージングチャネル320が接続されたノードにメッセージを送信する方式が異なる。
【0079】
ユニキャストは、固有アドレスによって指定された1つのノードにのみメッセージングチャネル320がメッセージを送信する方式である。エニーキャストは、メッセージングチャネル320がいずれかの群(domain)の1つのノードにのみメッセージを送信する方式である。メッセージングチャネル320は、各ノード332、334、または336とユニキャストまたはエニーキャストでメッセージまたはデータを送受信する。例えば、メッセージングチャネル320は、データアクセス要請を処理するために、選択された特定ノードにユニキャストまたはエニーキャスト方式を用いて要請メッセージを送信する。
【0080】
マルチキャストは、いずれもの群の全てのノードにメッセージを送信する方式である。メッセージングチャネル320は、同一のデータを有する1つ以上のノード(すなわち、クラスタ)を1つの群として指定し、メッセージをマルチキャストしてもよい。したがって、メッセージングチャネル320は、特定のデータアクセス要請をマルチキャストして該当クラスタ内の全てのノードがデータアクセス要請を受信できるようにする。メッセージングチャネル320は、群に関する情報を管理する管理部またはこれを管理する別途のサーバをさらに含んで構成してもよく(図示せず)、ノードの追加または除去するときに新しいノードに関する情報をアップデートしてもよい。
【0081】
ここで、各ノード332、334、または336は、メッセージングチャネル320にのみ接続されるだけであって、各ノード相互間は通信することができない。この場合、ノードの追加または削除が発生する場合、新しいノードまたは削除されたノードに関する情報は、メッセージングチャネル320にのみ送信されてもよい。
【0082】
クライアント310がメッセージングチャネル320のプロトコルを把握している場合、クライアント310は、メッセージングチャネル320に直接データアクセス要請を送信してもよい。または、クライアント310は、各ノード332、334または336に直接データアクセス要請を送信してもよい。この過程において、アクセス要請は、ネットワーク上に位置するL4スイッチ325を経由してもよい。L4スイッチ325は、仮想IP(virtual IP;VIP)によって1つ以上のノード330を管理する。クライアント310がVIPを用いてデータアクセス要請を送信すると、VIPを有するL4スイッチ325は、データアクセス要請を受信した後、受信されたデータアクセス要請を1つ以上のノード330で適切に分配する。
【0083】
下記では、メッセージングチャネル320を用いて1つ以上のノード330の全てが同一のデータを維持及び提供する方法について説明する。また、下記の方法を用いることによってマルチマスタ複製が実現されることができる。
【0084】
図4は、本発明の一実施形態に係るデータ管理方法の信号フローチャートである。
【0085】
本実施形態において、端末(すなわち、第1ノード332、第2ノード334及び第3ノード336)は、クライアント310からのデータアクセス要請を処理する。
【0086】
ステップS410において、クライアント310はメッセージングチャネル320にデータアクセス要請を行う。データアクセス要請は、特定のデータ(例えば、オブジェクト)の読み出し、書込み、挿入、削除、または更新のいずれか1つ以上であってもよい。メッセージングチャネル320は、クライアント310からデータアクセス要請を受信する。
【0087】
ステップS420において、メッセージングチャネル320は、データアクセス要請に対して特定データを含むノードで構成されたクラスタから1つのノードを選択する。説明の便宜のために
図4に示された1つ以上のノード330(すなわち、第1ノード332、第2ノード334、および第3ノード336を含むクラスタ)が、要請されたデータを含むノードの集合という。したがって、メッセージングチャネルは320は、1つ以上のノード330から1つのノードを選択する。メッセージングチャネル320は、ラウンド・ロビン(round−robin)方式などを利用したり、ロードバランシングに基づいて選択されたノードを決定してもよい。本実施形態では、第2ノード334が選択された場合について説明する。
【0088】
ステップS430において、メッセージングチャネル320は、選択されたノード(すなわち、第2ノード334)にデータアクセス要請を送信する。
【0089】
選択されたノード(すなわち、第2ノード334)は、メッセージングチャネル320からクライアント310によって送信されたデータアクセス要請を受信する。ここで、データアクセス要請を受信した選択されたノード(第2ノード334)は、直ちにデータアクセス要請に対する処理(例えば、データの挿入または削除)を行わない場合がある。
【0090】
もし、データアクセス要請がデータに対する読み出し要請である場合、下記のステップS440、S450、S462、S464、及びS466を行わなくてもよい。この場合、データは選択されたノード(第2ノード334)からメッセージングチャネル320を経由してクライアント310に送信されてもよく、または、クライアント310に直接送信されてもよい。
【0091】
ステップS440において、選択されたノード(第2ノード334)は、データアクセス要請に対するマルチキャスト要請をメッセージングチャネル320に送信する。メッセージングチャネル320は、選択されたノード(第2ノード334)からマルチキャスト要請を受信する。
【0092】
ステップS450において、メッセージングチャネル320は、データアクセス要請を1つ以上のノード330にマルチキャストする。マルチキャストの対象は1つ以上のノード330(すなわち、選択されたノードの全ての複製)である。マルチキャストを要請する選択されたノード(第2ノード334)自体にも、マルチキャストを介してデータアクセス要請が送信される。1つ以上のノード330それぞれは、マルチキャストされたデータアクセス要請を受信する。
【0093】
メッセージングチャネル320がマルチキャストしたデータアクセス要請は、1つ以上のノード330に(論理的に)同時に到着する。また、1つ以上のノード330それぞれは、マルチキャストを介してデータアクセス要請を受信したとき、実際にデータアクセス要請を処理してもよい。
【0094】
ステップS462、S464、及びS466において、1つ以上のノード330それぞれは、マルチキャストされたデータアクセス要請を処理する。例えば、1つ以上のノード330それぞれは、受信されたデータアクセス要請に応じてデータの書込み、挿入、削除、または更新作業などを行う。
【0095】
したがって、メッセージングチャネル320が複数のデータアクセス要請を順次マルチキャストすることによって、1つ以上のノード330は、全て同一の順序で複数のデータアクセス要請を処理することができる。システム300は、アクセス要請の順序を把握するために、システム300内の全てのノードを時間同期化してもよく、各要請に対するタイムスタンプを用いてもよい。システム300は、時間同期化のためにNTP(Network Time Protocol)を用いてもよい。したがって、1つ以上のノード330が、管理するデータの一貫性を維持することができる。
【0096】
図5は、本発明の一例に係るデータ管理方法の信号フローチャートである。
【0097】
ステップS510において、選択されたノード(すなわち、第2ノード334)は、データアクセス要請を受信する。
【0098】
データアクセス要請は、クライアント310から直接に送信されたものであってもよい。
【0099】
データアクセス要請は、L4スイッチ325を経由して送信されたものであってもよい。L4スイッチ325は、クライアント310からデータアクセス要請を受信する。L4スイッチ325は、1つ以上のノード330のうち1つのノードを選択し、データアクセス要請を選択されたノードに送信する。L4スイッチ325は、ラウンド・ロビン方式などを用いたり、ロードバランシングに基づいて選択されたノードを決定してもよい
【0100】
ここで、データアクセス要請を受信した選択されたノード(第2ノード334)は、直ちにデータアクセス要請に対する処理を行わない場合がある。
【0101】
ステップS520において、選択されたノード(第2ノード334)は、データアクセス要請に対するマルチキャストをメッセージングチャネル320に要請する。すなわち、選択されたノード(第2ノード334)は、データアクセス要請のマルチキャスト要請をメッセージングチャネル320に送信する。メッセージングチャネル320は、選択されたノード(すなわち、第2ノード334)からデータアクセス要請に対するマルチキャスト要請を受信する。
【0102】
ステップS540において、メッセージングチャネル320は、データアクセス要請を1つ以上のノード330にマルチキャストする。マルチキャストの対象は、1つ以上のノード330(すなわち、選択されたノードの全ての複製)である。マルチキャストを要請する選択されたノード(第2ノード334)自体にも、マルチキャストを介してデータアクセス要請が送信される。1つ以上のノード330それぞれは、マルチキャストされたデータアクセス要請を受信する。
【0103】
ステップS552、ステップS554、ステップS556において、1つ以上のノード330それぞれは、マルチキャストを介して受信されたデータアクセス要請を処理する。
【0104】
例えば、1つ以上のノード330それぞれは、受信されたデータアクセス要請に応じてデータの挿入、削除、または更新作業を行う。各ノード(例えば、第1ノード332、第2ノード334、または第3ノード336)は、データアクセス要請をマルチキャストを介して受信した後、データアクセス要請を処理する。データアクセス要請をマルチキャストするメッセージングチャネル320は、各ノードの立場におけるデータアクセス要請の順序を把握することができる。システム300はアクセス要請の順序を把握するため、システム300内の全てのノードを時間同期化してもよく、各要請に対するタイムスタンプを用いてもよい。システム300は、時間同期化のためにNTP(Network Time Protocol)を用いてもよい。したがって、メッセージングチャネル320は、複数のノードが互いに異なるデータを提供する場合、いずれのデータが正しいデータであるかを常に把握できる。したがって、システム300は、マルチマスタモデルを使用するにもかかわらず、読み出し補正を行うことなくクライアント310にデータを提供することができる。
【0105】
1つ以上のノード330のうち、特定ノードに障害が発生したり、1つ以上のノード330から特定ノードを削除するとき、または、1つ以上のノード330に特定ノードを追加するとき、メッセージングチャネル320は、障害、削除、または追加に関する情報を把握することができる。
【0106】
したがって、
図4及び
図5を参照して前述した方法は、便宜または目的などに応じてクラスタ内に複製(すなわち、ノード)を自由に追加及び削除できる柔軟な拡張性を提供することができる。また、前述した方法は、クラスタ内のいずれのノードでデータ照会を処理しても同一の結果を提供することができる。したがって、ロードバランシングの効果が提供される。
【0107】
図4及び
図5を参照して前述した実施形態では、1つ以上のノード330それぞれは、他のノードと直接的に通信せず、自身以外にはどのようなノードが存在するかも把握できないまま動作する。
【0108】
したがって、1つ以上のノード330に特定ノード(すなわち、複製)が追加または削除される場合、追加または削除の処理は、メッセージングチャネル320に対してのみ行われ、他のノードは追加または削除に影響を受けることなく動作することができる。
【0109】
例えば、システム拡張のために1つのノードが追加される場合、該当ノードはメッセージングチャネル320に該当ノードに関する情報を送信し、メッセージングチャネル320との接続を生成する。その後には、該当ノードが含んでいるデータアクセスの要請を受けてもよい。
【0110】
一方、メッセージングチャネル320は、各ノードの状態をチェックしてもよい。例えば、メッセージングチャネル320はハートビット(heartbeat)メッセージを周期的に受信したり、メッセージ送信に対する応答有無に基づいてシステムの障害有無を判別する。または、システム上、必要に応じて特定ノードを除去する場合、メッセージングチャネル320に除去されたノードに関する情報が送信されてもよい。もし、1つのノードに障害が発生したと判断されたり、特定ノードが除去される場合、メッセージングチャネル320は、該当ノードにこれ以上のメッセージを送信しない。このようにノードがなくなる場合、メッセージングチャネル320は、必要に応じて複製数を維持するための移動作業を指示してもよい。
【0111】
このようにシステム300、はノードの挿入、削除、または故障を容易に処理することができる。
【0112】
図6は、本発明の一実施形態に係るメッセージングチャネル320のブロック図である。
【0113】
メッセージングチャネル320は、受信部610、制御部620、及び送信部630を備える。
【0114】
受信部610は、ネットワークを介してデータを受信する。例えば、ステップS410及びステップS510で、受信部610はクライアント310からデータアクセス要請を受信する。また、ステップS440及びステップS540で、受信部610は、選択されたノードからデータアクセス要請の1つ以上のノード330へのマルチキャスト要請を受信する。
【0115】
制御部620は、例えば、ステップS420において、1つ以上のノード330のうち選択されるノードを決定する。制御部620はラウンドロビンまたはロードバランシングに基づいて1つ以上のノード330のうち選択されるノードを決定してもよい。
【0116】
送信部630は、ネットワークを介してデータを送信する。例えば、ステップS430において、送信部630は、選択されたノードにデータアクセス要請を送信する。また、ステップS450及びステップS540において、送信部630は、データアクセス要請を1つ以上のノード330にマルチキャストする。
【0117】
一方、メッセージングチャネル320は、ノード情報を管理する管理部(図示せず)をさらに備えてもよい。管理部は、ノードの情報、同一のデータの複製であるクラスタ情報を管理してもよく、メッセージングチャネル320がクラスタを1つの群として取り扱ってブロードキャスティングできるようにする。管理部では、ノードの追加または除去時に新しいノードに関する情報をアップデートしてもよい。
【0118】
先に
図1から
図5を参照して説明された本発明の一実施形態に係る技術的な内容が本実施形態にそのまま適用されてもよい。したがって、本詳細な説明は以下では省略する。
【0119】
図7は、本発明の一実施形態に係るデータ格納装置を示す図である。
【0120】
データ格納装置700は、1つ以上の格納領域710、720、730、740及び750を備えてもよい。ここで「格納領域」とは、データを格納する物理的または論理的な空間を意味する。例えば、「格納領域」とは、1つの関係型データベースまたはファイルシステム、あるいは同一のデータに対する複製の集合である分散クラスタであってもよい。
【0121】
データ格納装置700は、
図3から
図6を参照して説明した第1ノード332、第2ノード334及び第3ノード336の1つ以上に対応してもよい。
【0122】
各格納領域は、論理的にツリー形態の階層的な構造を有してもよい。言い換えれば、各格納領域は、ツリーにおける1つのノードに対応し、任意の2つの格納領域の間には2つの格納領域に対応するノード間の関係によって親−子関係または兄弟関係などが成り立つ。
【0123】
図7を参照すると、第1格納領域710はツリー構造のルートノードに、第2格納領域720及び第3格納領域730はそれぞれ第1格納領域710の右側の子ノード及び左側の子ノードに対応する。第1格納領域710は、第2格納領域720及び第3格納領域730の親格納領域である。第2格納領域720は、第1格納領域710の(左側)子格納領域である。第2格納領域720は、第3格納領域730の兄弟格納領域である。第4格納領域740及び第5格納領域750はそれぞれ第3格納領域730の左側の子ノード及び右側の子ノードに対応する。
【0124】
格納領域710、720、730、740及び750それぞれには、各格納領域を識別するためのキー(key)が割り当てられてもよい。このキーは、格納領域との間の階層構造を表すことができる形態で構成される。例えば、1つのキーは、1つ以上のサブキー(sub−key)及びこれを区分する区分子(separator)を含んで構成されてもよい。ここで、サブキーは、任意のサブツリー内の全てのノードを代表する値になる。
図7を参照すると、「korea」は第1格納領域710をルートにするサブツリーを代表するキーであり、「seoul」は第3格納領域730をルートにするサブツリーを代表するキーある。
図7において、「korea」、「kyeonggi」「seoul「kangbuk」「kangnam」などはそれぞれ1つのサブキーであり、「.」を区分子として用いて「korea.seoul.kangnam」のような1つのkeyを構成する。
【0125】
下記の数式(1)はこのように階層的なキーを示す正規式の一例である。
【数1】
(1)
ここで、keyは階層的なキーを示し、keyは英数字(alphanumeric)と区分子「.」で組合わせた文字列(string)である。
【0126】
一般的な英文字、数字及び区分子「.」を用いる場合、キーは数式(1)のように表わすことができるが、本発明はこれに限定されることなく他の文字を含んだり、または、他の形態の区分子を用いてもよい。また、キーが必ず1つの文字列で構成される必要はなく、例えば、リンクリスト(linked list)のような形態で構成してもよい。以下では区分子などに区分されたサブキーを順に第1サブキー、第2サブキー、..および第nサブキーとする。ルートノードのレベルを1とするとき、レベルnに位置するノードに対応する格納領域を識別するキーはn個のサブキーを含む。
【0127】
一方、ルートノードに対応する格納領域のキーは空白(null)であってもよい。このような場合、ルートノードは0個のサブキーを、レベルnに位置するノードに対応する格納領域を識別するキーはn−1個のサブキーを含んでもよい。例えば、階層的なキーは、数式(1)の正規式によって生成された文字列または空白文字列であってもよい。
【0128】
図7において、第1格納領域710に割り当てられたキー715は、「korea」である。キー715は、第1サブキー「korea」のみを有する。
【0129】
第2格納領域720に割り当てられたキー725は、「korea.gyeonggi」である。キー725は、第1サブキー「korea」及び第2サブキー「gyeonggi」を有する。第3格納領域730に割り当てられたキー735は、「korea.seoul」である。キー735は、第1サブキー「korea」及び第2サブキー「seoul」を有する。第4格納領域740に割り当てられたキー745は、「korea.seoul.kangbuk」である。キー735は、第1サブキー「korea」、第2サブキー「seoul」及び第3サブキー「kangbuk」を有する。第5格納領域750に割り当てられたキー755は、「korea.seoul.kangnam」である。キー755は、第1サブキー「korea」、第2サブキー「seoul」及び第3サブキー「kangnam」を有する。
【0130】
格納領域に割り当てられたキーは、格納領域の親格納領域のキーに1つ以上のサブキーが連鎖されたキーであってもよい。例えば、第4格納領域740に割り当てられたキーは、第4格納領域の親格納領域である第3格納領域730のキー「korea.seoul」にサブキー「kangbuk」が連鎖されたキーである。
【0131】
すなわち、格納領域p及び格納領域cが互いに親格納領域及び子格納領域の関係にある場合、親格納領域pのキーkpが第1サブキーsk1から第nサブキーsknを含むと(ここで、nは1以上の整数である)、子格納領域cのキーkcは第1サブキーsk1から第nsknを含み、第n+1サブキーsk(n+1)から第mサブキーskmを含んでもよい。ここで、mはn+1以上の整数である。
【0132】
本発明の一実施形態によると、データ格納装置700は、データを各格納領域のキーに応じて分類して格納する。データはキーを有する。データのキーは、データの分類体系に用いられる識別子である。データのキーは、データの分類体系の上位置を表してもよい。データ格納装置700内のツリー構造が分類体系を表す場合、データはデータのキー値に応じて特定の格納領域(または、格納領域のキー)に対応する。
【0133】
特定の格納領域を示すノードをルートにしたサブツリーにおいて、サブツリー内の格納領域は特定の格納領域のキーに対応するデータを格納する。
【0134】
例えば、第3格納領域730をルートにしたサブツリー760において、サブツリー760内の格納領域730、740及び750は、第3格納領域730のキー735「korea.seoul」に対応するデータを格納する。
【0135】
また、第4格納領域740をルートにしたサブツリーは、第4格納領域740のみを含む。したがって、第4格納領域740は、第4格納領域740のキー745「korea.seoul.kangbuk」に対応するデータを格納してもよい。
【0136】
また、第5格納領域750をルートにしたサブツリーは、第5格納領域750のみを含む。したがって、第5格納領域750は、第5格納領域750のキー755「korea.seoul.kangnam」に対応するデータを格納してもよい。
【0137】
ここで、格納領域のキーに対応するデータは、データのキーの接頭語(prefix)のいずれか1つが格納領域のキーと同一のデータを意味する。
【0138】
キーxの接頭語とは、階層的なキーxがn個のサブキーx1、x2、x3、...、xnを含むとき、xのサブキーのうちのi個(iは1以上n以下)のサブキーを含むキーを意味する。例えば、階層的なキー「a.b.c」の接頭語は「a」、「a.b」及び「a.b.c」であってもよい。
【0139】
例えば、データのキーが「korea.seoul.kangnam」であれば、「korea」、「korea.seoul」は前記キーの接頭語の1つであってもよい。したがって、前記データは、第1格納領域710のキー715「korea」及び第3格納領域730のキー735「korea.seoul」に対応して、第4格納領域740のキー745及び第5格納領域750のキー755には対応しない。
【0140】
例えば、データのキーが「korea.seoul.kangnam.shinsa」であれば、キーの接頭語は「korea」、「korea.seoul」、「korea.seoul.kangnam」であってもよい。データは、第1格納領域710のキー715、第3格納領域730のキー735及び第5格納領域750のキー755に対応する。
【0141】
データは、自らのキーに応じてデータ格納装置700の1つ以上の格納領域710、720、730、740及び750のいずれか1つの格納領域内に格納されてもよい。
【0142】
例えば、格納領域は、(1)格納領域のキーに対応し、(2)格納領域の子格納領域のキーには対応しないデータを格納してもよい。
【0143】
親格納領域pに対応するデータは、親格納領域pの子格納領域cにも対応する。データが格納領域p及び格納領域cに対応する場合、データは、格納領域pではない格納領域cをルートにしたサブツリー内の格納領域のいずれか1つの格納領域内に格納されてもよい。
【0144】
データのキーが「korea.seoul.kangnam.shinsa」または「korea.seoul.kangnam.shinsa.1」であれば、データは、第1格納領域710、第3格納領域730、及び第5格納領域750に対応する。データは第5格納領域750内に格納されてもよい。
【0145】
データのキーが「korea.gangwon」であれば、データは第1格納領域710に対応する。データは第1格納領域710内に格納されてもよい。
【0146】
前述のような格納方式が用いられる場合、階層的なキーによって実際のデータが位置する格納領域が検索されてもよい。すなわち、実際のデータが位置する格納領域は、階層的なキー全体またはキーの接頭語によって検索されてもよい。
【0147】
以下では、データのキーが「korea.seoul.kangnam.shinsa」であるデータが検索される場合の例について説明する。ルートノードに対応する第1格納領域710のキー715がデータのキーと比較される。データのキーの接頭語の1つである「korea」は、第1格納領域710のキー715と同一である。また、第3格納領域730及び第1格納領域710は互いに子−親の関係にある。データのキーの接頭語の1つである「korea.seoul」は、第3格納領域730のキー735と同一である。第5格納領域750及び第1格納領域710は互いに子−親の関係にある。データのキーの接頭語の1つである「korea.seoul.kangnam」は、第5格納領域750のキー755と同一である。したがって、キーが「korea.seoul.kangnam.shinsa」であるデータは、第1格納領域710及び第3格納領域730を経由して第5格納領域750内で検索されてもよい。
【0148】
以下は、データのキーが「korea.jejudo」であるデータが検索される場合について説明する。データのキーの接頭語の1つである「korea」は、第1格納領域710のキー715と同一である。データのキーの接頭語である「korea」及び「korea.jejudo」は、第2格納領域720のキー725及び第3格納領域730のキー735とは同一ではない。したがって、キーが「korea.jejudo」であるデータは第1格納領域710内で検索されてもよい。
【0149】
図8は、本発明の一例に係るデータ格納装置に格納領域を追加する過程を説明するための図である。
【0150】
図7を参照して前述したデータ格納装置700は、格納領域のキーである「korea」に対応するデータを格納するため、格納領域が追加されたと見なすことができる。
【0151】
初期状態810において、データ格納装置700は第1格納領域710のみを有する。
【0152】
第1格納領域710のキー715は「korea」である。したがって、キーが「korea」であるデータ、キーが「korea.gyeonggi」から始まるデータ、及びキーが「korea.seoul」から始まるデータは、全て第1格納領域710内に格納される。
【0153】
データ格納装置700が運用されることによって、特定の接頭語を有する(すなわち、特定の文字列から始まる)キーを有するデータ(例えば、「korea.seoul」)が多くなれば、データ格納装置700は、特定の接頭語をキーとして有する格納領域を追加してもよい。この追加は、データ格納装置700のツリー構造が拡張されることを意味する。すなわち、拡張は、データ格納装置700のツリー構造に新しい格納領域(または、新しい格納領域を示すノード)が追加されることを意味する。
【0154】
データが格納された状態820において、第1格納領域710は、キー715に対応する1つ以上のデータ860を格納する。
【0155】
第1格納領域710が1つ以上のデータ860を全て処理できない場合、新しい格納領域の追加が要求される。例えば、データ格納装置700は、下記の状態830、840及び850を経由して拡張されてもよい。
【0156】
ノード生成状態830で示すように、データ格納装置700は、第1格納領域710の子格納領域である第3格納領域730を生成してもよい。
【0157】
すなわち、第3キー735に対応するデータ(すなわち、データのキーが「korea.seoul」から始まるデータ)は、第3格納領域730に別個に分離されてもよく、分離後第3格納領域730によって処理されてもよい。
【0158】
追加通知状態840において、新しく生成された第3格納領域730は、自らの親格納領域である第1格納領域710に自らが処理するキー(すなわち、第3キー735)を通知してもよい。この通知は、格納領域の追加を通知するものである。
【0159】
データ移動状態850において、通知を受信した第1格納領域710は自らが格納したデータのうち通知された第3キー735に対応するデータ870を第3格納領域730に移動させる。例えば、通知を受信した第1格納領域710は、自らが格納したデータのうち通知された第3キー735に対応するデータ870を第3格納領域730にコピーしてもよい。コピーが完了すると、第1格納領域710は子格納領域(すなわち、第3格納領域730)が保有するデータを重複して保有する必要がない。したがって、1格納領域710は、自らが格納したデータのうち第3格納領域730にコピーされたデータを削除してもよい。削除の後、第1格納領域710は、第1キー715に対応するデータのうち第3キー735に対応しないデータを格納する。
【0160】
第3格納領域の第3キー735に対応するデータ870を第1格納領域710から第3格納領域730に移動することによって、第1格納領域710の格納量は減少する。
【0161】
データ格納装置700は、第1格納領域710に新しいデータが挿入されることによって第1格納領域710の格納量が予め定義された基準に達したとき、前述した第3格納領域730の生成及び第3格納領域730へのデータ移動を行なってもよい。
【0162】
拡張中に、データ格納装置700は(部分的または全体的に)中断されなくてもよい。また、拡張によってデータも自動で複製されてもよい。
【0163】
拡張中に、第3キー735に対応する新規の流入データは、拡張によって生成された子ノードに対応する第3格納領域730に送信される。
【0164】
データ格納装置700の縮小(すなわち、ツリーノードの削除)は、前述したデータ格納装置700の拡張の逆順に行なわれてもよい。
【0165】
図9は、本発明の一例に係るデータ格納装置に対する範囲検索を説明するための図である。
【0166】
特定の条件が満たされるデータを照会するためにクエリが用いられてもよい。クエリは、特定の検索範囲に対応するキーを有するデータ目録を質疑する文章であってもよい。
【0167】
データ格納装置700の格納領域710、720、730、740及び750の全てまたは一部は、クエリに対してデータを検索してもよい。格納領域710、720、730、740及び750の全てまたは一部によって検索された結果を併合することで、特定の格納領域710、720、730、740または750には格納されていないデータも検索されてもよい。
【0168】
クエリ提供状態910において、クエリは、任意の格納領域710、720、730、740または750に提供されてもよい。
【0169】
本発明の一実施形態では、ルートノードに対応する第1格納領域710にクエリが提供された場合を説明する。
【0170】
第1格納領域710は、送信されたクエリの分析によって自らの第1キー715がクエリに対応するか否かを判断する。ここで、第1キー715がクエリに対応することは、第1キーに対応するデータのうちクエリの検索範囲に含まれるデータが存在することを意味する。
【0171】
例えば、クエリの検索範囲が「usa.ar」から「usa.ca」までであれは、第1キー715「korea」に対応するデータは検索範囲内には含まれない。したがって、第1キー715はクエリに対応しない。
【0172】
もし、クエリに対応するデータがなければ、第1格納領域710はクエリに対して空白(null)を返還してもよく、または、これ以上の処理を行なわなくてもよい。
【0173】
クエリ送信状態920において、第1格納領域710は、自らの子格納領域である第2格納領域720及び第3格納領域730にクエリを送信してもよい。すなわち、第1格納領域710は、1つ以上の子格納領域(すなわち、第2格納領域720及び第3格納領域730)に検索範囲に対応するキーを有するデータの目録を要請してもよい。
【0174】
第2格納領域720及び第3格納領域730も自らの子格納領域にクエリを送信してもよい。すなわち、クエリの送信は階層的に行われてもよい。(図示せず)
【0175】
目録返還状態930において、第1格納領域710の1つ以上の子格納領域(例えば、第2格納領域720及び第3格納領域730)から検索範囲に対応するキーを有するデータの目録が返還されてもよい。
【0176】
また、クエリの送信が階層的に行われた場合、第2格納領域720及び第3格納領域730もそれぞれ自らの1つ以上の子格納領域から検索範囲に対応するキーを有するデータの目録が返還されてもよい。
【0177】
目録併合及び検索結果の返還状態940において、第1格納領域710は、検索語の検索範囲に対する結果として併合されたデータ目録を返還してもよい。
【0178】
第2格納領域720及び第3格納領域730が返還したデータの目録も併合されたデータ目録であってもよい。すなわち、併合されたデータ目録の返還は階層的に行われてもよい。
【0179】
第1格納領域710は、第1格納領域710が格納したデータのうち検索範囲に対応するデータの第2目録を返還された第1目録として併合してもよく、併合によって生成して併合された目録を検索語の検索範囲に対する結果として返還してもよい。
【0180】
前述したように、本発明の一例によって、キー・バリューDBまたはハッシュを用いることなく、範囲検索及び空間的なインデックスが支援され得る。
【0181】
図10は、本発明の一実施形態に係るデータ格納方法のフローチャートである。
【0182】
ステップS1010において、1つ以上の格納領域がツリー構造で構成される。1つ以上の格納領域それぞれ、はRDBMSであってもよい。
【0183】
ステップS1020において、1つ以上の格納領域それぞれに階層的なキーが割り当てられる。階層的なキーは0個以上のサブキーを有してもよい。階層的なキーは、前記の数式(1)の正規式によって生成された文字列であるか、空白文字列であってもよい。
【0184】
ステップS1030において、1つ以上の格納領域のうち、任意の第1格納領域を示す第1ノードをルートにしたサーバツリー内の格納領域内に第1格納領域の第1キーに対応するデータが格納される。
【0185】
第1キーは、第1ノードの親ノードを示す第2格納領域の第2キーに1つ以上のサブキーが連鎖されたキーである。
【0186】
第1キーに対応するデータは、データのキーの接頭語のうち1つが第1キーと同一であるデータを意味する。
【0187】
データのキーの接頭語のうち1つが格納領域のキーと同一であれば、データは格納領域に対応するものと見なすことができる。
【0188】
第1格納領域に対応するデータのうち、第1ノードの子ノードを示す第3格納領域に対応するデータは第3格納領域に格納され、第3格納領域に対応しないデータは第1格納領域に格納される。したがって、ステップS1030は、第1格納領域に対応するデータのうち、第1ノードの子ノードを示す格納領域に対応しないデータを第1格納領域に格納するステップを含んでもよい。
【0189】
先に
図7から
図9を参照して説明した本発明の一実施形態に係る技術的な内容は、本実施形態にもそのまま適用されてもよい。したがって、本詳細な説明は以下では省略する。
【0190】
図11は、本発明の一実施形態に係るデータ格納装置における拡張方法のフローチャートである。
【0191】
後述するステップS1110、S1120、S1130、及びS1140は、前述したステップS1030に含まれてもよい。
【0192】
ステップS1110において、第1格納領域の格納量が予め定義された基準に達するか否かを判定する。
【0193】
第1格納領域の格納量が予め定義された基準に達する場合は、ステップS1120が行われ、そうではない場合は、データの格納を行い終了する。
【0194】
ステップS1120において、第1格納領域の子格納領域の第3格納領域が生成される。
【0195】
ステップS1130において、第3格納領域は第1格納領域に自らの第3キーを通知する。
【0196】
ステップS1140において、第3格納領域の第3キーに対応するデータが第1格納領域から第3格納領域に移動する。
【0197】
ステップS1140は、(1)第3格納領域の第3キーに対応するデータが第1格納領域から第3格納領域にコピーされるステップ、及び(2)第1格納領域のデータのうち第3格納領域にコピーされたデータが削除されるステップを含んでもよい。
【0198】
先に
図7から
図10を参照して説明した本発明の一実施形態に係る技術的な内容は、本実施形態にそのまま適用されてもよい。したがって、本詳細な説明は以下では省略する。
【0199】
図12は、本発明の一例に係るデータ格納装置の範囲検索のフローチャートである。
【0200】
ステップS1210において、クエリが第1格納領域に提供される。
【0201】
クエリは、格納領域にクエリ内の検索範囲に対応するキーを有するデータを要請する文章である。
【0202】
ステップS1220において、クエリが第1格納領域の子格納領域に送信される。すなわち、第1格納領域は、1つ以上の子格納領域に検索範囲に対応するキーを有するデータの第1目録を要請する。
【0203】
ステップS1220は再帰的に行われてもよい。クエリが送信された第1格納領域の子格納領域は、クエリを自らの1つ以上の子格納領域に再送信してもよい。
【0204】
ステップS1230において、1つ以上の格納領域が第1目録を返還する。
【0205】
ステップS1240において、第1格納領域が格納したデータのうち検索範囲に対応するキーを有するデータの第2目録が返還された第1目録に併合されることで併合された目録を生成する。
【0206】
ステップS1230及びS1240は再帰的に行われてもよい。第1格納領域の子格納領域は、自らの1つ以上の子格納領域から検索範囲に対応するデータの第3目録が返還されてもよい。第1格納領域の子格納領域は、返還された第3目録を第1目録と併合してもよく、併合された第1目録を第1格納領域に返還してもよい。
【0207】
ステップS1250において、併合された目録が検索範囲に対する結果として返還される。
【0208】
先に
図7から
図11を参照して説明した本発明の一実施形態に係る技術的な内容は、本実施形態にそのまま適用されてもよい。したがって、本詳細な説明は以下では省略する。
【0209】
一実施形態に係る方法は、多様なコンピュータ手段によって行うことができるプログラム命令形態で実現され、コンピュータ読み出し可能媒体に記録されてもよい。記録媒体は、プログラム命令、データファイル、データ構造などを単独または組み合わせたものを含んでもよい。記録媒体及びプログラム命令は、本発明の目的のために特別に設計して構成されたものでもよく、コンピュータソフトウェア分野の技術を有する当業者にとって公知のものであり使用可能なものであってもよい。コンピュータ読取可能な記録媒体の例としては、ハードディスク、フロッピー(登録商標)ディスク及び磁気テープのような磁気媒体、CD−ROM、DVDのような光記録媒体、フロプティカルディスクのような磁気−光媒体、及びROM、RAM、フラッシュメモリなどのようなプログラム命令を保存して実行するように特別に構成されたハードウェア装置を含んでもよい。プログラム命令の例としては、コンパイラによって生成されるような機械語コードだけでなく、インタプリタなどを用いてコンピュータによって実行され得る高級言語コードを含む。上述のハードウェア装置は、本発明の動作を行うために1つ以上のソフトウェアモジュールとして作動するように構成してもよく、その逆も同様である。
【0210】
上述したように本発明を限定された実施形態と図面によって説明したが、本発明は、上記の実施形態に限定されることなく、本発明が属する分野における通常の知識を有する者であれば、このような実施形態から様々に修正及び変形が可能である。
【0211】
したがって、本発明の範囲は、開示された実施形態に限定して定められるものではなく、特許請求の範囲及び特許請求の範囲と均等なものなどによって定められるものである。