(57)【要約】  一つまたはそれ以上のデータストレージメディアにおけるデータ管理のためのコンピュータで実施される方法が適用される。実施例の方法は、データストレージメディアの中にデータ構造を作成するステップを含み得る。データ構造は複数のメモリページを含んでおり、それぞれのメモリページは複数のセッションを含んでおり、それぞれのセッションはヘッダと複数のデータオブジェクトを含んでいる。本方法は、また、データストレージメディアに、ルーチンリクエストに応じて、データ書込みできるようにするステップを含み、データは、仮想カーソルの現在位置に最も近い一つまたはそれ以上のデータオブジェクトに記録される。データ管理オペレーションが実行されるとき、仮想カーソルは、一つのページの中で単一方向において移動される。
2016535380.tif 000002
【特許請求の範囲】
【請求項１】
一つまたはそれ以上のデータストレージメディアの中のデータを管理するコンピュータで実施される方法であって、前記方法は、
前記一つまたはそれ以上のデータストレージメディアの中に、プロセッサによって、データ構造を作成するステップであり、前記データ構造は複数のメモリページを含んでおり、それぞれのメモリページは複数のセッションを含んでおり、それぞれのセッションはヘッダと複数のデータオブジェクトを含んでいる、ステップと、
前記一つまたはそれ以上のデータストレージメディアに、プロセッサによって、ルーチンリクエストに応じて、データ書込みできるようにするステップであり、前記データは、シーケンシャルに前記一つまたはそれ以上のデータオブジェクトに記録される、
方法。
【請求項２】
それぞれのセッションの前記ヘッダは、一つまたはそれ以上のデータオブジェクト識別子を含み、前記一つまたはそれ以上のデータオブジェクト識別子は、前記一つまたはそれ以上のデータオブジェクトに対して一意的に関連付けられており、かつ、
前記一つまたはそれ以上のデータオブジェクト識別子は、対応する一つまたはそれ以上のデータオブジェクトの一つまたはそれ以上のアドレス、前記一つまたはそれ以上のデータオブジェクトの長さ、前記一つまたはそれ以上のデータオブジェクトのタイムスタンプとシーケンス番号、および、セッションのシーケンス番号、を含む、
請求項１に記載の方法。
【請求項３】
セッションの前記シーケンス番号は、前記メモリページにおける前記セッションの番号、および、前記メモリページにおけるフリースペースの量を決定するために、前記セッションの整合性検査と併せて使用される、
請求項２に記載の方法。
【請求項４】
前記ヘッダは、さらに、前記一つまたはそれ以上のデータオブジェクトの中に保管されたデータに関する一つまたはそれ以上のハッシュ値を含む、
請求項２に記載の方法。
【請求項５】
前記一つまたはそれ以上のハッシュ値は、バインダセクションのハッシュ値を含み、かつ、
前記バインダセクションは、メモリページバインダによって結合された一つまたはそれ以上の複数のメモリページを含む、
請求項４に記載の方法。
【請求項６】
それぞれのメモリページは、既定の固定長である、
請求項１に記載の方法。
【請求項７】
それぞれのセッションは、可変でカスタマイズ可能な長さを有する、
請求項１に記載の方法。
【請求項８】
書込まれるべきデータは、データパケットとして表される、
請求項１に記載の方法。
【請求項９】
前記方法は、さらに、前記プロセッサによって、メモリページバインダを作成するステップ、を含み、
前記メモリページバインダは、一つまたはそれ以上の複数のメモリページを単一のストレージプールへと仮想的に結合する、
請求項１に記載の方法。
【請求項１０】
前記メモリページは、２つまたはそれ以上のデータストレージメディアに保管される、
請求項９に記載の方法。
【請求項１１】
データは、前記メモリページが満杯になるまで、一つまたはそれ以上のセッションにおける前記複数のデータオブジェクトに書込まれる、
請求項１に記載の方法。
【請求項１２】
前記方法は、さらに、前記プロセッサによって、ルーチンリクエストに応じて、前記メモリページの中でデータ検索を実行するステップ、を含み、
前記データ検索は、さらに、データオブジェクト識別子を通じた検索を含む、
請求項１に記載の方法。
【請求項１３】
一つまたはそれ以上のデータストレージメディアにおけるデータ管理のためのコンピュータシステムであって、前記システムは、
前記一つまたはそれ以上のデータストレージメディアにおいてデータ構造を作成するように構成されているデータ構造ジェネレータであり、前記データ構造は複数のメモリページを含んでおり、それぞれのメモリページは複数のセッションを含んでおり、それぞれのセッションはヘッダと複数のデータオブジェクトを含んでいる、データ構造ジェネレータと、
前記一つまたはそれ以上のデータストレージメディアに、ルーチンリクエストに応じて、データを書込むように構成されている書込みモジュールであり、前記データは、シーケンシャルに前記一つまたはそれ以上のデータオブジェクトに記録される、
システム。
【請求項１４】
それぞれのセッションの前記ヘッダは、一つまたはそれ以上のデータオブジェクト識別子を含み、前記一つまたはそれ以上のデータオブジェクト識別子は、前記一つまたはそれ以上のデータオブジェクトに対して一意的に関連付けられており、かつ、
前記一つまたはそれ以上のデータオブジェクト識別子は、前記一つまたはそれ以上のデータオブジェクトの一つまたはそれ以上のアドレス、前記一つまたはそれ以上のデータオブジェクトの長さ、前記一つまたはそれ以上のデータオブジェクトのタイムスタンプとシーケンス番号、および、セッションのシーケンス番号、を含む、
請求項１３に記載のシステム。
【請求項１５】
前記書込みモジュールは、さらに、
単一のストレージプールを表わすように２つまたはそれ以上の複数のメモリページを仮想的に結合するためのメモリページバインダを作成するように構成されており、
前記メモリページバインダは、前記ヘッダに保管されて、前記複数のメモリページがどのようにリンクされているかを特定する、
請求項１３に記載のシステム。
【請求項１６】
前記２つまたはそれ以上の複数のメモリページは、２つまたはそれ以上のデータストレージメディアとして参照される、
請求項１５に記載のシステム。
【請求項１７】
前記システムは、さらに、
ルーチンリクエストに応じて、前記メモリページの中でデータ検索を実行するように構成されている検索モジュール、を含み、
前記データ検索は、データオブジェクト識別子を通じた検索を含む、
請求項１３に記載のシステム。
【請求項１８】
インストラクションが保管されたプロセッサで読取り可能な固定の媒体であって、一つまたはそれ以上のプロセッサによって実行されると、前記一つまたはそれ以上のプロセッサに、一つまたはそれ以上のデータストレージメディアの中のデータを管理するための方法を実行させ、前記方法は、
前記一つまたはそれ以上のデータストレージメディアの中に、複数のメモリページを含むデータ構造を作成するステップであり、それぞれのメモリページは複数のセッションを含んでおり、それぞれのセッションはヘッダと複数のデータオブジェクトを含んでいる、ステップと、
前記一つまたはそれ以上のデータストレージメディアに、ルーチンリクエストに応じて、データ書込みできるようにするステップであり、前記データは、シーケンシャルに前記一つまたはそれ以上のデータオブジェクトに記録される、ステップと、
を含む、媒体。
【請求項１９】
一つまたはそれ以上のデータストレージメディアにおいてデータを書込む方法であって、前記一つまたはそれ以上のデータストレージメディアは、複数のメモリページを含むデータ構造を含んでおり、それぞれのメモリページは複数のセッションを含み、かつ、それぞれのセッションはヘッダと複数のデータオブジェクトを含んでおり、
前記方法は、
データを書込むためのルーチンリクエストを受信するステップと、
仮想カーソルの現在位置を決定するステップと、
前記仮想カーソルの現在位置に最も近い一つまたはそれ以上のフリーセッションの位置を決定するステップと、
データ書込みの際に、前記仮想カーソルが一つのメモリページの中でデータオブジェクトを通じて単一方向において移動されるように、一つまたはそれ以上のフリーセッションの一つまたはそれ以上のデータオブジェクトにデータを書込むステップと、
を含む、方法。
【請求項２０】
前記方法は、さらに、
前記一つまたはそれ以上のデータオブジェクトに書込まれた新たに追加されたデータに関する少なくとも一つのハッシュ値を計算するステップと、
前記少なくとも一つのハッシュ値を前記ヘッダに保管するステップと、
を含む、請求項１９に記載の方法。
【請求項２１】
前記データオブジェクトは、前記メモリページの中に順方向において書込まれる、
請求項１９に記載の方法。
【請求項２２】
書込まれるデータは、データパッケトとして表される、
請求項１９に記載の方法。
【請求項２３】
前記方法は、さらに、
単一のストレージプールを表わすために２つまたはそれ以上の複数のメモリページを仮想的に結合するためのメモリページバインダを作成するステップ、を含み、
前記メモリページバインダは、前記ヘッダに保管され、かつ、前記複数のメモリページがどのようにリンクされているかを特定する、
請求項１９に記載の方法。
【請求項２４】
前記２つまたはそれ以上の複数のメモリページは、一つまたはそれ以上のデータストレージメディアへ回される、
請求項１９に記載の方法。
【請求項２５】
データは、前記メモリページが満杯になるまで、一つまたはそれ以上のセッションの前記複数のデータオブジェクトに書込まれる、
請求項１９に記載の方法。
【請求項２６】
一つまたはそれ以上のデータストレージメディアにおいてデータを書込む方ためのコンピュータシステムであって、前記一つまたはそれ以上のデータストレージメディアは複数のメモリページを含み、それぞれのメモリページは複数のセッションを含み、かつ、それぞれのセッションはヘッダと複数のデータオブジェクトを含んでおり、
前記システムは、
データを書込むためのルーチンリクエストを受信する、ように構成されている通信モジュールと、
仮想カーソルの現在位置を決定し、かつ、前記仮想カーソルの現在位置に最も近くに残っている新たなセッションのためのフリースペースを伴う一つまたはそれ以上のメモリページの位置を決定する、ように構成されているフリースペースロケータと、
データ書込みプロシージャの最中に、ポインタが一つのメモリページの中でデータオブジェクトを通じて単一方向において移動されるように、前記一つまたはそれ以上のデータオブジェクトに対するデータを、前記一つまたはそれ以上のメモリページの前記フリースペースにおける前記新たなセッションに書込む、ように構成されている書込みモジュールと、
を含む、システム。
【請求項２７】
前記書込みモジュールは、さらに、
前記一つまたはそれ以上のデータオブジェクトに書込まれた新たに追加されたデータに関する少なくとも一つのハッシュ値を計算し、かつ、前記少なくとも一つのハッシュ値を前記ヘッダに保管する、ように構成されている、
請求項２６に記載のシステム。
【請求項２８】
前記書込みモジュールは、さらに、
２つまたはそれ以上の複数のメモリページを仮想的に結合するためのメモリページバインダを作成する、ように構成されており、
前記メモリページバインダは、一つまたはそれ以上のヘッダに保管され、かつ、前記複数のメモリページがどのようにリンクされているかを特定する、
請求項２６に記載のシステム。
【請求項２９】
前記２つまたはそれ以上の複数のメモリページは、一つまたはそれ以上のデータストレージメディアへ回される、
請求項２８に記載のシステム。
【請求項３０】
データは、前記メモリページが満杯になるまで、一つまたはそれ以上のセッションの前記複数のデータオブジェクトに書込まれる、
請求項２６に記載のシステム。
【請求項３１】
インストラクションが保管されたプロセッサで読取り可能な固定の媒体であって、一つまたはそれ以上のプロセッサによって実行されると、前記一つまたはそれ以上のプロセッサに、一つまたはそれ以上のデータストレージメディアの中のデータを管理するための方法を実行させ、前記一つまたはそれ以上のデータストレージメディアは、複数のメモリページを含むデータ構造を含んでおり、それぞれのメモリページは複数のセッションを含み、かつ、それぞれのセッションはヘッダと複数のデータオブジェクトを含んでおり、前記方法は、
データを書込むためのルーチンリクエストを受信するステップと、
仮想カーソルの現在位置を決定するステップと、
前記仮想カーソルの現在位置に最も近い一つまたはそれ以上のフリーセッションの位置を決定するステップと、
データ書込みの際に、前記仮想カーソルが一つのメモリページの中でデータオブジェクトを通じて単一方向において移動されるように、一つまたはそれ以上のメモリページのフリースペースにおける一つまたはそれ以上の新たなセッションの一つまたはそれ以上のデータオブジェクトにデータを書込むステップと、
を含む、媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明開示は、一般的に、データ処理に関する。より特定的には、順方向専用にページ化されたデータストレージ管理に関する。
【０００２】
本特許出願は、２０１３年１０月１６日付の米国特許出願第１４／０５５６６２号に基づく優先権を主張するものである。上記の特許出願に係る開示は、全ての目的のための参照により、ここにおいて包含されている。そこで引用された全ての参考文献を含むものである。
【背景技術】
【０００３】
このセクションにおいて説明されるアプローチは、追及され得るだろうが、必ずしも以前に着想または追求されてきたアプローチではない。従って、特に指示の無い限り、単にこのセクションに包含されているせいで、このセクションにおいて説明されるあらゆるアプローチを従来技術としてみなすことを想定するべきではない。
【０００４】
コンピュータシステムにおけるデータ処理速度は、新たなコンピューティングリソースについて成長している要求を満たすために絶えず増加している。しかしながら、現代のコンピュータシステムの全ての利点を活用するために、ストレージおよびメモリアドレッシング（ｍｅｍｏｒｙ  ａｄｄｒｅｓｓｉｎｇ）速度の増加に対する強い要求も存在する。
【０００５】
今日、多くのコンピュータシステムは、種々のタイプのメモリを使用している。ハードディスクドライブ（ＨＤＤ）、半導体ドライブ（ＳＳＤ）、ランダムアクセスメモリ（ＲＡＭ）、および読出し専用メモリ（ＲＯＭ）といったものである。残念ながら、メモリのいくつかの形式は、しばしば、コンピューティングシステムのあらゆる他のコンポーネントよりも遅い応答時間（ｒｅｓｐｏｎｓｅ  ｔｉｍｅ）を有している。従って、コンピューティングシステムが高性能な処理装置を使用する場合には、全体のパフォーマンスがあまりに高くはなり得ない。メモリアドレッシング速度が比較的に遅いからである。この理由は、しばしば、メモリのハードウェア固有の制限ではなく、むしろ、データが書込まれ、かつ、メモリから読出される方法にある。
【０００６】
所定のデータ構造が、メモリユニットにおいてデータを整理するために使用され得る。これらのデータ構造により、大量のデータを管理することができる。例えば、大きなデータベースまたはインターネットのインデックスサービス（ｉｎｄｅｘｉｎｇ  ｓｅｒｖｉｃｅ）といったものである。いくつかのデータ構造は、所定のアプリケーションに対して、より良好に適している。いくつかのデータ構造は、特定のタスクに対して高度に特化され、かつ、調整されている。
【０００７】
データの書込みと読出しは、しばしば、ポインタを含んでいる。ポインタは、メモリ空間における物理的な場所の仮想的表現であってよい。データがそこへ書込まれる必要があり、または、データがそこから読出される必要があるところである。従来、メモリ構造は、書込みオペレーションまたは読出しオペレーションのいずれかが一度に実行できるように、一つのポインタを備えている。データが、メモリから読出され、または、メモリに書込まれる必要があるときには、ソフトウェアアプリケーションリクエストに応じたオペレーションを促進するために、ポインタは、特定のメモリ空間またはページと仮想的に関連付けされる。
【０００８】
残念ながら、上述のアプローチに関しては数多くの制限が存在する。まず第一に、書込みプロシージャの実行に専用のルーチン（ｒｏｕｔｉｎｅ）は、データを保管するために使用され得るフリーページ（ｆｒｅｅ  ｐａｇｅ）を設置する。このプロセスは、フリースペースを特定することに費やす時間と書込みオペレーションを実行するためにそうしたフリースペースへのポインタの移動に費やす時間の両方に関して、むしろ時間がかり得るものである。さらに、ストレージ技術は、データを連続して保管するために、お互いのすごく近位において、ページを見つけることを含み得る。この観点において、いくつかのデータ管理スキームは、全てのデータが一緒に配置されるように、一つの場所から別の場所へデータの部分を再書込みするための再書込みプロシージャを使用する。このプロシージャは、しばしば、時間がかかるだけでなく、エラーを生じ、もしくは、データ損失を結果として生じ得る。
【０００９】
今日のメモリ構造の別の不利な点は、大きなデータオブジェクトを複数のディスクドライブ（例えば、独立ディスクの冗長アレイ（ＲＡＩＤ））に保管する問題に関する。データオブジェクトは、要求される冗長性とパフォーマンスのレベルに応じて、「ＲＡＩＤレベル（”ＲＡＩＤ  ｌｅｖｅｌ”）」を介して複数のディスクドライブにわたり配分され得る。従って、いくつかの環境において、データオブジェクトは、複数の部分へと分離され、それぞれが同一または異なるディスク上に個別に保管され得る。これは、一つのメディアは、複数のデータオブジェクトまたはその部分にアクセスすることにおいて並列処理を提供できないことを意味している。
【００１０】
従って、いまだに、データの書込みと読出し速度および保管されたデータの整合性を増加するための、メモリ管理スキームにおける改善要求が存在している。
【発明の概要】
【発明が解決しようとする課題】
【００１１】
この概要は、コンセプトのセレクションを簡素化された形式において紹介するために提供されている。以下の詳細な説明においてさらに説明されるものである。この概要は、請求される技術的事項の主要な特徴または根本的な機能を特定することを意図するものではなく、請求される技術的事項の範囲の決定において補助として使用されることを意図するものでもない。
【課題を解決するための手段】
【００１２】
一つの態様に従って、一つまたはそれ以上のデータストレージメディアの中のデータを管理するコンピュータで実施される方法が提供される。本方法は、一つまたはそれ以上のデータストレージメディアの中にデータ構造を作成するステップを含んでよく、データ構造は複数のメモリページを含んでいる。それぞれのメモリページは複数のセッションを含んでおり、それぞれのセッションはヘッダと複数のデータオブジェクトを含んでいる。本方法は、さらに、ルーチンリクエストに応じて、一つまたはそれ以上のデータストレージメディアにデータ書込みするステップを含んでよく、データは、シーケンシャルに一つまたはそれ以上のデータオブジェクトに記録される。
【００１３】
種々の実施例において、それぞれのセッションのヘッダは、一つまたはそれ以上のデータオブジェクト識別子を含み、データオブジェクト識別子はデータオブジェクトに対して一意的に関連付けられており、かつ、一つまたはそれ以上のデータオブジェクト識別子は、対応するデータオブジェクトのハッシュ、データオブジェクトの長さ、任意的にデータオブジェクトのタイムスタンプ及び/又はシーケンス番号、および、セッション全体のシーケンス番号、を含む。ヘッダは、さらに、一つまたはそれ以上のデータオブジェクトの中に保管されたデータに関する一つまたはそれ以上のハッシュ値を含む。それぞれのメモリページは、既定の固定長であってよい。それぞれのセッションは、可変でカスタマイズ可能な長さを有してよい。本方法は、さらに、２つまたはそれ以上の複数のメモリページを仮想的に結合するためのメモリページバインダを作成するステップを含む。メモリバインダは、記述子の中に保管されてよく（例えば、ページのうちの一つの中で特別化されたオブジェクトの中、またはヘッダの中）、複数のメモリページがどのようにリンクされているか、および、全体としてどのようにアクセスされ得るかを記述している。上記の２つまたはそれ以上のメモリページは、２つまたはそれ以上のデータストレージメディアとして参照され得る。データは、メモリページが満杯になるまで一つまたはそれ以上のセッションの複数のデータオブジェクトに書込まれ得る。本方法は、さらに、ルーチンリクエストに応じて、メモリページの中でデータ検索を実行するステップを含み、データ検索は、さらに、データオブジェクト識別子を通じた検索を含む。
【００１４】
別の態様に従って、一つまたはそれ以上のデータストレージメディアにおけるデータ管理のためのコンピュータシステムが提供される。本システムは、一つまたはそれ以上のデータストレージメディアにおいてデータ構造を作成するように構成されているデータ構造ジェネレータを含んでよい。データ構造は複数のメモリページを含んでおり、それぞれのメモリページは複数のセッションを含んでおり、それぞれのセッションはヘッダと複数のデータオブジェクトを含んでいる。本システムは、また、ルーチンリクエストに応じて、一つまたはそれ以上のデータストレージメディアにデータを書込むように構成されている書込みモジュールも含んでよい。データは、シーケンシャルに一つまたはそれ以上のデータオブジェクトに記録される。
【００１５】
さらに別の態様に従って、インストラクションが保管されたプロセッサで読取り可能な固定の媒体が提供される。インストラクションは、一つまたはそれ以上のプロセッサによって実行されると、一つまたはそれ以上のプロセッサに、一つまたはそれ以上のデータストレージメディアの中にデータ構造を作成させる。データ構造は複数のメモリページを含んでおり、それぞれのメモリページは複数のセッションを含んでおり、それぞれのセッションはヘッダと複数のデータオブジェクトを含んでいる。そして、ルーチンリクエストに応じて、一つまたはそれ以上のデータストレージメディアにデータ書込みできるようにする。データが、シーケンシャルに一つまたはそれ以上のデータオブジェクトに記録されるようにである。
【００１６】
さらに別の態様に従って、一つまたはそれ以上のデータストレージメディアにデータを書込む方法が提供される。一つまたはそれ以上のデータストレージメディアは、複数のメモリページを含むデータ構造を含んでおり、それぞれのメモリページは複数のセッションを含み、かつ、それぞれのセッションはヘッダと複数のデータオブジェクトを含んでいる。本方法は、データを書込むためのルーチンリクエストを受信するステップと、仮想カーソルの現在位置を決定するステップと、仮想カーソルの現在位置に最も近いメモリページにおける一つまたはそれ以上のフリーセッションの位置を決定するステップと、データ書込みの際に、仮想カーソルが一つのメモリページの中でデータオブジェクトを通じて単一方向において移動されるように、一つまたはそれ以上のフリーセッションの一つまたはそれ以上のデータオブジェクトにデータを書込むステップと、を含む。
【００１７】
上記および関連の目的の達成に対して、一つまたはそれ以上の態様は、ここにおいて完全に説明され、かつ、請求項において特定的に指摘される特徴を含んでいる。以降の記載と図面は、一つまたはそれ以上の態様の所定の説明的な特徴を詳細に明らかにする。これらの特徴は、種々の態様の原理が使用され得る種々のやり方を示しており、しかしながら、そのうちのほんの一握りである。そして、この記載は、そうした態様とそれらの均等物の全てを含むように意図されている。さらなる実施および態様は、以下の記述から明らかにされる。
【図面の簡単な説明】
【００１８】
実施例が、添付図面の図表において、例示として、かつ、限定するものではなく、説明される。類似の参照記号は類似のエレメントを示している。
【図１】図１は、ページ化されたメモリの簡素化された構造を示している。
【図２】図２は、メモリページの簡素化された構造を示している。
【図３】図３は、セッションの簡素化された構造を示している。
【図４】図４は、データ管理の方法を使用するために適したコンピューティング環境を示している。
【図５】図５は、データ管理システムを示している。
【図６】図６は、メモリにおけるデータ管理の方法を示しているフローチャートである。
【図７】図７は、メモリへデータを書込むための方法を示しているフローチャートである。
【図８Ａ】図８Ａは、ページレイアウトの一つの例を示しているダイヤグラムである。
【図８Ｂ】図８Ｂは、データオブジェクトのためのインデックスエントリーレイアウトの一つの例を示しているダイヤグラムである。
【図９】図９は、コンピュータシステムの電子的な形式の例におけるマシンのためのコンピューティングデバイスの模式的な表現であり、ここにおいて説明される一つまたはそれ以上の方法のうちいずれかをマシンに実施させるための一式のインストラクションが実行される。
【発明を実施するための形態】
【００１９】
以降の詳細な説明は、添付の図面に対する参照を含んでおり、図面は詳細な説明の一部分を形成している。図面は、典型的な実施例に従ったイラストレーションを示している。これらの典型的な実施例は、ここにおいて「例（”ｅｘａｍｐｌｅ”）」としても参照されるが、当業者が本技術的事項を実施することができるように十分詳細に説明されている。実施例は組み合わせることができ、他の実施例を利用することができ、もしくは、請求される範囲から逸脱することなく、構造的、論理的、および電気的な変更が行われ得る。以降の詳細な説明は、従って、限定する意味に捉えられるべきものではない。そして、本範囲は、添付の請求項およびその均等物によって定められる。
【００２０】
イントロダクション
一つまたはそれ以上のデータストレージメディアにおけるデータを管理するためのアプローチは、ここにおいて説明されるように、一つまたはそれ以上のデータストレージメディアの中にデータ構造を作成することを含んでいる。例えば、ハードディスクドライブまたは半導体ドライブといった、一つまたはそれ以上のデータストレージメディア、メモリは、データを保管するための複数のメモリページを含んでよい。メモリページ、ここにおいては「ジャーナルページ（”ｊｏｕｒｎａｌ  ｐａｇｅ”）」としても参照されるものは、メモリの中の固定長の隣接ブロック（ｆｉｘｅｄ−ｌｅｎｇｔｈ  ｃｏｎｔｉｇｕｏｕｓ  ｂｌｏｃｋ）である。メモリページは、ここにおいて「ページ化メモリ（”ｐａｇｅｄ  ｍｅｍｏｒｙ”）」として参照されるメモリ管理スキームのコンポーネントである。
【００２１】
それぞれのメモリページは、可変数のセッション（ａ  ｖａｒｉａｂｌｅ  ｎｕｍｂｅｒ  ｏｆ  ｓｅｓｓｉｏｎｓ）もしくは、別の言葉で言えば、メモリページの割り当てられた部分、を含んでよい。種々の実施例に従って、それぞれのセッションは、ヘッダを保管するためのスペースとデータオブジェクトを保管するためのスペースを有している。データオブジェクトを保管するためのスペースは、また、ここにおいて、データゾーンとしても参照される。
【００２２】
それぞれのセッションのヘッダは、このセッションのデータゾーンの中に保管されたそれぞれのデータオブジェクトに関する情報を含んでよい。例えば、ヘッダは、データオブジェクト識別子を保管し得る。対応するデータオブジェクトのアドレス、データオブジェクトの長さ、および、データオブジェクトのタイムスタンプ及び/又はシーケンス番号、のうち一つまたはそれ以上を含み得るものである。識別子は、データオブジェクトの中に保管されたコンテンツの固有のハッシュ（ｈａｓｈ）を含んでよい。従って、データオブジェクトは、セッションのヘッダにおいて、一意的に特定される。さらに、それぞれのセッションのヘッダは、セッションのシーケンス番号を含んでよい。
【００２３】
ここにおいて説明されるアプローチによって提供される利点の一つは、新たなデータをメモリに書込む、より速い速度を確保することである。この目的のために、メモリは、データを保管するために使用されたメモリページを指し示すための仮想ポインタ（ｖｉｒｔｕａｌ  ｐｏｉｎｔｅｒ）を備えてよい。加えて、最後の書込みセッションが停止したところを示す仮想カーソル（ｖｉｒｔｕａｌ  ｃｕｒｓｏｒ）が、一つのメモリページの中で使用され得る。仮想カーソルは、データ書込みまたは読出しを促進するために、セッションの中で、メモリページの中でも同様に、一つのデータオブジェクトから別のものへ移動され得る。ポインタは、ページの最初にポインタが戻ってこられるように、循環的な方法で移動してよい。例えば、ページが効果的に消去されて再書込みされると考えられるべきときである。
【００２４】
仮想カーソルは、メモリページの中で一方向だけに移動してよい。例えば、最も低いアドレスから最も高いアドレスへの順方向専用（ｆｏｒｗａｒｄ−ｏｎｌｙ  ｄｉｒｅｃｔｉｏｎ）である（もしくは、反対に、逆方向専用（ｂａｃｋｗａｒｄ−ｏｎｌｙ  ｄｉｒｅｃｔｉｏｎ））。仮想カーソルを移動することによって、メモリページの中でフリースペースを捜すために必要な時間を減少することができる。上述のように、データがセッションに保管されるときには、データゾーンにおける一つまたはそれ以上のデータオブジェクトとして保管され、そして、ヘッダにおいて一意的に特定される。書込みコマンドが受信された場合、新たなデータが新たなセッションに保管される以前に、メモリ空間がいくつかのフリースペースを有するか否かが判断されるべきである。それ以降、仮想カーソルは、データを保管する準備ができている最も近い場所、つまり、フリーゾーン、に向けて移動されてよい。最も近いフリーな場所は、ヘッダに保管された情報、もしくは、より特定的に、データオブジェクト識別子、を検査することによって決定され得る。あらゆる新たなデータは、仮想カーソルの現在の場所を過ぎて、直接的にフリースペースに対して書込まれてよい。従って、新たなデータは、残りのフリースペースの中の一つまたはそれ以上の新たなセッションに対して書込まれてよい。
【００２５】
メモリページサイズは固定されてよい。メモリセッションは、既定の固定長を有してよく、所定の数量のセッションがメモリページの中に「エンベッド（”ｅｍｂｅｄ”）」され得る。加えて、セッションのサイズが、現在の必要性（ｎｅｅｄｓ）に応じてカスタマイズされ得る。所定の実施例において、それぞれのメモリページの中でそれぞれのデータオブジェクトのサイズは変動してよく、そして、従って、データオブジェクトのサイズは、長さが変動するデータを保管するように適合されてよい。
【００２６】
ここにおいて提案されるアプローチによって提供される更なる利点は、複数のデータオブジェクトまたはその部分にアクセスすることにおいて並列処理を確保することである。この目的のために、データオブジェクトは、メモリページの異なるセッションに、または、一つまたはそれ以上のメディア（つまり、ディスク）の異なるメモリページにさえ、保管され得る。この場合に、複数のメモリページが、バインダ（ｂｉｎｄｅｒ）の助けを借りて一緒に結び付けられてよく、例えば、バインダ記述子（ｄｅｓｃｒｉｐｔｏｒ）といった他の特定のデータオブジェクトの中に保管されてよい。別の言葉で言えば、バインダは、単一のストレージプール（ｓｉｎｇｌｅ  ｓｔｏｒａｇｅ  ｐｏｏｌ）を表わすために、一つまたはそれ以上のデータストレージメディアに関する種々の個別に管理された複数のメモリページを結合し得る。所定の実施例において、ストレージメディアは、異なるバインダに関するメモリページが個別にアクセスされ得るように複数のバインダを有してよく、それによって、並列処理を提供している。バインダの中のメモリページのそれぞれ隣接したグループは、バインダセクションとして参照される。バインダは、一つまたはそれ以上のそうしたバインダセクションを有し得る。
【００２７】
従って、それぞれのバインダは、個別に管理されるストレージプールを提供し得る。バインダは、複数の個別に管理されるストレージプール、つまりバインダセクション、を結合し、かつ、それらを単一のストレージプールとして論理的に見えるようにし得る。いくつかのインスタンスにおいて、バインダは、また、バインダセクションをグループ化するためにも使用され得る。どのバインダセクションがある方法で一緒に結び付けられたかを特定するためである。これにより、ソフトウェアは、データオブジェクトのコピーを安全に保持するためにどこに保管する必要があるか判断することができる。例えば、データオブジェクトは、レプリカされ、そして、それぞれのコピーがいくつかの異なるバインダに保管され得る。これにより、また、どのストレージリソースが並列処理で使用され得るか、そして、どれが並列処理で使用できないかを理解することができる。
【００２８】
いくつかの実施例において、データオブジェクトは、レプリカされ、そして、それぞれのコピーが異なるバインダに保管され得る。上述のように、個別に管理されるものである。従って、一つのメディアの故障が全てのデータの損失を導くものではないので、保管されたデータの整合性が強化される。いくつかのアプローチにおいては、データオブジェクトを分離して、バインダの助けを借りてそれらを複数のデータストレージに個別に保管することが、さらに有利であろう。この場合、バインダは、これらのデータオブジェクトを含んでいる全てのメモリページをリンクするであろう。さらなる抽出（ｅｘｔｒａｃｔｉｏｎ）、アクセス、または変更を促進するためである。
【００２９】
従って、ここにおいて提案されるアプローチは、新たなデータに対するメモリページまたはセッションの割り当て、および、メモリページまたはセッションにアクセスすることに関する時間のかかるオペレーションを取り除く。
【００３０】
ここにおいて提案されるアプローチがデータ管理速度の増加を促進し得ることも、当業者によって正しく理解されるべきである。以下は、階層的なデータ構造を生成および管理するための方法とシステムに関する種々の実施例の詳細な説明である。
【００３１】
データ構造
ここで図面を参照すると、図１は、ページ化されたメモリ１００の簡素化された構造を示している。図に示されるように、ページかされたメモリ１００は、複数のメモリページ１１０を含んでよい。メモリページ、または「ジャーナルページ（”ｊｏｕｒｎａｌ  ｐａｇｅ”）」としてしばしば参照されるものは、ハードディスクドライブといった、メモリに係る固定長の隣接ブロックである。いくつかのアプリケーションにおいて、メモリページの長さは、現在の必要性に応じてカスタマイズされ得る。長さは、メモリページごとに変動してよい。しかしながら、一つの長さのメモリページも可能である。メモリページの数量は、制限されてよく、かつ、利用可能な物理的なメモリ空間に依存してよい。
【００３２】
図２は、メモリページ１１０の簡素化された構造を示している。メモリページ１１０は、一つまたはそれ以上のメモリセッション２００、もしくは、別の言葉で言えば、メモリページの割り当てられた部分を含んでよい。メモリセッション２００は、所定の数量のセッションがメモリページ１１０の中へ「エンベッド（”ｅｍｂｅｄ”）」されるように、既定の固定長を有してよい。例えば、１０２４ビットのデータが、メモリページ１１０の中でセッション２００を割り当てるために使用され得る。しかしながら、セッション２００のサイズは、現在の必要性に応じてカスタマイズされ得る。
【００３３】
それぞれのメモリセッション２００は、ヘッダ２１０とデータフィールド２２０を含んでよい。ヘッダ２１０は、セッション２００およびデータフィールド２２０に保管されたデータを特定するためのサービスデータを含んでよい。ヘッダ２１０は、また、チェックサム（ｃｈｅｃｋ  ｓｕｍ）またはハッシュ関数といった、追加情報、もしくは、メモリセッション２００の中でデータのアドレッシングと処理を促進するあらゆる他の情報を含んでもよい。いくつかの追加の実施例（図示なし）においては、全部のメモリページ１１０と全てのセッション２００に対して一つのヘッダが提供され得る。
【００３４】
図３は、メモリセッション２００の簡素化された構造を示している。図に示されるように、メモリセッションは、ヘッダ２１０とデータフィールド２２０を含んでいる。
【００３５】
データフィールド２２０は、データオブジェクト３１０といったデータを保管するように構成されている。それぞれのデータオブジェクトは、あらゆる長さであってよいが、対応するセッション２００のデータフィールド２２０のサイズより小さい。データオブジェクト３１０がデータフィールド２２０の全てのスペースを満たしていない場合に、セッション２００は、データオブジェクト３１０と自然の整列境界（ｎａｔｕｒａｌ  ａｌｉｇｎｍｅｎｔ  ｂｏｕｎｄａｒｙ）との間のスペースを占めるように、データフィールド２２０の最後に整列パディングゾーン（ａｌｉｎｍｅｎｔ  ｐａｄｄｉｎｇ  ｚｏｎｅ）３３０を含んでよい。特に、セッション２００におけるデータは、最後のデータオブジェクト３１０とセッション２００の最後、つまりデータフィールド２２０の最後、との間にいくつかの意味のないバイト（ｍｅａｎｉｎｇｌｅｓｓ  ｂｙｔｅｓ）を挿入することによって整列されてよい。従って、それぞれのセッション２００は、３つのゾーンを有し得る。ヘッダ２１０、データゾーン３２０、および、整列パディングゾーン３３０である。
【００３６】
ヘッダ２１０は、一つまたはそれ以上のデータオブジェクト識別子３４０を含んでよい。データオブジェクト識別子３４０は、対応するデータオブジェクト３１０に対して一意的に関連付けされ、かつ、特定し得る。それぞれのデータオブジェクト識別子３４０は、既定のサイズであってよく、例えば、６４または１６０ビットである。しかしながら、いくつかの追加の実施例において、データオブジェクト識別子３４０は、現在の必要性またはアプリケーションに応じて可変長であってよい。
【００３７】
例として、それぞれのデータオブジェクト識別子３４０は、対応するデータオブジェクト３１０のアドレス、データオブジェクト３１０のタイプに関する情報、データオブジェクトの長さに関する情報、データオブジェクトのタイムスタンプ及び/又はシーケンス番号、のうち一つまたはそれ以上を含んでよい。当業者であれば、データオブジェクト３１０を特定し、または、その特性を記述するために、データオブジェクト識別子３４０の中にあらゆる追加のデータが保管され得ることを正しく理解されよう。
【００３８】
ヘッダ２１０は、セッション２００のシーケンス番号３８０を含んでよく、データオブジェクト３１０を含んでいるセッション２００がメモリページに対して書込まれたときの時間または相対順序（ｒｅｌａｔｉｖｅ  ｏｒｄｅｒｉｎｇ）を示し得る。ヘッダのハッシュは、有効なセッションヘッダが存在することを検証することができ、そして、シーケンス番号は、古いセッションを新たなセッションと区別することができる。従って、シーケンス番号を読取ることによって、メモリページに対して書込まれたセッションの量とメモリページの中に残されたフリースペースのサイズが判断され得る。さらに、シーケンス番号を読取ることによって、フリースペースマップが、一度に又は増加的に（ｉｎｃｒｅｍｅｎｔａｌｌｙ）、検証、及び/又は、再構築され得る。フリースペースマップは、それぞれの書込みオペレーションの後に更新される必要はないだろう。クラッシュの場合には、最後の全体バージョンに戻り、そして、変化を判断するために追加のメモリページを増加的に読出すことによって、フリースペースマップが回復され得るからである。
【００３９】
所定の実施例においては、データオブジェクト３１０のシーケンス番号を読出すことによって、どのデータオブジェクトが新しいか（つまり、新たなセッションにおけるデータオブジェクト）が判断され得る。どのデータオブジェクトが新たなオブジェクトによって置換えられたか、そして、従って、廃棄され得るかを確証するためである。どのデータオブジェクトが新しいかを判断することにより、保管に値するデータを伴わないメモリページを最終的に削除することができる。一つの実施例において、このステップは、保管に値するデータオブジェクトを別のメモリページに再書込みする（ｒｅ−ｗｒｉｔｉｎｇ）ことによって、データオブジェクトをコンパクト化することを含み得る。データオブジェクトが自身のシーケンス番号を有していないインスタンスにおいては、セッション２００のシーケンス番号が、そこにおいて記述されている全てのデータオブジェクトに対するシーケンス番号として役立ち得る。データオブジェクトが自身のシーケンス番号を有している場合でさえ、データオブジェクトが最初に書込まれるときに、それらはしばしばセッションのシーケンス番号と同等である。しかし、これらのデータオブジェクトが、後に他のより新しいセッションへコピーされる場合には、異なるものになり得る。
【００４０】
さらに、シーケンス番号に基づいて、フリースペースマップに対するアップデートに固執することなく、かつ、メモリページ全体を削除することなく、メモリページが消去され、かつ、再書込みされ得る。例えば、新たに書込まれたセッションに続くあらゆるデータは、セッションにおける有効なヘッダを有しないか、より古いシーケンス番号を有するかどちらかである。従って、メモリページに対して、あらゆるサイズの、新たなセッションを書込むことは、メモリページの中に残っているデータ、つまり新たに書込まれたセッションに続くデータ、を自動的に無効化することができる。
【００４１】
ヘッダ２１０は、さらに、一つまたはそれ以上のデータオブジェクト３１０に保管されたデータに関する一つまたはそれ以上のハッシュ値３５０を含んでよい。いくつかの実施例においては、ヘッダの中に唯一つのハッシュ値３５０が存在する。セッション２００に保管されたデータの全体量に関連付けされ得るものである。一方で、いくつかの他の実施例において、ヘッダ２１０は、セッション２００に保管されたデータオブジェクト３１０それぞれに対して別個のハッシュ値３５０を含んでよい。そうした実施例において、別個のハッシュ値３５０は、ちょうどセッションヘッダだけに対する整合性検査を個別に提供することができる。セッションヘッダは、オブジェクトのＩＤ、タイプ、およびサイズを含んでおり、セッションのシーケンス番号も同様に含んでいる。加えて、データオブジェクトＩＤ自身は、データオブジェクトに対して内容アドレス記憶（ｃｏｎｔｅｎｔ−ａｄｄｒｅｓｓａｂｌｅ  ｓｔｏｒａｇｅ）スキームが使用される場合に、コンテンツに対するそれ自身のハッシュとして役立ち得る。このようにして、セッションに対する一つのハッシュが使用され、セッションヘッダの整合性を個別に検証し、同様に、全てのデータオブジェクトを含む、全部のセッションの完全な整合性が間接的に検証される。さらに、いくつかの実施例において、ハッシュ値３５０は、全部のバインダセクションのＩＤであるバインダセクションのハッシュを含んでよい。バインダセクションのハッシュにより、バインダセクションのＩＤを変更することによってバインダセクションの再フォーマットをすることができる。
【００４２】
一つまたはそれ以上のデータオブジェクト３１０からのデータが、読出し又は再書込みされるようにアドレスされるとき、もしくは、データがセッション２００に書込まれるべきときに、仮想カーソル３６０は、最初に、ヘッダ２１０の中、および、特には、データオブジェクト識別子３４０の中に含まれるものを読出し、そして、獲得されたデータに基づいて、データの読出し又は書込みができるように、データフィールド２２０の中の所定の位置に仮想カーソル３６０を配置し得る。
【００４３】
仮想カーソル３６０は、ここにおいて使用されるように、メモリセッション２００の中で所定のフィールドまたはゾーンにアドレスする（ａｄｄｒｅｓｓｉｎｇ）ための仮想ツールを参照する。ここにおいて開示される種々の実施例に従って、仮想カーソル３６０は、単一方向においてだけ移動することができる。例えば、一つの読出し／書込みオペレーションの中で、仮想カーソル３６０は、最も低いアドレスから最も高いアドレスに向かう方向３７０において移動し得る。もしくは、逆もまた同様である。従って、所与のセッションにおいて書込まれるべきデータオブジェクトの全ては、事前に準備されるべきである。これにより、ヘッダは、それら全てが最初に書込まれるべきことを記述し得るからであり、後にデータオブジェクトが続く。そして、後にヘッダを上書き（ｏｖｅｒｗｒｉｔｅ）するため、もしくは、異常なコンテンツを書込むために、カーソルが後向きに移動する必要がないことを保証する。より多くのデータオブジェクトが、ページに付加（ａｐｐｅｎｄ）されることが後に必要であれば、別のセッションが書込まれてよい。
【００４４】
コンピューティング環境とデータ管理システム
図４は、データ管理の方法を使用するために適したコンピューティング環境４００を示している。コンピューティング環境４００は、データ管理システム４１０、メモリ４２０、およびアプリケーションプログラム４３０を含む。
【００４５】
一般的に、メモリ４２０は、あらゆるタイプであってよく、かつ、データを保管するように構成されている。メモリ４２０は、また、ここにおいて使用されるように、データストレージメディアとして参照されてよい。いくつかの実施例（図示なし）において、コンピューティング環境４００は、相互に関連付けられ、かつ、一つのコンピューティングデバイスの中に配置され得る複数のメモリ４２０を含んでよい。または、複数のコンピューティングデバイスにわたり分散されてよい（例えば、インターネットまたは類似のものといったネットワークを介するもの）。
【００４６】
アプリケーションプログラム４３０は、同一のコンピュータ又はあらゆる他の外部デバイス上で実行されているあらゆるルーチンであってよい。アプリケーションプログラム４３０は、メモリ４２０の中でデータを管理するためのリクエストを生成し得る。データ管理は、データの書込み又は読出しを含んでよい。従って、アプリケーションプログラム４３０は、メモリ４２０の中でデータを管理するためのインストラクションを生成し、そして、データ管理システム４１０に対してインストラクションを送信し得る。インストラクションは、書込み又は読出しインストラクションを含んでよい。
【００４７】
データ管理システム４１０は、アプリケーションプログラム４３０から受信したこれらのインストラクションを扱うことができる。データ管理システム４１０は、データ管理システム４１０の中にデータ構造を作成するように構成されてよく、メモリ４２０の中にデータを書込み、読出し、そして、置き換えることができ、単一方向において仮想カーソル３６０を移動すること、等ができる。
【００４８】
図５は、データ管理システム４１０を示している。図に示されるように、データ管理システム４１０は、データ構造ジェネレータ５１０、通信モジュール５２０、フリースペースロケータ５３０、書込みモジュール５４０、および、検索モジュール５５０を含んでよい。これらのモジュールは、以下に、より詳細に説明される。
【００４９】
データ構造ジェネレータ５１０は、メモリ４２０の中にデータ構造を作成するように構成され得る。データ構造は、複数のメモリページを含んでよく、そして、それぞれのメモリページは、上述のように、複数のセッションを有してよい。それぞれのセッションは、次に、ヘッダ２１０と複数のデータオブジェクト３１０を含んでよい。さらに、それぞれのセッション２００のヘッダ２１０は、一つまたはそれ以上のデータオブジェクト識別子３４０を有してよく、データオブジェクト３１０と関連付けされてよい。上述のように、データオブジェクト識別子３４０は、対応するデータオブジェクトの一つまたはそれ以上のアドレス、データオブジェクトのタイプ、データオブジェクトの長さ、データオブジェクトのタイムスタンプ及び/又はシーケンス番号、および、セッション２００のシーケンス番号を含んでよい。
【００５０】
通信モジュール５２０は、アプリケーションプログラム４３０からルーチンリクエスト（ｒｏｕｔｉｎｅ  ｒｅｑｕｅｓｔ）を受信するように構成されてよい。ルーチンリクエストは、データの部分を書込み、読出し、または、置き換えるためのインストラクションに関連してよい。通信モジュール５２０は、さらに、実行されてきたそうしたインストラクションの結果及び/又は検索されたデータを送信するように構成されてよい。
【００５１】
フリースペースロケータ５３０は、仮想カーソル３６０の現在の位置を決定し、かつ、仮想カーソル３６０の現在位置に最も近い一つまたはそれ以上の新たなセッション２２０に対してフリースペースの位置を決定するように構成されてよい。所定の実施例において、フリースペースのスタートの選択は、メモリページのコンテンツの直接的な読出しに基づいてよい。特に、セッションヘッダの検査を通じて、フリースペースロケータからのそうした知識が存在しなくても、残っているフリースペースが決定され得る。さらに、書込まれるべきデータオブジェクトは、データオブジェクトのタイプ、年齢、期待される有効期間、等に基づいて、異なるセクションの中に保管されてよい。
【００５２】
書込みモジュール５４０は、アプリケーションプログラム４３０から受信したルーチンリクエストに応じて、メモリ４２０に対してデータを書込むように構成されてよい。データは、仮想カーソル３６０の現在位置に最も近い一つまたはそれ以上のデータオブジェクト３１０として書込まれてよい。書込みプロセスの最中に、仮想カーソル３６０は、メモリページ１１０の中で、かつ、単一方向３７０において移動される。特に、このアプローチにより、書込み以前の読出しを避けることができる。さらに、このアプローチは、既存のデータを新たなデータで上書きするリスクが存在しないので、データ整合性（ｄａｔａ  ｉｎｔｅｇｒｉｔｙ）を改善する。従って、同一のデータスペースに対する２つの書込みオペレーションの競合を結果として生じ得るレース状態（ｒａｃｅ  ｃｏｎｄｉｔｉｏｎ）に関心をもつ必要が存在しない。別の言葉で言えば、データは、ずっと一度だけ書込まれるものであり、あらゆる新たなデータはメモリページの別のセクションに対して書込まれる。
【００５３】
所定の実施例において、データオブジェクトのより古いバージョンは、新たなバージョンが成功裡に書込まれた後でさえ、いくらかの時間に存在してよい。これにより、古いバージョンを削除する以前に新たなバージョンの整合性を検証する十分な時間ができる。さらに、データオブジェクトの古いバージョンは、必要である限りにおいて参照されてよく、このように、ロッキング（ｌｏｃｋｉｎｇ）およびレース状態を取り除いている。古いバージョンは、それが新たなバージョンによって成功裡に廃止されるものであるために、これ以上の必要が無くなった後で除去され得る。
【００５４】
最終的に、検索モジュール５５０は、アプリケーションプログラム４３０から受信したルーチンリクエストに応じて、セッション２００およびメモリページ１１０の中のデータまたはデータオブジェクトを検索するように構成されてよい。データ検索は、データオブジェクト識別子３４０を通じた検索に基づいてよい。
【００５５】
オペレーション実施例
図６は、一つまたはそれ以上のメモリにおけるデータ管理の方法６００を示しているフローチャートである。方法６００は、ロジックによって実行されてよく、ハードウェア（例えば、専用ロジック、プログラム可能ロジック、およびマイクロコード）、ソフトウェア（汎用コンピュータシステムまたは専用マシンにおいて実行されるソフトウェアといったもの）、または、両方の組み合わせ、を含んでよい。一つの典型的な実施例においては、処理ロジックがデータ管理システム４１０に在り、そして、データ管理システム４１０の種々のモジュールが方法６００を実行し得る。当業者であれば、上記のモジュールの実施例は仮想的（ｖｉｒｔｕａｌ）であってよく、かつ、モジュールによって実行されるべきインストラクションは、事実上、データ管理システム４１０によって取り出されて、実行されてよいことが、正しく理解されよう。種々のモジュールは、ここにおいて説明される種々のステップのいくつか又は全てを実行するように構成されてよく、より少ない又はより多くのモジュールが提供され、そして、種々の実施例の範囲の中にさらに含まれてよい。
【００５６】
図６に示されるように、方法６００は、オペレーション６１０において始まってよく、データ構造ジェネレータ５１０を用いて、メモリ４２０（データストレージメディア、または、いくつかの実施例においては、データストレージ媒体）の中にデータ構造を作成する。上述のように、データ構造は、複数のメモリページを含んでおり、そして、それぞれのメモリページは、複数のセッションを含んでよい。一方で、それぞれのセッションは、ヘッダ２１０と複数のデータオブジェクト３１０を有している。それぞれのセッション２００のヘッダ２１０は、データオブジェクト３１０に関する一つまたはそれ以上のデータオブジェクト識別子３４０をエンベッド（ｅｍｂｅｄ）してよい。さらに、データオブジェクト識別子３４０は、対応するデータオブジェクトのアドレス、データオブジェクトのタイプ、データオブジェクトの長さ、及び/又は、データオブジェクトのタイムスタンプ、のうち一つまたはそれ以上を含んでよい。
【００５７】
オペレーション６２０において、書込みモジュール５４０は、ルーチンリクエストに応じてメモリ４２０に対してデータを書込むことができるようにする。データは、シーケンシャル（ｓｅｑｕｎｅｔｉａｌ）な方法で一つまたはそれ以上のデータオブジェクトとして記録される。所定の実施例において、データは、仮想カーソル３６０の位置において保管され得る。過去に保管された最新のデータオブジェクト３１０の直後に配置され得るものである。
【００５８】
方法６００は、任意的に、メモリページバインダを作成するオペレーション６３０を含んでよい。メモリページバインダは、一つまたはそれ以上の相互に関係するメモリ４２０に関する２つまたはそれ以上の複数のメモリページに関して作成されてよい。メモリページバインダの中のメモリページのそれぞれ隣接したグループは、バインダセクションとして参照され得る。メモリページバインダは、個別に管理される複数のストレージプール、つまりバインダセクション、を結合し得る。単一のストレージプールとして見えるものである。メモリページバインダは、ヘッダ２１０の中に保管されてよい。
【００５９】
方法６００は、オペレーション６４０を含んでよく、それにより、アプリケーションプログラム４３０から受信したルーチンリクエストに応じて、メモリページ１１０の中でデータを検索することができる。データ検索は、データオブジェクト識別子３４０を通じた検索で構成されてよい。
【００６０】
図７は、メモリ又は相互にリンクされたメモリにデータを書込むための方法７００を示しているフローチャートである。方法７００は、ロジックによって実行されてよく、ハードウェア（例えば、専用ロジック、プログラム可能ロジック、およびマイクロコード）、ソフトウェア（汎用コンピュータシステムまたは専用マシンにおいて実行されるソフトウェアといったもの）、または、両方の組み合わせ、を含んでよい。一つの典型的な実施例においては、処理ロジックがデータ管理システム４１０に在り、そして、データ管理システム４１０の種々のモジュールが方法７００を実行し得る。当業者であれば、上記のモジュールの実施例は仮想的であってよく、かつ、モジュールによって実行されるべきインストラクションは、事実上、データ管理システム４１０によって取り出されて、実行されてよいことが、正しく理解されよう。種々のモジュールは、ここにおいて説明される種々のステップのいくつか又は全てを実行するように構成されてよいが、より少ない又はより多くのモジュールが提供され、そして、種々の実施例の範囲の中にさらに含まれてよい。
【００６１】
方法７００は、ページ化されたメモリデータ構造において実行されてよい。そうしたデータ構造は、上述のように、複数のメモリページ１１０を含んでよく、かつ、それぞれのメモリページ１１０は、複数のセッション２００を含んでよい。それぞれのセッション２００は、ヘッダ２１０と複数のデータオブジェクト３１０を含んでよい。それぞれのセッション２００のヘッダ２１０は、上記のように一つまたはそれ以上のデータオブジェクト識別子３４０をエンベッドしてよい。そうしたデータオブジェクト識別子３４０は、データオブジェクト３１０と一意的に関連付けされてよく、そして、対応するデータオブジェクトのアドレス、データオブジェクトのタイプ、データオブジェクトの長さ、および、データオブジェクトのタイムスタンプ及び/又はシーケンス番号を含んでよい。
【００６２】
図７に示されるように、方法７００は、オペレーション７１０において始まってよく、通信モジュール５２０を用いて、データを書込むためのアプリケーションプログラム４３０からのルーチンリクエストを受信する。
【００６３】
オペレーション７２０において、フリースペースロケータ５３０は、仮想カーソル３６０の現在位置を決定してよい。フリースペースロケータ５３０は、また、フリーセッション２２０、（フリーデータフィールド２２０を有するセッション）、そして、特には、データフィールド２２０の開始も決定してよい。別の言葉で言えば、フリースペースロケータ５３０は、仮想カーソル３６０の現在位置に最も近く、かつ、新たなデータを保管するために利用可能な場所を捜し出す。所定の実施例において、メモリページは、メモリページに書込まれた最後のセッションとメモリページの最後との間のフリースペースを含んでよい。フリースペースは、メモリページに書込まれるべき新たなセッションのために使用されてよい。メモリページは、固定サイズであってよく、一方で、セッションは可変長であり、かつ、ページの中のセッションに書込まれるべき数多くのデータオブジェクトを含んでよい。
【００６４】
オペレーション７３０において、書込みモジュール５４０は、データをデータフィールド２２０に対して書込む。書込みオペレーションの最中に、仮想カーソル３６０が単一方向３７０においてメモリページの中で移動されるようにである。セッションは、あらゆる更なる変更なく、データが書込まれた後で、終了（ｃｌｏｓｅ  ｏｕｔ）されてよい。さらなるデータオブジェクトが書込まれる必要がある場合、新たなセッションが作成されてよい。セッションは、メモリページが満杯になるまで、メモリページに対して書込まれてよい。
【００６５】
オペレーション７４０において、書込みモジュール５４０は、ヘッダ２１０の中に一つまたはそれ以上のデータオブジェクト識別子３４０を作成する。それぞれのデータオブジェクト識別子３４０は、対応するデータオブジェクト３１０及びそこに含まれているデータと関連付けされる。
【００６６】
オペレーション７５０において、書込みモジュール５４０は、データオブジェクト３１０に書込まれた新たに追加されたデータに関するハッシュ値を計算する。計算されたハッシュ値は、ヘッダ２１０の中に保管される。ヘッダ２１０のハッシュが、一つの整合性検査フィールド（ｉｎｔｅｇｒｉｔｙ−ｃｈｅｃｋ  ｆｉｅｌｄ）を除いて、計算され、そして、ヘッダ２１０の整合性検査フィールドに保管されてよい。このようにして、セッション全体の整合性が検査される。
【００６７】
メモリページレイアウトの実施例
図８Ａは、ページレイアウトの一つの例であり、ジャーナルページマップとしても参照される。サンプルの実施例において、セッションのヘッダ２１０は、以下の値を含んでよい。
・ｓｅｌｆ（２０ｂｙｔｅｓ）は、ジャーナルページマップ（”ｓｅｌｆ”を含んでいない）のセキュアハッシュアルゴリズム１（ＳＨＡ１）ハッシュであり、バインダセクションＩＤを用いて論理演算子ＸＯＲによって処理される。セッション全体の整合性検査として、および、所与のバインダセクションに対する有効なセッションヘッダを他のランダムデータから区別するため、の両方に役立ち得るものである。
・ｖｓｎ（１ｂｙｔｅ）は、主要バイナリコンパチビリティリリース番号（ｍａｊｏｒ  ｂｉｎａｒｙ  ｃｏｍｐａｔｉｂｉｌｉｔｙ  ｒｅｌｅａｓｅ  ｎｕｍｂｅｒ）である。
・ｎｅｎｔ（１ｂｙｔｅ）は、ジャーナルページマップが追加するエントリーの数である（セッションまたはジャーナルページにおける全部ではなく、必要であればセッションは複数のジャーナルページマップを有してよく、それらは論理的には一つの大きなジャーナルページマップとして動作する）。
・ｔｓｅｃ（２ｂｙｔｅｓ）は、ジャーナルページマップおよびジャーナルページマップに続くデータ（次のジャーナルページマップのためのオフセット）によって使用されるセクタの数である（それぞれ５１２から８１９２バイト）。
・ｗｈｅｎ（８ｂｙｔｅｓ）は、「タイムスタンプのような（”ｔｉｍｅｓｔａｍｐ−ｌｉｋｅ”）」シーケンス番号であり、この値は、所与のボックスにおけるディスクセットへ進めることをたいてい保証する。しかし、そうでなければ、ナノ秒における実時間から引き出されるものである（つまり、この数字が、下降ではなく、上昇するだけであることを保証するために時間が後方へ設定される場合には、オフセットが追加されてよい）。
・ｄｏｆｓ（４ｂｙｔｅｓ）は、セッションの開始に関してデータオブジェクトが始まる場所を、バイト（ｂｙｔｅ）で、示すデータオフセットである。従って、これにより、データオブジェクトは、セクタ整列（ｓｅｃｔｏｒ  ａｌｉｇｎｅｄ）であるか、インデックスエントリー（ジャーナルページマップの最後）の後で堅くパックされるか、どちらかである。
・１２ｂｌｋｓｚ（１ｂｙｔｅ）は、最大ブロックサイズの基底２（ｂａｓｅ−２）の対数である。
・ｐａｄｄｉｎｇ（３ｂｙｔｅｓ）は、非使用スペースのパディング（ｐａｄｄｉｎｇ）であり、より大きいサイズのブロックを記述するために使用され得るだろうものである。
・ｐａｄｄｉｎｇ（２４ｂｙｔｅｓ）は、将来目的のためのパディングである。
・ｉｄｘ[]は、図８Ｂに関して以下に説明されるように、１または３２バイトのインデックスエントリーの配列（ａｒｒａｙ）である。
【００６８】
図８Ｂは、それぞれのデータオブジェクトのためのインデックスエントリーレイアウトの一つの例に係るダイヤグラムであり、ジャーナルページインデックスとしても参照される。図８Ｂにおいて、インデックスエントリーレイアウトは、以下のインデックスエントリー８１０を含んでよい。
・ｗｈｅｎ（８ｂｙｔｅｓ）は、「タイムスタンプのような（”ｔｉｍｅｓｔａｍｐ−ｌｉｋｅ”）」シーケンス番号であり、セッション”ｗｈｅｎ”フィールドと同じ単位（ｕｎｉｔ）を有している。この値は、データオブジェクトがシャッフルされるまでの新たなデータオブジェクトの最初の書込みの際のセッション”ｗｈｅｎ”と同じ値をしばしば有し得る。
・ｉｄ（２０ｂａｙｔｅｓ）は、データオブジェクトのデータコンテンツに係るＳＨＡ１ハッシュである。
・ｓｉｚｅ（２ｂｙｔｅｓ）は、データサイズである（最大６５５３５バイトまで）。この値は、完全な６４Ｋ（６５５３６バイト）を表わしてよく、ここでサイズ０は６４Ｋを意味することができる。
・ｃｏｍｐｒ（１ｂｙｔｅ）は、データオブジェクトについて使用される、あらゆる圧縮または特別な符号化（ｅｎｃｏｄｉｎｇ）を記述してよい。
・ｔｙｐｅ（１ｂｙｔｅ）は、データオブジェクトのハイレベルなタイプを情報提供してよく、上位（ｈｉｇｈ）４ビットとしてデータオブジェクトの全般のメタタイプ（ｍｅｔａｔｙｐｅ）を示している。そして、メタタイプ特定の（ｍｅｔａｔｙｐｅ−ｓｐｅｃｉｆｉｃ）サブタイプ情報（データ、ディレクトリ、アイノード（ｉｎｏｄｅ）、ポインタブロック、等であり、メタタイプ０はジャーナルページ内部使用が意図されている）の下位（ｌｏｗ）４ビットを情報提供してよい。
【００６９】
コンピューティング手段の実施例
図９は、コンピュータシステム５００の電子的な形式の例におけるマシンのためのコンピューティングデバイスの模式的な表現を示している。その中で、ここにおいて説明される一つまたはそれ以上の方法のうちいずれかをマシンに実施させるための一式のインストラクションが実行され得る。種々の典型的な実施例において、マシンは、スタンドアロンのデバイスとして動作し、もしくは、他のマシンに対して接続されてよい（例えば、ネットワーク）。ネットワークされた展開において、マシンは、サーバ−クライアントネットワーク環境におけるサーバまたはクライアントマシンのキャパシティにおいて動作してよく、または、ピアツーピア（ｐｅｅｒ−ｔｏ−ｐｅｅｒ）（または、分散）ネットワーク環境におけるピアマシンとして動作してよい。マシンは、パーソナルコンピュータ（ＰＣ）、タブレットＰＣ、セットトップボックス（ＳＴＢ）、ＰＤＡ、携帯電話、デジタルカメラ、ポータブル音楽プレーヤ（例えば、ポータブルハードドライブオーディオデバイス、Ｍｏｖｉｎｇ  Ｐｉｃｔｕｒｅ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐ  ａｕｄｉｏ  Ｌａｙｅｒ３（ＭＰＥＧ３）プレーヤといったもの）、ウェッブアプライアンス、ネットワークルータ、スイッチ、ブリッジ、または、マシンによって行われる動作を特定する一式のインストラクション（シーケンシャル又はそれ以外のもの）を実行することができるあらゆるマシンであってよい。さらに、ただ一つのマシンが図示されている一方で、用語「マシン（”ｍａｃｈｉｎｅ”）」は、また、ここにおいて説明される一つまたはそれ以上の方法のうちいずれかを実行するための一式（または複数セット）のインストラクションを個別に又は一緒に実行するマシンのあらゆるコレクション（ｃｏｌｌｅｃｔｉｏｎ）を含むものと理解されるべきである。
【００７０】
コンピュータシステム９００の実施例は、プロセッサ又はマルチプロセッサ９０２、ハードディスクドライブ９０４、メインメモリ９０６、および、スタティックメモリ９０８、を含んでおり、バス９１０を介してお互いに通信している。コンピュータシステム９００は、また、ネットワークインターフェイス９１２も有してよい。ハードディスクドライブ９０４は、コンピュータで読取り可能な媒体９２０を含んでよく、ここにおいて説明される一つまたはそれ以上の方法または機能のいずれかによって具現化され、または、利用される一つまたはそれ以上のインストラクション９２２のセットを保管する。インストラクション９２２は、また、完全に又は少なくとも部分的に、メインメモリ９０６の中に、及び/又は、コンピュータシステム９００による実行の最中にはエンジン９０２の中に在ってよい。メインメモリ９０６とエンジン９０２は、また、マシンで読取り可能な媒体を構成する。
【００７１】
コンピュータで読取り可能な媒体９２０が、典型的な実施例においては、一つのメディアであると示されているが、用語「コンピュータで読取り可能な媒体（”ｃｏｍｐｕｔｅｒ−ｒｅａｄａｂｌｅ  ｍｅｄｉｕｍ”）」は、一つまたはそれ以上のインストラクションのセットを保管する一つのメディア又は複数のメディア（例えば、集中または分散データベース、及び/又は、関連するキャッシュとサーバ）を含むものと理解されるべきである。用語「コンピュータで読取り可能な媒体」は、また、マシンによる実行のためのインストラクションセットを保管、符号化、または運搬でき、そして、マシンに本出願申請に係るあらゆる一つまたはそれ以上の方法を実行させるあらゆる媒体、もしくは、そうしたインストラクションセットによって使用され又は関連付けされるデータ構造を保管、符号化、または運搬できるあらゆる媒体を含むものと理解されるべきである。用語「コンピュータで読取り可能な媒体」は、従って、これらに限定されるわけではないが、半導体メモリ、光または磁気媒体を含むものと理解されるべきである。そうした媒体は、また、限定されることなく、ハードディスク、フロッピー（登録商標）ディスク、ＮＡＮＤまたはＮＯＲフラッシュメモリ、デジタルビデオディスク、ランダムアクセスメモリ（ＲＡＭ）、読出し専用メモリ（ＲＯＭ）、等も含んでよい。
【００７２】
ここにおいて説明された典型的な実施例は、ハードウェア、または、ソフトウェアとハードウェアの組み合わせにおいて、コンピュータにインストールされたコンピュータで実行可能なインストラクション（ｃｏｍｐｕｔｅｒ−ｅｘｅｃｕｔａｂｌｅ  ｉｎｓｔｒｕｃｔｉｏｎ）（例えば、ソフトウェア）を含んでいる動作環境の中で実施されてよい。コンピュータで実行可能なインストラクションは、コンピュータプログラミング言語で書かれ、または、ファームウェアロジックの中にエンベッドされてよい。認定された基準に従ってプログラミング言語で書かれている場合、そうしたインストラクションは、種々のハードウェアプラットフォーム上で、そして、種々のオペレーティングシステムに対するインターフェイスについて実行され得る。これらに限定されるわけではないが、本方法を実施するためのコンピュータソフトウェアプログラムは、たくさんの適切なプログラミング言語で書かれてよい。例えば、Ｃ、Ｃ＋＋、Ｃ＃、または、他のコンパイラ、アセンブラ、インタープリタ、もしくは他のコンピュータ言語またはプラットフォーム、といったものである。
【００７３】
このように、データストレージメディアにおけるデータ管理のためのコンピュータで実施される方法およびシステムが説明されている。実施例は、特定の典型的な具体例に関して説明されてきたが、本出願申請のより広い精神および範囲から逸脱することなく、種々の変更および変形がこれらの実施例について行われ得ることが明らかであろう。従って、本明細書および図面は、限定的な意味よりも、むしろ、説明的な意味において考慮されるべきものである。
【図１】
2016535380.tif 000003
【図２】
2016535380.tif 000004
【図３】
2016535380.tif 000005
【図４】
2016535380.tif 000006
【図５】
2016535380.tif 000007
【図６】
2016535380.tif 000008
【図７】
2016535380.tif 000009
【図８Ａ】
2016535380.tif 000010
【図８Ｂ】
2016535380.tif 000011
【図９】
2016535380.tif 000012
【国際調査報告】
2016535380.tif 000013
2016535380.tif 000014
2016535380.tif 000015