(57)【特許請求の範囲】
【請求項１】
データを管理するシステムであって、
データと当該データに対して一意に対応付けられたキーとの組を格納して管理するデータ管理部と、
前記キーを指定して行われた、当該キーに対応付けられた前記データにアクセスするためのアクセス要求を受け付けるアクセス管理部と、を備え、
前記データ管理部は、
アクセス対象となるデータの保存場所の情報を含む第１キーを当該データに対して一意に対応付けられたキーとして、当該データと当該第１キーとの組を格納した第１記憶部と、
前記第１キーをデータとし、当該第１キーが対応付けられたデータにアクセスする際に前記アクセス要求において指定されるキーである第２キーを当該第１キーに対して一意に対応付けられたキーとして、当該第１キーと当該第２キーとの組を格納した第２記憶部と、
所定の実行条件を満たした場合に、前記第１記憶部における前記データと前記第１キーとの組を当該第１記憶部の異なる領域に再配置する再配置部と、を備え、
前記第１記憶部は、
前記データと前記第１キーとの組における一つの組を格納するレコードのサイズが、予め定められた特定のサイズである第１領域と、
前記データと前記第１キーとの組における一つの組を格納するレコードのサイズが、当該組のデータ・サイズに応じて設定されたサイズである第２領域と、を備え、
前記再配置部は、再配置対象の前記データと前記第１キーとの組を当該組のデータ・サイズに適合するレコード・サイズを有する前記第２領域に再配置する、システム。
【請求項２】
前記再配置部は、再配置しようとする前記データと前記第１キーとの組のデータ・サイズに適合するレコード・サイズを有する前記第２領域が存在しない場合は、当該レコード・サイズを有する第２領域を増設し、増設した当該第２領域のレコードに当該組を格納する、請求項１に記載のシステム。
【請求項３】
前記再配置部は、前記実行条件として、前記第１記憶部の前記第１領域または前記第２領域に格納された前記データと前記キーとの組のうち、当該組のデータ・サイズが、当該組が格納されている当該第１領域または当該第２領域に対して設定された閾値よりも大きい場合に、当該組を他の第２領域に再配置する、請求項１に記載のシステム。
【請求項４】
前記再配置部は、前記実行条件として、前記第１記憶部の前記第１領域における前記データと前記キーとの組の保存場所を示すハッシュ値のコリジョンの重複度が予め設定された閾値よりも大きい場合に、当該組を前記第２領域に再配置する、請求項１に記載のシステム。
【請求項５】
前記アクセス要求に基づいて、新規の前記データと前記第２キーとを取得し、前記第１記憶部の前記第１領域における当該データの保存場所を特定して、当該保存場所の情報を含む前記第１キーを生成し、当該第１キーと当該データとの組を特定された当該保存場所に保存し、取得した当該第２キーと作成した当該第１キーとの組を作成し、前記第２記憶部に保存する保存制御部をさらに備える、請求項１に記載のシステム。
【請求項６】
前記再配置部は、前記データと前記第１キーとの組の再配置を行った場合に、当該第１キーに含まれる当該組の保存場所の情報を再配置後の保存場所の情報に置き換えて当該第１キーを更新し、前記第２記憶部に保存されている、再配置された前記データに対応する前記第２キーと前記第１キーとの組における当該第１キーを、再配置後の保存場所に基づいて更新した内容に置き換える、請求項５に記載のシステム。
【請求項７】
コンピュータによりデータを管理するためのプログラムであって、
前記コンピュータが実行することにより、当該コンピュータに、
第１の実行条件として、記憶部の第１領域または第２領域に格納されたデータとキーとの組のうち、当該組のデータ・サイズが、当該組が格納されている当該第１領域または当該第２領域に対して設定された閾値よりも大きいか否かを判断する処理と、
第２の実行条件として、前記記憶部の前記第１領域における前記データと前記キーとの組の保存場所を示すハッシュ値のコリジョンの重複度が予め設定された閾値よりも大きいか否かを判断する処理と、
前記第１の実行条件または前記第２の実行条件の何れかを満たす前記データと前記キーとの組が存在する場合に、当該組を前記第２領域に再配置する処理と、
を実行させる、プログラム。
【請求項８】
コンピュータにより、データを管理する方法であって、
前記コンピュータが、実行条件として、第１記憶部の第１領域または第２領域に格納されたデータとキーとの組のうち、当該組のデータ・サイズが、当該組が格納されている当該第１領域または当該第２領域に対して設定された閾値よりも大きいか否かを判断するステップと、
前記コンピュータが、前記実行条件として、前記第１記憶部の前記第１領域における前記データと前記キーとの組の保存場所を示すハッシュ値のコリジョンの重複度が予め設定された閾値よりも大きいか否かを判断するステップと、
前記コンピュータが、前記実行条件の何れかを満たす前記データと前記キーとの組が存在する場合に、当該組を前記第２領域に再配置するステップと、
を含む、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、キー・バリュー型ストア（ Key-Value Store ：ＫＶＳ）を対象とするデータの管理技術に関する。
【背景技術】
【０００２】
大量のデータに対して高速にアクセスする用途に適したデータ管理システムとしてキー・バリュー型ストア（ Key-Value Store ：以下、ＫＶＳ）がある。ＫＶＳでは、保存したいデータ（Ｖａｌｕｅ）に、任意のラベル（Ｋｅｙ）を付けて、（Ｋｅｙ，Ｖａｌｕｅ）のペアが保存される。そして、保存したデータを取得する際は、ラベル（Ｋｅｙ）を指定して、対応するデータ（Ｖａｌｕｅ）を取得する。ＫＶＳは、データを保存するサーバの追加等も容易であり、データを複数のデータ・サーバに分散させて保存するのにも適している。
【０００３】
ＫＶＳにおいて、キーとデータとのペアの保存先（サーバやパーティション）の選択は、通常は、予め設定されたキー値に対する固定的なルールに従って行われる。このルールとしては、ハッシュ関数を用いたキー値の範囲に基づく振り分け等が一般的である。この場合、ＫＶＳシステムには、キー値のハッシュ値を計算するハッシュ機構が設けられ、保存先の選択ルールは、このハッシュ機構内に記述される。
【０００４】
ＫＶＳに関する従来の技術として、下記の特許文献１には、ハッシュ関数にデータのアクセス・キーを入力し、ハッシュ関数の出力から、当該データを格納しているストレージノードの位置情報を得ることが開示されている。また、下記の特許文献２には、各ストレージノードに対するハッシュ値の範囲の割り当てを変更する場合に、第１のノードに割り当てるハッシュ値の範囲と、第２のノードに割り当てるハッシュ値の範囲との境界を、第１のハッシュ値から第２のハッシュ値にシフトさせることが開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１３−５０８３６号公報
【特許文献２】特開２０１３−４５３７８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ＫＶＳでは、キーとデータとのペア（以下、キー／データ・ペアと記載）の保存（インサート）先の記憶領域（パーティション）の選択は、通常は、ハッシュ関数等を用いたキー値に対する固定的なルールに従って行われる。しかし、キー・グループ毎のキーの発生数、キー毎のデータ・サイズや成長度合いは一様ではないため、パーティションにおける記憶領域の使用状況に偏りが生じる場合がある。
【０００７】
また、パーティションによっては、ＫＶＳのシステムの運用を続けるに伴い、重複度の高いコリジョンや、ハッシュ・バケットのサイズを超える大きなデータの発生によって、オーバー・フロー領域へデータが溢れる事象が頻発し、処理パフォーマンスの低下を招いたり、パーティション内の空き領域不足に陥ったりすることがあり得る。
【０００８】
このような状況を改善するための手段として、パーティショニングの再編成処理を行うことが考えられる。このパーティショニングの再編成処理では、キー値単位での保存先パーティションの変更や、ハッシュ値の生成ロジックの変更が必要となることも多い。そして、このようなキー値単位での保存先パーティションの変更や、ハッシュ値の生成ロジックの変更には、ＫＶＳシステムに設けられたハッシュ機構内のルールを変更することが必要である。この作業は、一般に、影響を受けるパーティション群を一定期間停止し、全データを一度アンロード（unload）した後にリロード（reload）する手順で行われる。このような大掛かりな作業を伴うため、パーティショニングの再編成処理は、一定の期間をおいて定期的に行われることが多かった。
【０００９】
しかし、アカウント毎のトランザクション量の急激な増加等、ＫＶＳの使用状況が短期間に大きく変動するような場合は、上記のような定期的な一括の再編成処理では十分に対応することができない。このような場合に対応するため、パフォーマンスの低下や空き領域不足等の症状のより重いところから優先的に、症状を改善する新たな技術が求められている。
【００１０】
本発明は、上記の課題に鑑み、ＫＶＳにおいて、具体的な使用状況に基づき、アクセス対象ごとに、個別的に保存先を再編成することが可能なシステムを実現することを目的とする。
【課題を解決するための手段】
【００１１】
上記の目的を達成するため、本発明は、次のようなシステムとして実現される。このシステムは、データを管理するシステムであって、データとこのデータに対して一意に対応付けられたキーとの組を格納して管理するデータ管理部と、このキーを指定して行われた、このキーに対応付けられたデータにアクセスするためのアクセス要求を受け付けるアクセス管理部と、を備える。データ管理部は、アクセス対象となるデータの保存場所の情報を含む第１キーをこのデータに対して一意に対応付けられたキーとし、このデータとこの第１キーとの組を格納した第１記憶部と、第１キーをデータとし、この第１キーが対応付けられたデータにアクセスする際にアクセス要求において指定されるキーである第２キーをこの第１キーに対して一意に対応付けられたキーとし、この第１キーとこの第２キーとの組を格納した第２記憶部と、所定の実行条件を満たした場合に、第１記憶部におけるデータと第１キーとの組を第１記憶部の異なる領域に再配置する再配置部と、を備える。第１記憶部は、データと第１キーとの組における一つの組を格納するレコードのサイズが、予め定められた特定のサイズである第１領域と、データと第１キーとの組における一つの組を格納するレコードのサイズが、この組のデータ・サイズに応じて設定されたサイズである第２領域と、を備える。再配置部は、再配置対象のデータと第１キーとの組を、この組のデータ・サイズに適合するレコード・サイズを有する第２領域に再配置する。
【００１２】
より好ましくは、再配置部は、再配置しようとするデータと第１キーとの組のデータ・サイズに適合するレコード・サイズを有する第２領域が存在しない場合は、このレコード・サイズを有する第２領域を増設し、増設した第２領域のレコードに再配置対象の組を格納する。
【００１３】
また、より詳細には、再配置部は、実行条件として、第１記憶部の第１領域または第２領域に格納されたデータとキーとの組のうち、いずれかの組のデータ・サイズが、この組が格納されている第１領域または第２領域に対して設定された閾値よりも大きい場合に、この組を他の第２領域に再配置する。あるいは、再配置部は、実行条件として、第１記憶部の第１領域におけるデータとキーとの組の保存場所を示すハッシュ値のコリジョンの重複度が予め設定された閾値よりも大きい場合に、この組を第２領域に再配置する。
【００１４】
また、上記のシステムは、アクセス要求に基づいて、新規のデータと第２キーとを取得し、第１記憶部の第１領域におけるデータの保存場所を特定して、保存場所の情報を含む第１キーを生成し、第１キーとデータとの組を特定された保存場所に保存し、取得した第２キーと作成した第１キーとの組を作成し、第２記憶部に保存する保存制御部をさらに備える構成としても良い。さらに、上記のシステムにおいて、再配置部は、データと第１キーとの組の再配置を行った場合に、この第１キーに含まれる組の保存場所の情報を再配置後の保存場所の情報に置き換えて第１キーを更新し、第２記憶部に保存されている、再配置された前記データに対応する第２キーと第１キーとの組における第１キーを、再配置後の保存場所に基づいて更新した内容に置き換えるようにしても良い。
【００１５】
また、上記の目的を達成する他の本発明は、次のような方法としても実現される。この方法は、コンピュータにより、データを管理する方法であって、データとこのデータに対して一意に対応付けられたキーとの組を格納して管理するデータ管理部と、このキーを指定して行われた、このキーに対応付けられたデータにアクセスするためのアクセス要求を受け付けるアクセス管理部と、を備え、データ管理部は、アクセス対象となるデータの保存場所の情報を含む第１キーをこのデータに対して一意に対応付けられたキーとし、このデータとこの第１キーとの組を格納した第１記憶部と、第１キーをデータとし、この第１キーが対応付けられたデータにアクセスする際にアクセス要求において指定されるキーである第２キーをこの第１キーに対して一意に対応付けられたキーとし、この第１キーとこの第２キーとの組を格納した第２記憶部と、所定の実行条件を満たした場合に、第１記憶部におけるデータと第１キーとの組を第１記憶部の異なる領域に再配置する再配置部と、を備え、第１記憶部は、データと第１キーとの組における一つの組を格納するレコードのサイズが、予め定められた特定のサイズである第１領域と、データと第１キーとの組における一つの組を格納するレコードのサイズが、この組のデータ・サイズに応じて設定されたサイズである第２領域と、を備えるシステムにおいて、再配置の実行条件として、第１記憶部の第１領域または第２領域に格納されたデータとキーとの組のうち、この組のデータ・サイズが、この組が格納されている第１領域または第２領域に対して設定された閾値よりも大きいか否かを判断するステップと、再配置の実行条件として、第１記憶部の第１領域におけるデータとキーとの組の保存場所を示すハッシュ値のコリジョンの重複度が予め設定された閾値よりも大きいか否かを判断するステップと、これらの実行条件の何れかを満たすデータとキーとの組が存在する場合に、再配置部により、実行条件を満たす組を第２領域に再配置するステップと、を含む。
【００１６】
さらにまた、本発明は、コンピュータを制御して上述した装置の各機能を実現するプログラム、あるいは、コンピュータに上記の各ステップに対応する処理を実行させるプログラムとしても実現される。このプログラムは、磁気ディスクや光ディスク、半導体メモリ、その他の記録媒体に格納して配布したり、ネットワークを介して配信したりすることにより、提供することができる。
【発明の効果】
【００１７】
本発明によれば、ＫＶＳにおいて、具体的な使用状況に基づき、アクセス対象ごとに、個別的に保存先を再編成することが可能となる。
【図面の簡単な説明】
【００１８】
【図１】本実施形態が適用されるＫＶＳシステムの構成例を示す図である。
【図２】データＫＶＳのキー／データ・ペアにおけるキー部の構成例を示す図である。
【図３】データＫＶＳの構造を説明する図であり、図３（ａ）は、アプリケーションから見たデータＫＶＳのセグメント階層構造の例を示す図、図３（ｂ）は、キーＫＶＳのキー／データ・ペアとデータＫＶＳのキー／データ・ペアとの関係を示す図である。
【図４】本実施形態における通常パーティションおよび特殊パーティションの構成例を示す図である。
【図５】優先パーティション・リストを説明する図であり、図５（ａ）は優先パーティション・リストの構成例を示す図、図５（ｂ）は優先パーティション・リストに登録される残数カウンター値の概念を説明する図である。
【図６】優先パーティション・リスト生成部による優先パーティション・リストの生成処理を示すフローチャートである。
【図７】キー／データ・ペア保存制御部によるキー／データ・ペアの配置処理を示すフローチャートである。
【図８】キー／データ・ペア保存制御部によるキー／データ・ペアの配置処理を示すフローチャートである。
【図９】再配置推奨キー・リスト生成部による再配置推奨キー・リストの生成処理を示すフローチャートである。
【図１０】データ再配置部によるキー／データ・ペアの再配置処理を示すフローチャートである。
【図１１】データＫＶＳ定義再編成部によるデータＫＶＳのデータベース定義の再編成処理のうち、キー／データ・ペアをアンロードする際の処理を示すフローチャートである。
【図１２】データＫＶＳ定義再編成部によるデータＫＶＳのデータベース定義の再編成処理のうち、キー／データ・ペアをリロードする際の処理を示すフローチャートである。
【図１３】本実施形態のＫＶＳシステムを構成するのに好適なハードウェア構成例を示す図である。
【発明を実施するための形態】
【００１９】
以下、添付図面を参照して、本発明の実施形態について詳細に説明する。
【００２０】
＜システム構成＞
図１は、本実施形態が適用されるＫＶＳシステムの構成例を示す図である。本実施形態が適用されるＫＶＳシステム１００は、データ管理部１１０と、優先パーティション・リスト生成部１２０と、再配置推奨キー・リスト生成部１３０と、を備える。また、本実施形態のＫＶＳシステム１００は、キー／データ・ペア保存制御部１４０と、データ再配置部１５０と、キーＫＶＳ再作成部１６０と、データＫＶＳ定義再編成部１７０と、を備える。また、本実施形態のＫＶＳシステム１００は、インターフェイス手段としてのアクセス管理部１０１、データ・アクセス・パス解決部１０２およびデータ編集部１０３と、データ管理部１１０の統計情報を扱う統計情報収集部１０４と、空き領域再編成部１０５と、を備える。
【００２１】
図１に示すように、本実施形態のＫＶＳシステム１００のアクセス管理部１０１は、外部装置２００のアプリケーション・ソフトウェア（以下、アプリケーションと称す）によるアクセスを受け付け、各種の処理を行う。このアクセス管理部１０１は、例えばＡＰＩ（Application Programming Interface）により実現される。外部装置２００のアプリケーションは、ＫＶＳシステム１００に対して、データに対応付けられたキー（キー/データ・ペアにおけるキー値）によるアクセス要求を行い、データの格納（インサート）の実行や、所望のデータを検索しての読み出し（リード）、更新（アップデート）および削除（デリート）等の処理を実行させることができる。
【００２２】
データ管理部１１０は、ＫＶＳによるデータ格納手段を備える。本実施形態では、ＫＶＳシステム１００にアクセスするアプリケーションによるアクセス対象となるデータ（アプリケーション・データ）を管理する第１記憶部としてのＫＶＳと、アプリケーションが認識するキー値（アプリケーション・キー）を管理する第２記憶部としてのＫＶＳとを個別に備える。以下、アプリケーション・キーを管理するＫＶＳ（第２記憶部）をキーＫＶＳ１１１とし、アプリケーション・データを管理するＫＶＳ（第１記憶部）をデータＫＶＳ１１２とする。
【００２３】
ＫＶＳは、管理対象のレコードにキー／データ・ペアを保存している。本実施形態において、キーＫＶＳ１１１に保存されるキー／データ・ペアは、キー部をアプリケーション・キーとし、データ部をデータＫＶＳ１１２のキー値を含む値とする。また、データＫＶＳ１１２に保存されるキー／データ・ペアは、キー部を所定の規則に基づいて設定されるキー／データ・ペアごとにユニークな固定長の値とし、データ部をアプリケーション・データとする。すなわち、本実施形態のデータ管理部１１０は、キーＫＶＳ１１１とデータＫＶＳ１１２という二重構造のＫＶＳによりアプリケーション・キーとアプリケーション・データとを関連付けて管理している。なお、データＫＶＳ１１２のキー／データ・ペアにおけるデータ部には、アプリケーション・キーの値が含まれるものとする。このアプリケーション・キー値は、例えば、キーＫＶＳ１１１のキー／データ・ペアを更新したり、キーＫＶＳ１１１を再作成したりする際に使用される。
【００２４】
キーＫＶＳ１１１において、キー／データ・ペアの保存先を選択するための選択ルールには、例えば、アプリケーション・キーの属性や分布に応じて選択された適当なハッシュ関数が用いられる。一方、データＫＶＳ１１２において、キー／データ・ペアの保存先を選択するための選択ルールには、適当なハッシュ関数を用いた特別の選択ルールが用意される。データＫＶＳ１１２の選択ルールの詳細は後述する。これらの選択ルールは、図示しないハッシュ機構に記述される。
【００２５】
データＫＶＳ１１２のキー／データ・ペアにおけるキー部について、さらに説明する。図２は、データＫＶＳ１１２のキー／データ・ペアにおけるキー部の構成例を示す図である。図２に示すキー部１０の値は、三つの部分値１０ａ、１０ｂ、１０ｃで構成される。
【００２６】
部分値１０ａは、キー部１０に対応するデータ部に記録されるアプリケーション・データごとに個別に割り当てられた固有値である。この部分値１０ａは、データＫＶＳ１１２全体でユニークな値であれば、どのようにして設定された値であっても良い。例えば、配置（インサート）時や再配置時のＵＴＣタイムスタンプの値にアプリケーションのコンテナの識別情報の値を付加して個別性を保証した値などとすることができる。また、ハッシュ値による検索効率が良いならば、アプリケーション・キーの値をそのまま部分値１０ａとして用いても良い。図２に示す例では、サーバー・インスタンスＩＤ（‘ＩＭＳＡ’）、アプリケーション・コンテナの識別情報（‘１２３４’ｘ）、ＵＴＣタイムスタンプ（‘２０１３０３２５１３２４１８０９２１３４’ｘ）を組み合わせた値が部分値１０ａとして示されている。
【００２７】
部分値１０ｂは、キー／データ・ペアが保存されるパーティション（以下、所属パーティション）の識別情報の値である。部分値１０ｃは、所属パーティションでのアプリケーション・キーのハッシュ値である。データＫＶＳ１１２は、部分値１０ｃが非負値である場合は、部分値１０ｂおよび部分値１０ｃにより、キー／データ・ペアの保存先としての所属パーティションおよびそのパーティション内でのハッシュ・バケットを決定する。一方、データＫＶＳ１１２は、部分値１０ｃが負値である場合は、部分値１０ａ、１０ｂを組み合わせた値のハッシュ値を計算し、部分値１０ｃを算出されたハッシュ値に置き換えて所属パーティション内でのハッシュ・バケットを決定する。
【００２８】
図１に戻り、本実施形態のデータ管理部１１０は、データＫＶＳ１１２により管理されるパーティションとして、初期的に用いられる第１領域としての通常パーティション１１２ａと、特別のキー／データ・ペアの再配置先として用いられる第２領域としての特殊パーティション１１２ｂとを有する。通常パーティション１１２ａに対しては、外部装置２００のアプリケーションによるデータの格納（インサート）指示に基づいてキー／データ・ペアの格納が行われる。特殊パーティション１１２ｂに対しては、データ再配置部１５０の制御により、通常パーティション１１２ａから移される形でキー／データ・ペアの格納が行われる。通常パーティション１１２ａおよび特殊パーティション１１２ｂの詳細については後述する。なお、以下の説明において、通常パーティション１１２ａと特殊パーティション１１２ｂとを特に区別する必要がない場合は、パーティション１１２ａ、１１２ｂと記載する。
【００２９】
本実施形態のＫＶＳシステム１００は、アクセス管理部１０１により外部装置２００からのアプリケーション・データの検索要求を受け付けると、データ・アクセス・パス解決部１０２によりそのアプリケーション・データへのアクセス・パスを決定（解決）し、検索処理を実行する。データ・アクセス・パス解決部１０２によるアクセス・パスの決定は、データ管理部１１０のデータベース（データストア）構造を定義したデータベース定義（ＤＢＤ）に基づいて行われる。データ・アクセス・パス解決部１０２の機能は、本実施形態のデータ管理部１１０のデータベース構造に基づくデータベース定義を用いることを除き、既存のＫＶＳシステムにおけるアクセス・パスの決定手段と同様である。
【００３０】
また、ＫＶＳシステム１００は、外部装置２００からのアプリケーション・データの検索要求に基づく検索結果が得られると、データ編集部１０３により外部装置２００へ返す検索結果のデータを編集し、アクセス管理部１０１により外部装置２００へ返送する。検索結果のデータの編集は、外部装置２００のアプリケーションに対して設定されたビュー定義（ＰＳＢ）に基づいて行われる。データ編集部１０３の機能は、既存のＫＶＳシステムにおける検索結果のデータの編集手段と同様である。
【００３１】
統計情報収集部１０４は、定期的にデータＫＶＳ１１２のパーティション１１２ａ、１１２ｂの空き領域について統計情報を収集する。統計情報としては、既存のＫＶＳシステムにおいて収集される統計情報と同様に、例えば、オーバー・フロー領域の使用状況、空き領域の状況、これらのＩ／Ｏパフォーマンスへの影響、ハッシュ・コリジョンの重複度（シノニム長）とその分布等の情報が収集される。
【００３２】
空き領域再編成部１０５は、アプリケーション・データの再配置が行われた際等に、データＫＶＳ１１２における各パーティション１１２内の空き領域を再編成する。空き領域再編成部１０５の機能は、既存のＫＶＳシステムにおいてデータの再配置等に伴い記憶装置の空き領域を再編成する手段と同様である。
【００３３】
また、本実施形態のＫＶＳシステム１００において、優先パーティション・リスト生成部１２０は、統計情報収集部１０４により収集された統計情報に基づいて、優先パーティション・リストを生成する。また、優先パーティション・リスト生成部１２０は、ＫＶＳシステム１００の運用に伴って統計情報収集部１０４により収集された統計情報が更新された場合は、更新された統計情報に基づいて優先パーティション・リストを更新する。この優先パーティション・リストは、新規にアプリケーション・データ（キー／データ・ペア）が保存される際に、そのアプリケーション・データの格納先として優先的に選択される対象となるパーティションのリストである。また、優先パーティション・リストは、データＫＶＳ１１２に対して一つ生成される。優先パーティション・リストの詳細については後述する。
【００３４】
再配置推奨キー・リスト生成部１３０は、統計情報収集部１０４により収集された統計情報に基づいて、再配置推奨キー・リストを生成する。また、再配置推奨キー・リスト生成部１３０は、ＫＶＳシステム１００の運用に伴って統計情報収集部１０４により収集された統計情報が更新された場合は、更新された統計情報に基づいて再配置推奨キー・リストを更新する。この再配置推奨キー・リストは、データ量が非常に多いキー値およびコリジョンの多いハッシュ値を持つキー値のリストである。また、再配置推奨キー・リストは、特殊パーティション１１２ｂを含むデータＫＶＳ１１２の全てのパーティションの各々に対して一つずつ生成される。再配置推奨キー・リストの詳細については後述する。
【００３５】
キー／データ・ペア保存制御部１４０は、新規にアプリケーション・データ（キー／データ・ペア）が保存される際に、上記の優先パーティション・リストを参照して、空きハッシュ・バケットのより多い通常パーティション１１２ａに優先的にアプリケーション・データを格納する。これにより、アプリケーション・データの新規格納に伴ってデータＫＶＳ１１２の通常パーティション１１２ａ間におけるデータ量の偏りが発生することを、軽減することができる。
【００３６】
データ再配置部１５０は、上記の再配置推奨キー・リストで特定されるデータＫＶＳ１１２の各パーティション１１２ａ、１１２ｂ内のアプリケーション・データを、そのデータの特性に応じた適切な特殊パーティション１１２ｂに再配置する。このアプリケーション・データの再配置は、再配置推奨キー・リストの更新に応じて、随時、選択的に実行される。これにより、ハッシュ・コリジョンや、データＫＶＳ１１２のオーバー・フロー領域へのデータのあふれを解消または緩和することができる。
【００３７】
キーＫＶＳ再作成部１６０は、データＫＶＳ１１２のパーティション１１２ａ、１１２ｂ内のキー／データ・ペアから、データ部（アプリケーション・データ）に含まれるアプリケーション・キーの値を抽出する。そして、アプリケーション・キーを抽出したデータＫＶＳ１１２におけるキー／データ・ペアのキー部（以下、データＫＶＳキーと呼ぶ）の値と抽出したアプリケーション・キーの値を用いて、キーＫＶＳ１１１のキー／データ・ペアを再作成する。
【００３８】
データＫＶＳ定義再編成部１７０は、データＫＶＳ１１２のパーティション１１２ａ、１１２ｂからアンロードしたキー／データ・ペアを、新しいデータベース定義に従ってアロケーションされたパーティション１１２ａ、１１２ｂにリロードすることにより、データＫＶＳ１１２を再編成する。そして、データＫＶＳ１１２へのキー／データ・ペアのリロード後に、再編成されたデータＫＶＳ１１２のパーティション１１２ａ、１１２ｂの内容に基づき、キーＫＶＳ再作成部１６０によりキーＫＶＳ１１１のキー／データ・ペアが再作成される。
【００３９】
＜キーＫＶＳの構造＞
次に、本実施形態のデータ管理部１１０におけるキーＫＶＳ１１１の構造について説明する。本実施形態のキーＫＶＳ１１１は、固定長ルート・セグメントのみを備える。この固定長ルート・セグメントは、アプリケーション・キーを保管するフィールドを持つ。このフィールドは、キーＫＶＳ１１１の順序キー（主キー）・フィールドに相当し、かつ、データ管理部１１０における（データＫＶＳ１１２に対する）２次索引としての順序キー・フィールドに相当する。また、この固定長ルート・セグメントは、アプリケーション・キー値に対応するデータＫＶＳ１１２のキー値を保管するフィールドを持つ。このフィールドは、キーＫＶＳ１１１のキー／データ・ペアにおけるデータ部に相当し、かつ、データ管理部１１０における２次索引としての索引ポインター・フィールドに相当する。
【００４０】
本実施形態では、直接アクセスによるキーＫＶＳのキー値の更新を高速に行うことを可能とするため、キーＫＶＳ１１１として、ハッシュ・テーブル方式のＫＶＳを用いる。キーＫＶＳ１１１のハッシュ機構としては、通常のデータベース等で用いられるハッシュ・ルーチンを利用することが可能である。ただし、アプリケーション・キーがグルーピング可能なものである場合は、保守・運用の観点から、グループ毎にパーティションに分け、キー値中のグループ識別情報でパーティションを選択してからキー・ハッシュを行うようにしても良い（２段階ハッシング）。また、キー範囲を指定しての検索、キー順アクセスの効率性の観点から、ルート・セグメントの物理的な保管位置が上記のグループごとにキー値順にクラスタリングされるような特殊なハッシュ・ルーチンを用いても良い。
【００４１】
＜データＫＶＳの構造＞
次に、本実施形態のデータ管理部１１０におけるデータＫＶＳ１１２の構造について説明する。図３は、データＫＶＳ１１２の構造を説明する図である。図３（ａ）は、アプリケーションから見たデータＫＶＳ１１２のセグメント階層構造の例を示し、図３（ｂ）は、キーＫＶＳ１１１のキー／データ・ペアとデータＫＶＳ１１２のキー／データ・ペアとの関係を示す。図３（ｂ）に示すように、キーＫＶＳ１１１は、データＫＶＳ１１２に対する２次索引に相当する。
【００４２】
本実施形態のデータＫＶＳ１１２には、複数のパーティションが設定される。図３（ａ）の例に示す、アプリケーションから見たセグメント階層構造（木構造）、いわゆるデータベース・レコードが、データＫＶＳ１１２のキー／データ・ペアにおけるデータ部に相当する。ただし、ルート・セグメント中のアプリケーション・キーは、通常のフィールド（アプリケーション・キー・フィールド）として定義する。また、図２を参照して説明したデータＫＶＳキーの構造に基づいて定義される順序キー・フィールドをルート・セグメントの先頭に定義し、この定義された順序キー・フィールドを、データＫＶＳ１１２における順序キー・フィールドとする。そして、上記のアプリケーション・キー・フィールドを、図３（ｂ）に示すように２次索引として見たキーＫＶＳ１１１の検索フィールドとし、データ部のルート・セグメントをターゲット・セグメントとする。
【００４３】
データＫＶＳ１１２のハッシュ機構において、ハッシュ・ルーチンは、例えば、既存のデータベースにおけるハッシュ機構に用いられる通常のランダマイジング・ルーチンを利用することができる。
【００４４】
＜データＫＶＳのパーティション構造＞
次に、データＫＶＳ１１２のパーティション１１２ａ、１１２ｂの構造について、詳細に説明する。上述したように、本実施形態のＫＶＳシステム１００のデータ管理部１１０に設けられたデータＫＶＳ１１２は、通常パーティション１１２ａと特殊パーティション１１２ｂという２種類のパーティションを有している。各パーティション１１２ａ、１１２ｂは、格納されるキー／データ・ペアが増加するにしたがって、適宜増設される。
【００４５】
通常パーティション１１２ａには、キー／データ・ペアを格納するレコードのサイズとして、予め定められた固定長のハッシュ・バケット・サイズ（ＶＳＡＭ  ＣＩサイズ）が設定されている。このハッシュ・バケット・サイズは、ＫＶＳシステム１００における平均的なアプリケーション・データ長（データベース・レコード長）に基づいて決定される。例えば、初期的には適当なアプリケーション・データ長を設定しておき、実際にＫＶＳシステム１００が運用されて、パーティショニングの再編成等が行われる際に、統計情報収集部１０４により収集された統計情報に基づいて設定し直すことができる。
【００４６】
特殊パーティション１１２ｂには、キー／データ・ペアを格納するレコードのサイズとして、具体的なアプリケーション・データ長に応じて特定されるハッシュ・バケット・サイズが、個々の特殊パーティション１１２ｂごとに個別に設定される。また、既にもうけられている通常パーティション１１２ａまたは特殊パーティション１１２ｂのハッシュ・バケット・サイズよりも大きなアプリケーション・データが発生した場合は、そのアプリケーション・データのキー／データ・ペアを格納可能なハッシュ・バケット・サイズの特殊パーティション１１２ｂが新たに設けられる。
【００４７】
図４は、本実施形態における通常パーティション１１２ａおよび特殊パーティション１１２ｂの構成例を示す図である。各パーティション１１２ａ、１１２ｂには、後述するように設定されるサイズのハッシュ・バケットが設けられると共に、ハッシュ・バケットのサイズを超える大きなデータを一時的に受け付けるためのオーバー・フロー領域が設けられている。各パーティション１１２ａ、１１２ｂのハッシュ・バケットの個数とオーバー・フロー領域のサイズは、データ量に応じて調整される。例えば、初期的には適当なハッシュ・バケットの個数とオーバー・フロー領域のサイズとを設定しておき、実際にＫＶＳシステム１００が運用されて、パーティショニングの再編成等が行われる際に、統計情報収集部１０４により収集された統計情報に基づいて設定し直すことができる。
【００４８】
図４に示す例において、通常パーティション１１２ａは複数設けられている。そして、各通常パーティション１１２ａのハッシュ・バケット・サイズは、例示として４ＫＢに設定されている。
【００４９】
また、図４に示す例において、特殊パーティション１１２ｂは、ハッシュ・バケット・サイズが４ＫＢのもの、ハッシュ・バケット・サイズが８ＫＢのもの、ハッシュ・バケット・サイズが１２ＫＢのもの、ハッシュ・バケット・サイズが１６ＫＢのもの、ハッシュ・バケット・サイズが２０ＫＢのもの、ハッシュ・バケット・サイズが２４ＫＢのものが、それぞれ設定されている。例えば、ハッシュ・バケット・サイズが４ＫＢの特殊パーティション１１２ｂは、データＫＶＳキーの長さを考慮して、アプリケーション・データ長が３．２ＫＢ以下のアプリケーション・データの格納用に用いられる。また、ハッシュ・バケット・サイズが８ＫＢの特殊パーティション１１２ｂは、３．２ＫＢより大きく、６．４ＫＢ以下のアプリケーション・データの格納用に用いられる。また、ハッシュ・バケット・サイズが１２ＫＢの特殊パーティション１１２ｂは、６．４ＫＢより大きく、９．６ＫＢ以下のアプリケーション・データの格納用に用いられる。また、ハッシュ・バケット・サイズが１６ＫＢの特殊パーティション１１２ｂは、９．６ＫＢより大きく、１２．８ＫＢ以下のアプリケーション・データの格納用に用いられる。また、ハッシュ・バケット・サイズが２０ＫＢの特殊パーティション１１２ｂは、１２．８ＫＢより大きく、１６ＫＢ以下のアプリケーション・データの格納用に用いられる。また、ハッシュ・バケット・サイズが２４ＫＢの特殊パーティション１１２ｂは、１６ＫＢより大きいアプリケーション・データの格納用に用いられる。
【００５０】
図４に示すように、特殊パーティション１１２ｂは、通常パーティション１１２ａよりもハッシュ・バケット・サイズが大きいものだけでなく、通常パーティション１１２ａと同じサイズ（図示の例では４ＫＢ）のものを設けることができる。また、図４には、ハッシュ・バケット・サイズごとに一つの特殊パーティション１１２ｂが記載されているが、対応するアプリケーション・データの量に応じて、各ハッシュ・バケット・サイズに対して複数の特殊パーティション１１２ｂを設けることもできる。なお、特に図示していないが、ハッシュ・バケット・サイズが２４ＫＢの特殊パーティション１１２ｂに格納できないアプリケーション・データ（例えば１９．２ＫＢより大きいアプリケーション・データ）が発生した場合は、そのアプリケーション・データの格納用に、ハッシュ・バケット・サイズのさらに大きい特殊パーティション１１２ｂを新たに増設することができる。
【００５１】
＜アプリケーション・データの格納および再配置＞
本実施形態では、ＫＶＳシステム１００のデータ管理部１１０にアプリケーション・データ（キー／データ・ペア）が保存される場合、新規なキー／データ・ペアは、まず通常パーティション１１２ａに配置される。そして、ハッシュ・コリジョンの重複度が大きくなってアプリケーション・データを再配置する必要が生じた場合や、通常パーティション１１２ａのデータベース・レコード長を超えるアプリケーション・データを格納する必要が生じた場合等に、これらのアプリケーション・データのキー／データ・ペアは、特殊パーティション１１２ｂに再配置される。
【００５２】
通常パーティション１１２ａにキー／データ・ペアを配置する際の保存先は、優先パーティション・リスト生成部１２０により生成される優先パーティション・リストに基づいて決定される。また、特殊パーティション１１２ｂへの再配置が必要なキー／データ・ペアは、再配置推奨キー・リスト生成部１３０により生成される再配置推奨キー・リストに基づいて決定される。特殊パーティション１１２ｂにキー／データ・ペアを再配置する際の保存先は、再配置されるキー／データ・ペアのサイズ等に応じて決定される。
【００５３】
＜優先パーティション・リストの生成＞
ここで、優先パーティション・リスト生成部１２０による優先パーティション・リストの生成処理について説明する。優先パーティション・リスト生成部１２０は、まず、統計情報収集部１０４から、空きハッシュ・バケットの個数とハッシュ・コリジョンの重複数の平均値に対して設定された閾値とを受け取る。そして、この統計情報および閾値に基づいて、閾値を超えるデータＫＶＳ１１２の通常パーティション１１２ａに関する優先パーティション・リストを作成する。なお、上記の閾値は、予め定められた規則にしたがって機械的に設定しても良いし、ユーザによる入力を受け付けて設定しても良い。
【００５４】
図５は、優先パーティション・リストを説明する図であり、図５（ａ）は優先パーティション・リストの構成例を示す図、図５（ｂ）は優先パーティション・リストに登録される残数カウンター値の概念を説明する図である。図５（ａ）に示す例において、優先パーティション・リスト１２１の各エントリーは、「パーティション識別子」、「残数カウンター」の二つのフィールドを持ち、「残数カウンター」の値の降順にソートされている。なお、図５（ａ）に示す優先パーティション・リスト１２１の構成は、例示に過ぎず、図示の情報以外の情報（例えば、コリジョン数の最大値、最小値、平均値など）を含んで構成されても良い。また、各エントリーにおけるフィールドの順番は任意で良い。
【００５５】
図５（ｂ）に示すように、残数カウンターは、各エントリーに対応する各パーティションの空きハッシュ・バケット数から、空きハッシュ・バケット数に対して設定された閾値を引いた値である。図５（ｂ）に示す例では、９個の空きハッシュ・バケットを有するパーティション（図５（ａ）によればパーティション「０００３」）、８個の空きハッシュ・バケットを有するパーティション（図５（ａ）によればパーティション「０００５」）、６個の空きハッシュ・バケットを有するパーティション（図５（ａ）によればパーティション「０００１」）、５個の空きハッシュ・バケットを有するパーティション（図５（ａ）によればパーティション「０００７」）、２個の空きハッシュ・バケットを有するパーティション（図５（ａ）によればパーティション「０００４」）、が存在する。そして、合計で３０個の空きハッシュ・バケットがあることがわかる。
【００５６】
この残数カウンターの値は、その残数カウンターに対応する通常パーティション１１２ａに新規のキー／データ・ペアが保存されるたびに、１だけ減じられる。そして、残数カウンター値の総和が、予め設定された閾値（例えば、一定期間における新規なキー／データ・ペアのインサート数の平均値など）を下回った時には、データ管理部１１０に、通常パーティション１１２ａが増設される。そして、増設された通常パーティション１１２ａ用のエントリーが優先パーティション・リストに追加される。
【００５７】
図６は、優先パーティション・リスト生成部１２０による優先パーティション・リストの生成処理を示すフローチャートである。優先パーティション・リストの生成処理は、例えば、定期的に、あるいは一定数の新規のキー／データ・ペアの保存が行われた場合等のタイミングで行われる。
【００５８】
図６に示す例において、優先パーティション・リスト生成部１２０は、まず、一つの通常パーティション１１２ａを選択し（ステップ６０１）、統計情報収集部１０４から選択した通常パーティション１１２ａに関するハッシュ・コリジョン数の分布情報を取得する（ステップ６０２）。そして、優先パーティション・リスト生成部１２０は、取得したハッシュ・コリジョン数の分布情報から、ひとつもキーが割り当てられていないハッシュ値の数（空きハッシュ・バケット数に相当）と、ハッシュ・コリジョンの重複度の平均値とを抽出する（ステップ６０３）。
【００５９】
次に、優先パーティション・リスト生成部１２０は、抽出したハッシュ・コリジョンの重複度の平均値（Ｍ１）が閾値（Ｔ１）よりも小さく、かつ、抽出した空きハッシュ・バケット数（ＨＢ１）が閾値（Ｔ２）を超えているか否かを判断する（ステップ６０４）。ハッシュ・コリジョンの重複度の平均値（Ｍ１）が閾値（Ｔ１）以上か、または、空きハッシュ・バケット数（ＨＢ１）が閾値（Ｔ２）以下である場合は、優先パーティション・リスト生成部１２０は、ステップ６０１に戻り、未処理の一つの通常パーティション１１２ａを選択して同様の処理を行う。
【００６０】
抽出したハッシュ・コリジョンの重複度の平均値（Ｍ１）が閾値（Ｔ１）よりも小さく、かつ、抽出した空きハッシュ・バケット数（ＨＢ１）が閾値（Ｔ２）を超えている場合は、優先パーティション・リスト生成部１２０は、抽出した空きハッシュ・バケット数（ＨＢ１）から閾値（Ｔ２）を引いた値（残数カウンター値）と、着目中の通常パーティション１１２ａのパーティション識別子と、を付加したレコードを作成し、中間ファイルに書き出す（ステップ６０５）。そして、優先パーティション・リスト生成部１２０は、全ての通常パーティション１１２ａに関してステップ６０５までの処理を行ったか否かを判断し、通常パーティション１１２ａが存在している場合は、ステップ６０１に戻り、処理を繰り返す（ステップ６０６）。
【００６１】
全ての通常パーティション１１２ａに対してステップ６０６までの処理が済んだ後、優先パーティション・リスト生成部１２０は、ステップ６０６までの処理で作成された中間ファイルが空か、または、残数カウンター値の総和（ＣＳ１）が閾値（Ｔ３）を下回っているか否かを判断する（ステップ６０７）。中間ファイルが空でなく、かつ、残数カウンター値の総和が閾値（Ｔ３）以上である場合、優先パーティション・リスト生成部１２０は、中間ファイルに記録されているレコードを空きハッシュ・バケット数の降順にソートして、優先パーティション・リストを作成する（ステップ６０８）。
【００６２】
一方、中間ファイルが空か、または、残数カウンター値の総和が閾値（Ｔ３）を下回っている場合は、優先パーティション・リスト生成部１２０は、新規の通常パーティション１１２ａを一つ追加する（ステップ６０９）。追加された新規の通常パーティション１１２ａには固有のパーティション識別子が与えられる。そして、優先パーティション・リスト生成部１２０は、追加したパーティションのハッシュ・バケット数から閾値（Ｔ２）を引いた数（残数カウンター値）と、追加したパーティションのパーティション識別子と、を含む優先パーティション・リストのエントリーを１つ作り、中間ファイルに追加する（ステップ６１０）。この後、優先パーティション・リスト生成部１２０は、中間ファイルに記録されているレコードを空きハッシュ・バケット数の降順にソートして、優先パーティション・リストを作成する（ステップ６０８）。
【００６３】
上記のようにして作成された優先パーティション・リストは、キー／データ・ペア保存制御部１４０のメモリに保存され、データＫＶＳ１１２に対して新規にキー／データ・ペアを保存する際に、保存先を決定するために使用される。優先パーティション・リストの更新は、次のようにして行われる。まず、上記のようにして新たな優先パーティション・リストが作成されると、キー／データ・ペア保存制御部１４０は、この新たな優先パーティション・リストをメモリにロードする。そして、キー／データ・ペア保存制御部１４０は、メモリにロードした優先パーティション・リストに対し、現エントリー・ポインタを設定し、このポインタの指すエントリーで指定されるパーティションを、次のキー／データ・ペアの格納先とする。なお、キー／データ・ペア保存制御部１４０における優先パーティション・リストの更新処理は、例えば、夜間などのトランザクション量の少ない時間帯に行うことにより、本実施形態のＫＶＳシステム１００を利用するアプリケーション処理への影響を抑制することが可能である。
【００６４】
＜キー／データ・ペアの配置処理＞
次に、キー／データ・ペア保存制御部１４０による通常パーティション１１２ａへのキー／データ・ペアの配置処理（アプリケーション・データを新規に通常パーティション１１２ａに格納する処理）について説明する。キー／データ・ペア保存制御部１４０は、外部装置２００のアプリケーションからアプリケーション・データの格納要求を受け付けると、メモリに保存されている優先パーティション・リストを参照して格納先の通常パーティション１１２ａを決定した後、データＫＶＳ１１２のハッシュ機構によりハッシュ・バケットを特定するハッシュ値を生成し、そのアプリケーション・データについてのキー／データ・ペアを格納する。
【００６５】
図７および図８は、キー／データ・ペア保存制御部１４０によるキー／データ・ペアの配置処理を示すフローチャートである。図７に示すように、キー／データ・ペア保存制御部１４０は、アプリケーション・データ（キー／データ・ペア）の格納要求を受け付けると（ステップ７０１）、データＫＶＳ１１２のキー値生成用領域（フィールド）を準備する（ステップ７０２）。
【００６６】
次に、キー／データ・ペア保存制御部１４０は、優先パーティション・リストにおいて現エントリー・ポインタにより指されるエントリー（現エントリー）の残数カウンター値（ＰＣ値）がゼロ（０）か否かを判断する（ステップ７０３）。現エントリーの残数カウンター値がゼロでない場合、次にキー／データ・ペア保存制御部１４０は、現エントリーが優先パーティション・リストにおける最上位のエントリーか否かを判断する（ステップ７０４）。現エントリーが最上位のエントリーである場合、キー／データ・ペア保存制御部１４０は、現エントリーの残数カウンター値を１減ずる（ステップ７０７）。
【００６７】
現エントリーが最上位のエントリーでない場合、次にキー／データ・ペア保存制御部１４０は、現エントリーの残数カウンター値（ＰＣ値）が優先パーティション・リストにおける一つ上位のエントリーの残数カウンター値（ＨＣ値）よりも１だけ多い値か否かを判断する（ステップ７０５）。現エントリーの残数カウンター値が一つ上位のエントリーの残数カウンター値よりも１だけ多い値である場合、キー／データ・ペア保存制御部１４０は、現エントリーの残数カウンター値を１減ずる（ステップ７０７）。
【００６８】
一方、現エントリーの残数カウンター値が一つ上位のエントリーの残数カウンター値よりも１だけ多い値でない場合、キー／データ・ペア保存制御部１４０は、優先パーティション・リストの最上位のエントリーを現エントリーとして（ステップ７０６）、現エントリー（最上位のエントリー）の残数カウンター値を１減ずる（ステップ７０７）。
【００６９】
ステップ７０３で現エントリーの残数カウンター値がゼロであった場合、および、ステップ７０７で現エントリーの残数カウンター値を１減じた後、図８に示すように、キー／データ・ペア保存制御部１４０は、現エントリーのパーティション識別子を含む所定の値をデータＫＶＳ１１２のキー値のフィールドにセットする（ステップ７０８）。具体的には、図２を参照して説明したデータＫＶＳ１１２のキー部１０において、パーティション識別子が部分値１０ｂとしてセットされる。また、固有値が部分値１０ａとしてセットされる。また、値「−１」が部分値１０ｃとしてセットされる。
【００７０】
次に、キー／データ・ペア保存制御部１４０は、ステップ７０８でセットしたキー値をデータＫＶＳ１１２のハッシュ機構に渡してハッシュ値を取得する（ステップ７０９）。そして、キー／データ・ペア保存制御部１４０は、取得したハッシュ値をデータＫＶＳ１１２のキー値にセットする（ステップ７１０）。図２を参照して説明したように、データＫＶＳ１１２のハッシュ機構は、データＫＶＳ１１２のキー部１０の部分値１０ｃが負値である場合は、部分値１０ａ、１０ｂを組み合わせた値のハッシュ値を計算し、部分値１０ｃを算出されたハッシュ値に置き換える。したがって、上記のように部分値１０ｃに値「−１」をセットしたことにより、キー／データ・ペア保存制御部１４０は、ステップ７０８でハッシュ値を計算し、算出されたハッシュ値で部分値１０ｃを置き換える。
【００７１】
次に、キー／データ・ペア保存制御部１４０は、ステップ７０９、７１０で得られたパーティション識別子とハッシュ値に基づいて、キー／データ・ペアの格納先の通常パーティション１１２ａおよびハッシュ・バケットを特定し、データＫＶＳキーおよびアプリケーション・データ（キー／データ・ペア）を格納する（ステップ７１１）。なお、格納先として特定されたハッシュ・バケットにキー／データ・ペアを格納できない場合（ハッシュ・バケット上に、アプリケーション・データを全て格納できるだけの空きスペースが存在しない場合等）、キー／データ・ペア保存制御部１４０は、ステップ７０９で得られたパーティション識別子により特定された通常パーティション１１２ａのオーバー・フロー領域に、そのキー／データ・ペアを格納する。また、キー／データ・ペア保存制御部１４０は、通常パーティション１１２ａ（特定されたハッシュ・バケットまたはオーバー・フロー領域）にキー／データ・ペアを格納した際に、そのアプリケーション・データに含まれるアプリケーション・キー値をキー値とし、データＫＶＳキーをデータとするキー／データ・ペアを生成して、キーＫＶＳ１１１に保存する。
【００７２】
この後、キー／データ・ペア保存制御部１４０は、以上の処理における現エントリーの次のエントリー（現エントリーが優先パーティション・リストの最下位のエントリーである場合は最上位のエントリー）を新たな現エントリーとして処理を終了する（ステップ７１２）。そして、次のアプリケーション・データ（キー／データ・ペア）の格納要求が行われるのを待つ。
【００７３】
なお、図７および図８のフローチャートに示した処理の例は、空きハッシュ・バケットが選ばれることを保証するものではなく、残数カウンターの現在値は、必ずしもその時点の空きパーティション数に符合したものではない。キー／データ・ペアの格納時に選択されるハッシュ値は、データＫＶＳキーの値とハッシュ機構のハッシュ・ルーチンにより決定される。キー／データ・ペアを格納したことにより発生し得るコリジョンは、後述のデータ再配置部１５０の処理によって解消する。
【００７４】
＜再配置推奨キー・リストの生成＞
次に、再配置推奨キー・リスト生成部１３０による再配置推奨キー・リストの生成処理について説明する。この再配置推奨キー・リストの生成処理は、通常パーティション１１２ａおよび特殊パーティション１１２ｂの双方を対象とする。再配置推奨キー・リスト生成部１３０は、まず、統計情報収集部１０４から、データ量が一定以上のデータベース・レコードに関し、その主キー値、インサート先パーティション名（エリア名）、ハッシュ値（ＲＡＰ番号）等の情報を収集してデータ量の多い順にソートしたリストを受け取る。また、再配置推奨キー・リスト生成部１３０は、データベース・レコード長とハッシュ・コリジョンの重複度（シノニム長＋１）に対して設定された各々の閾値を受け取る。そして、この統計情報および閾値に基づいて、閾値を超えるデータＫＶＳ１１２のデータに関する再配置推奨キー・リストを作成する。なお、上記の閾値は、データベース・ブロック長等のようなパーティションの物理特性に応じて自動的に設定しても良いし（例えば、ハッシュ・バケット・サイズの８０％等とすることができる）、ユーザによる入力を受け付けて設定しても良い。
【００７５】
再配置推奨キー・リストの各エントリーは、例えば、データＫＶＳキーの値、データＫＶＳキーに対応するアプリケーション・キーの値、アプリケーション・データのデータ長、ハッシュ・コリジョン重複度、推奨理由フラグ、再配置先パーティション識別子等の各値が登録されるフィールドを持つ。そして、アプリケーション・データのデータ長の長いものから順にソートされている。なお、再配置推奨キー・リストのエントリーは、これら以外の情報を含んで構成されても良い。また、各エントリーにおけるフィールドの順番は任意で良い。
【００７６】
図９は、再配置推奨キー・リスト生成部１３０による再配置推奨キー・リストの生成処理を示すフローチャートである。再配置推奨キー・リストの生成処理は、例えば、定期的に、あるいはいずれかのパーティション１１２ａ、１１２ｂのオーバー・フロー領域に格納されたデータの量が一定量以上となった場合等のタイミングで行われる。
【００７７】
図９に示す例において、再配置推奨キー・リスト生成部１３０は、まず、統計情報収集部１０４から各パーティション１１２ａ、１１２ｂに関する統計情報を取得し、付加情報を付加して再配置推奨キー・リストのレコードを作成し、中間ファイルに保管する（ステップ９０１）。取得される統計情報には、保存されているアプリケーション・データのデータ長、パーティション識別子、ハッシュ値、キー／データ・ペアのキー値等が含まれる。付加情報には、アプリケーション・データに対応するアプリケーション・キー、ハッシュ・コリジョンの重複度等が含まれる。これらの情報に基づいて作成されたレコードは、データ長を第１ソート・キー、ハッシュ・コリジョンの重複度を第２ソート・キーとしてソートされる。
【００７８】
次に、再配置推奨キー・リスト生成部１３０は、処理が中間ファイルの最後に達したか否かを判断する（ステップ９０２）。そして、最後に達していなければ、中間ファイルから次のレコードを処理対象として読み出す（ステップ９０３）。初期的には、中間ファイルの先頭のレコードが読み出される。
【００７９】
再配置推奨キー・リスト生成部１３０は、まず、読み出したレコードに登録されているデータ長が、予め設定された閾値よりも大きいか否かを判断する（ステップ９０４）。そして、データ長が閾値よりも大きいならば、再配置推奨キー・リスト生成部１３０は、レコードの推奨理由フラグのフィールドに「データ長」を示すフラグをセットする（ステップ９０５）。
【００８０】
次に、再配置推奨キー・リスト生成部１３０は、読み出したレコードに登録されているハッシュ・コリジョンの重複度が、予め設定された閾値よりも大きいか否かを判断する（ステップ９０６）。そして、ハッシュ・コリジョンの重複度が閾値よりも大きいならば、再配置推奨キー・リスト生成部１３０は、レコードの推奨理由フラグのフィールドに「コリジョン」を示すフラグをセットする（ステップ９０７）。
【００８１】
次に、再配置推奨キー・リスト生成部１３０は、読み出したレコードの推奨理由フラグのフィールドにいずれかのフラグがセットされているか否かを判断する（ステップ９０８）。すなわち、ステップ９０５またはステップ９０７の処理が行われたならば、推奨理由フラグのフィールドには、「データ長」と「コリジョン」のいずれかを示すフラグがセットされている。推奨理由フラグのフィールドにフラグがセットされているならば、処理対象のレコードから、推奨理由フラグ以外の登録されている情報を取得し、これらの情報と推奨理由フラグの情報とを含むエントリーを再配置推奨キー・リストに追加する（ステップ９０９）。
【００８２】
ステップ９０８で推奨理由フラグのフィールドにいずれのフラグもセットされていない場合、またはステップ９０９で再配置推奨キー・リストのエントリーを追加した後、再配置推奨キー・リスト生成部１３０は、ステップ９０２に戻り、処理が中間ファイルの最後に達したか否かを判断する。そして、中間ファイルの最後に達していなければ、ステップ９０３で次のレコードを読み出し、中間ファイルの最後に達したならば、再配置推奨キー・リストの生成処理を終了する。すなわち、再配置推奨キー・リスト生成部１３０は、中間ファイルの先頭から最後まで順にレコードを読み出して、読み出したレコードに対してステップ９０４からステップ９０９までの処理を行うことにより、再配置推奨キー・リストを生成する。
【００８３】
なお、上記の動作において、中間ファイルの全てのレコードにおいて、ステップ９０４およびステップ９０６の条件をいずれも満たさず、ステップ９０５およびステップ９０７の処理が行われなかった場合は、結果的に再配置推奨キー・リストは作成されない。したがって、次回以降の再配置推奨キー・リストの生成処理において、ステップ９０４またはステップ９０６の条件を満たして再配置推奨キー・リストが生成されるまでキー／データ・ペアの再配置処理は行われない。
【００８４】
＜キー／データ・ペアの再配置処理＞
次に、データ再配置部１５０によるアプリケーション・データ（キー／データ・ペア）の再配置処理について説明する。データ再配置部１５０は、上記のようにして生成された再配置推奨キー・リストに基づいて、特殊パーティション１１２ｂへの再配置が推奨されるキー／データ・ペアの再配置を行う。通常パーティション１１２ａと特殊パーティション１１２ｂのいずれに格納されたキー／データ・ペアも再配置の対象となり得る。一方、再配置先のパーティションは、特殊パーティション１１２ｂのみである。
【００８５】
図１０は、データ再配置部１５０によるキー／データ・ペアの再配置処理を示すフローチャートである。図１０に示すようにデータ再配置部１５０は、まず、再配置処理の対象として、再配置推奨キー・リストのエントリーの一つに着目する（ステップ１００１）。そして、データ再配置部１５０は、着目したエントリーからデータ長の情報を取り出し、取り出したデータ長に適合する特殊パーティション１１２ｂのハッシュ・バケット・サイズを決定し（ステップ１００２）、そのハッシュ・バケット・サイズを持つ特殊パーティション１１２ｂがあるか否かを判断する（ステップ１００３）。そのハッシュ・バケット・サイズを持つ特殊パーティション１１２ｂが無い場合は、そのハッシュ・バケット・サイズを持つ特殊パーティション１１２ｂを追加する（ステップ１００４）。
【００８６】
次に、データ再配置部１５０は、ステップ１００３で見つかった特殊パーティション１１２ｂまたはステップ１００４で追加された特殊パーティション１１２ｂを再配置先の特殊パーティション１１２ｂとして選択する。そして、選択した特殊パーティション１１２ｂのスペース・マップを調べ、最初の空きハッシュ・バケット（キー／データ・ペアの保存先の領域）を特定する（ステップ１００５）。ここで、スペース・マップとは、特殊パーティション１１２ｂごとに設けられ、各ハッシュ・バケットが使用済みか否かを管理するテーブルである。このスペース・マップは、再配置処理ごとに参照される。また、再配置先として指定されてキー／データ・ペアが格納されたハッシュ・バケットに対応するスペース・マップの項目に対しては、使用済みフラグを立てることにより、未使用の空きハッシュ・バケットと識別できるようにする。
【００８７】
次に、データ再配置部１５０は、キーＫＶＳ１１１に対して、着目したエントリーに登録されているアプリケーション・キー値を指定し、そのアプリケーション・キーのハッシュ・バケットの更新をロックするように制御する（ステップ１００６）。そして、データ再配置部１５０は、データＫＶＳ１１２に対して、着目したエントリーに登録されているデータＫＶＳキー値を指定し、そのデータＫＶＳキー値のデータを全て取り出す（ステップ１００７）。
【００８８】
次に、データ再配置部１５０は、ステップ１００７で取り出した再配置対象データのルート・セグメントに記述されているデータＫＶＳキー値のパーティション識別子およびハッシュ値を、ステップ１００５で選択した特殊パーティション１１２ｂのパーティション識別子およびステップ１００５で特定した空きハッシュ・バケットのハッシュ値で置き換える（ステップ１００８）。
【００８９】
次に、データ再配置部１５０は、ステップ１００８でデータＫＶＳキー値を更新した再配置対象データを、セグメント階層順にデータＫＶＳ１１２に格納する（ステップ１００９）。なお、この再配置対象データは、新しいデータＫＶＳキーで特定される特殊パーティション１１２ｂにおいて、このデータＫＶＳキーで指定された空きハッシュ・バケットに格納される。そして、データ再配置部１５０は、ステップ１００６でロックしたキーＫＶＳ１１１のキー／データ・ペアのデータ部に記述されているデータＫＶＳキー値を、ステップ１００８で置き換えられた新たなデータＫＶＳキー値で置き換えた後、ロックを解除する（ステップ１０１０）。
【００９０】
次に、データ再配置部１５０は、再配置前のデータＫＶＳキー値で特定される古いデータを、データＫＶＳ１１２から削除する（ステップ１０１１）。そして、データ再配置部１５０は、以上の処理によるキーＫＶＳ１１１およびデータＫＶＳ１１２の更新をコミットして処理を終了する（ステップ１０１２）。
【００９１】
以上のようにして、再配置対象として着目したエントリーのキー／データ・ペアの再配置が完了する。この再配置処理は、どのパーティション１１２ａ、１１２ｂから始めてもよく、各パーティション１１２ａ、１１２ｂに対する再配置推奨キー・リストのエントリーのいずれをどの順番に処理しても良い。ただし、全パーティション１１２ａ、１１２ｂにおける再配置推奨キー・リストの全エントリーを全て処理する場合は、特殊パーティション１１２ｂのＣＩサイズ（ハッシュ・バケット・サイズ）の大きいものから順に処理し、特殊パーティション１１２ｂに対する処理が全て終了した後に、通常パーティション１１２ａに対する処理を行う。なお、最長のＣＩサイズを持つ特殊パーティション１１２ｂの再配置推奨キーについては、再配置を行わず、データ長の分布に応じて、その特殊パーティション１１２ｂのオーバー・フロー領域を拡張することによって対応することも可能である。
【００９２】
＜キーＫＶＳの再作成処理とデータＫＶＳの定義再編成処理＞
次に、キーＫＶＳ再作成部１６０によるキーＫＶＳ１１１の再作成処理と、データＫＶＳ定義再編成部１７０によるデータＫＶＳ１１２のデータベース定義の再編成処理について説明する。キー／データ・ペア保存制御部１４０によるキー／データ・ペアの配置処理が行われると、新規に保存されたアプリケーション・データへのアクセスを可能とするために、キーＫＶＳ１１１を再作成することが必要である。また、上記のようにキー／データ・ペアの再配置が行われると、アプリケーションによるアクセス対象のアプリケーション・データの保存場所が変わる。したがって、アクセス要求に応じて正しい（新しい）保存場所にアクセス可能とするために、データＫＶＳ１１２のデータベース定義を再編成すると共に、キーＫＶＳ１１１を再作成することが必要である。
【００９３】
まず、キーＫＶＳ再作成部１６０によるキーＫＶＳ１１１の再作成処理について説明する。キーＫＶＳ再作成部１６０は、データＫＶＳ１１２のパーティション１１２ａ、１１２ｂのうち、再作成しようとするキーＫＶＳ１１１のキー／データ・ペアに関連する全てのパーティション１１２ａ、１１２ｂからキー／データ・ペアを読み出し、読み出したデータＫＶＳ１１２のキー／データ・ペアの情報に基づいて、キーＫＶＳ１１１のキー／データ・ペアを再作成する。
【００９４】
具体的には、キーＫＶＳ再作成部１６０は、まず、読み出したデータＫＶＳ１１２のキー／データ・ペアのキー部に含まれているキーの値およびデータ部に含まれているアプリケーション・キーを抽出する。そして、キーＫＶＳ再作成部１６０は、データＫＶＳキーとデータ部から抽出したアプリケーション・キーのペアを１レコードとして中間ファイルに書き出す。また、この中間ファイルは、後述するように、データＫＶＳ定義再編成部１７０によるデータＫＶＳ１１２のデータベース定義の再編成処理が行われた際に、データＫＶＳ定義再編成部１７０によっても作成される。なお、データＫＶＳ１１２のキー／データ・ペアを読み出す際、データＫＶＳ１１２の構造において、キー／データ・ペアのデータ部が階層構造を持つ複数のセグメントに分割されている場合は、ルート・セグメントのみを読み出せば良い。次に、キーＫＶＳ再作成部１６０は、上記の中間ファイルに書き出されたキー／データ・ペアをキーＫＶＳ１１１にリロードする。
【００９５】
次に、データＫＶＳ定義再編成部１７０によるデータＫＶＳ１１２のデータベース定義の再編成処理について説明する。データＫＶＳ定義再編成部１７０は、データＫＶＳ１１２のキー／データ・ペアを、そのデータ長に応じた特殊パーティションにリロードすることにより、データＫＶＳ１１２を再編成する。以下、データＫＶＳ１１２からキー／データ・ペアをアンロードする際の処理と、データＫＶＳ１１２にキー／データ・ペアをリロードする際の処理とに分けて説明する。
【００９６】
図１１は、データＫＶＳ定義再編成部１７０によるデータＫＶＳ１１２のデータベース定義の再編成処理のうち、キー／データ・ペアをアンロードする際の処理を示すフローチャートである。データＫＶＳ定義再編成部１７０は、データＫＶＳ１１２からキー／データ・ペアをアンロードし（ステップ１１０１）、アンロードしたファイルにおけるキー／データ・ペアの各レコードに、データ長の情報を付加する（ステップ１１０２）。また、データＫＶＳ定義再編成部１７０は、アンロードしたキー／データ・ペアのデータ・サイズに基づいて、どのタイプ（ハッシュ・バケット・サイズ）の特殊パーティション１１２ｂに、いくつのキー／データ・ペアがリロードされるかの情報を取得する（ステップ１１０３）。アンロードしたファイルおよび取得した情報は、例えば外部記憶装置に保持される。そして、キー／データ・ペアのアンロードが完了した後、データＫＶＳ定義再編成部１７０は、外部記憶装置のリロード制御ファイルに、リロードするキー／データ・ペアの数を、特殊パーティション・タイプ毎（ハッシュ・バケット・サイズの範囲毎）に書き出す（ステップ１１０４）。
【００９７】
図１２は、データＫＶＳ定義再編成部１７０によるデータＫＶＳ１１２のデータベース定義の再編成処理のうち、キー／データ・ペアをリロードする際の処理を示すフローチャートである。データＫＶＳ定義再編成部１７０は、データＫＶＳ１１２にキー／データ・ペアをリロードするために、まず、リロード制御ファイルを読み込み（ステップ１２０１）、特殊パーティション・タイプごとに、リロードするキー／データ・ペアの数に対してデータＫＶＳ１１２のハッシュ・バケット数が不足しているものがあるか否かを調べる（ステップ１２０２）。そして、ハッシュ・バケットが不足している特殊パーティション・タイプがあった場合は、データＫＶＳ定義再編成部１７０は、その特殊パーティション・タイプに対応する既存の特殊パーティション１１２ｂのハッシュ・バケット数を増やすか、または、同じ特殊パーティション・タイプの特殊パーティション１１２ｂを追加する（ステップ１２０３）。
【００９８】
次に、データＫＶＳ定義再編成部１７０は、アンロードしたファイルに未処理のキー／データ・ペアがあれば、アンロードしたファイルからリロードするキー／データ・ペアを一つ選択し（ステップ１２０４、１２０５）、選択したキー／データ・ペアのデータ長に応じて格納先の特殊パーティション１１２ｂを選択する（ステップ１２０６）。そして、データＫＶＳ定義再編成部１７０は、そのキー／データ・ペアにおけるデータＫＶＳキーのパーティション識別子フィールド（例えば、図２に示したデータＫＶＳキーの部分値１０ｂが記録されるフィールド）の値を、選択した特殊パーティション１１２ｂのパーティション識別子で上書きする。また、データＫＶＳ定義再編成部１７０は、データＫＶＳキーのハッシュ値フィールド（例えば、図２に示したデータＫＶＳキーの部分値１０ｃが記録されるフィールド）の値を、格納先の特殊パーティション１１２ｂ毎に、格納順の連番で上書きする（ステップ１２０７）。
【００９９】
次に、データＫＶＳ定義再編成部１７０は、上記のようにパーティション識別子フィールドの値とハッシュ値フィールドの値とを更新したキー値により、格納先の特殊パーティション１１２ｂにキー／データ・ペアをリロードする（ステップ１２０８）。そして、データＫＶＳ定義再編成部１７０は、リロードしたキー／データ・ペアにおける新しいデータＫＶＳキーとデータ部に含まれるアプリケーション・キー値とを、キーＫＶＳ１１１の再作成処理用の中間ファイルのレコードに書き出す（ステップ１２０９）。
【０１００】
次に、データＫＶＳ定義再編成部１７０は、ステップ１２０４に戻り、アンロードしたファイルの最後に達したか否かを判断する。そして、アンロードしたファイルの最後に達していなければ、ステップ１２０５へ進んで次のレコードを読み出し、ステップ１２０９までの処理を繰り返す。一方、アンロードしたファイルの最後に達したならば、データＫＶＳ１１２のデータベース定義の再編成を終了する。この後、キー／データ・ペアのリロードに伴って作成された中間ファイルを用いて、上述したキーＫＶＳ再作成部１６０によるキーＫＶＳ１１１の再作成処理が行われる。これにより、再配置されたキー／データ・ペアのデータＫＶＳキー値の更新に伴って、キーＫＶＳ１１１のキー／データ・ペアのデータ部も更新されるため、アプリケーション・キー値とアプリケーション・データの関係が保たれる。
【０１０１】
＜ハードウェア構成例＞
図１３は、本実施形態のＫＶＳシステム１００を構成するのに好適なハードウェア構成例を示す図である。ここでは、コンピュータに適用する場合について説明する。図１３に示すコンピュータは、演算手段であるＣＰＵ（Central Processing Unit）１００ａと、主記憶手段であるメモリ１００ｃを備える。また、外部デバイスとして、磁気ディスク装置（ＨＤＤ：Hard Disk Drive）１００ｇ、ネットワーク・インターフェイス１００ｆ、ディスプレイ装置を含む表示機構１００ｄ、音声機構１００ｈ、キーボードやマウス等の入力デバイス１００ｉ等を備える。
【０１０２】
図１３に示す構成例では、メモリ１００ｃおよび表示機構１００ｄは、システム・コントローラ１００ｂを介してＣＰＵ１００ａに接続されている。また、ネットワーク・インターフェイス１００ｆ、磁気ディスク装置１００ｇ、音声機構１００ｈおよび入力デバイス１００ｉは、Ｉ／Ｏコントローラ１００ｅを介してシステム・コントローラ１００ｂと接続されている。各構成要素は、システム・バスや入出力バス等の各種のバスによって接続される。
【０１０３】
なお、図１３は、本実施形態が適用されるのに好適なコンピュータのハードウェア構成を例示するに過ぎない。本実施形態は、電子文書を表示して閲覧可能とし、検索キーに基づくデータの検索を行うことが可能な情報処理装置に広く適用できるものであり、図示の構成においてのみ本実施例が実現されるのではない。
【０１０４】
図１３において、磁気ディスク装置１００ｇにはＯＳのプログラムやアプリケーション・プログラムが格納されている。そして、これらのプログラムがメモリ１００ｃに読み込まれてＣＰＵ１００ａに実行されることにより、本実施形態におけるＫＶＳシステム１００の各機能が実現される。また、データ管理部１１０は、メモリ１００ｃや磁気ディスク装置１００ｇ等の記憶手段により実現される。なお、ＫＶＳシステム１００は、複数のコンピュータにデータ管理部１１０や機能を分散させて構成することができる。そのような構成とする場合は、各々のコンピュータを図１３に示すようなハードウェア構成とすることができる。
【０１０５】
なお、上記の実施形態において、通常パーティション１１２ａをハッシュ・バケット方式とし、キー／データ・ペアの保存先をハッシュ機構により決定することとしたが、通常パーティション１１２ａは上記の構成に限定されない。例えば、特殊パーティション１１２ｂと同様に、最初の空き領域から順にキー／データ・ペアを保存する構成することも可能である。その他、上記の実施形態に、種々の変更または改良を加えたものも、本発明の技術的範囲に含まれる。
【符号の説明】
【０１０６】
１００…ＫＶＳシステム、１０４…統計情報収集部、１１０…データ管理部、１１１…キーＫＶＳ、１１２…データＫＶＳ、１１２ａ…通常パーティション、１１２ｂ…特殊パーティション、１２０…優先パーティション・リスト生成部、１３０…再配置推奨キー・リスト生成部、１４０…キー／データ・ペア保存制御部、１５０…データ再配置部、１６０…キーＫＶＳ再作成部、１７０…データＫＶＳ定義再編成部
【図１】
0006025149.tif 000002
【図２】
0006025149.tif 000003
【図３】
0006025149.tif 000004
【図４】
0006025149.tif 000005
【図５】
0006025149.tif 000006
【図６】
0006025149.tif 000007
【図７】
0006025149.tif 000008
【図８】
0006025149.tif 000009
【図９】
0006025149.tif 000010
【図１０】
0006025149.tif 000011
【図１１】
0006025149.tif 000012
【図１２】
0006025149.tif 000013
【図１３】
0006025149.tif 000014