(57)【要約】  データ階層記憶及び階層探索方法及び装置を提供する。この方法は、データファイルをリモートディスクに記憶することと、ユーザによって最後にアクセスされたデータファイルをリモートディスクから取得し、データファイルをデータブロックにセグメント化し、データブロックをローカルディスクにキャッシュすることと、データブロックをローカルディスクからキャッシング用のローカルメモリにロードすることとを含む。この出願で、データアクセスの実際の需要に自動的に応じたデータブロックの形で、データを少なくとも階層的に記憶することができ、それにより、データを、より高速でロードして計算することができ、より少ないネットワーク資源を消費する。
2021501389.tif 000002
【特許請求の範囲】
【請求項１】
データファイルをリモートディスクに記憶することと、
ユーザによって最後にアクセスされたデータファイルを前記リモートディスクから取得し、前記データファイルをデータブロックにセグメント化し、前記データブロックをローカルディスクにキャッシュすることと、
前記データブロックを前記ローカルディスクからキャッシング用のローカルメモリにロードすることと
を含むデータ階層記憶方法。
【請求項２】
固定長ブロックを含む少なくとも１つの固定長ブロックファイルを前記ローカルディスクに生成し、
前記データブロックを前記ローカルディスクにキャッシュするステップは、前記データブロックを前記ローカルディスクの空ブロックにキャッシュすることを含む、請求項１に記載のデータ階層記憶方法。
【請求項３】
前記データブロックを前記ローカルディスクにキャッシュするステップの前に、
前記ローカルディスクの全ブロックが一杯である場合、前記ブロックの一部をクリアするように最低使用頻度アルゴリズムを使用することによって、前記ブロックの前記一部におけるデータを削除することを更に含む、請求項１又は２に記載のデータ階層記憶方法。
【請求項４】
固定長ブロックを含む少なくとも１つの固定長ブロックファイルを前記ローカルメモリに生成し、
前記データブロックを前記ローカルディスクからキャッシング用の前記ローカルメモリにロードするステップの前に、前記ローカルメモリの全ブロックが一杯である場合、前記ブロックの一部をクリアするように最低使用頻度アルゴリズムを使用することによって、前記ブロックの前記一部におけるデータを削除することを更に含む、請求項１に記載のデータ階層記憶方法。
【請求項５】
データファイルを記憶する少なくとも１つのローカルファイルを前記ローカルディスクに更に生成し、
事前指定データファイルを前記ローカルディスクの前記ローカルファイルにキャッシュすることを更に含む、請求項１又は２に記載のデータ階層記憶方法。
【請求項６】
前記ローカルディスクは、ブロックファイルが生成されるブロックキャッシュと前記ローカルファイルが生成されるファイルキャッシュとを含み、
前記事前指定データファイルを前記ローカルディスクの前記ローカルファイルにキャッシュするステップの後に、前記ローカルディスクにおける前記ファイルキャッシュの使用容量を走査することによって、前記ローカルディスクにおける前記ブロックキャッシュの容量を拡大又は縮小することを更に含む、請求項５に記載のデータ階層記憶方法。
【請求項７】
前記ローカルディスクにおける前記ブロックキャッシュの前記容量を拡大又は縮小するステップは、
前記ファイルキャッシュの解放可能容量に応じて前記ブロックキャッシュの前記容量を対応して増大し、新しい容量に応じて前記ブロックキャッシュにおける前記ブロックファイル又は前記ブロックを新しく生成することと、
前記ファイルキャッシュで増大される必要がある容量に応じて前記ブロックキャッシュにおける前記ブロックファイル又は前記ブロックの一部を削除し、前記ブロックキャッシュの前記容量を対応して縮小することと
のうち少なくとも１つを含む、請求項６に記載のデータ階層記憶方法。
【請求項８】
前記データブロックを前記ローカルディスクにキャッシュするステップの前に、
前記ブロックファイルに対応する先行書き込みログ（ＷＡＬ）を前記ローカルディスクに設定することを更に含む、請求項２に記載のデータ階層記憶方法。
【請求項９】
前記ユーザによるアクセス中に、対応するデータブロックを、前記ローカルメモリ、前記ローカルディスクから前記リモートディスクへ層ごとに再帰的に下方へ探索し、その間に、前記データブロックを前記ローカルメモリ及び前記ローカルディスクに層ごとにキャッシュすることを更に含む、請求項１に記載のデータ階層記憶方法。
【請求項１０】
集約ノードによって、ユーザ機器からの計算タスクを計算サブタスクに分割し、前記計算サブタスクを複数の計算ノードに分散させることと、
前記複数の計算ノードによって、前記計算サブタスクを実行することによって、
対応するデータブロックを、ローカルメモリ、ローカルディスクからリモートディスクへ層ごとに再帰的に下方へ探索し、その間に、前記データブロックを前記ローカルメモリ及び前記ローカルディスクに層ごとにキャッシュし、前記得られたデータブロックを前記集約ノードに戻す操作
を実行することと、
前記集約ノードによって、前記複数の計算ノードによって戻される前記データブロックを集約してから、前記集約データブロックを前記ユーザ機器に提供することと
を含むデータ階層探索方法。
【請求項１１】
前記複数の計算ノードは、前記計算サブタスクを実行することによって、データファイルをリモートディスクに記憶する操作を更に実行する、請求項１０に記載のデータ階層探索方法。
【請求項１２】
対応するデータブロックを、ローカルメモリ、ローカルディスクからリモートディスクへ層ごとに再帰的に下方へ探索し、その間に、前記データブロックを前記ローカルメモリ及び前記ローカルディスクに層ごとにキャッシュするステップは、
前記データブロックが前記ローカルメモリ又は前記ローカルディスクで得られない場合、前記対応するデータファイルを前記リモートディスクから取得し、前記データファイルをデータブロックにセグメント化し、前記データブロックを前記ローカルディスクにキャッシュすることと、前記データブロックを前記ローカルディスクからキャッシング用の前記ローカルメモリにロードすることとを含む、請求項１０に記載のデータ階層探索方法。
【請求項１３】
データファイルをリモートディスクに記憶し、ユーザによって最後にアクセスされたデータファイルを前記リモートディスクから取得するように構成されているリモートファイル処理ユニットと、
前記データファイルをデータブロックにセグメント化し、前記データブロックをローカルディスクにキャッシュするように構成されているブロック処理ユニットと、
前記データブロックを前記ローカルディスクからキャッシング用のローカルメモリにロードするように構成されているメモリキャッシングユニットと
を含むデータ階層記憶装置。
【請求項１４】
少なくとも固定長ブロックを含む少なくとも１つの固定長ブロックファイルを前記ローカルディスクに生成するように構成されているブロックキャッシングユニットを更に含み、
前記ブロック処理ユニットは、前記データブロックを空ブロックにキャッシュするように構成されている、請求項１３に記載のデータ階層記憶装置。
【請求項１５】
データファイルを記憶する少なくとも１つのローカルファイルを前記ローカルディスクに生成するように構成され、かつ事前指定データファイルを前記ローカルディスクの前記ローカルファイルにキャッシュするように構成されているファイル処理ユニットを更に含む、請求項１３又は１４に記載のデータ階層記憶装置。
【請求項１６】
前記ローカルディスクは、ブロックファイルが生成されるブロックキャッシュと、前記ローカルファイルが生成されるファイルキャッシュとを含み、
前記ローカルディスクにおける前記ファイルキャッシュの使用容量を走査することによって、前記ローカルディスクにおける前記ブロックキャッシュの容量を拡大又は縮小するように構成されているディスク処理ユニットを更に含む、請求項１５に記載のデータ階層記憶装置。
【請求項１７】
前記ブロックファイルに対応するＷＡＬを前記ローカルディスクに設定するように構成されているメタデータ処理ユニットを更に含む、請求項１４に記載のデータ階層記憶装置。
【請求項１８】
前記ユーザによるアクセス中に、対応するデータブロックを、前記ローカルメモリ、前記ローカルディスクから前記リモートディスクへ層ごとに再帰的に下方へ探索するように構成されているブロックファイル処理ユニットを更に含み、
前記ブロックキャッシングユニットは、前記ブロックファイル処理ユニットによって前記データブロックを探索する工程で、前記データブロックを前記ローカルメモリ及び前記ローカルディスクに層ごとにキャッシュするように更に構成されている、請求項１４に記載のデータ階層記憶装置。
【請求項１９】
リモートディスクと通信するように構成されている通信回路と、
階層記憶モードをサポートするデータ記憶装置であって、低レベルとしてローカルディスクを含み、高レベルとしてローカルメモリを含むデータ記憶装置と、
データ階層記憶プログラムが記憶されている記憶装置と、
請求項１〜８のいずれか一項に記載のデータ階層記憶方法の操作を実行する前記データ階層記憶プログラムを読み取るように構成されているプロセッサと
を含む計算デバイス。
【請求項２０】
少なくとも１つの集約ノードと複数の計算ノードとを含む分散計算システムであって、
前記集約ノードは、ユーザ機器からの計算タスクを計算サブタスクに分割し、前記計算サブタスクを前記複数の計算ノードに分散させ、前記複数の計算ノードによって戻されるデータブロックを集約してから、前記集約データブロックを前記ユーザ機器に提供するように構成されており、
前記計算ノードは、前記計算サブタスクを実行することによって、
対応するデータブロックを、ローカルメモリ、ローカルディスクからリモートディスクへ層ごとに再帰的に下方へ探索し、その間に、前記データブロックを前記ローカルメモリ及び前記ローカルディスクに層ごとにキャッシュし、前記得られたデータブロックを前記集約ノードに戻す操作
を実行するように構成されている、
分散計算システム。
【発明の詳細な説明】
【技術分野】
【０００１】
この出願は、「データ階層記憶及び階層探索方法及び装置」と称する２０１７年１０月３０日に出願の中国特許出願第２０１７１１０３６４３８．５号に優先権を主張し、その内容全体を参照により本明細書に引用したものとする。
【０００２】
技術分野
本発明は、コンピュータアプリケーション技術の分野、特に、データ階層記憶及び階層探索方法及び装置に関する。
【背景技術】
【０００３】
技術背景
解析データベース（Analytic DB）の場合、計算の前に、計算に関連する全データを、外部データソース（例えば、分散ファイルシステム）から計算ノードにインポートし、その後、計算中に、ローカルデータを読み取る。これにより、計算工程のネットワークオーバーヘッドを減らすことができる。しかし、まだ、少なくとも下記の問題がある。
【０００４】
１．解析データベースの局所的容量は、制限されており、計算の前に、大量のデータファイルを記憶する必要がある。現在、この問題は、解析データベースにおける計算ノードを増加し、解析データベースの記憶容量を拡大することによって、主に解決されているけれども、計算ノードの増加により、ユーザの使用コストが必然的に増加する。
【０００５】
２．関連技術において、幾つかの状態を解析データベースに事前に設定することによって、データを、階層記憶用のコールドデータ及びホットデータに分割する。ホットデータを、解析データベースの高レベル（例えば、ローカルＳＳＤ）で記憶し、コールドデータを、低レベル（例えば、ローカルＨＤＤ）で記憶する。上述の第１の点に記載の問題は、まだ存在するし、これらの状態を、ユーザアクセスで動的に更新することができず、従って、コールドデータ及びホットデータの分散は、あまり正確でなく、階層記憶は、あまり柔軟性がない。
【０００６】
３．現在、解析データベースは、階層記憶をサポートすることができるけれども、解析データベースのデータ階層の細かさは、ファイルであり、粒度は、比較的大きい。ファイルにおけるコールドデータ及びホットデータを、階層的に記憶することができないし、データのローディング速度及び計算速度が低下すると同時に、大量のネットワーク資源が浪費される。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
発明の概要
この出願の目的は、関連技術における技術的課題のうち少なくとも１つを解決することにある。
【０００８】
データアクセスの実際の需要に自動的に応じたデータブロックの形で、どのデータを少なくとも階層的に記憶することができるかに基づく、データ階層記憶及び階層探索方法及び装置が、この出願で提供されており、データを、より高速でロードして計算することができ、より少ないネットワーク資源を消費する。
【課題を解決するための手段】
【０００９】
下記の技術的解決策を、この出願で採用する。
【００１０】
データファイルをリモートディスクに記憶することと、
ユーザによって最後にアクセスされたデータファイルをリモートディスクから取得し、データファイルをデータブロックにセグメント化し、データブロックをローカルディスクにキャッシュすることと、
データブロックをローカルディスクからキャッシング用のローカルメモリにロードすることと
を含むデータ階層記憶方法。
【００１１】
固定長ブロックを含む少なくとも１つの固定長ブロックファイルをローカルディスクに生成し、データブロックをローカルディスクにキャッシュするステップは、データブロックをローカルディスクの空ブロックにキャッシュすることを含む。
【００１２】
データブロックをローカルディスクにキャッシュするステップの前に、方法は、ローカルディスクの全ブロックが一杯である場合、ブロックの一部を空にするように最低使用頻度アルゴリズムを使用することによって、ブロックの一部におけるデータを削除することを更に含む。
【００１３】
固定長ブロックを含む少なくとも１つの固定長ブロックファイルをローカルメモリに生成し、データブロックをローカルディスクからキャッシング用のローカルメモリにロードするステップの前に、方法は、ローカルメモリの全ブロックが一杯である場合、ブロックの一部を空にするように最低使用頻度アルゴリズムを使用することによって、ブロックの一部におけるデータを削除することを更に含む。
【００１４】
データファイルを記憶する少なくとも１つのローカルファイルをローカルディスクに更に生成し、方法は、事前指定データファイルをローカルディスクのローカルファイルにキャッシュすることを更に含む。
【００１５】
ローカルディスクは、ブロックファイルが生成されるブロックキャッシュと、ローカルファイルが生成されるファイルキャッシュとを含み、事前指定データファイルをローカルディスクのローカルファイルにキャッシュするステップの後に、方法は、ローカルディスクにおけるファイルキャッシュの使用容量を走査することによって、ローカルディスクにおけるブロックキャッシュの容量を拡大又は縮小することを更に含む。
【００１６】
ローカルディスクにおけるブロックキャッシュの容量を拡大又は縮小するステップは、
ファイルキャッシュの解放可能容量に応じてブロックキャッシュの容量を対応して増大し、新しい容量に応じてブロックキャッシュにおけるブロックファイル又はブロックを新しく生成することと、
ファイルキャッシュで増大される必要がある容量に応じてブロックキャッシュにおけるブロックファイル又はブロックの一部を削除し、ブロックキャッシュの容量を対応して縮小することと
のうち少なくとも１つを含む。
【００１７】
データブロックをローカルディスクにキャッシュするステップの前に、方法は、ブロックファイルに対応する先行書き込みログ（ＷＡＬ）をローカルディスクに設定することを更に含む。
【００１８】
方法は、ユーザによるアクセス中に、対応するデータブロックを、ローカルメモリ、ローカルディスクからリモートディスクへ層ごとに再帰的に下方へ探索し、その間に、データブロックをローカルメモリ及びローカルディスクに層ごとにキャッシュすることを更に含む。
【００１９】
集約ノードによって、ユーザ機器からの計算タスクを計算サブタスクに分割し、計算サブタスクを複数の計算ノードに分散させることと、
複数の計算ノードによって、計算サブタスクを実行することによって、
対応するデータブロックを、ローカルメモリ、ローカルディスクからリモートディスクへ層ごとに再帰的に下方へ探索し、その間に、データブロックをローカルメモリ及びローカルディスクに層ごとにキャッシュし、得られたデータブロックを集約ノードに戻す操作
を実行することと、
集約ノードによって、複数の計算ノードによって戻されるデータブロックを集約してから、集約データブロックをユーザ機器に提供することと
を含むデータ階層探索方法。
【００２０】
複数の計算ノードは、計算サブタスクを実行することによって、データファイルをリモートディスクに記憶する操作を更に実行する。
【００２１】
対応するデータブロックを、ローカルメモリ、ローカルディスクからリモートディスクへ層ごとに再帰的に下方へ探索し、その間に、データブロックをローカルメモリ及びローカルディスクに層ごとにキャッシュするステップは、データブロックがローカルメモリ又はローカルディスクで得られない場合、対応するデータファイルをリモートディスクから取得し、データファイルをデータブロックにセグメント化し、データブロックをローカルディスクにキャッシュすることと、データブロックをローカルディスクからキャッシング用のローカルメモリにロードすることとを含む。
【００２２】
データファイルをリモートディスクに記憶し、ユーザによって最後にアクセスされたデータファイルをリモートディスクから取得するように構成されているリモートファイル処理ユニットと、
データファイルをデータブロックにセグメント化し、データブロックをローカルディスクにキャッシュするように構成されているブロック処理ユニットと、
データブロックをローカルディスクからキャッシング用のローカルメモリにロードするように構成されているメモリキャッシングユニットと
を含むデータ階層記憶装置。
【００２３】
装置は、少なくとも固定長ブロックを含む少なくとも１つの固定長ブロックファイルをローカルディスクに生成するように構成されているブロックキャッシングユニットを更に含み、ブロック処理ユニットは、データブロックを空ブロックにキャッシュするように構成されている。
【００２４】
装置は、データファイルを記憶する少なくとも１つのローカルファイルをローカルディスクに生成するように構成され、かつ事前指定データファイルをローカルディスクのローカルファイルにキャッシュするように構成されているファイル処理ユニットを更に含む。
【００２５】
ローカルディスクは、ブロックファイルが生成されるブロックキャッシュと、ローカルファイルが生成されるファイルキャッシュとを含み、装置は、ローカルディスクにおけるファイルキャッシュの使用容量を走査することによって、ローカルディスクにおけるブロックキャッシュの容量を拡大又は縮小するように構成されているディスク処理ユニットを更に含む。
【００２６】
装置は、ブロックファイルに対応するＷＡＬをローカルディスクに設定するように構成されているメタデータ処理ユニットを更に含む。
【００２７】
装置は、ユーザによるアクセス中に、対応するデータブロックを、ローカルメモリ、ローカルディスクからリモートディスクへ層ごとに再帰的に下方へ探索するように構成されているブロックファイル処理ユニットを更に含み、ブロックキャッシングユニットは、ブロックファイル処理ユニットによってデータブロックを探索する工程で、データブロックをローカルメモリ及びローカルディスクに層ごとにキャッシュするように更に構成されている。
【００２８】
リモートディスクと通信するように構成されている通信回路と、
階層記憶モードをサポートするデータ記憶装置であって、低レベルとしてローカルディスクを含み、高レベルとしてローカルメモリを含むデータ記憶装置と、
データ階層記憶プログラムが記憶されている記憶装置と、
データファイルをリモートディスクに記憶し、ユーザによって最後にアクセスされたデータファイルをリモートディスクから取得し、データファイルをデータブロックにセグメント化し、データブロックをローカルディスクにキャッシュし、データブロックをローカルディスクからキャッシング用のローカルメモリにロードするデータ階層記憶プログラムを読み取るように構成されているプロセッサと
を含む計算デバイス。
【００２９】
少なくとも１つの集約ノードと複数の計算ノードとを含む分散計算システムであって、
集約ノードは、ユーザ機器からの計算タスクを計算サブタスクに分割し、計算サブタスクを複数の計算ノードに分散させ、複数の計算ノードによって戻されるデータブロックを集約してから、集約データブロックをユーザ機器に提供するように構成されており、
計算ノードは、計算サブタスクを実行することによって、
対応するデータブロックを、ローカルメモリ、ローカルディスクからリモートディスクへ層ごとに再帰的に下方へ探索し、その間に、データブロックをローカルメモリ及びローカルディスクに層ごとにキャッシュし、得られたデータブロックを集約ノードに戻す操作を実行するように構成されている、
分散計算システム。
【００３０】
この出願は、下記の利点を有する。
【００３１】
１つの態様において、この出願では、ユーザによって最後にアクセスされたデータファイルを、データブロックにセグメント化し、局所的に階層的に記憶する。その結果、解析データベースは、ユーザアクセスの変更に応じて局所的に階層的に記憶されるデータを動的に更新することができる。従って、ホットデータを、データアクセスの実際の需要に応じた小さい粒度のデータブロックの形で階層的に記憶する。コールド及びホットデータの分散及び階層記憶は、実際のデータアクセス状況により整合し、階層記憶を、ファイル内のデータブロックの需要に応じて自動的に実行することができる。それにより、データのローディング速度及び計算速度を大幅に増加することができるだけでなく、解析データベースとユーザ機器との間、及び解析データベースとリモートディスクとの間で、データファイルを頻繁に伝送する必要もあり、これによって、大量のネットワーク資源が節約される。
【００３２】
別の態様において、この出願では、大量のデータファイルをリモートディスクに記憶することによって、計算の前に、データファイルを全て、解析データベースに局所的に記憶する必要があるわけではなく、計算に関連するデータ（即ち、ユーザによって現在アクセスされる）だけを局所的にロードする必要があり、これは、解析データベースの局所的容量を実質的に拡大することと同等であり、従って、解析データベースの局所記憶圧力が大幅に減少し、ユーザの使用コストが減少すると同時に、大量のデータファイルを遠隔位置から局所位置に伝送することによって生じるネットワーク資源の浪費が回避される。
【００３３】
更に別の態様において、この出願では、解析データベースは、データファイル及びデータブロックが共存する記憶方法をサポートすることができる。リアルタイム性能に関する低い要件を有するアプリケーションシナリオにおいて、ホットデータを、データアクセスの実際の需要に応じた小さい粒度のデータブロックの形で階層的に記憶することができる一方、リアルタイム性能に関する高い要件を有するアプリケーションシナリオにおいて、データファイルを、局所的に直接記憶することができる。それによって、高い計算速度及び様々なアプリケーションシナリオの両方を達成することができ、ユーザ経験は、一層優れている。
【００３４】
当然、この出願を実施する任意の製品は、上述の利点の全部を同時に達成する必要が必ずしもあるわけではない。
【図面の簡単な説明】
【００３５】
図面の簡単な説明
【図１】この出願による例示的なアプリケーション環境の略図である。
【図２】第１の実施形態によるデータ階層記憶方法の概略フローチャートである。
【図３】第１の実施形態によるデータ階層探索方法の例示的な概略フローチャートである。
【図４】第１の実施形態によるデータ階層探索方法の別の例示的な概略フローチャートである。
【図５】第２の実施形態によるデータ階層記憶装置の例示的な概略構造図である。
【図６】第２の例による、解析データベースにおける計算ノードの階層構造、及び計算ノードとリモートディスクとの間のインタラクションの略図である。
【図７】第３の例による、解析データベースにおける計算ノードの階層構造、及び計算ノードとリモートディスクとの間のインタラクションの略図である。
【図８】第４の例による、容量縮小及び容量拡大の略図である。
【図９】第５の例による、データブロックの階層記憶モードにおけるデータアクセス工程の略図である。
【発明を実施するための形態】
【００３６】
詳細な説明
この出願の技術的解決策について、添付図面及び実施形態を参照して、より詳細に後述する。
【００３７】
矛盾がない場合、この出願の実施形態及び実施形態における様々な特徴を互いに組み合わせることができ、これらの実施形態及び特徴は全て、この出願の保護範囲に含まれることに留意すべきである。更に、論理的順序をフローチャートに示すけれども、図示又は記載のステップを、場合によっては、ここに示す順序と異なる順序で実行することができる。
【００３８】
典型的な構成において、クライアント又はサーバの計算デバイスは、１つ又は複数の中央処理装置（ＣＰＵ）、入出力インターフェース、ネットワークインターフェース、及びメモリを含む。
【００３９】
メモリは、揮発性メモリ、ランダムアクセスメモリ（ＲＡＭ）、及び／又は不揮発性メモリ、例えば読み出し専用メモリ（ＲＯＭ）、又はフラッシュＲＡＭなどのコンピュータ可読媒体を含んでもよい。メモリは、コンピュータ可読媒体の例である。メモリは、モジュール１、モジュール２、・・・、及びモジュールＮ（Ｎは、２を超える整数である）を含んでもよい。
【００４０】
コンピュータ可読媒体は、可動及び非可動媒体だけでなく不揮発性及び揮発性媒体も含み、任意の方法又は技術によって情報記憶装置を実装することができる。情報は、コンピュータ可読命令、データ構造、及びプログラム又は他のデータのモジュールであってもよい。コンピュータの記憶媒体の例は、相変化メモリ（ＰＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、他のタイプのＲＡＭ、ＲＯＭ、電気的消去可能プログラマブル読み出し専用メモリ（ＥＥＰＲＯＭ）、フラッシュメモリ又は他のメモリ技術、コンパクトディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）又は他の光学的記憶装置、カセットテープ、磁気テープ／磁気ディスク記憶装置又は他の磁気記憶デバイス、又は任意の他の非伝送媒体（但し、これらに限定されない）を含み、これらの記憶媒体を使用して、計算デバイスにアクセス可能な情報を記憶することができる。ここで、定義によれば、コンピュータ可読媒体は、変調データ信号及び搬送波などの一時的媒体を含まない。
【００４１】
関連技術において、解析データベースは、ユーザの大量のデータファイルを、計算の前に解析データベースによって事前に局所的に記憶する事前記憶モードをサポートするだけである。このモードは、少なくとも下記の欠点を有する。１．大量のデータファイルを局所的に記憶し、大量の局所空間を占める。しかし、解析データベースの制限された局所的容量のために、ユーザデータ量が大きい場合、計算ノードを増加する必要があり、その結果、ユーザのコストが必然的に増加する。２．ユーザによってインポートされるデータ量が非常に大きい場合、データインポートの工程は遅く、時間的なコストが高い。インポート工程は、大量のネットワーク資源を消費し、その結果、解析データベースのサービスの安定性に間接的に影響を及ぼす。３．ユーザによってインポートされるデータファイルに大量のコールドデータがある場合があり、その結果、局所記憶空間を占めるだけでなく、計算速度にも影響を及ぼす。４．計算の工程において、計算ノードはファイル単位でデータを読み取るので、粒度が大きく、読み取り効率が低い。ホットデータ及びコールドデータがデータファイルに共存する場合、計算に不要なデータを読み取ることもあり、その結果、データのローディング速度及び計算速度に影響を及ぼすだけでなく、大量のネットワーク資源も浪費する。
【００４２】
関連技術において、需要の度合いに応じて、データファイルを解析データベースに記憶することができるけれども、ファイル内のコールド及びホットブロックを、階層的に記憶することができない。これは、低いローディング速度及び低いデータ計算速度を必然的に引き起こし、更に、大量の大きい粒度のデータファイルの伝送のために、ネットワーク資源も浪費する。
【００４３】
関連技術に存在する上述の技術的課題を解決するために、下記の技術的解決策を、この出願で提供する。
【００４４】
図１は、この出願による例示的なアプリケーション環境の略図を示す。図１に示すように、解析データベースは、複数の集約ノード（Ｍ１、・・・、Ｍｎ、但し、ｎは、２以上の整数である）、及び複数の計算ノード（Ｗｏｒｋｅｒ１、・・・、Ｗｏｒｋｅｒ＿ｍ、但し、ｍは、２以上の整数である）を含んでもよい。集約ノードの各々は、ユーザとインタラクションし、ユーザによって提示されるタスクを分割し、分割タスクを複数の計算ノードに送信する役割を果たす。計算ノードは、集約ノードによって送信されるタスクを実行し、計算結果を集約ノードにフィードバックする。集約ノードは、計算ノードによってフィードバックされる計算結果を結合してから、結合計算結果をユーザに提供する。探索計算を実行する場合、解析データベースにおける計算ノードは、データを外部データソース（例えば、分散ファイルシステム）から局所位置に直接コピーしてから、対応するデータファイルをこの局所位置から読み取ってもよい。例えば、データを探索する必要がある場合、ユーザは、探索ＳＱＬを集約ノードＭｎに送信してもよい。集約ノードＭｎは、対応する探索タスクをサブタスクに分割し、これらのサブタスクをＷｏｒｋｅｒ１及びＷｏｒｋｅｒ＿ｍに分散させる。Ｗｏｒｋｅｒ１及びＷｏｒｋｅｒ＿ｍは、それぞれ探索を実行する。Ｗｏｒｋｅｒ１及びＷｏｒｋｅｒ＿ｍは、それぞれＤａｔａ１及びＤａｔａ２を外部データソースから直接コピーしてから、Ｄａｔａ１及びＤａｔａ２に関する探索計算を実行し、最後に、探索計算の結果を集約ノードＭｎに戻してもよい。集約ノードＭｎは、Ｗｏｒｋｅｒ１及びＷｏｒｋｅｒ＿ｍによって戻される結果を集約してから、集約結果をユーザに戻す。
【００４５】
この出願の技術的解決策について、詳細に後述する。この出願の下記の技術的解決策を解析データベース（但し、限定されない）に適用することができることに留意すべきである。更に、この出願の技術的解決策を、他のタイプのデータベース（但し、限定されない）に適用することもできる。
【００４６】
第１の実施形態
図２に示すように、データ階層記憶方法は、下記のステップを含んでもよい。
【００４７】
ステップ２０１では、データファイルをリモートディスクに記憶する。
【００４８】
ステップ２０２では、ユーザによって最後にアクセスされたデータファイルをリモートディスクから取得し、データファイルをデータブロックにセグメント化し、データブロックをローカルディスクにキャッシュする。
【００４９】
ステップ２０３では、データブロックをローカルディスクからキャッシング用のローカルメモリにロードする。
【００５０】
この実施形態において、ユーザによって最後にアクセスされたデータファイルを、局所的に階層的に記憶するデータブロックにセグメント化し、その結果、解析データベースは、ユーザアクセスの変更に応じて局所的に階層的に記憶されるデータを動的に更新することができる。従って、ホットデータを、データアクセスの実際の需要に応じた小さい粒度のデータブロックの形で階層的に記憶する。コールド及びホットデータの分散及び階層記憶は、実際のデータアクセス状況により整合し、階層記憶を、ファイル内のデータブロックの需要に応じて自動的に実行することができる。それによって、データのローディング速度及び計算速度を大幅に増加することができるだけでなく、解析データベースとユーザ機器との間、及び解析データベースとリモートディスクとの間で、データファイルを頻繁に伝送する必要もあり、これによって、大量のネットワーク資源が節約される。
【００５１】
この実施形態において、ローカルメモリ及びローカルディスクは、解析データベースに属する。階層記憶の場合、ローカルメモリは高レベルと考えられ、ローカルディスクは低レベルと考えられる。即ち、解析データベースにアクセスする場合、データブロックを、ローカルメモリから優先的に取得し、ローカルメモリがデータブロックを有しない場合、ローカルディスクから取得する。ローカルディスクがデータブロックを有しない場合、これは、データブロックがローカル解析データベースにないことを意味する。この場合、対応するデータファイルをリモートディスクから取得し、データファイルをデータブロックにセグメント化し、データブロックは、ローカルディスク及びローカルメモリに次に記憶される。
【００５２】
この実施形態において、データブロックを、ローカルディスクにおけるＢｌｏｃｋＦｉｌｅの形で記憶することができる。即ち、少なくとも１つの固定長ＢｌｏｃｋＦｉｌｅを、ローカルディスクに生成することができる。ＢｌｏｃｋＦｉｌｅは、固定長Ｂｌｏｃｋを含む。データブロックをローカルディスクにキャッシュするステップは、データブロックをローカルディスクの空Ｂｌｏｃｋにキャッシュすることを含んでもよい。
【００５３】
実装形態において、マッピング関係をローカルディスクに構成することができる。マッピング関係は、少なくともデータブロックの長さ、各Ｂｌｏｃｋのアドレス、及びＢｌｏｃｋにおけるデータ内容が属するファイルのアドレス、及び他の情報を含む。リモートディスクからのデータファイルを、マッピング関係を介して固定長データブロックにセグメント化することができ、次に、データブロックを、ローカルディスクにおける空Ｂｌｏｃｋに記憶することができる。例えば、データファイルは、１０Ｇであり、１つのＢｌｏｃｋの長さを、１２８ＫＢに設定する。従って、データファイルを、８１９２０個のデータブロックにセグメント化することができる。従って、データブロックの粒度は、データファイルの粒度よりも非常に小さいことが明らかである。
【００５４】
実装形態において、複数のＢｌｏｃｋＦｉｌｅを、ローカルＳＳＤに生成することができる。各ＢｌｏｃｋＦｉｌｅは、固定長ファイルである。各ＢｌｏｃｋＦｉｌｅを、固定長Ｂｌｏｃｋに内部的に分割し、各Ｂｌｏｃｋの状態を記録する。ここで、Ｂｌｏｃｋは、データがＢｌｏｃｋに記憶されていないことを示す空状態と、Ｂｌｏｃｋがデータで一杯であることを示す一杯状態との２つの状態を有してもよい。それによって、データブロックをローカルディスクにキャッシュする必要がある場合、空Ｂｌｏｃｋを探索してもよく、データブロックを空Ｂｌｏｃｋに記憶することができる。
【００５５】
例えば、システムを起動する場合、ローカルディスクの利用可能容量（デフォルトにより７００ＧＢである）に応じて、ＢｌｏｃｋＦｉｌｅを生成することができる。１つのＢｌｏｃｋＦｉｌｅの長さを１ＧＢに設定し、１つのＢｌｏｃｋの長さを１２８ＫＢに設定した場合、及びローカルディスクの全利用可能容量がデータブロックの記憶に利用可能である場合、各々が８１９２個のＢｌｏｃｋに内部的に分割されている、７００個のＢｌｏｃｋＦｉｌｅを生成することができる。１つのＢｌｏｃｋの長さを２５６ＫＢに設定した場合、各ＢｌｏｃｋＦｉｌｅを、４０９６個のＢｌｏｃｋに内部的に分割してもよい。従って、データをＢｌｏｃｋでローカルディスクにキャッシュし、Ｂｌｏｃｋレベルのキャッシングは、コールド及びホットデータのファイルレベルの階層よりも、ホットデータを集約するために有益であることが明らかである。例えば、１０ＧＢのデータファイルの場合、その中で、わずか１Ｇ又は数百ＫＢが、探索計算に必要であるとして、データをＢｌｏｃｋレベルでキャッシュする場合、データの所望の小さい部分を直接ロードすることができるが、ファイルレベルのコールド及びホット階層の場合は、１０Ｇのデータファイルをロードする必要がある。従って、この実施形態における方法は、関連技術と比較して、データのローディング速度及び計算速度を大幅に増加することができる。
【００５６】
実装形態において、１つの計算又は探索用のデータブロックをローカルディスクにキャッシュする工程は、下記の通りであることができる。連続的な空Ｂｌｏｃｋがある場合、連続Ｂｌｏｃｋを自動的に使用して、優先的に現在の計算又は探索用のデータを記憶する。ローカルディスクが、連続しない空ブロックを有する場合、これらの不連続空ブロックを自動的に使用して、現在の計算又は探索用のデータを記憶することができる。この実施形態において、ローカルディスクは、ランダム読み取りをサポートし、その結果、データを連続ブロックに記憶するかどうかは、読み取り効率に影響を及ぼさない。例えば、使用の初めに、ユーザアクセスが発生していない場合、ローカルディスクは空であってもよい。この場合、ローカルディスクは、リモートディスクから取得された各データファイルをデータブロックに分割してから、データブロックを複数の連続Ｂｌｏｃｋ又はＢｌｏｃｋＦｉｌｅに記憶することができる。別の例で、多重ユーザアクセスの後、幾つかの空ブロックが、ローカルディスクに存在してもよい。しかし、これらのブロックは、不連続であり、異なるＢｌｏｃｋＦｉｌｅに属することがある。この場合、データブロックを、これらの不連続空ブロックに直接記憶することもできる。
【００５７】
この実施形態において、新しいデータをロードする必要がある場合、新しいデータをキャッシュするのに十分なＢｌｏｃｋをローカルディスクが有しない場合、新しいデータをキャッシュするために、ローカルディスクにおけるＢｌｏｃｋの幾つかを空にすることができる。即ち、データブロックをローカルディスクにキャッシュする前に、ローカルディスクの全Ｂｌｏｃｋが一杯である場合、データブロックをＢｌｏｃｋの一部にキャッシュするように、最低使用頻度（ＬＲＵ）アルゴリズムを使用して、ブロックの当該一部におけるデータを削除し、Ｂｌｏｃｋの当該一部を空にすることができる。
【００５８】
実装形態において、現在キャッシュされる必要があるデータブロックの所要容量、及びそれぞれのＢｌｏｃｋの現在の状態（空又は一杯）に基づいて、ローカルディスクは、データブロックをＢｌｏｃｋの一部に記憶するように、ＬＲＵアルゴリズムを使用して、Ｂｌｏｃｋｓの当該一部を空にしてもよい。それによって、データを複数回ロードすることによって、ローカルディスクにキャッシュされるデータブロックは、頻繁にアクセスされるデータ、即ちホットデータとなる。
【００５９】
この実施形態において、データブロック、又はデータブロック及びデータファイルを、ローカルディスクと同様な形でローカルメモリに記憶することができる。実装形態において、データブロックを、ＢｌｏｃｋＦｉｌｅの形でローカルメモリに記憶することができる。即ち、少なくとも１つの固定長ＢｌｏｃｋＦｉｌｅをローカルメモリに更に生成し、このＢｌｏｃｋＦｉｌｅは固定長Ｂｌｏｃｋを含む。ここで、データブロックをローカルメモリに記憶する方法は、ローカルディスクに記憶する方法と同じであり、詳細に説明しない。
【００６０】
この実施形態において、新しいデータをロードする必要があるとき、新しいデータをキャッシュするのに十分な空間をローカルメモリが有しない場合、新しいデータをキャッシュするために、ローカルメモリは、ローカルメモリ自体のＢｌｏｃｋの幾つかを空にすることもできる。具体的には、データブロックをローカルディスクからキャッシング用のローカルメモリにロードする前に、ローカルメモリにおける全Ｂｌｏｃｋが一杯である場合、データブロックをＢｌｏｃｋの一部に記憶することができるように、ＬＲＵアルゴリズムを使用して、Ｂｌｏｃｋｓの当該一部におけるデータを削除し、ブロックの当該一部を空にすることができる。
【００６１】
実装形態において、キャッシュされる必要があるデータブロックの所要容量、及びそれぞれのＢｌｏｃｋの現在の状態（空又は一杯）に基づいて、ローカルメモリは、キャッシュされる必要があるデータブロックをＢｌｏｃｋの一部に記憶するように、ＬＲＵアルゴリズムを使用して、Ｂｌｏｃｋの当該一部を空にしてもよい。それによって、複数回のローディングによって、ローカルメモリにキャッシュされるデータは、頻繁にアクセスされるデータ、即ちホットデータとなる。
【００６２】
この実施形態において、少なくとも１つのＬｏｃａｌＦｉｌｅを、ローカルディスクに生成してもよく、このＬｏｃａｌＦｉｌｅを使用して、データファイルを記憶する。方法は、事前指定データファイルをローカルディスクのＬｏｃａｌＦｉｌｅにキャッシュすることを更に含む。それによって、データの一部を、シナリオ又はユーザの要件に応じて事前記憶モードで解析データベースに記憶することができ、その結果、解析データベースを、リアルタイム性能に関するより高い要件を有するアプリケーションシナリオ、例えば監視と同様なアプリケーションシナリオに適用することもできる。
【００６３】
実装形態において、ローカルディスクを区分して、異なる区分を介してデータファイルの事前記憶及びデータブロックの階層記憶の両方をサポートすることができる。即ち、ローカルディスクは、ＢｌｏｃｋＦｉｌｅが生成されるブロックキャッシュと、ＬｏｃａｌＦｉｌｅが生成されるファイルキャッシュとを含むことができる。それによって、上述のデータブロックの階層記憶を、ブロックキャッシュ及びローカルメモリで実施することができ、上述の事前記憶モードを、ファイルキャッシュ及びローカルメモリで実施することができる。
【００６４】
この実施形態において、ローカルディスクにおけるファイルキャッシュの使用容量を走査することによって、ローカルディスクにおけるブロックキャッシュの容量を拡大又は縮小することもできる。
【００６５】
実装形態において、ローカルディスクにおけるブロックキャッシュの容量を拡大又は縮小するステップは、１）ファイルキャッシュの解放可能容量に応じてブロックキャッシュの容量を対応して増大し、新しい容量に応じてブロックキャッシュにおけるＢｌｏｃｋＦｉｌｅ又はＢｌｏｃｋｓを新しく生成すること、及び２）ファイルキャッシュで増大される必要がある容量に応じてブロックキャッシュにおけるＢｌｏｃｋＦｉｌｅ又はＢｌｏｃｋの一部を削除し、ブロックキャッシュの容量を対応して縮小すること
のうち少なくとも１つを含むことができる。
【００６６】
例えば、事前記憶モード及びデータブロック階層記憶モードが共存する場合、事前記憶モードの優先順位を、データブロック階層記憶モードの優先順位よりも高く設定することができる。データファイルの増加のために、事前記憶モードの容量を拡大する必要がある場合、データブロック階層記憶モードにおける記憶空間を、事前記憶モードのために解放する必要がある。この場合、ローカルディスクにおけるブロックキャッシュの容量を自動的に縮小することができる。データファイルの減少のために、事前記憶モードで占有される記憶空間がより小さい場合、事前記憶モードにおける冗長な記憶空間を、データブロック階層記憶モードで用いるために解放することができる。即ち、事前記憶モードで解放された記憶空間を使用して、ローカルディスクにおけるブロックキャッシュの容量を自動的に拡大することができる。
【００６７】
ブロックキャッシュの大きい容量のために、計算ノードを再始動する場合、ウォーミングアップ時間は非常に長く、その結果、探索性能に必然的に影響を及ぼす。この問題を回避するために、この実施形態において、ブロックキャッシュを、先行書き込みログ（ＷＡＬ）によって持続することもできる。即ち、データブロックをローカルディスクにキャッシュする前に、ＢｌｏｃｋＦｉｌｅに対応するＷＡＬを、ローカルディスクのブロックキャッシュに設定することができる。それによって、計算ノードを再始動した後、このログを再現することによって、ブロックキャッシュを迅速にウォーミングアップすることができる。
【００６８】
実装形態において、ブロックキャッシュをＷＡＬによって持続する工程は、メタデータをブロックキャッシュに記憶することができ、このメタデータを２つの部分に分割する。一方の部分を使用して、どのＢｌｏｃｋが割り当てられているか、及びどのＢｌｏｃｋが割り当てられていないか、即ち、Ｂｌｏｃｋの状態を記録し、他方の部分を使用して、各ＢｌｏｃｋがどのＢｌｏｃｋＦｉｌｅに属するか、即ち、ＢｌｏｃｋとＢｌｏｃｋＦｉｌｅとの間の従属関係を記録する。それによって、計算ノードを再始動した場合、各ＢｌｏｃｋＦｉｌｅにキャッシュされたデータを、検索の必要なく、メタデータを介して、完全に回復することができる。メタデータを保存しない場合、ＢｌｏｃｋＦｉｌｅにおける全データを自動的に空にする。この場合、更に、データファイルを、再度取得し、セグメント化し、キャッシュする必要があり、その結果、データの探索計算速度に必然的に影響を及ぼし、解析データベースの性能に更に影響を及ぼす。
【００６９】
この実施形態において、方法は、ユーザによるアクセス中に、対応するデータブロックを、ローカルメモリ、ローカルディスクからリモートディスクへ層ごとに再帰的に下方へ探索し、その間に、データブロックをローカルメモリ及びローカルディスクに層ごとにキャッシュすることを更に含む。
【００７０】
実装形態において、上述のデータ階層記憶方法に基づいて、上述の解析データベースに適用されるデータ階層探索方法を、この実施形態で更に提供する。このデータ階層探索方法を用いて、対応するデータブロックを、ローカルメモリ、ローカルディスクからリモートディスクへ層ごとに再帰的に下方へ探索し、その間に、データブロックをローカルメモリ及びローカルディスクに層ごとにキャッシュする。図３に示すように、データ階層探索方法は、下記のステップを含むことができる。
【００７１】
ステップ３０１では、対応するデータブロックを、計算層からの探索命令に応じてローカルメモリから読み取る。
【００７２】
ステップ３０２では、データブロックがローカルメモリに存在する場合、データブロックを計算層にフィードバックする。
【００７３】
実装形態において、対応するデータブロックをローカルメモリから読み取った後、方法は、データブロックがローカルメモリに存在しない場合、データブロックをローカルディスクから読み取ることと、データブロックがローカルディスクに存在する場合、データブロックをローカルディスクからローカルメモリにロードすることと、データブロックをローカルメモリから再度読み取ることとを更に含むことができる。
【００７４】
実装形態において、対応するデータブロックをローカルディスクから読み取った後、方法は、データブロックがローカルディスクに存在しない場合、対応するデータファイルをリモートディスクから読み取り、データファイルをデータブロックにセグメント化し、データブロックをローカルディスクにキャッシュすることと、データブロックをローカルディスクからローカルメモリにロードすることと、データブロックをローカルメモリから再度読み取ることとを更に含むことができる。
【００７５】
実装形態において、ユーザは、指示を介して、対応する記憶層に入れるためのデータの探索を制御することができる。例えば、ユーザは、次の探索ＳＱＬ：／＊＋ＭｅｍＢｌｏｃｋＣａｃｈｅ＝ｆａｌｓｅ，ＳＳＤＢｌｏｃｋＣａｃｈｅ＝ｆａｌｓｅ＊／ｓｅｌｅｃｔ＊をテーブル１から入力することができる。探索ＳＱＬは、ＳＳＤＢｌｏｃｋＣａｃｈｅ＝ｆａｌｓｅの場合、データがローカルＳＳＤキャッシュに入らないことを示し、ＭｅｍＢｌｏｃｋＣａｃｈｅ＝ｆａｌｓｅの場合、データがローカルメモリキャッシュに入らないことを示すことを意味する。実際のアプリケーションにおいて、ユーザによって探索されるデータは、デフォルトでキャッシュされる。同様の機能によって、ユーザは、探索ＳＱＬを介して、必要に応じて幾つかの探索結果がキャッシュに入るのを防止することができ、その結果、キャッシュの無効なスワップイン及びスワップアウトを回避することができる。
【００７６】
上述のデータ階層探索方法を、解析データベースの任意の計算ノードで実施することができる。計算ノードの計算層がデータをデータ処理層（並行処理は考慮されていない）から読み取る場合、データを上層（即ち、ローカルメモリ）から最初に取得する。データが見いだされない場合、所望のデータを取得するまで、データを下層（即ち、ローカルディスク及びリモートディスク）から再帰的に下方へ取得する。対応するデータを、探索中に、対応する記憶階層にキャッシュする。
【００７７】
上述のデータ階層記憶方法に基づいて、解析データベースに適用できる別のデータ階層探索方法を、この実施形態で更に提供する。図４に示すように、データ階層探索方法は、下記のステップを含んでもよい。
【００７８】
ステップ４０１では、集約ノードは、ユーザ機器からの計算タスクを計算サブタスクに分割し、計算サブタスクを複数の計算ノードに分散させる。
【００７９】
ステップ４０２では、計算ノードは、計算サブタスクを実行することによって、対応するデータブロックを、ローカルメモリ、ローカルディスクからリモートディスクへ層ごとに再帰的に下方へ探索し、その間に、データブロックをローカルメモリ及びローカルディスクに層ごとにキャッシュし、得られたデータブロックを集約ノードに戻す操作を実行する。
【００８０】
ステップ４０３では、集約ノードは、計算ノードによって戻されるデータブロックを集約してから、集約データブロックをユーザ機器に提供する。
【００８１】
実装形態において、計算ノードは、計算サブタスクを実行することによって、データファイルをリモートディスクに記憶する操作を更に実行することができる。
【００８２】
実装形態において、対応するデータブロックを、ローカルメモリ、ローカルディスクからリモートディスクへ層ごとに再帰的に下方へ探索し、その間に、データブロックをローカルメモリ及びローカルディスクに層ごとにキャッシュするステップは、データブロックがローカルメモリ又はローカルディスクで得られない場合、対応するデータファイルをリモートディスクから取得し、データファイルをデータブロックにセグメント化し、データブロックをローカルディスクにキャッシュすることと、データブロックをローカルディスクからキャッシング用のローカルメモリにロードすることとを含むことができる。
【００８３】
実装形態において、計算ノードによって、「対応するデータブロックを、ローカルメモリ、ローカルディスクからリモートディスクへ層ごとに再帰的に下方へ探索し、その間に、データブロックをローカルメモリ及びローカルディスクに層ごとにキャッシュすること」を実行する工程を、図３に示すデータ階層探索方法を用いて実施可能であり、詳細に説明しない。
【００８４】
計算ノードは、探索サブタスクを実行することによって、対応するデータブロックを対応するローカルメモリから読み取り、データブロックがローカルメモリに存在する場合、データブロックを集約ノードにフィードバックする。
【００８５】
集約ノードは、計算ノードによってフィードバックされたデータブロックを集約してから、集約データブロックをユーザ機器に提供する。
【００８６】
実装形態において、対応するデータブロックを解析データベースの対応するローカルメモリから読み取った後、方法は、データブロックがローカルメモリに存在しない場合、データブロックを対応するローカルディスクから読み取ることと、データブロックがローカルディスクに存在する場合、データブロックを、ローカルディスクからキャッシング用のローカルメモリにロードすることと、データブロックをローカルメモリから再度読み取ることとを更に含むことができる。
【００８７】
実装形態において、データブロックを解析データベースのローカルディスクから読み取った後、方法は、データブロックがローカルディスクに存在しない場合、対応するデータファイルをリモートディスクから読み取り、データファイルをデータブロックにセグメント化し、データブロックを対応するローカルディスクにキャッシュすることと、データブロックをローカルディスクからキャッシング用のローカルメモリにロードすることと、データブロックをローカルメモリから再度読み取ることとを更に含むことができる。
【００８８】
上述のデータ階層探索方法は、計算ノードによって、計算サブタスクを実行することにより、指定データファイルを、ローカルメモリからローカルディスク及びリモートディスクへ層ごとに再帰的に下方へ探索し、その間に、データファイルをローカルメモリにキャッシュする操作を実行することを更に含むことができることに留意すべきである。
【００８９】
この実施形態の上述の方法について、特定の例によって詳細に説明する。
【００９０】
ユーザは、データを過去１００日間保存することを望み、新しいデータをユーザのカスタム解析データベースに毎日インポートすると想定する。解析データベースが事前記憶モード及びデータブロック階層記憶モードを同時に採用し、毎日記憶されるデータをデフォルトによりデータブロック階層記憶モードで記憶することをユーザが設定した場合、解析データベースにおいて、ユーザによって毎日記憶されるデータは、データファイルの形でデフォルトによりリモートディスクに記憶する。
【００９１】
ユーザが初めて幾つかの特定のデータを探索する場合、解析データベースは、対応するデータファイルをリモートディスクから取得し、データファイルをデータブロックにセグメント化し、解析データベースにおけるローカルディスクの様々なＢｌｏｃｋＦｉｌｅの空Ｂｌｏｃｋにデータブロックをキャッシュし、データブロックをローカルディスクからキャッシング用の解析データベースのローカルメモリにロードする。
【００９２】
多くの探索の後、ユーザによって頻繁にアクセスされるデータを、データブロックの形でローカルディスク及びローカルメモリにキャッシュする。ユーザがこのようなデータを再度探索する場合、解析データベースの計算ノードは、ローカルディスク又はローカルメモリからデータを直接読み取ることができ、読み取られたデータは、Ｂｌｏｃｋレベルであり、その結果、探索が高速になるだけでなく、ユーザの探索コストもより低くなる。
【００９３】
一般的に、ユーザは、最近アクセスされたデータを探索することが多く、特別な場合にだけ、ずっと前に記憶されたデータを探索する。
【００９４】
ユーザがずっと前に記憶されたデータを必要とし、このようなデータが少ない頻度でアクセスされる場合、データがローカルディスク又はローカルメモリにキャッシュされていない可能性がある。ユーザがこのようなデータを探索する場合、解析データベースの計算ノードは、ローカルディスク及びローカルメモリを層ごとに下方へ探索し、場合によっては、計算ノードは、対応するデータファイルをリモートディスクから取得し、データファイルをデータブロックにセグメント化し、データブロックをローカルディスク及びローカルメモリに記憶し、最後にデータブロックの形でデータをユーザに提供する必要があることがある。このようなデータの探索は、最初遅いことがある。しかし、対応するデータは、一度探索された後、ローカルディスク及びローカルメモリにもキャッシュされる。ユーザが、このようなデータをその後頻繁にアクセスする場合、データは、ホットデータとして長い間ローカルディスク及びローカルメモリにキャッシュされ、アクセス回数が増加するにつれて、データのローディング速度及び計算速度が増加する。
【００９５】
第２の実施形態
図５に示すように、データ階層記憶装置は、
データファイルをリモートディスクに記憶し、ユーザによって最後にアクセスされたデータファイルをリモートディスクから取得するように構成されているリモートファイル処理ユニット５１と、
データファイルをデータブロックにセグメント化し、データブロックをローカルディスクにキャッシュするように構成されているブロック処理ユニット５２と、
データブロックをローカルディスクからキャッシング用のローカルメモリにロードするように構成されているメモリキャッシングユニット５３と
を含んでもよい。
【００９６】
実装形態において、上述のデータ階層記憶装置は、少なくとも固定長Ｂｌｏｃｋを含む少なくとも１つの固定長ＢｌｏｃｋＦｉｌｅをローカルディスクに生成するように構成されているブロックキャッシングユニット５４を更に含むことができ、ブロック処理ユニット５２は、データブロックを空Ｂｌｏｃｋにキャッシュするように構成されている。
【００９７】
実装形態において、上述のデータ階層記憶装置は、データファイルを記憶する少なくとも１つのＬｏｃａｌＦｉｌｅをローカルディスクに生成するように構成されかつ事前指定データファイルをローカルディスクのＬｏｃａｌＦｉｌｅにキャッシュするように構成されているファイル処理ユニット５５を更に含むことができる。
【００９８】
実装形態において、ローカルディスクは、ＢｌｏｃｋＦｉｌｅが生成されるブロックキャッシュと、ＬｏｃａｌＦｉｌｅが生成されるファイルキャッシュとを含み、上述のデータ階層記憶装置は、ローカルディスクにおけるファイルキャッシュの使用容量を走査することによって、ローカルディスクにおけるブロックキャッシュの容量を拡大又は縮小するように構成されているディスク処理ユニット５６を更に含むことができる。
【００９９】
実装形態において、上述のデータ階層記憶装置は、ＢｌｏｃｋＦｉｌｅに対応するＷＡＬをローカルディスクに設定するように構成されているメタデータ処理ユニット５７を更に含むことができる。
【０１００】
実装形態において、上述のデータ階層記憶装置は、ユーザによるアクセス中に、対応するデータブロックを、ローカルメモリ、ローカルディスクからリモートディスクへ層ごとに再帰的に下方へ探索するように構成されているブロックファイル処理ユニット５８を更に含むことができ、ブロックキャッシングユニット５４は、ブロックファイル処理ユニットによってデータブロックを探索する工程において、データブロックをローカルメモリ及びローカルディスクに層ごとにキャッシュするように更に構成することができる。
【０１０１】
この実施形態の他の技術的詳細は、第１の実施形態及び以下の様々な例を参照して得ることができる。
【０１０２】
第３の実施形態
計算デバイスは、
リモートディスクと通信するように構成されている通信回路と、
階層記憶モードをサポートするデータ記憶装置であって、低レベルとしてローカルディスクを含み、高レベルとしてローカルメモリを含むデータ記憶装置と、
データ階層記憶プログラムが記憶されている記憶装置と、
第１の実施形態に記載のデータ階層記憶方法の操作を実行するデータ階層記憶プログラムを読み取るように構成されているプロセッサと
を含むことができる。
【０１０３】
実装形態において、プロセッサは、データ階層記憶プログラムを読み取るように更に構成され、データ階層記憶プログラムは、ユーザによるアクセス中に、対応するデータブロックを、ローカルメモリ、ローカルディスクからリモートディスクへ層ごとに再帰的に下方へ探索し、その間に、データブロックをローカルメモリ及びローカルディスクに層ごとにキャッシュする操作を実行する。
【０１０４】
この実施形態の他の技術的詳細は、第１の実施形態及び以下の様々な例を参照して得ることができる。
【０１０５】
第４の実施形態
分散計算システムは、少なくとも１つの集約ノードと複数の計算ノードとを含み、
集約ノードは、ユーザ機器からの計算タスクを計算サブタスクに分割し、計算サブタスクを計算ノードに分散させ、計算ノードによって戻されるデータブロックを集約してから、集約データブロックをユーザ機器に提供するように構成されており、
計算ノードは、計算サブタスクを実行することによって、対応するデータブロックを、ローカルメモリ、ローカルディスクからリモートディスクへ層ごとに再帰的に下方へ探索し、その間に、データブロックをローカルメモリ及びローカルディスクに層ごとにキャッシュし、得られたデータブロックを集約ノードに戻す操作を実行するように構成されている。
【０１０６】
この実施形態の他の技術的詳細は、第１の実施形態及び以下の様々な例を参照して得ることができる。
【０１０７】
第５の実施形態
データ階層記憶プログラムを記憶するコンピュータ可読記憶媒体であり、データ階層記憶プログラムがプロセッサによって実行される場合、第１の実施形態に記載のデータ階層記憶方法のステップが実施される。
【０１０８】
この実施形態の他の技術的詳細は、第１の実施形態及び以下の様々な例を参照して得ることができる。
【０１０９】
上述の実施形態の例示的な実装形態について、詳細に後述する。下記の例を互いに組み合わせることができることに留意すべきである。その上、下記の例における工程、実行工程などを、実際のアプリケーション要件に応じて調整することもできる。更に、上述の実施形態を、実際のアプリケーションにおいて、他の方法で実装することもできる。
【０１１０】
この実施形態について、複数の例によって詳細に後述する。
【０１１１】
第１の例
実装形態の解決策において、ローカルディスクを、高いアクセス速度を有するソリッドステートディスク（ＳＳＤ）として実施してもよく、ローカルメモリを、より高いアクセス速度を有するダイナミックランダムアクセスメモリ（ＤＲＡＭ）として実施してもよい。リモートディスクを、大量のデータを記憶することができる分散ファイルシステム（ＤＦＳ）、例えばリモートシリアルアドバンストテクノロジーアタッチメント（ＳＡＴＡ）として実施することができる。
【０１１２】
この実装形態の解決策において、データが階層記憶モードで記憶された後、
ＤＦＳ（リモートＳＡＴＡ）は、ユーザの全データファイルを記憶し、
解析データベースのローカルＳＳＤは、１．計算に関するデータを記憶し、データブロックに応じて記憶データを管理し、２．異なる需要の度合いに応じて別々に異なるデータファイルをキャッシュし、３．データファイルにおけるデータを、コールドデータ及びホットデータに分割し、データブロックの形でコールドデータ及びホットデータをキャッシュし、４．必要ならば、ＬＲＵアルゴリズムを用いてデータをクリアし、
解析データベースのローカルＤＲＡＭは、計算に関するローカルＳＳＤからのホットデータを記憶し、必要ならば、ＬＲＵアルゴリズムを用いて記憶データをクリアする。
【０１１３】
更に、ローカルメモリ、ローカルディスク及びリモートディスクを、他の形で実装することもでき、特定の実装形態の形は、このアプリケーションで限定されない。
【０１１４】
第２の例
実装形態の解決策において、解析データベースは、この実施形態における、ローカルディスク及びローカルメモリへのデータブロックの階層記憶であるデータブロック階層記憶モードだけをサポートすることができる。
【０１１５】
この例において、ＤＲＡＭが、解析データベースにおける計算ノードのメモリである。
【０１１６】
図６は、この例による、解析データベースにおける計算ノードの階層構造、及び計算ノードとリモートディスクとの間のインタラクションの略図を示す。リモートディスクとしてのＳＡＴＡは、ユーザによってインポートされる全データファイルを記憶する役割を果たす。１つの計算ノードは、計算層（Ｃｏｍｐｕｔｅ）とデータ処理層（ＤａｔａＭａｎａｇｅｒ）とを含むことができる。計算層は、データ処理層を呼び出して指定データブロックを探索し、集約ノードによって送信されるサブタスクを実行することによって計算を行い、計算結果を集約ノードにフィードバックする役割を果たす。データ処理層は、計算層の探索命令に応じて指定データブロックを探索するように構成されている。
【０１１７】
図６に示すように、この例において、データ処理層は、高レベルＤＲＡＭ及び低レベルＳＳＤの２つの層を含むことができる。複数のＢｌｏｃｋＦｉｌｅ：ＢｌｏｃｋＦｉｌｅ１、ＢｌｏｃｋＦｉｌｅ２、・・・、及びＢｌｏｃｋＦｉｌｅＮ（Ｎは、１以上の整数である）がＳＳＤに生成される。データ処理層は、データブロック階層記憶モードをサポートする。データブロック階層記憶モードにおいて、ユーザによって最後にアクセスされたデータブロックが、ＤＲＡＭ又はＳＳＤにキャッシュされていない場合、データ管理層は、対応するデータファイルをＳＡＴＡから取得し、このデータファイルを固定長データブロックにセグメント化し、ＳＳＤにおけるＢｌｏｃｋＦｉｌｅ内の様々なＢｌｏｃｋにデータブロックをキャッシュし、データブロックをキャッシング用のＤＲＡＭにロードする。
【０１１８】
図６に示すように、データ処理層は、データブロックの階層記憶を実施する下記の機能ユニットを含んでもよい：
ＳＡＴＡとインタラクションする役割を果たすリモートファイル処理ユニット。リモートファイル処理ユニットは、データファイルをＳＡＴＡから取得するように構成することができる。
Ｂｌｏｃｋレベルのデータを管理する役割を果たすブロック処理ユニット。ブロック処理ユニットは、データファイルを固定長データブロックにセグメント化し、ＳＳＤにおけるＢｌｏｃｋＦｉｌｅ内の様々なＢｌｏｃｋにデータブロックをキャッシュするように構成することができる。
Ｂｌｏｃｋの割り当て、及びＢｌｏｃｋとＢｌｏｃｋＦｉｌｅとの間の従属関係をＳＳＤに記録するために、上述のＢｌｏｃｋＦｉｌｅに対応するＷＡＬをＳＳＤに設定するように構成されているメタデータ処理ユニット。これにより、計算ノードが再始動された後、Ｂｌｏｃｋにキャッシュされたデータを迅速に回復することができる。
ＳＳＤ上のＢｌｏｃｋＦｉｌｅ及びＢｌｏｃｋを管理する役割を果たすブロックキャッシングユニット。ブロックキャッシングユニットは、複数のＢｌｏｃｋＦｉｌｅ：ＢｌｏｃｋＦｉｌｅ１、ＢｌｏｃｋＦｉｌｅ２、・・・、及びＢｌｏｃｋＦｉｌｅＮ（Ｎは、１以上の整数である）をＳＳＤに生成するように構成することができ、各ＢｌｏｃｋＦｉｌｅは、複数の固定長Ｂｌｏｃｋに分割される。ブロックキャッシングユニットは更に、ブロック処理ユニットによって呼び出された場合、且つローカルディスクの全Ｂｌｏｃｋが一杯である場合、ＬＲＵアルゴリズムを使用してＢｌｏｃｋの一部におけるデータを削除し、Ｂｌｏｃｋの当該一部をクリアするように構成することができ、その結果、ブロック処理ユニットは、データブロックをＳＳＤのＢｌｏｃｋｓにキャッシュすることができる。
ＤＲＡＭとインタラクションする役割を果たすブロックファイル処理ユニット。ブロックファイル処理ユニットは、データブロックがＤＲＡＭに存在しない場合、対応するデータブロックをＳＳＤで探索し、対応するデータブロックがＳＳＤに存在しない場合、ブロックファイル処理ユニットを呼び出して、対応するデータファイルをＳＡＴＡから取得し、最後に、得られたデータブロックをＤＲＡＭにロードするように構成することができる。
【０１１９】
第３の例
実装形態の解決策において、解析データベースは、事前記憶モード及びデータブロック階層記憶モードを同時にサポートすることができる。データブロック階層記憶モードは、この実施形態における、ローカルディスク及びローカルメモリにデータブロックを階層的に記憶するモードである。事前記憶モードは、計算の前にデータファイルをユーザによってローカル解析データベースにインポートするモードである。
【０１２０】
図７は、この例による、解析データベースにおける計算ノードの階層構造、及び計算ノードとリモートディスクとの間のインタラクションの略図を示す。図７に示すように、この例における計算ノードの階層構造及びデータ処理層の階層記憶構造は、データ処理層が事前記憶モード及びデータブロック階層記憶モードを同時にサポートすることができるということを除いて、第２の例と同じである。データ処理層のＳＳＤは、ブロックキャッシュ及びファイルキャッシュの２つの領域に分割されている。複数のＢｌｏｃｋＦｉｌｅ：ＢｌｏｃｋＦｉｌｅ１、ＢｌｏｃｋＦｉｌｅ２、・・・、及びＢｌｏｃｋＦｉｌｅＮ（Ｎは、２以上の整数である）がブロックキャッシュに生成され、複数のＬｏｃａｌＦｉｌｅ：ＢｌｏｃｋＦｉｌｅ１、ＢｌｏｃｋＦｉｌｅ２、・・・、及びＢｌｏｃｋＦｉｌｅＸ（Ｘは、２以上の整数である）がファイルキャッシュに生成される。
【０１２１】
この例において、データブロック階層記憶モードでは、ユーザによって最後にアクセスされたデータブロックがＤＲＡＭ又はＳＳＤにキャッシュされていない場合、対応するデータファイルをＳＡＴＡから取得することができ、このデータファイルを固定長データブロックにセグメント化し、ＳＳＤにおけるＢｌｏｃｋＦｉｌｅ内の様々なＢｌｏｃｋにデータブロックをキャッシュし、最後に、データブロックをキャッシング用のＤＲＡＭにロードする。
【０１２２】
この例において、事前記憶モードでは、データ処理層は、ユーザによってインポートされた指定タイプのデータファイルをＳＳＤのＬｏｃａｌＦｉｌｅに直接記憶することができ、探索時に、対応するデータファイルをＬｏｃａｌＦｉｌｅから直接取得し、データファイルをキャッシング用のＤＲＡＭにロードした後、データファイルをＤＲＡＭから読み取り、データファイルを計算層からフィードバックすることができる。
【０１２３】
図７に示すように、第２の例の機能ユニットを含むことに加えて、データ処理層は、データファイルの記憶及びデータブロックの階層記憶を同時にサポートする下記の機能ユニットを含むこともできる。
ユーザによってインポートされた指定データファイルをＳＳＤの様々なＬｏｃａｌＦｉｌｅに記憶する役割を果たすファイル処理ユニット、及び
ＬｏｃａｌＦｉｌｅに対応するメタデータを記録する役割を果たすファイルメタデータ処理ユニット。メタデータは、計算ノードが再始動されたときにデータを回復するために、ＬｏｃａｌＦｉｌｅの状態（即ち、データファイルを記憶するかどうか）を記録するために使用される。。
【０１２４】
第４の例
この例において、第３の例の構成においてローカルディスクのブロックキャッシュの容量を拡大及び縮小する工程について、特定の例によって詳細に説明する。
【０１２５】
図８は、この例による、ブロックキャッシュの容量縮小及び容量拡大の略図を示す。この例において、事前記憶モードにおける拡大のために、データブロック階層記憶モードで空間を解放する必要がある場合、ブロックキャッシュの容量を縮小する。図８に示すように、容量縮小の前に、次のＢｌｏｃｋＦｉｌｅ：ＢｌｏｃｋＦｉｌｅＮ、ＢｌｏｃｋＦｉｌｅＮ＋１、・・・、ＢｌｏｃｋＦｉｌｅＮ＋Ｍ、ＢｌｏｃｋＦｉｌｅＮ＋Ｍ＋１（Ｎ及びＭは共に、１以上の整数である）がブロックキャッシュに生成される。容量縮小の後に、ＢｌｏｃｋＮをブロックキャッシュから削除する。しかし、ＢｌｏｃｋＮ＋１、・・・、ＢｌｏｃｋＮ＋Ｍ、ＢｌｏｃｋＮ＋Ｍ＋１は残される。事前記憶モードにおいて容量が縮小されることで、データブロック階層記憶モードにおいてより大きい容量を使用することができる場合、ブロックキャッシュの容量を拡大することができる。図８に示すように、容量拡大の後に、複数の新しいＢｌｏｃｋＦｉｌｅが、ブロックキャッシュによる拡大記憶空間に生成される。ここで、図８の陰影部におけるＢｌｏｃｋは、データが記憶されているＢｌｏｃｋである。
【０１２６】
第５の例
実装形態の解決策において、データブロック階層記憶モードにおけるデータアクセス工程、即ち、データ階層探索工程は、計算層がデータをデータ処理層から読み取る場合、データを上層（即ち、ローカルメモリ）から最初に読み取ること、データが見いだされない場合、データが読み取られるまで、データを下層（即ち、ローカルＳＳＤ及びＤＦＳ）から再帰的に下方へ読み取ること、及びこの下層から読み取られたデータをローカルメモリにロードすることを含むことができる。
【０１２７】
図９に示すように、この例でのデータブロック階層記憶モードにおけるデータアクセス工程は、下記のステップを含むことができる。
【０１２８】
ステップ９０１では、データブロックをローカルメモリから読み取り、データブロックを見いだしたかを判断し、肯定の場合、現在の工程を直ちに終了する。それ以外ならば、工程は、ステップ９０２に進む。
【０１２９】
ステップ９０２では、同じデータブロックが他の工程で読み取られるかを判断し、肯定の場合、工程は、ステップ９０３に進み、それ以外ならば、工程は、ステップ９０５に進む。
【０１３０】
ステップ９０３では、通知を待つ。
【０１３１】
ステップ９０４では、他の工程からの通知を受信し、工程は、ステップ９０１に戻る。
【０１３２】
ステップ９０５では、データブロックをローカルＳＳＤから読み取り、データブロックを見いだしたかを判断し、肯定の場合、工程は、ステップ９０６に進み、否定の場合、工程は、ステップ９０８に進む。
【０１３３】
ステップ９０６では、データブロックをローカルメモリにダウンロードする。
【０１３４】
ステップ９０７では、同じデータブロックの読み取りを待つ他の工程（以下、「待ち工程」という）に通知し、工程は、ステップ１に戻る。
【０１３５】
ステップ９０８では、他の工程が同じデータブロックを読み取っているかを判断し、肯定の場合、工程は、ステップ９０９に進み、それ以外ならば、工程は、ステップ９１１に進む。
【０１３６】
ステップ９０９では、通知を待つ。
【０１３７】
ステップ９１０では、他の工程からの通知を受信し、工程は、ステップ９０１に戻る。
【０１３８】
ステップ９１１では、データブロックをＤＦＳから読み取る。
【０１３９】
ステップ９１２では、ＤＦＳから読み取られたデータブロックをローカルＳＳＤにダウンロードする。
【０１４０】
ステップ９１３では、データブロックをローカルＳＳＤからキャッシング用のローカルにダウンロードする。
【０１４１】
ステップ９１４では、待ち工程に通知し、工程は、ステップ９０１に戻る。
【０１４２】
上述の図９は単に例であることに留意すべきである。他の実際のアプリケーションシナリオにおいて、データブロック階層記憶モードにおけるデータアクセス工程を、他の方法で実施することもできる。
【０１４３】
上述の方法におけるステップの全部又は一部を、関連ハードウェアに指示するプログラムによって達成することができることが当業者によって分かる。このプログラムは、読み出し専用メモリ、磁気ディスク又は光ディスクなどのコンピュータ可読記憶媒体に記憶されてもよい。任意選択的に、上述の実施形態におけるステップの全部又は一部を、１つ又は複数の集積回路を用いて実施することもできる。それに対応して、上述の実施形態におけるモジュール／ユニットを、ハードウェアの形、又はソフトウェア機能モジュールの形で実施することができる。この出願は、ハードウェア及びソフトウェアの任意の特定の形の組み合わせに限定されない。
【０１４４】
当然、この出願は、多くの他の実施形態を含んでもよい。当業者は、この出願の精神及び要旨から逸脱することなく、この出願によって様々な対応する変更及び修正を行うことができる。しかし、これらの対応する変更及び修正は全て、この出願の特許請求の範囲の保護範囲に含まれるべきである。
【図１】
2021501389.tif 000003
【図２】
2021501389.tif 000004
【図３】
2021501389.tif 000005
【図４】
2021501389.tif 000006
【図５】
2021501389.tif 000007
【図６】
2021501389.tif 000008
【図７】
2021501389.tif 000009
【図８】
2021501389.tif 000010
【図９】
2021501389.tif 000011
【国際調査報告】
2021501389.tif 000012
2021501389.tif 000013
2021501389.tif 000014
2021501389.tif 000015