(57)【要約】【解決手段】アプリケーション中心のオブジェクトストレージのためのシステム、方法および関連する技術が記載される。特定の態様において、処理装置は、アプリケーションから、データオブジェクトに関連する１以上のリクエストを受信し、データオブジェクトに関連するアプリケーションの１以上のデータ利用特性を決定するためにリクエストを処理し、および、１以上のデータ利用特性を考慮してデータオブジェクトの１以上の態様を構成することができる。他の態様において、処理装置は、第２のフォーマットで第１のデータオブジェクトの表現に対応する、仮想データオブジェクトを生成するために第１のフォーマットで第１のデータオブジェクトを処理し、第２のフォーマットに関連して構成されるアプリケーションからの第１のデータオブジェクトに関連するリクエストを受信し、第１のデータオブジェクトと仮想データオブジェクトを通じたアプリケーションとに関連するリクエストを完了することができる。【選択図】図１
2018505501.tif 000002
【特許請求の範囲】
【請求項１】
方法であって、
アプリケーションから、データオブジェクトに関連する１以上のリクエストを受信する工程；
データオブジェクトに関連するアプリケーションの１以上のデータ利用特性を決定するために、処理装置によって１以上のリクエストを処理する工程；および、
１以上のデータ利用特性を考慮してデータオブジェクトの１以上の態様を構成する工程、
を含むことを特徴とする方法。
【請求項２】
データオブジェクトの１以上の態様を構成する工程は、データオブジェクトのストレージの１以上の態様を構成する工程を含む、請求項１に記載の方法。
【請求項３】
データオブジェクトの１以上の態様を構成する工程は、１以上のリクエストに１以上の属性を加える工程を含む、請求項１に記載の方法。
【請求項４】
１以上の属性は、データオブジェクトの１以上の要素の好ましいデータ配置、データオブジェクトの１以上の要素に関連して実行されるデータキャッシングの量、データオブジェクトの１以上の要素に関連して実行されるデータキャッシングの優先順位、または、データオブジェクトの１以上の要素に関連して適用されるリアルアヘッドウィンドウ、のうちの少なくとも１つを含む、請求項３に記載の方法。
【請求項５】
データオブジェクトの１以上の態様を構成する工程は、ストレージ階層のパフォーマンス、ストレージ階層の速度、ストレージ階層のキャパシティー、ストレージ階層の物理的位置、ストレージ階層の地理的位置、ストレージ階層と関連するアクセス・プロトコル、ストレージ階層の利用可能性、またはストレージ階層の１以上の機能プロパティのうちの少なくとも１つを考慮して、データオブジェクトに関連するストレージ階層を選択する工程をさらに含む、請求項４に記載の方法。
【請求項６】
ストレージ階層の１以上の機能特性は、暗号化または圧縮化の少なくとも１つを含む、請求項５に記載の方法。
【請求項７】
データオブジェクトは１以上のデータオブジェクトを含む、請求項１に記載の方法。
【請求項８】
データオブジェクトの１以上の態様を構成する工程は、１以上のデータオブジェクトのストレージの１以上の態様を構成する工程を含む、請求項７に記載の方法。
【請求項９】
１以上のデータオブジェクトのストレージの１以上の態様を構成する工程は、１以上のリクエストに１以上のトランザクションセマンティクスおよび１以上の識別子を加える工程を含む、請求項８に記載の方法。
【請求項１０】
データオブジェクトの１以上の態様を構成する工程は、１以上のデータオブジェクトの少なくとも１つのストレージの１以上の態様を構成する工程を含む、請求項７に記載の方法。
【請求項１１】
データオブジェクトの１以上の態様を構成する工程は、１以上のリクエストに、１以上のトランザクションセマンティクスおよび１以上の識別子を加える工程を含む、請求項１に記載の方法。
【請求項１２】
１以上の処理に１以上のリクエストを関連づける工程、および、トランザクションセマンティクスまたはＡＰＩセマンティクスの少なくとも１つによって指示されるようなシーケンスの１以上の処理を実行する工程をさらに含む、請求項１１に記載の方法。
【請求項１３】
データオブジェクトの１以上の態様を構成する工程は、アプリケーションに関連する１以上のデータレイアウトおよび１以上のＡＰＩを提供する工程を含む、請求項１に記載の方法。
【請求項１４】
１以上のデータレイアウトおよび１以上のＡＰＩは、アプリケーションが１以上の識別子に基づいてデータオブジェクトの１以上の要素へアクセスすることを可能にする、請求項１３に記載の方法。
【請求項１５】
１以上の識別子は、１以上のレコード識別子または１以上の時系列識別子のうちの少なくとも１つを含む、請求項１４に記載の方法。
【請求項１６】
１以上のデータレイアウトおよび１以上のＡＰＩは、他のアプリケーションが、データオブジェクトの１以上の要素へアクセスすることを可能にする、請求項１３に記載の方法。
【請求項１７】
データオブジェクトの１以上の態様を構成する工程は、データオブジェクトの１以上の要素が冗長であることを決定する工程；冗長であると決定された１以上の要素をデータオブジェクトから抽出する工程；および、データオブジェクトの残余の要素を保存する工程を含む、請求項１に記載の方法。
【請求項１８】
１以上のリクエストは１以上のフィルタリングルールを含み、データオブジェクトの１以上の態様を構成する工程が、１以上のフィルタリングルールを考慮して、データオブジェクトの１以上の要素を提供する工程を含む、請求項１に記載の方法。
【請求項１９】
データオブジェクトの１以上の態様を構成する工程は、１以上のタグでオブジェクトの１以上の要素をマーキングする工程を含む、請求項１に記載の方法。
【請求項２０】
１以上のタグは、１以上のリクエストと関連するメタデータの検査を考慮して生成される、請求項１９に記載の方法。
【請求項２１】
１以上のタグは、データオブジェクトの１以上の要素の検査を考慮して生成される、請求項１９に記載の方法。
【請求項２２】
データオブジェクトの１以上の態様を構成する工程は、データオブジェクトに１以上の要素を加える工程を含む、請求項１に記載の方法。
【請求項２３】
１以上の要素は１以上のフィールドを含む、請求項２２に記載の方法。
【請求項２４】
データオブジェクトに１以上の要素を加える工程は、１以上のフィールドに対するデータオブジェクト中の参照に基づいて、データオブジェクトに１以上のフィールドを加える工程を含む、請求項２２に記載の方法。
【請求項２５】
データオブジェクトの１以上の態様を構成する工程は、データオブジェクトに関連する１以上のストアドプロシージャを起動する工程を含む、請求項１に記載の方法。
【請求項２６】
データオブジェクトの１以上の態様を構成する工程は、データオブジェクトに関連する１以上の仮想オブジェクトを提供する工程を含む、請求項１に記載の方法。
【請求項２７】
１以上の仮想オブジェクトは、データオブジェクトの代替フォーマットに関連する１以上のリクエストのパフォーマンスを可能にする、請求項２６に記載の方法。
【請求項２８】
データオブジェクトの１以上の態様を構成する工程は、データオブジェクトと１以上の属性を共有する複数のデータオブジェクトに関連する、１以上のリクエストを実行する工程を含む、請求項１に記載の方法。
【請求項２９】
データオブジェクトの１以上の態様を構成する工程は、第１のストレージリソースにデータオブジェクトの１以上の第１の要素を保存する工程；および第２のストレージリソースにデータオブジェクトの１以上の第２の要素を保存する工程を含む、請求項１に記載の方法。
【請求項３０】
第１のストレージリソースにデータオブジェクトの１以上の第１の要素を保存する工程は、次のものの少なくとも１つに基づいて、第１のストレージリソースにデータオブジェクトの１以上の第１の要素を保存する工程を含む、請求項２９に記載の方法：
データオブジェクトの１以上の第１の要素のサイズ、データオブジェクトの１以上の第１の要素のアクセス頻度、データオブジェクトの１以上の第１の要素の経過時間、データオブジェクトの１以上の第１の要素と関連するポリシー、データオブジェクトの１以上の第１の要素と関連するスケジュール、または、データオブジェクトの１以上の第１の要素と関連する書き込み頻度。
【請求項３１】
システムであって、
メモリと；
メモリに動作的に接続された処理装置とを含み、
該処理装置は、アプリケーションからデータオブジェクトに関連する１以上のリクエストを受信し；データオブジェクトに関連する、アプリケーションの１以上のデータ利用特性を決定するために１以上のリクエストを処理し；および、１以上のデータ利用特性を考慮してデータオブジェクトの１以上の態様を構成することを特徴とする、システム。
【請求項３２】
エンコードされた命令を有する非一時的なコンピュータ可読の媒体であって、
処理装置によって実行された時に、処理装置に、アプリケーションからデータオブジェクトに関連する１以上のリクエストを受信し；データオブジェクトに関連するアプリケーションの１以上のデータ利用特性を決定するために処理装置によって１以上のリクエストを処理し；および、１以上のデータ利用特性を考慮してデータオブジェクトのストレージの１以上の態様を構成することを行わせる、ことを特徴とする媒体。
【請求項３３】
方法であって：
第１のアプリケーションから、データオブジェクトに関して１以上のリクエストを受信する工程；
処理装置によって、データオブジェクトの１以上の下位構造を識別するために、１以上のリクエストを処理する工程；
データオブジェクトの１以上の下位構造の識別に基づいて、データオブジェクトのためのストレージ構造を規定する工程；および、
第１のアプリケーションがデータアクセスコマンドを、規定されたストレージ構造に保存されるようなデータオブジェクトに提供することを可能にするインターフェースを規定する工程、
を含むことを特徴とする方法。
【請求項３４】
データオブジェクトは複数のデータオブジェクトを含む、請求項３３に記載の方法。
【請求項３５】
データオブジェクトはデータベース・テーブルを含む、請求項３３に記載の方法。
【請求項３６】
データオブジェクトはファイルのディレクトリーを含む、請求項３３に記載の方法。
【請求項３７】
１以上のリクエストを処理する工程は、データオブジェクトに関連する第１のアプリケーションの１以上の使用パターンを決定するために１以上のリクエストを処理する工程を含む、請求項３３に記載の方法。
【請求項３８】
１以上のリクエストを処理する工程は、データオブジェクトに関連するアプリケーションの１以上の使用パターンに基づいてデータオブジェクトの１以上の下位構造を識別する工程をさらに含む、請求項３７に記載の方法。
【請求項３９】
１以上のリクエストを処理する工程は、データオブジェクトの１以上の他の下位構造とは独立に１以上のリクエストによってアクセスされる、データオブジェクトの１以上の下位構造を識別するために１以上のリクエストを処理する工程を含む、請求項３３に記載の方法。
【請求項４０】
１以上のリクエストを処理する工程は、データオブジェクトの１以上の下位構造を識別するためにデータオブジェクトを処理する工程を含む、請求項３３に記載の方法。
【請求項４１】
データオブジェクトのためのストレージ構造は、１以上の下位構造の各々への独立したアクセスを可能にするストレージ構造を含む、請求項３３に記載の方法。
【請求項４２】
第１のアプリケーションがデータアクセスコマンドを提供することができるインターフェースを規定する工程は、１以上のパラメータを１以上のリクエストに加える工程であって、１以上のパラメータが、１以上の下位構造の少なくとも１つを識別する工程を含む、請求項３３に記載の方法。
【請求項４３】
インターフェースを規定する工程は、第１のアプリケーションが、規定されたストレージ構造において保存されるようなデータオブジェクトにデータアクセスコマンドを提供することが可能な、１以上のインターフェースを規定する工程を含む、請求項３３に記載の方法。
【請求項４４】
インターフェースを規定する工程は、第１のアプリケーションが、規定されたストレージ構造において保存されるようなデータオブジェクトにデータアクセスコマンドを提供することが可能な複数のインターフェースを規定する工程を含む、請求項３３に記載の方法。
【請求項４５】
データオブジェクトの１以上の下位構造の少なくとも１つに関連する、少なくとも１つのデータアクセスコマンドを受信する工程；および、少なくとも１つのデータアクセスコマンドに対応する１以上の通知を生成する工程、をさらに含む、請求項３３に記載の方法。
【請求項４６】
第１のアプリケーションに１以上の通知を提供する工程をさらに含む、請求項４５に記載の方法。
【請求項４７】
第１のアプリケーションと異なる第２のアプリケーションに１以上の通知を提供する工程をさらに含む、請求項４５に記載の方法
【請求項４８】
少なくとも１つのデータアクセスコマンドは、データオブジェクトの１以上の下位構造の少なくとも１つを指向するデータ作成コマンド、データオブジェクトの１以上の下位構造の少なくとも１つを指向するデータ修飾コマンド、またはデータオブジェクトの１以上の下位構造の少なくとも１つを指向するデータ削除コマンドのうちの少なくとも１つを含む、請求項４５に記載の方法。
【請求項４９】
１以上の通知を生成する工程は、少なくとも１つのデータアクセスコマンドの受信に対し応答して１つ以上の通知を生成する工程、を含む、請求項４５に記載の方法。
【請求項５０】
１以上の通知を生成する工程は、データオブジェクトの１以上の下位構造の少なくとも１つに関連する、少なくとも１つのデータアクセスコマンドの実行に応答して１以上の通知を生成する工程を含む、請求項４５に記載の方法。
【請求項５１】
データオブジェクトの第１の下位構造に関連する第１の使用パターンを決定する工程；および、第１の使用パターンに基づいて第１のストレージリソース上のデータオブジェクトの第１の下位構造を保存する工程をさらに含む、請求項３３に記載の方法。
【請求項５２】
データオブジェクトの第１の下位構造とは異なるデータオブジェクトの第２の下位構造に関連する第２の使用パターンを決定する工程；および、第２の使用パターンに基づいて、第１のストレージリソースとは異なる第２のストレージリソース上にデータオブジェクトの第２の下位構造を保存する工程をさらに含む、請求項５１に記載の方法。
【請求項５３】
データオブジェクトの第１の下位構造に関連する第２の使用パターンを決定する工程；および、第２の使用パターンに基づいて、第１のストレージリソースから、第１のストレージリソースとは異なる第２のストレージリソースへデータオブジェクトの第１の下位構造のストレージを転送する工程をさらに含む、請求項５１に記載の方法。
【請求項５４】
第１のストレージリソースは、第１のストレージ階層と関連する１以上のストレージリソースを含むとともに、第２のストレージリソースは、第２のストレージ階層と関連する１以上のストレージリソースを含む、請求項５３に記載の方法。
【請求項５５】
１以上のリクエストを完了する際に第１のインデックスまたは第２のインデックスのどちらを利用するかを決定するために、１以上のリクエストを処理する工程；および、第１のインデックスまたは第２のインデックスの少なくとも１つを通じて１以上のリクエストを完了する工程をさらに含む、請求項３３に記載の方法。
【請求項５６】
表現されたようなデータオブジェクトに関連する、第１のインデックスが生成され、および、アクセスされたようなデータオブジェクトに関連する、第２のインデックスが生成される、請求項５５に記載の方法。
【請求項５７】
１以上のリクエストを処理する工程は、第１のアプリケーションを考慮して、１以上のリクエストを完了する際に、第１のインデックスまたは第２のインデックスのどちらを利用するかを決定するために１以上のリクエストを処理する工程を含む、請求項５５に記載の方法。
【請求項５８】
１以上のリクエストを完了する工程は、仮想データオブジェクトを生成する工程を含む、請求項５５に記載の方法。
【請求項５９】
仮想データオブジェクトは、オブジェクト識別子、およびデータオブジェクトの１以上の下位構造の少なくとも１つに対する１以上のポインターを含む、請求項５８に記載の方法。
【請求項６０】
仮想データオブジェクトは、オブジェクト識別子、およびデータオブジェクトの１以上の下位構造の少なくとも１つに関連する１以上のパラメータを含む、請求項５８に記載の方法。
【請求項６１】
仮想データオブジェクトは、オブジェクト識別子、およびデータオブジェクトの１以上の要素を含む、請求項５８に記載の方法。
【請求項６２】
仮想データオブジェクトは、オブジェクト識別子、データオブジェクトの１以上の要素に対する１以上のポインター、および、他のデータオブジェクトの１以上の要素に対する１以上のポインターを含む、請求項５８に記載の方法。
【請求項６３】
仮想データオブジェクトは、オブジェクト識別子、データオブジェクトの１以上の要素に関連する１以上のパラメータ、および他のデータオブジェクトの１以上の要素に関連する１以上のパラメータを含む、請求項５８に記載の方法。
【請求項６４】
仮想データオブジェクトは、オブジェクト識別子、データオブジェクトの１以上の要素、および、他のデータオブジェクトの１以上の要素を含む、請求項５８に記載の方法。
【請求項６５】
仮想データオブジェクトは、オブジェクト識別子、データオブジェクトおよび他のデータオブジェクトを含む、請求項５８に記載の方法。
【請求項６６】
システムであって、
メモリ；および、
メモリに動作的に接続された処理装置を含み、
該処理装置は、第１のアプリケーションから、データオブジェクトに関連する１以上のリクエストを受信し；データオブジェクトの１以上の下位構造を識別するために１以上のリクエストを処理し；データオブジェクトの１以上の下位構造の識別に基づいてデータオブジェクトのためのストレージ構造を規定し；および、第１のアプリケーションが、規定されたストレージ構造において保存されるようなデータオブジェクトにデータアクセスコマンドを提供することができるインターフェースを規定することを特徴とするシステム。
【請求項６７】
エンコードされた命令を有する非一時的なコンピュータ可読の媒体であって、
処理装置によって実行された時に、処理装置に、第１のアプリケーションから、データオブジェクトに関連する１以上のリクエストを受信し；データオブジェクトの１以上の下位構造を識別するために処理装置によって１以上のリクエストを処理し；データオブジェクトの１以上の下位構造の識別に基づいてデータオブジェクトのためのストレージ構造を規定し；第１のアプリケーションが、規定されたストレージ構造で保存されたようなデータオブジェクトにデータアクセスコマンドを提供することができるインターフェースを規定し；データオブジェクトの第１の下位構造に関連する第１の使用パターンを決定し；および、第１の使用パターンに基づいて第１のストレージリソース上にデータオブジェクトの第１の下位構造を保存することを行わせることを特徴とする媒体。
【請求項６８】
方法であって、
第１のデータオブジェクトを受信する工程；
第１のデータオブジェクトに関連する、第１のインデックスを生成する工程；
第１のデータオブジェクトに関連する、第１のデータオブジェクトがアクセス可能な第２のインデックスを生成する工程；
第１のデータオブジェクトに関連するリクエストを受信する工程；
リクエストを完了する際に第１のインデックスまたは第２のインデックスのどちらを利用するかを決定するために、処理装置によってリクエストを処理する工程；
および、第１のインデックスまたは第２のインデックスの少なくとも１つを通じてリクエストを完了する工程、
を含むことを特徴とする方法。
【請求項６９】
リクエストはアプリケーションから受信される、請求項６８に記載の方法。
【請求項７０】
リクエストを処理する工程は、アプリケーションを考慮して、リクエストを完了する際に第１のインデックスまたは第２のインデックスのどちらを利用するかを決定するために、リクエストを処理する工程を含む、請求項６９に記載の方法。
【請求項７１】
リクエストを完了する工程は、仮想データオブジェクトを生成する工程を含む、請求項６８に記載の方法。
【請求項７２】
仮想データオブジェクトは、オブジェクト識別子および第１のデータオブジェクトの１以上の要素に対する１以上のポインターを含む、請求項７１に記載の方法。
【請求項７３】
仮想データオブジェクトは、オブジェクト識別子および第１のデータオブジェクトの１以上の要素に関連する１以上のパラメータを含む、請求項７１に記載の方法。
【請求項７４】
仮想データオブジェクトは、オブジェクト識別子、および第１のデータオブジェクトの１以上の要素を含む、請求項７１に記載の方法。
【請求項７５】
仮想データオブジェクトは、オブジェクト識別子、第１のデータオブジェクトの１以上の要素に対する１以上のポインター、および第２のデータオブジェクトの１以上の要素に対する１以上のポインターを含む、請求項７１に記載の方法。
【請求項７６】
仮想データオブジェクトは、オブジェクト識別子、第１のデータオブジェクトの１以上の要素に関連する１以上のパラメータ、および第２のデータオブジェクトの１以上の要素に関連する１以上のパラメータを含む、請求項７１に記載の方法。
【請求項７７】
仮想データオブジェクトは、オブジェクト識別子、第１のデータオブジェクトの１以上の要素、および第２のデータオブジェクトの１以上の要素を含む、請求項７１に記載の方法。
【請求項７８】
仮想データオブジェクトは、オブジェクト識別子、第１のデータオブジェクト、および第２のデータオブジェクトを含む、請求項７１に記載の方法。
【請求項７９】
第１のデータオブジェクトは第１のアプリケーションから受信され、リクエストは第１のアプリケーションとは異なる第２のアプリケーションから受信される、請求項６８に記載の方法。
【請求項８０】
第１のデータオブジェクトおよびそのリクエストは同じアプリケーションから受信される、請求項６８に記載の方法。
【請求項８１】
第１のデータオブジェクトの１以上の下位構造を識別する工程；第１のデータオブジェクトの１以上の下位構造の識別に基づいて、第１のデータオブジェクトのためのストレージ構造を規定する工程；および、第１のアプリケーションが、規定されたストレージ構造において保存されるような第１のデータオブジェクトにデータアクセスコマンドを提供することができるインターフェースを規定する工程をさらに含む、請求項６８に記載の方法。
【請求項８２】
リクエストを処理する工程は、第１のデータオブジェクトに関連する第１のアプリケーションの１以上の使用パターンを決定するために、リクエストを処理する工程を含む、請求項８１に記載の方法。
【請求項８３】
リクエストを処理する工程は、第１のデータオブジェクトに関連する第１のアプリケーションの１以上の使用パターンに基づいて第１のデータオブジェクトの１以上の下位構造を識別する工程をさらに含む、請求項８２に記載の方法。
【請求項８４】
リクエストを処理する工程は、第１のデータオブジェクトの１以上の他の下位構造が独立して、リクエストによってアクセスされる第１のデータオブジェクトの１以上の下位構造を識別するためにリクエストを処理する工程を含む、請求項８１に記載の方法。
【請求項８５】
リクエストを処理する工程は、第１のデータオブジェクトの１以上の下位構造を識別するために第１のデータオブジェクトを処理する工程を含む、請求項８１に記載の方法。
【請求項８６】
第１のデータオブジェクトのためのストレージ構造は、１以上の下位構造の各々への独立したアクセスを可能にするストレージ構造を含む、請求項８１に記載の方法。
【請求項８７】
第１のアプリケーションがデータアクセスコマンドを提供することができるインターフェースを規定する工程は、リクエストに１以上のパラメータを加える工程であって、１以上のパラメータが、１以上の下位構造の少なくとも１つを識別する工程を含む、請求項８１に記載の方法。
【請求項８８】
インターフェースを規定する工程は、第１のアプリケーションが、規定されたストレージ構造において保存されるような第１のデータオブジェクトにデータアクセスコマンドを提供することができる、１以上のインターフェースを規定する工程を含む、請求項８１に記載の方法。
【請求項８９】
インターフェースを規定する工程は、第１のアプリケーションが、規定されたストレージ構造において保存されるような第１のデータオブジェクトにデータアクセスコマンドを提供することができる複数のインターフェースを規定する工程を含む、請求項８１に記載の方法。
【請求項９０】
第１のデータオブジェクトの１以上の下位構造の少なくとも１つに関連する、少なくとも１つのデータアクセスコマンドを受信する工程；および、少なくとも１つのデータアクセスコマンドに対応する１以上の通知を生成する工程、をさらに含む、請求項８１に記載の方法。
【請求項９１】
第１のアプリケーションに１以上の通知を提供する工程をさらに含む、請求項９０に記載の方法。
【請求項９２】
第１のアプリケーションと異なる第２のアプリケーションに１以上の通知を提供する工程をさらに含む、請求項９０に記載の方法。
【請求項９３】
少なくとも１つのデータアクセスコマンドは、第１のデータオブジェクトの１以上の下位構造の少なくとも１つを指向するデータ作成コマンド、第１のデータオブジェクトの１以上の下位構造の少なくとも１つを指向するデータ修飾コマンド、または第１のデータオブジェクトの１以上の下位構造の少なくとも１つを指向するデータ削除コマンドのうちの少なくとも１つを含む、請求項９０に記載の方法。
【請求項９４】
１以上の通知を生成する工程は、少なくとも１つのデータアクセスコマンドの受信に対し応答して１つ以上の通知を生成する工程を含む、請求項９０に記載の方法。
【請求項９５】
１以上の通知を生成する工程は、第１のデータオブジェクトの１以上の下位構造の少なくとも１つに関連する、少なくとも１つのデータアクセスコマンドの実行に応答して１以上の通知を生成する工程を含む、請求項９０に記載の方法。
【請求項９６】
第１のデータオブジェクトの第１の下位構造に関連する第１の使用パターンを決定する工程；および、第１の使用パターンに基づいて第１のストレージリソース上の第１のデータオブジェクトの第１の下位構造を保存する工程をさらに含む、請求項８１に記載の方法。
【請求項９７】
第１のデータオブジェクトの第１の下位構造とは異なるデータオブジェクトの第２の下位構造に関連する第２の使用パターンを決定する工程；および、第２の使用パターンに基づいて、第１のストレージリソースとは異なる第２のストレージリソース上の第１のデータオブジェクトの第２の下位構造を保存する工程をさらに含む、請求項９６に記載の方法。
【請求項９８】
システムであって、
メモリ；および、
メモリに動作的に接続された処理装置とを含み、
該処理装置は、第１のデータオブジェクトを受信し；第１のデータオブジェクトに関連する第１のインデックスを生成し；第１のデータオブジェクトに関連する、第１のデータオブジェクトがアクセス可能な第２のインデックスを生成し；第１のデータオブジェクトに関連するリクエストを受信し；リクエストを完了する際に第１のインデックスまたは第２のインデックスのどちらを利用するか決定するためにリクエストを処理し；および、第１のインデックスまたは第２のインデックスの少なくとも１つを通じてリクエストを完了することを特徴とするシステム。
【請求項９９】
エンコードされた命令を有する非一時的なコンピュータ可読の媒体であって、
処理装置によって実行された時に、処理装置に、第１のデータオブジェクトを受信し；第１のデータオブジェクトに関連する第１のインデックスを生成し；第１のデータオブジェクトに関連する、第１のデータオブジェクトがアクセス可能な第２のインデックスを生成し；第１のデータオブジェクトに関連するリクエストを受信し；アプリケーションを考慮して、リクエストを完了する際に第１のインデックスまたは第２のインデックスのどちらを利用するかを決定するために、処理装置によってリクエストを処理し；および、第１のインデックスまたは第２のインデックスの少なくとも１つを通じてリクエストを完了することを行わせることを特徴とする、媒体。
【請求項１００】
方法であって、
仮想データオブジェクトを生成するために第１のフォーマットで第１のデータオブジェクトを処理装置によって処理する工程であって、仮想データオブジェクトが第２のフォーマットでの第１のデータオブジェクトの表現を含む工程；
第２のフォーマットに関連して構成されるアプリケーションから第１のデータオブジェクトに関連するリクエストを受信する工程；および、
第１のデータオブジェクトおよび仮想データオブジェクトを通じたアプリケーションに関連する、リクエストを完了する工程
を含むことを特徴とする方法。
【請求項１０１】
第１のフォーマットで第１のデータオブジェクトを受信する工程をさらに含む、請求項１００に記載の方法。
【請求項１０２】
第１のフォーマットで第１のデータオブジェクトを処理する工程は、第１のフォーマットでの第１のデータオブジェクトの受信に基づいて、仮想データオブジェクトを生成するために第１のフォーマットで第１のデータオブジェクトを処理する工程を含む、請求項１０１に記載の方法。
【請求項１０３】
第２のフォーマットで第１のデータオブジェクトにアクセスするためのリクエストを受信する工程をさらに含む、請求項１００に記載の方法。
【請求項１０４】
第１のフォーマットで第１のデータオブジェクトを処理する工程は、第２のフォーマットで第１のデータオブジェクトにアクセスするためのリクエストの受信に基づいて、仮想データオブジェクトを生成するために第１のフォーマットで第１のデータオブジェクトを処理する工程を含む、請求項１０３に記載の方法。
【請求項１０５】
第２のフォーマットで第１のデータオブジェクトを初期化するためのコマンドを受信する工程をさらに含む、請求項１００に記載の方法。
【請求項１０６】
第１のフォーマットで第１のデータオブジェクトを処理する工程は、第２のフォーマットで第１のデータオブジェクトを初期化するためのコマンドの受信に基づいて、仮想データオブジェクトを生成するために第１のフォーマットで第１のデータオブジェクトを処理する工程を含む、請求項１０５に記載の方法。
【請求項１０７】
仮想データオブジェクトは、オブジェクト識別子および第１のデータオブジェクトの１以上の要素に対する１以上のポインターを含む、請求項１００に記載の方法。
【請求項１０８】
仮想データオブジェクトは、オブジェクト識別子および第１のデータオブジェクトの１以上の要素に関連する１以上のパラメータを含む、請求項１００に記載の方法。
【請求項１０９】
仮想データオブジェクトは、オブジェクト識別子、および第１のデータオブジェクトの１以上の要素を含む、請求項１００に記載の方法。
【請求項１１０】
仮想データオブジェクトは、オブジェクト識別子、第１のデータオブジェクトの１以上の要素に対する１以上のポインター、および第２のデータオブジェクトの１以上の要素に対する１以上のポインターを含む、請求項１００に記載の方法。
【請求項１１１】
仮想データオブジェクトは、オブジェクト識別子、第１のデータオブジェクトの１以上の要素に関連する１以上のパラメータ、および第２のデータオブジェクトの１以上の要素に関連する１以上のパラメータを含む、請求項１００に記載の方法。
【請求項１１２】
仮想データオブジェクトは、オブジェクト識別子、第１のデータオブジェクトの１以上の要素、および第２のデータオブジェクトの１以上の要素を含む、請求項１００に記載の方法。
【請求項１１３】
仮想データオブジェクトは、オブジェクト識別子、第１のデータオブジェクト、および第２のデータオブジェクトを含む、請求項１００に記載の方法。
【請求項１１４】
システムであって、
メモリ；および、
メモリに動作的に接続された処理装置とを含み、
該処理装置は、仮想データオブジェクトを生成するために第１のフォーマットで第１のデータオブジェクトを処理することであって、仮想データオブジェクトが第２のフォーマットでの第１のデータオブジェクトの表現を含み；第２のフォーマットに関連する構成されるアプリケーションから、第１のデータオブジェクトに関連してリクエストを受信し；および第１のデータオブジェクトと仮想データオブジェクトを通じたアプリケーションとに関連するリクエストを完了することを特徴とするシステム。
【請求項１１５】
処理装置は、第１のフォーマットで第１のデータオブジェクトをさらに受信する、請求項１１４に記載のシステム。
【請求項１１６】
第１のフォーマットで第１のデータオブジェクトを処理するために、処理装置はさらに、仮想データオブジェクトを生成するために、第１のフォーマットでの第１のデータオブジェクトの受信に基づいて、第１のフォーマットで第１のデータオブジェクトを処理する、請求項１１５に記載のシステム。
【請求項１１７】
仮想データオブジェクトは、オブジェクト識別子および第１のデータオブジェクトの１以上の要素に対する１以上のポインターを含む、請求項１１４に記載のシステム。
【請求項１１８】
仮想データオブジェクトは、オブジェクト識別子、第１のデータオブジェクトの１以上の要素、および第２のデータオブジェクトの１以上の要素を含む、請求項１１４に記載のシステム。
【請求項１１９】
エンコードされた命令を有する非一時的なコンピュータ可読の媒体であって、
処理装置によって実行された時に、処理装置に、第１のフォーマットでの第１のデータオブジェクトを受信し；仮想データオブジェクトを生成するために第１のフォーマットで第１のデータオブジェクトを処理装置によって処理することであって、仮想データオブジェクトが第２のフォーマットでの第１のデータオブジェクトの表現を含み；第２のフォーマットに関連する構成されるアプリケーションから第１のデータオブジェクトに関連するリクエストを受信し；および、第１のデータオブジェクトおよび仮想データオブジェクトを通じたアプリケーションに対するリクエストを完了することを行わせる、媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は２０１５年１月２５日に出願された米国特許出願６２／１０７，４２３号に関するとともにその利益を主張するものであり、当該文献は全体として参照することにより本明細書に組み込まれる。
【０００２】
本開示の態様と実施態様はデータのストレージと処理に関し、具体的にはアプリケーション中心のオブジェクトストレージに関する。
【背景技術】
【０００３】
多くの一般的なシナリオや設定では、（例えば、ファイル、オブジェクト、レコードなどに保存されるような）データは、多くのアプリケーション、ユーザなどにアクセス可能および／または共有されることがある。そのようなデータを変更するリクエスト／試みは複数のソースから受け取られることもあり、そうしたリクエストの処理はデータが一貫したままで破損することのないように管理されなければならない。こうしたリクエストを管理する１つの手法は、データの「ロック」と上記のリクエストの処理を連続的に必要とする。しかしながら、こうした手法はかなりの非効率性を伴い、上記のデータに依存し得るアプリケーションのパフォーマンスを制限することが起こり得る。
【発明の概要】
【０００４】
以下はこうした態様の基本的な理解を与えるために、本開示の様々な態様の簡単な要約を提示している。この要約は企図されるすべての態様の広範囲な概観ではなく、鍵となるまたは決定的な要素を識別したりそうした態様の範囲を画定したりすることのないように意図されている。その目的は、後で提示されるより詳細な記載の前置きとして単純化された形式の本開示のいくつかの概念を提示することである。
【０００５】
本開示の１つの態様では、処理装置は第１のアプリケーションからのデータオブジェクトに関して１つ以上のリクエストを受け取ることができる。処理装置は、データオブジェクトの１つ以上の下位構造を識別するために１つ以上のリクエストを処理することができる。データオブジェクトの１つ以上の下位構造の識別に基づいて、処理装置は、データオブジェクト用のストレージ構造を定義することができる。その後、処理装置はインターフェースを定義することができ、このインターフェースを介して、第１のアプリケーションは、定義されたストレージ構造に保存されるようなデータオブジェクトにデータアクセスコマンドを供給することができる。
【０００６】
本開示の別の態様では、処理装置は、第１のフォーマットのデータオブジェクトを受け取ることができる。処理装置はデータオブジェクトに関して第１のインデックスを生成することができる。処理装置は、データオブジェクトに関して第２のインデックスを生成することができ、第２のインデックスを介してデータオブジェクトは第２のフォーマットでアクセス可能である。処理装置はデータオブジェクトに関するリクエストを受け取ることができる。処理装置は、そのリクエストを完了させる際に第１のインデックスまたは第２のインデックスのいずれかを利用するかを決定するためにリクエストを処理することができる。処理装置は、第１のインデックスまたは第２のインデックスの少なくとも１つでリクエストを完了させることができる。
【０００７】
本開示の別の態様では、処理装置は、アプリケーションから、データオブジェクトに関する１つ以上のリクエストを受け取ることができる。処理装置は、データオブジェクトに関してアプリケーションの１つ以上のデータ利用特性を決定する１つ以上のリクエストを処理することができる。処理装置は、１つ以上のデータ利用特性を考慮してデータオブジェクトの１つ以上の態様を構成することができる。
【０００８】
本開示の別の態様では、処理装置は、仮想データオブジェクトを生成するために第１のフォーマットの第１のデータオブジェクトを処理することができ、仮想データオブジェクトは第２のフォーマットの第１のデータオブジェクトの表現を含む。処理装置は、第２のフォーマットに関して構成されるアプリケーションから第１のデータオブジェクトに関するリクエストを受け取ることができる。処理装置は仮想データオブジェクトで第１のデータオブジェクトとアプリケーションに関するリクエストを完了させることができる。
【図面の簡単な説明】
【０００９】
本開示の態様と実施態様は、以下に与えられる詳細な記載や本開示の様々な態様と実施の添付図面からより完全に理解されるが、しかしながら、これらを、本開示を特定の態様または実施態様に制限するものと考慮してはならず、説明と理解を促すためのものに過ぎないと考慮しなければならない。
【００１０】
【図１】本開示の１つの実施態様に係る例示的なシステムアーキテクチャーを描く。
【図２】本開示の態様と実施態様に係る装置の典型的な実施態様を描く。
【図３】本開示の１つの実施態様に係るアプリケーション中心のオブジェクトストレージのための方法の態様のフローチャートを描く。
【図４】本開示の１つの実施態様に係るアプリケーション中心のオブジェクトストレージのための方法の態様のフローチャートを描く。
【図５】本開示の１つの実施態様に係るアプリケーション中心のオブジェクトストレージのための方法の態様のフローチャートを描く。
【図６】本開示の１つの実施態様に係るアプリケーション中心のオブジェクトストレージのための方法の態様のフローチャートを描く。
【図７】本開示の１つの実施態様に係るデータオブジェクトの様々な態様を描く。
【図８】本開示の１つの実施態様に係る記載された技術の典型的な実施態様を描く。
【図９】本開示の態様と実施態様に従って作動する例示的なコンピュータシステムのブロック図を描く。
【発明を実施するための形態】
【００１１】
本開示の態様と実施態様はアプリケーション中心のオブジェクトストレージを対象とする。
【００１２】
概観と前置きとして、非構造化データ、「ビック・データ」分析、およびインターネット・オブ・シングス（ＩｏＴ）の成長を含む指数関数的なデータ成長の最近の傾向により、データをできるだけ効率的に処理し、保存し、消費するようにすることがますます重大になってきたことが認識されるであろう。大量のデータ量はファイル、オブジェクト、および／またはレコードにしばしば保存される。多くのシナリオや設定では、こうした保存されたデータは、多くのユーザ、装置、サービス、アプリケーションなどにアクセスされ、および／または共有される（時々、同時に）必要があることもある。多くの場合、そのようなデータはよりコンパクトなおよび／または構造化されたやり方で保存および／または処理されることもあるため、元の形式では保存されないこともあるということにも留意されたい。こうしたデータはさらに、様々な時点で形式を変えることもあれば、および／または複数のアプリケーション段階で処理されることもある。
【００１３】
加えて、複数のソース（例えば、複数のユーザ、サービス、アプリケーションなど）によってデータが変更されるシナリオでは、コンフリクトが生じる可能性がある。例えば、１つのアプリケーションは、それが（例えば別のアプリケーションによって）変更されているのと同時に上記のデータを読み取ろうとすることもあり、それによって、データがアプリケーション全体で反映される手法に関して矛盾が生じる。さらに、あるシナリオでは、データを複製する（例えば複数の場所にそれを保存するため）ことが有利で、および／または必要なこともあり、従って、データの複数のコピー全部で整合性を確保するためにこうしたデータに加えられた変更を同期させることが重要なこともある。
【００１４】
多くのシナリオでは、アプリケーションがデータを読み取り、それを変更し、その後、それをライトバックする（ｗｒｉｔｅ  ｂａｃｋ）ことが有利なおよび／または必要なこともある。こうしたプロセスのあいだに、データの破損または不整合性を回避するために他のアプリケーションが同じデータを変更することを防ぐことが有利なおよび／または必要なこともある。例えば、ロックは、データが更新されているあいだに他のアプリケーションなどがデータにアクセスすることを防ぐために使用可能である。しかしながら、こうした手法はデータを破損させないことを保証する一方で、上記のようなロックはシステムの全体のパフォーマンスを制限することがあり得る。
【００１５】
さらに、例えば、データがいつ変更されるかについてアプリケーションに知らせるために、特定のアプリケーションに通知を与えることが有利なおよび／または必要なこともある（いったんこうしたデータが更新されると、データに関する様々なアクション、コマンドなどを上記のアプリケーションが始めることが有利なおよび／または必要なこともある）。そうした手法は、例えば、上記のデータおよび／またはその関連するメタデータ（例えば、データが更新された最後の日付を反射するメタデータ）を絶えず／継続的に読み取ったり、ならびにデータが変更されたかどうかをチェック／判断したりするよりもさらに効率的であり得る。さらに、上記の通知は、アプリケーション、サービスなどが、より大きなデータセットがより効率的に作用することができるように行なわれる特定の回数の変更を待つシナリオにおいて、利用されることもある。
【００１６】
上記の参照された課題に取り組むために、例えば、データにアクセスし、データをモニタリングし、および／または、データを操作することもあるソフトウェアの１つ以上の層が上記のデータに追加可能である。しかしながら、こうした手法は複数の課題を伴う。例えば、データが膨大な量と速度になりえて（例えば、複数の変更／更新が比較的短い時間になされることもある）、複数の場所に散乱することもあるため、上記のソフトウェア層を提供することは有意なリソースをリクエストすることもあり得るし、十分にスケーラブルおよび／または効率的ではないこともある。
【００１７】
加えて、データ自体の実際のファイルまたはオブジェクトストレージに／から無関係なおよび／または切り離されたアプリケーションを使用すると、アプリケーションの要件と提携する当該手法を最適化したり、および／またはストレージ層ロジック（例えば、キャッシングロジック、プリフェッチ、様々なパフォーマンスと容量ストレージリソースの間での階層化（ｔｉｅｒｉｎｇ）、および内部データ組織化など）を調整したりすることができない。
【００１８】
さらに、データストレージシステムにアクセスするとき、アプリケーションは長いレイテンシを有し得ることが分かるであろう。これに応じて、複数段階のトランザクションを実行する場合、データリソースを長時間ロックすることが必要なこともあり、これは全体的なパフォーマンスを低下させ、時間とリソースを無駄に使用してしまう。
【００１９】
さらに、アプリケーションは、１つのデータ処理を実行するためにあまりに多くの入力／出力（Ｉ／Ｏ）リクエストを駆動／開始するため、ストレージシステムに過剰なオーバーヘッドを課すことになる。
【００２０】
既存の技術／手法の上記の課題や欠点を考慮すると、特定の処理能力／処理をデータそのもの（例えばデータが保存される場所）に近づけつつ、より効果的なデータアクセスインタフェース（例えばアプリケーションプログラムインターフェースまたは「ＡＰＩ」）を提供することは有利なこともある。こうしたＡＰＩにより、例えば、ユーザはトランザクションを実行し、特定のアプリケーションなどの必要性に関してストレージリソースやロジックを最適化することができる。そうする際には、より少ないＩ／Ｏリクエストを行うことができ、より少ないデータを保存することができ、データの変更に関して適切な時間にアプリケーションに通知することができる。
【００２１】
こうした１つの手法は、アプリケーションに特有のストレージ（例えば、ビデオ、オンライントランザクション処理（「ＯＬＴＰ」）、データウェアハウジング、ウェブ・コンテンツ、メモリデータ処理などのために特別に構成されたストレージ）を与えることと、各々が独立して管理され、かつ機能の減少したセットを有する複数の部分的に利用されるサイロを形成することである。しかしながら、そのような手法は外部アプリケーションまたはユーザとデータを共有しようとしながらも、課題をもたらすこともある。こうしたシナリオでは、データ自体へのアクセスを共有するかさもなければこれを提供する代わりに、こうしたデータはその代りにシステム間で（例えば手動で）コピーされることが必要な場合があり、そのようなデータの複数のコピーは様々な時点で作られることもある（したがって、データは絶えず／一貫して更新される）。
【００２２】
別の手法は、データストレージシステム上で複数のアプリケーションを実行する複合システムを作成するか、データストレージと密結合するアプリケーションを構築することであってもよい。しかし、こうした解決策はスケールするのが困難である。
【００２３】
また別の手法は、データを管理し、かつハイレベルのデータおよびトランザクションサービスを提供するために、ＳＱＬデータベース管理システム（ＤＢＭＳ）を利用することである。しかしながら、こうした手法はスケーラブルではなく、Ｈａｄｏｏｐ（登録商標）、ＭｏｎｇｏＤＢ（登録商標）、Ｃａｓｓａｎｄｒａ（商標）、Ｒｉａｋ（登録商標）などの多くの「ＮｏＳＱＬ」ソリューションの生成をもたらした。さらに、こうしたシステムは、同じレベルの機能性または一貫性または従来のＤＢＭＳのようなクロスデータ照会能力を与えるものではないか、あるいはシステムのパフォーマンスを損なうリソース集約的な方法でこれを行う。
【００２４】
これに応じて、本明細書では、様々なアプリケーションのデータアクセスパターンのような様々な因子および／または特性に基づいて、データのストレージと管理を定義し、構成し、および／または、最適化することができる技術が記載されている。例えば、特定のアプリケーションおよび／またはその関連するデータ、ならびにアクセスパターンの処理は、データがどのように保存される／パッケージされるかを定義し、構成し、および／または、最適化する際に考慮することができる。そうする際に、データは、データが（アプリケーションがデータを利用する方法とは無関係なブロックおよび／またはフルデータファイル中のデータを保存／パッケージすることとは逆に）アプリケーション内で実際に利用される手法に対応する／該手法を反映するユニットで保存／提供可能である。加えて、そのようにする際、データの階層化などはアプリケーションと実際に連動する（抵抗しない）ことができる。
【００２５】
図１は本開示の１つの実施態様に係る例示的なシステムアーキテクチャー（１００）を描く。システムアーキテクチャー（１００）は１つ以上のユーザ装置（１０２）、サーバ（１２０）、および１つ以上のストレージリソース（１２２）を含む。これらの諸要素またはコンポーネントはネットワーク（１１０）によって互いに接続可能であり、ネットワーク（１１０）は、パブリックネットワーク（例えばインターネット）、プライベートネットワーク（例えばローカルエリアネットワーク（ＬＡＮ）または広域ネットワーク（ＷＡＮ））、あるいはその組み合わせであり得る。さらに、ある実施態様では、諸要素は互いに通信および／またはさもなければ接続することもある（例えばサーバー（１２０）を備えたユーザ装置（１０２））。
【００２６】
ユーザ装置（１０２）は、ラックマウントサーバー、ルーターコンピュータ、パーソナルコンピュータ、携帯情報端末、携帯電話、ラップトップコンピュータ、タブレットコンピュータ、カメラ、ビデオカメラ、ネットブック、デスクトップコンピュータ、メディアセンター、スマートフォン、時計、スマートウォッチ、車載コンピュータ／システム、ウェアラブル装置、上記の任意の組み合わせ、または本明細書に記載される様々な機能を実行することができる他のそのようなコンピューティング装置であり得る。モバイルアプリケーション（「ａｐｐｓ」）、ウェブブラウザなどの様々なアプリケーション（１０４）は、ユーザ装置上（例えばユーザ装置のオペレーティングシステム上）で実行されてもよい。ある実施態様では、ユーザ装置（１０２）はさらに、様々なセンサおよび／または通信インターフェース（限定されないが、図２で描かれるおよび／または本明細書に記載されるものを含む）を含むおよび／または組み込むことができることを理解されたい。こうしたセンサの例としては、限定されないが以下が挙げられる：加速度計、ジャイロスコープ、コンパス、ＧＰＳ、接触センサ（例えば、タッチスクリーン、ボタンなど）、マイクロフォン、カメラなど。上記のような通信インターフェースの例としては、限定されないが、セルラー（例えば３Ｇ、４Ｇなど）インターフェース、Ｂｌｕｅｔｏｏｔｈ（登録商標）インターフェース、ＷｉＦｉ（登録商標）インターフェース、ＵＳＢインターフェース、ＮＦＣ（登録商標）インターフェースなどが挙げられる。
【００２７】
明記されるように、ある実施態様では、ユーザ装置（１０２）はさらに様々なセンサおよび／または通信インターフェースを含むおよび／または組み込むことができる。実例として、図２はユーザ装置（１０２）の１つの典型的な実施態様を描く。図２に示されるように、装置（１０２）は、本明細書に記載されたもののような様々な処理を可能にする役割を果たす様々なハードウェアおよび／またはソフトウエアコンポーネントに動作可能に接続／連結される制御回路（２４０）（例えばマザーボード）を含み得る。制御回路（２４０）はプロセッサ（２１０）とメモリ（２２０）に動作可能に接続することができる。プロセッサ（２１０）は、メモリ（２２０）にロードすることができるソフトウェアの命令を実行する役割を果たす。プロセッサ（２１０）は、特定の実施次第で、多くのプロセッサ、マルチプロセッサコア、またはいくつかの他のタイプのプロセッサであり得る。さらに、プロセッサ（２１０）は、メインプロセッサにシングルチップ上の二次プロセッサが存在する、多くの異種プロセッサシステムを使用して実行することができる。別の例示的な例として、プロセッサ（２１０）は、同じタイプの複数のプロセッサを含む対称的なマルチプロセッサシステムであり得る。
【００２８】
メモリ（２２０）および／またはストレージ（２９０）はプロセッサ（２１０）によってアクセス可能であってもよく、それによって、プロセッサ（２１０）はメモリ（２２０）上および／またはストレージ（２９０）上に保存された命令を受け取り実行することができる。メモリ（２２０）は例えば、ランダムアクセスストレージ（ＲＡＭ）または他の適切な揮発性あるいは不揮発性のコンピュータ可読記憶媒体であり得る。加えて、メモリ（２２０）は固定可能であるか、取外し可能でもありうる。ストレージ（２９０）は特定の実施態様に依存して様々な形式をとることができる。例えば、ストレージ（２９０）は１つ以上のコンポーネントまたは装置を含むことができる。例えば、ストレージ（２９０）は、ハードドライブ、フラッシュメモリ、書き換え可能なオプティカルディスク、書き替え可能な磁気テープ、または上記の複数の組み合わせであり得る。ストレージ（２９０）も固定可能であるか、または取外し可能であり得る。
【００２９】
通信インタフェース（２５０）も、制御回路（２４０）に効果的に接続される。通信インタフェース（２５０）は、ユーザ装置（１０２）と、１つ以上の外部装置、マシン、サービス、システム、および／または要素（限定されないが、図１に描かれるものと本明細書に記載されるものを含む）との間の通信を可能にする任意のインターフェース（または複数のインターフェース）であり得る。通信インタフェース（２５０）は、（制限されないが）モデム、ネットワークインタフェースカード（ＮＩＣ）、集積回路網インターフェース、無線周波数送信機／受信機（例えばＷｉＦｉ、Ｂｌｕｅｔｏｏｔｈ、セルラー、ＮＦＣ）、衛星通信送信機／受信機、赤外線ポート、ＵＳＢ接続、または装置（１０２）を他のコンピューティング装置、システム、サービス、および／またはインターネットなどの通信ネットワークに接続するための任意の他のそのようなインターフェースを含む。こうした接続は、有線接続または無線接続（例えば８０２．１１）を含み得るが、通信インタフェース（２５０）は制御回路（２４０）および／または本明細書に記載される様々なコンポーネントへの／からの通信を可能にするあらゆるインターフェースであり得ることが理解されたい。
【００３０】
記載された技術の処理の間の様々な時点で、装置（１０２）は、図１に描かれるおよび／または本明細書に記載されるものなどの１つ以上の他の装置、システム、サービス、サーバと通信することができる。こうした装置、システム、サービス、サーバなどは、本明細書で詳細に記載されるように、ユーザ装置（１０２）への／からのデータを送受信することができ、それによって記載された技術の処理を向上させる。上記の装置、システム、サービス、サーバなどは、本明細書に記載されるように、ユーザ装置（１０２）と直接通信し、ユーザ装置（１０２）と間接通信し、ユーザ装置（１０２）と常時／継続的に通信し、ユーザ装置（１０２）と断続的に通信することが可能であり、および／または、ユーザ装置（１０２）と通信可能に連携することができる。
【００３１】
１つ以上のセンサ（２４５Ａ−２４５Ｎ）（まとめてセンサ（２４５））もユーザ装置（１０２）の制御回路（２４０）と接続され、および／または通信している。センサ（２４５）は、ユーザ装置（１０２）内に組み込み可能な／一体化可能な、および／または通信可能な様々なコンポーネント、装置、および／または受信機であり得る。センサ（２４５）は本明細書に記載される１つ以上の刺激、現象、または他の上記のような入力を検知するように構成可能である。こうしたセンサ（２４５）の例としては、限定されないが、加速度計（２４５Ａ）、ジャイロスコープ（２４５Ｂ）、ＧＰＳ受信機（２４５Ｃ）、マイクロフォン（２４５Ｄ）、磁力計（２４５Ｅ）、カメラ（２４５Ｆ）、光検出子（２４５Ｇ）、温度センサ（２４５Ｈ）、高度センサ（２４５Ｉ）、圧力センサ（２４５Ｊ）、近接センサ（２４５Ｋ）、近接場通信（ＮＦＣ）装置（２４５Ｌ）、コンパス（２４５Ｍ）、および触覚センサ（２４５Ｎ）が挙げられる。本明細書に記載されるように、装置（１０２）はセンサ（２４５）からの様々な入力を知覚し／受け取ることができ、本明細書に記載されるように、こうした入力を利用して、様々な処理および／またはその態様を開始し、可能にし、および／または向上させることができる。
【００３２】
ここでは、前述の記載（例えば、センサ（２４５）に関する）はユーザ装置（１０２）を対象としてきたが、様々な他の装置、システム、サーバ、サービスなど（図１に描かれるおよび／または本明細書に記載される）はユーザ装置（１０２）に関して記載されるコンポーネント、要素、および／または能力を同様に組み込むことができることは注目されたい。さらに、図１に描かれるおよび／または本明細書に記載されるものといった様々な装置、システム、サーバ、サービスなどの特定の態様と実施も以下にかつ図９に関連して非常に詳細に記載されている。
【００３３】
サーバー（１２０）は、ラックマウントサーバー、ルーターコンピュータ、パーソナルコンピュータ、携帯情報端末、携帯電話、ラップトップコンピュータ、タブレットコンピュータ、ネットブック、デスクトップコンピュータ、スマートフォン、メディアセンター、上記の任意の組み合わせ、または本明細書に記載される様々な機能を実行することができる任意の他のそうしたコンピューティング装置であり得る。サーバー（１２０）はＡＰＩ（１０６）などのコンポーネントと様々なオブジェクトストレージ装置（ＯＳＤ）（１１２）を含み得る。ある実施態様では、サーバー（１２０）は、様々なセンサおよび／または通信インターフェース（限定されないが、図２で描かれるおよび／またはユーザ装置（１０２）に関して記載されるものを含む）を含むおよび／または組み込むことができることを理解されたい。コンポーネントは、特定の実施態様に従って一緒に組み合わされ得るか、またはさらなるコンポーネント中で分離され得る。いくつかの実施態様では、サーバー（１２０）の様々なコンポーネントは別々のマシン上で実行されることもあることに留意されたい。さらに、あるコンポーネントの複数の処理は以下に詳細に記載されている。
【００３４】
図１に描かれるように、サーバー（１２０）は１つ以上のＡＰＩ（１０６）を含み得る。当該ＡＰＩ（１０６）を介して、アプリケーション（１０４）（例えばユーザ装置（１０２）上で実行されるもの）は、本明細書に記載されるような手法などでストレージリソース（１２２）上に保存されたデータにアクセスするおよび／またはさもなければ該データと相互作用するなどのために、サーバー（１２０）と通信する。様々な実施態様では、ＡＰＩ（１０６）は、アプリケーションとストレージリソースとの間の通信を可能にするために、ローカル関数の呼び出し、プロセス間通信、および／またはリモートアクセス（例えば、様々なネットワークベースのプロトコルを介する）を利用することもある。さらに、ＡＰＩ（１０６）はデータ配信および同期エンジン（１０８）を組み込み、および／またはさもなければデータ配信および同期エンジン（１０８）と共に作動することができる。ある実施態様では、データ配信および同期エンジン（１０８）は、本明細書で非常に詳細に記載されるように、データの配信および／または同期の様々な態様を定義および／または構成することができる。
【００３５】
さらに図１に描かれるように、サーバー（１２０）は、１つ以上のオブジェクトストレージ装置（ＯＳＤ）（１１２）（例えば、ＯＳＤ（１１２Ａ）と（１１２Ｂ）を含み得る。ＯＳＤ（１１２Ａと１１２Ｂ）は両方ともサーバ（１２０）上に存在するものとして描かれているが、他の実施態様では、様々なＯＳＤが様々なマシン上に存在することもあることに留意されたい。ある実施態様では、オブジェクトストレージ装置（１１２）は、トランザクション管理エンジン（１１４）、スマートなデータプロシージャおよびレイアウトエンジン（１１６）、ならびにデータ配置およびキャッシングエンジン（１１８）を含む様々な要素を含むことができる。
【００３６】
トランザクション管理エンジン（１１４）は、他のＯＳＤを用いるシステム状態またはデータの潜在的な配信および／または複製と同様に様々なリクエストの実行順序を管理することができる。さらに、トランザクション管理エンジン（１１４）は、（もしあれば）データを最小限ロックした状態で、原子的かつ一貫した方法において個々のリクエストおよび／または連結したリクエストのセットを実行することができる。
【００３７】
ある実施態様では、トランザクション管理エンジン（１１４）は、（例えば、重要な更新の場合）書き込みコンフリクトまたは明示的な２ＰＣ（二相コミット）ロックの随意のシリアライゼーションを用いてＭＶＣＣ（多版型同時実行制御）のような同時実行制御方法を利用してもよい。そうする際に、実行順序と一貫性は維持することができる。
【００３８】
トランザクション管理エンジン（１１４）は、関連するデータのトランザクションバージョンに基づいて行われることもある読み取りトランザクションを含むトランザクションを管理するように構成可能であることを理解されたい。ある実施態様では、読み取りトランザクションに関連する／関するオブジェクトまたはオブジェクトグループのローカルスナップショット（バージョン）を作成することができる。上記のスナップショットに属するそのようなフラグメントはトランザクションの期間中に削除されたり／書き込まれたりすることはない。その代わりに、例えば、（上記のスナップショットに変更を加える代わりに）該当データのより新しいバージョンを更新するために、書き込みコマンドを生成／提供することができる。
【００３９】
トランザクション管理エンジン（１１４）は書き込みトランザクションを管理するようにも構成可能である。上記の書き込みトランザクションは、実行することもあれば失敗することもある原子的な書き込みトランザクションであり得ることを理解されたい。１つの書き込みトランザクションが行なわれているとき、トランザクション管理エンジン（１１４）はその後の書き込みトランザクションが進行中の書き込みトランザクションの完了を待つことを保証することができる。読み取りリクエストが書き込みトランザクションのパフォーマンスの間に受け取られるとき、トランザクション管理エンジン（１１４）はリクエストされたデータの以前のバージョンを提供することができるか、あるいはトランザクション管理エンジン（１１４）は、対応する（例えば、そのリクエストがデータの最新バージョンを指定する、すなわち、リクエストする場合）前に、トランザクションの終了を待つことができる。
【００４０】
トランザクション管理エンジン（１１４）は、原子的な読み取り／書き込み処理であり得る、リード／モディファイ／ライトトランザクションを管理するように構成可能である。そうする際に、トランザクション管理エンジン（１１４）は、トランザクションのあいだ、例えば、最初の読み取りから最後の書き込みまで、関連する／適切なデータオブジェクト（例えば、どの上記のリード／モディファイ／ライトトランザクションが行なわれているかに関するもの）上では、他の書き込み処理が行われないようにすることができる。ある実施態様では、こうしたトランザクションは同期的な手法で行うことができる。例えば、書き込み処理を行うことができる（それは関連するオブジェクト上の（例えば始めからトランザクションの終わりまで）より長いロックをリクエストしてもよい）前に、読み取り結果が受け取られなければならない。他の実施態様では、（例えば、トランザクションの間にデータをロックしないようにするために）「楽観的（ｏｐｔｉｍｉｓｔｉｃ）」な手法を取ることができるが、例えば、コンフリクト検出（例えば、別のアプリケーションがトランザクション間に変更されたオブジェクトを更新する場合など）の場合には、トランザクションを再試行することが必要な場合もある。さらに他の実施態様では、トランザクション管理エンジン（１１４）は、読み込まれる要素上でのみ書き込みロックをするように構成可能である。
【００４１】
トランザクション管理エンジン（１１４）は、サーバ側の原子的なトランザクションなどの本明細書に記載される様々なストアドプロシージャを実行するように構成することもできる。こうしたトランザクションは例えばロックを回避するために、サーバ側のあらかじめ定められたプロシージャをリクエストすることもある。そのようにすることは、プロシージャ名および／またはパラメータディクショナリのパスを伴うことがある。
【００４２】
スマートなデータプロシージャおよびレイアウトエンジン（１１６）は、１つ以上のデータ処理タスクを実行することができ、本明細書に記載されるように、アプリケーション最適化および／またはストレージ最適化手法でオブジェクト内のデータ要素を組織することができる。
【００４３】
多くのアプリケーションでは、こうしたアプリケーションによって利用される様々なファイルおよび／またはオブジェクトは内部構造を有することがあることが分かるだろう。上記のファイル／オブジェクトの内部構造を構成することは、（ファイル／オブジェクトの上記の構造を構成しない場合に他の方法で行われたかもしれない）様々なＩ／Ｏ処理を保存するか、改善された／最適なキャッシングロジックを実行するか、（例えば、オブジェクト内の内部構造の使用に基づいて）最適なストレージ階層にデータを置くか、検索をアンロードするか、ロジックにインデックスを付けるか、またはロジックをフィルタ処理するか、および／または、オブジェクト内のデータ構造の代償を伴う変化を回避することといった、様々なデータに関連する処理の改善／最適化のために使用することができる。ある実施態様では、スマートなデータプロシージャおよびレイアウトエンジン（１１６）は、関連するデータとデータ構造の所定の使用法パターンに特有なまたは最適なデータ編成と更新履歴を構成しつつ、ルックアップ、フィルタリング、スナップショット、バックアップ、階層化データストレージのキャッシングまたは他の形式を実行すること、およびディスク管理を含む処理を実行するために構成可能である。
【００４４】
本明細書に記載されるように、プロシージャおよびレイアウトエンジン（１１６）は、実際に任意のアプリケーションおよび／またはデータタイプのためのレイアウトを定義する／モデル化するように構成可能である。それにもかかわらず、ある実施態様では、様々な共通データレイアウトは、（例えばアプリケーションおよび／またはストレージリソースの効率を改善するために）限定されないが以下を含むようにモデル化および／または提供可能である：
【００４５】
レコードストレージレイアウトは１つ以上のオブジェクトを含むことがあり、その各々は１セットのレコードを含む。レコードの各々は（オブジェクトを読み取って事前に処理したりすることなく、あるいは第１または第２のインデックスのセットを作成することなく、各レコードの場所を識別する／判定することができないように）可変サイズを有することもある。レコードに最適化されたオブジェクトはオブジェクトをヘッダー部分と１セットのインデックスの付いたレコードとに細分することができる。そうすることで、例えば、所定の基準に基づいて１つ以上のレコードを更新し、および／または読み取ることが可能となり、さらにオブジェクト内のコンテンツを変えることなく取り扱われるレコードのサイズの変更または削除が可能となる。
【００４６】
ログファイルレイアウトは、ログファイルがタイムスタンプを伴う行に基づいて構造に継続的に添付されるという事実を説明することができ、およびそのファイルが特定のサイズに達した後に、新しいログファイルは作成される（古いファイルは例えば、特定の期間の後に削除されることが多い）。どのログファイルを読み取り、または決めるためにログファイルのすべてを読み取る／処理するようにアプリケーションにリクエストするよりもむしろ、プロシージャおよびレイアウトエンジン（１１６）はログに最適化された構造を形成する／使用することができる。こうしたログに最適化された構造により、ログレコードを加えることができ、（例えば、時間データおよび／または他の行の属性に基づいて）ログエントリーの検索／読み取りが可能となり、（例えば、新しいログファイルを何度も何度も作成する代わりに）（例えば、最大保持時間などのポリシーに基づいて）必要に応じて、ログファイルの開始を削除することが可能となる。
【００４７】
プロシージャおよびレイアウトエンジン（１１６）は、時系列データ（例えば、定期的に数えられ、および／またはサンプリングされるデータ）の管理を改善／最適化することができる様々な構造を作成／使用することができる。そのような時系列データは時間が経つとともに増大し続けることから、様々な間隔をおいて、特定の時間ベースのデータは（例えば、より古いサンプルを削除することによって）パージ可能であり、および／または、集計／圧縮可能である（例えば、複数のサンプルの平均、最小、および／または最大を計算することによって、それにより複数のサンプルを組み合わせて１つのサンプルにする）。時系列データが読み取られるとき、それは所定の時間範囲に関していることが多いことから、最適化された時系列を提供することができ、それにより、比較的少数のＩＳＯリクエストをリクエストするよりも簡単な／効率的なユーザＡＰＩが可能となる。さらに、古いデータの自動化パージングと削除は単純化可能であり、簡単なクエリを用いて範囲ベースのデータを得ることができ、最適なストレージ階層を配置することが可能であり、例えば、最も頻繁にアクセスされたデータおよび／またはメタデータがより高いパフォーマンス階層に置かれる。
【００４８】
プロシージャおよびレイアウトエンジン（１１６）はさらに、時間ベースの値の管理を改善／最適化することができる様々な構造を作る／使用することができる。そのようなデータがしばしば定期的に（例えば要素またはセンサにつき）まとめられ、多くの場合、同じサンプルデータは複数のサンプルにわたって繰り返されることもあるため、こうした時間ベースの値は、上に記載されているような時系列に類似することもあり得る。すべてのサンプルのデータレコードを複製するよりもむしろ、プロシージャおよびレイアウトエンジン（１１６）は各データレコードの時間範囲と発生を指示するように構成可能である（したがって、例えば、特定の値または入力の１つのレコードは、−例えば、同じ値のそれぞれの発生について別々のレコードを保存する代わりに、そのような値が生じた様々な時間／日付間隔のレコードと一緒に、保存可能である）。そうする際に、上記のようなデータのストレージスペースを保存することができ、データを処理することが必要な場合もある分析的なアプリケーションを加速させることができる。
【００４９】
プロシージャおよびレイアウトエンジン（１１６）はさらに、オーディオおよび／またはビデオストリームのようなメディアコンテンツの管理を改善／最適化することができる様々な構造を作る／使用することができる。例えば、ビデオファイルは、時間により配置されるオーディオとビデオキャプチャーのメタデータとストリームを含み得る。アプリケーション（１０４）が一定時間ビデオをオフセットで読み取るために、対応するメタデータは、例えば、関連するストリームセクション（その後、読み取り可能）を識別するために、処理されることが必要な場合もある。加えて、様々なビデオベースのアプリケーション（例えば監視アプリケーション）は、追加のメタデータを備えたそのようなビデオストリームの一部にタグを付け、そのようなメタデータに基づいてオブジェクトまたはストリームセクションを検索し、および／または、ビデオまたはオーディオコンテンツの解像度またはフォーマットを変更することもある。プロシージャおよびレイアウトエンジン（１１６）は、そのような処理をより効率的に行うことができる場合に（例えば、比較的少ないリソースを備えたモバイル装置であり得る装置（１０２）でそれらを行うこととは対照的に）、上記の処理の一部またはすべてを（例えば、記載されたオブジェクトストレージの近くに）アンロードすることができ、および／または、かなりの帯域幅を省くことができる。加えて、ビデオ／オーディオストリームの改善されたまたは「スマートな」プリフェッチを（例えば、以前のリクエストに基づいて）行うことが可能であり、それにより効率をさらに改善する。
【００５０】
プロシージャおよびレイアウトエンジン（１１６）はさらに、メッセージキューイングの管理を改善／最適化することができる様々な構造を作る／使用することができる。例えば、あるデータレコードは「押される」こともあれば、さもなければ１つ以上のデータソースによって提供されることもあり、「引かれる」こともあれば、１人以上の消費者によってさもなければリクエストされる／受け取られることもある。ある実施態様では、例えば、オブジェクトの頭からデータを読み取るかクリーンにしつつオブジェクトの末尾にデータを加える、１つ以上のＡＰＩを提供することができる。こうしたＡＰＩは、「高速な」データ（例えば書きこまれるとすぐに読み取られるデータ）を、「低速な」データ（１人以上の消費者によって既に読まれており、このようにより低コスト／低優先順位の記憶媒体に移すことができるもの）から区別するようにも構成可能である。ある実施態様では、記載されたデータオブジェクトは、スタック（例えば「押す」と「ポップする」を備える）および／またはメッセージキューとして配置可能である。さらに、ある実施態様では、様々な読み書きポインターを提供することができ、オブジェクトは終わりに到達すると始まりへとサイクル可能である。１つのクライアントが各メッセージを一度リクエストするシナリオでは、クライアントはペンディングメッセージを読み、読み取りポインターは最後の読み込みバイトまで進められることもあれば、あるいは、代替的にいったんデータは引き出されると、（次回にクライアントは引き出すと次のメッセージが与えられることが可能となるように）そのデータを削除することができる。例えば、既に読まれたデータを（例えば、削除される前に特定の時間にわたって）アーカイブに保存することができるように、様々なポリシーも適用可能である。記載された技術は、例えば、各リーダーがそれ自体の読み取りポインターに関連付け可能なように、多くのリーダーおよび／またはライターに適用可能である。こうしたシナリオでは、リーダーは例えば、１セットの条件またはフィルタを提供することができ、これを介して、フィルタによって書き取られる基準を満たすメッセージ、コンテンツなどだけが提供される。
【００５１】
本明細書に記載されるように、記載された技術は、アプリケーション、データタイプ、および／またはデータレイアウト、および／または、本明細書に記載されるものの１つ以上の方へ向けられるおよび／またはさもなければ構成される、アプリケーションに特有のインターフェース（例えばＡＰＩ（１０６）などのＡＰＩ）を提供することができる。明記されるように、本明細書で参照される様々なアプリケーション、データタイプ、および／またはデータレイアウトは単に典型的なものに過ぎず、記載された技術は、他のアプリケーション、データタイプ、および／またはデータレイアウトなどと類似するように構成および／またはそれらにまで延長可能である。こうしたデータレイアウトは、本明細書に記載されるように、様々な内部構造へ細分化可能なデータオブジェクトを含み得る。例えば、メッセージキューは１セットのメッセージから構成することができ、ログファイルは１セットの時間ベースのログエントリーから構成することができ、データベース表は１セットの行データレコードから構成することができ、ファイルは１セットのデータエクステントから構成することができる。
【００５２】
ある実施態様では、様々なアプリケーション、データタイプ、および／またはデータレイアウトは様々なデータオブジェクトを伴い得るが、他の実施態様では、例えば、単一の内部構造を有するデータについて様々なビューを使用することができる。例えば、メッセージキューの一部を連続したファイルとして見ることができるが、ログエントリーのセットは、データベース、またはそれぞれのログエントリーが行などを表すキー／値テーブルビューに変形可能である。そうした多国語で書かれたＡＰＩによって、記載された技術は、同じデータに複数のインターフェースとＡＰＩを供給することができ、それによって冗長で一貫しないコピーが不要となり、さらにそのようなデータの管理を単純化する。
【００５３】
データ配置およびキャッシングエンジン（１１８）は、データを保存するために最適な記憶媒体を識別／決定することができ、アプリケーションに最適化されたデータのキャッシング、階層か、およびプリフェッチも実行することができる。すなわち、データは、メモリおよび／または複数のストレージリポジトリ／リソース（１２２）（「階層」によって編成されることもある）に保存されることもあり、その各々が特定のコスト、パフォーマンス、および／または機能性の利点に関連付けられることもある。そうしたストレージリソース／階層の例としては、限定されないが：揮発性および不揮発性メモリ、マルチレベルセル（ＭＬＣ）フラッシュメモリ（例えば、読み書き混合型の作業負荷用）、トリプルレベルセル（ＴＬＣ）フラッシュメモリ（例えば、ほとんどの１秒当たりの高入力／出力作業（ＩＯＰ）、低レイテンシ、または電源を感知可能な作業負荷を読み取るため）、ＳＡＳまたはＳＡＴＡ接続ハードディスクドライブ（例えば容量用の）、ＳＡＮまたはＮＡＳストレージ、ネットワーク接続オブジェクトディスク（例えばＳｅａｇａｔｅ（登録商標）Ｋｉｎｅｔｉｃ）、および／またはクラウドストレージまたはバックアップシステムが挙げられる。上記のストレージリソース／階層は複数のストレージリソースの組み合わせ（限定されないが本明細書で参照されるものを含む）であり得ることもさらに理解されたい。
【００５４】
明記されるように、データ配置およびキャッシングエンジン（１１８）は、データの利用可能性も最大限にしながら、最低額の総コストでアプリケーションのパフォーマンスを最大限にするように構成することができる。そうするために、様々なアプリケーション対応のデータ階層化技術および／またはポリシーを使用することができる。こうした技術／ポリシーは、限定されないが以下を含む１つ以上の因子に基づくことができる：保存されるファイルのサイズ（例えば、より小さなファイルはより高速な保存を促され得る）、ファイルが最も頻繁に使用される（ＭＦＵ）および／または直近に使用される（ＭＲＵ）オブジェクトのうちの１つであるかどうか（その場合には、例えば、より高速な階層にオブジェクトを保存する）、データの経時年数（例えば、定義された閾値よりも古いファイルを格下げする）、連続的ＶＳランダムな読み取り、連続的ＶＳランダムな書き込み、ユーザ指定ポリシーおよび／またはオブジェクトタイプ、アプリケーションによるスケジュールベースの（例えば、ユーザ／アプリケーションにより定義されたおよび／または学習されたポリシーに基づく）「プリフェッチ」／「タッチ」（例えばＡＰＩを介する）、および／または、書き込み回数／耐久性（例えば、プールについて定義されたＤｉｓｋｆｕｌ  Ｗｒｉｔｅｓ  Ｐｅｒ  Ｄａｙ（ＤＷＰＤ）を超過しないための）。そうする際に、データ配置およびキャッシングエンジン（１１８）は、そのようなデータを最良に保存／パッケージ化する方法を決定する際に、データを（保存／検索されている他のデータと同様に）検索するおよび／または保存する可能性の高い特定のアプリケーションを説明することができる。そうする際に、様々な階層化と他の処理は実際にアプリケーションを用いて（逆らうわけではない）作業を（妨げるのとは対照的に）向上させる。
【００５５】
ストレージリソース（１２２）は、本明細書に記載される／参照されるオブジェクトならびに／もしくはそのフラグメント／エクステントを保存する直接接続されたおよび／または遠隔のストレージリソースであってもよい。様々な実施態様では、ストレージリソース（１２２）は、メインメモリ、磁気または光学ストレージベースのディスク、テープ、またはハードドライブ、ＮＡＳ、ＳＡＮのような１つ以上のストレージ装置であり得る。いくつかの実施態様では、ストレージリソース（１２２）はネットワーク接続ファイルサーバーであり得るが、その一方で、他の実施態様では、ストレージリソース（１２２）は、オブジェクト指向型データベース、リレーショナルデータベースなどの他のタイプの持続的なストレージであり得る。ストレージリソース（１２２）はサーバ（１２０）（例えば接続された装置または遠隔装置として）から独立して描かれているが、ある実施態様では、ストレージリソース（１２２）もサーバー（１２０）によってホストされることもあるということを理解されたい。
【００５６】
本明細書に詳細に記載されるように、記載された技術により、アプリケーション（１０４）（装置（１０２）などのクライアント上で実行されるものなど）はローカルまたは遠隔のＡＰＩ（１０６）によって保存されたデータにアクセスすることができる。ＡＰＩ（１０６）は、こうしたアプリケーション（１０４）からのリクエストを処理し、例えば、決定論的または統計学的（ハッシュ）マッピング機能あるいは決定論的および統計学的マッピングの組み合わせを用いて、（例えば、そうしたリクエストが向かうオブジェクトに基づいて）１つ以上のＯＳＤ（１１２）にリクエストを向けることができる。ある実施態様では、ＡＰＩ（１０６）は、１つのリクエストを複数の子のリクエストまたはトランザクションに分けるまたは分割することもあり、これは例えば複数のＯＳＤ（例えばＯＳＤ（１１２Ａと１１２Ｂ））に向けられることもある。さらに、ある実施態様では、ＡＰＩ（１０６）はリクエスト側のアプリケーション（１０４）に戻すことが可能な単一の応答を形成するために、（例えば様々なＯＳＤから受け取られたような）複数の応答を組み合わせるように構成されることもある。
【００５７】
図１はサーバ（１２０）、装置（１０２）、および個別のコンポーネントとしてストレージリソース（１２２）を描いているが、様々な実施態様において、単一のコンポーネント／システム内などで、任意の数のこうしたコンポーネント（および／またはその要素／機能）を組み合わせることができることを理解されたい。例えば、ある実施態様では、サーバー（１２０）は装置（１０２）の機能を組み込むことができる。
【００５８】
本明細書には、様々な実施態様において、アプリケーション中心のオブジェクトストレージと、データのストレージと管理の改善された利用および／または最適化（例えば、１つ以上のアプリケーションのデータアクセスパターンに基づく）を可能にする技術である。ある実施態様では、こうした技術は、サーバー（１２０）によって、および／またはＡＰＩ（１０６）とＯＳＤ（１１２）と連携して行われる処理を包含することができる。
【００５９】
本明細書に記載されるように、開示された技術は、処理、キャッシング、および／またはトランザクションセマンティックスの様々な態様をデータに近づけ／シフトし、複数のデータ管理ノードにわたって上記のような処理を効率的に分散させる。レガシーおよび出現するＤＢＭＳソリューションの両方は、より少ないリソースで、より優れたパフォーマンスで、およびデータの完全性、耐久性、またはトランザクションセマンティックスを損なうことなく、著しく多くのデータを管理するためのスケールに作ることが可能である。
【００６０】
ある実施態様では、記載された技術は、データストレージシステムにおいて改善されたデータアクセスプリミティブおよび／またはＡＰＩを提供する／可能にすることができる。こうしたプリミティブおよび／またはＡＰＩによって、アプリケーションは、データストレージシステムに、データトランザクション処理と同期処理／責任をアンロードすることができる。上記のプリミティブおよび／またはＡＰＩはさらに、データを配置し、パッケージし、および／または、処理する方法に関して、例えば、データストレージに対して提案または「ヒント」を生成および／または提供することができる。さらに、上記のプリミティブおよび／またはＡＰＩは、ストレージシステムにおける改善されたおよび／または最適なデータのレイアウトまたは圧縮の使用を可能にする。さらに、ある実施態様では、上記のプリミティブおよび／またはＡＰＩは、データまたは関連するメタデータの変化に関してデータストレージシステムから通知をリクエストすることができる。
【００６１】
データ要素（本明細書に記載されるおよび／または参照されるような）はデータオブジェクトと呼ばれることもあることを理解されたい。こうしたデータ要素／オブジェクトは、限定されないが以下を含む異なるデータの形式で表すことが可能である：ファイル、オブジェクト、ブロックストレージ、データベースレコード、キー／値テーブル、メディアストリーム、データストリーム、メッセージ、ファイル、時系列データなど、および／または、任意の他のこうしたデータ形式。さらに、ある実施態様において、上記のデータオブジェクトは、限定されないが、コンテンツ、メタデータ、バージョン、およびステートまたはコンテキストを含むこともあり、そうしたオブジェクトは複数の場所（例えば、本明細書に記載されるような）でコピーされることもある。本明細書に記載されるように、上記のデータオブジェクトは、様々なおよび／または複数のＡＰＩおよび／またはデータモデル（例えば、データはストリームとして生成／保存されることもあり、さらにファイルとしても読まれることもある）を用いて、消費および／または生成可能である。上記のデータオブジェクトにアクセス可能な際の改善されたＡＰＩを提供することによって、記載された技術は、本明細書に記載されるように、アプリケーション中心のオブジェクトストレージを可能にする／提供することが可能である。
【００６２】
上記のアプリケーション中心のオブジェクトストレージにより、アプリケーションタスクをアンロードまたは合理化することができるアクセスパターンと同様に、アプリケーションが改善された／最適化されたＡＰＩを伴うスケーラブルのオブジェクトストレージシステムを提供／可能にすることができる。そうすることで、アプリケーションのパフォーマンスとスケーラビリティが改善され、リクエストする／消費するリソースを減らすことができる。オブジェクトストレージアプリケーションインタフェース（ＡＰＩ）は、例えば、トランザクションセマンティックス、アプリケーション特有のデータストレージまたはアクセス抽象化、プログラム可能なストレージ側の機能性、および／または非同期通知メカニズムを提供することができる。
【００６３】
様々なファイルまたはオブジェクトのストレージシステムは、オブジェクトストレージ内でオブジェクトを保存または読取るために「ＰＵＴ」および「ＧＥＴ」処理が可能である間、ファイルに対し、開く、閉じる、読む取り、及び／又は書く込みの処理のための標準インターフェースを提供する。従って１セットのオブジェクトに書き込む場合、前記のオブジェクトに関係する一部の処理が承認されるが、他の処理は不承認となり、及び／又は、オブジェクトは順序が狂って更新されるかもしれないので、順序及び／又は整合性は保証されない。
【００６４】
様々なアプリケーションは、例えば単一トランザクション内で、複数のオブジェクトを更新することをリクエスト／必要とすることを認めることができる。加えて、あるシナリオにおいて、そのようなアプリケーションは、データを読み取ることをリクエスト／必要とし、そのようなデータ上で１以上の処理／操作を実行し、および、その後、データをライトバックする（例えば操作される）。そうすることによって、相当な処理オーバーヘッドが引き起こされ、アプリケーションに関するレイテンシを増加させることを認めることができる。ストレージ技術に対する様々な改良に照らすと、特定の記憶媒体（例えばソリッドステートディスク（ＳＳＤ））は、ネットワークスタックと比べてかなり高速に動作することができる。従って、ストレージバックエンドに対し、様々なリードモディファイライトトランザクションを移動させること、及び／又は、アプリケーション固有データレイアウト（例えば、そこで、アプリケーションが認知する、データへのアクセス、キャッシュ、及び／又は配置などに関する改良／最適化が成され得る）を生成することは利点となり得る。したがって、本発明の実施形態は、特定の実施態様において、ストレージ側オブジェクト上でのトランザクションも実行しつつ、より決定論的ロジックを使用し得る。そうすることで、ファイルは、データ整合性を保存／保証しつつ、ロックなしで操作し得る。
【００６５】
トランザクションセマンティクスを保証するストレージ装置の実施は、特にスケールアウトしたインフラストラクチャーに関し対処し続けることができることが認められる（何故なら、例えば、セマンティクス、順序および状態が、論理的（クラスタ化された）オブジェクトストレージシステムを形成する複数の相互連結したノードに渡って同期される必要があるかもしれないため）。ある実施態様において、そのような課題の対処への１つのアプローチは、ロジックを効率的に分散することであり、そこでは、例えば各オブジェクトが、単一ノード上に存在するか、または複数のノード上に複製されるように、オブジェクトが複数のノード上に散在しているものとすることができる。他のアプローチは、互いに接近して隣接する状態に関連オブジェクトを配置すること、及び／又は、効率的にクロスオブジェクトロジックを、クライアント側ソフトウェアライブラリーとオブジェクトストレージシステムとの間で分割することである。
【００６６】
様々な付加的な特徴及び／又は機能が、記載した技術の範囲内で、以下を含むが限定されない例を、組み込み／一体化し得る：
【００６７】
特定の実施態様において、属性は、読み取り又は書き込み（またはＰＵＴまたはＧＥＴなど）の処理の間に付与することができる。そのような属性は、好適なデータ配置（例えば、キャッシュにおける、高速階層、容量階層、低速階層、または、任意の他のストレージ階層など）、データキャッシングの量または優先順位、及び／又は、リードアヘッドウィンドウ（例えば、時間的に先行してデータを前もって取得するためのものであり、それによって、続く読み取りによってキャッシュメモリからデータを直接読み取ることができる）のような、最適化の情報／指令に対応し、これらを反映し、及び／又は、そうでなければ提供することができる。そのようにする場合、決定論的な制御を、処理及び／又はその他の次善的に動作する機能に対し、実行することが可能となる。
【００６８】
加えて、特定の実施態様において、様々なトランザクションセマンティクス、識別子などは入出力処理に加えることができる。そうする際に、複数処理を、単一トランザクションの一部であるとしてマーキングし及び／又は識別することができ、そのような処理の実行は、規定されたシーケンス（例えばトランザクションに従うような）において実施することができる。加えて、様々な処理は、それにより、全体として実行することができ、その結果、例えば、ＡＩＣＤ特性（原子性、整合性、独立性、持続性）と一致し得る原子的態様において、トランザクションがすべてをミットするかまたはすべてを失敗させる。
【００６９】
さらに、特定の実施態様において、様々な改良されたデータレイアウト（特定のアプリケーションに関し構成または設計され得る）を、オブジェクトまたはファイルの部分に対するアクセスを可能／有効にするＡＰＩと共に／連携して、提供することができる（例えば、レコード識別子、時間／日付情報、及び／又は、所定のオブジェクトまたはファイル内のデータの部分または範囲に対応可能な他のそのような識別子に基づく）。例えば、ファイルは、ヘッダーと１以上のデータレコードとに細分化することができ、対応するＡＰＩは、全体として、ファイルへのアクセスを可能／有効にすることができ、同時に、インデックスまたはインデックス範囲に基くなどして（例えば、そのようなレコードのオフセットを前もって知ることさえせずに）、ファイル内の特定のレコードの読み取り及び／又は更新も可能／有効にする。前記のデータレイアウトは、前記のレコードの位置を検出し、それらを更新し、及び／又は、ファイル中のデータを移動させるために（例えば、レコードサイズが変化した場合）、複数読書き処理の必要性を生じさせないことにより、効率を向上させることができ、同時に、他のアプリケーションやクライアントによるアクセスからのファイルオブジェクトをロックする必要性も除去する。
【００７０】
特定の実施態様において、例えばシステム内でのそのようなデータの書き込みの間に、様々な態様のデータを要約化することができる。例えば、アプリケーションが所定のオブジェクトにデータを書込むことを試みる場合に、本明細書に記載する技術は、例えば書込まれるべきデータの部分が冗長であることを判定するため（例えば、そのような部分が、オブジェクト内に既に保存されている）、前記のオブジェクトを処理／分析することが可能である。そのような部分が冗長であることを決定する際、書込まれるべきデータの識別された部分が、抽出／除去することができ、かつ、有意（例えば非冗長）であるデータ部分のみが、オブジェクトに書込まれうる。例えば、そのような技術は、書き込まれるべきデータが以前に保存されたファイル／オブジェクトに付属する情報を含むというシナリオにおいて使用することができる。本明細書に記載する技術は、ファイル／オブジェクトに以前に保存されたデータを追加する代わりに、そのような以前に保存されたデータを識別／マークすることができる（例えば、計数を１ずつより大きくしながら、このレコードデータが複数回出現することを反映する）。
【００７１】
加えて、特定の実施態様において、データフィルタリングは、１以上の読み取り処理に関連して実行することができる。例えば、１以上のオブジェクトのリクエストを受けとることができるとともに、そのようなリクエストは、基準／規則をフィルタリングする様々なデータを規定または特定することが可能である。そのようなリクエストに応答して、本明細書に記載する技術は、例えば、フィルタリング基準と一致するオブジェクト及び／又はデータの部分だけを（例えば全オブジェクトの代わりに）返し得る。そうする際に、例えば、ネットワーク帯域幅および処理オーバーヘッドに関し（例えばクライアント側で）、相当な効率化を達成することができる、
【００７２】
さらに、特定の実施態様において、本明細書に記載する技術は、様々な方法で受信/保存されるデータをタグ付けすることができる。例えば、データがオブジェクトに書込まれる場合、本明細書に記載する技術は、関連する処理メタデータ及び／又はオブジェクトのコンテンツを処理／検査することができるとともに、そのようなメタデータ／コンテンツに基いて、オブジェクト及び／又はその部分をマーキングできるか、または、そうでなければ、様々なタグと関連づけられる。そのようなタグは、例えば、後続処理におけるオブジェクトの識別を可能化／増強化することができ、及び／又は、例えば統計に関連するデータ及び／又はコンテンツと関連するシステムカウンタを更新することができる。
【００７３】
特定の実施態様において、本明細書に記載する技術は、例えば電場に対する参照に基き、フィールド及び／又はコンテンツを加えることなどによって、データを充実化し得る。そうする際に、さらなるデータ処理（例えば特定のアプリケーションによる）は、より効率的に達成することができる。何故なら、例えば、データ処理動作中に、余分なコンテンツ（例えば参照されるコンテンツ）を明示的に調べる必要性がもはや存在しないためである。いくつかのシナリオにおいて例えば、データ及び／又はユーザの匿名化のため、及び／又は、より関連性を有するコンテンツを置換するために、特定のデータフィールドは明示的に交換し得る。
【００７４】
加えて、特定の実施態様において、様々な手順、処理などを、そのような手順／処理が関わるデータ／オブジェクトと関連して保存することができる。例えば、ユーザは、１以上のオブジェクト上の／関連する手順を、随意に特定のパラメータを提供しつつ、呼び出してもよく、本明細書に記載する技術は、そのようなオブジェクト上で様々な予め規定された手順、例えば、オブジェクトの読み取り、オブジェクトの一部のコンテンツの修正、オブジェクトにたいするライトバック、オブジェクトメタデータの更新、他の保存されたオブジェクトの更新、様々なシステムカウンタやレジスターの更新、及び／又は、他のシステムへのデータの転送などを実行することができる。データそれ自体に近接するそのような処理／プロセスの実行は、ネットワークトラフィックの最小化、複数ＩＯのラウンドトリップと関連する長いレイテンシの回避、および、トランザクション中にデータをロックする必要性を低減または除去することを可能にする。
【００７５】
さらに、特定の実施態様において、本明細書に記載する技術は、様々な仮想オブジェクトを生成及び／又は、提供することができる。そのようなオブジェクトは例えば、例えば算出／導出されたデータを保存または検索するための機能などのような、読み取りや書込み（またはＰＵＴやＧＥＴ）処理などに関する特定の機能を起動することができる。例えば、ログファイルを読取る場合、本明細書に記載する技術は、全ログファイルの代りに特定のログエントリー（例えば最新のログエントリーのみ）を返すように構成することができる。さらなる実施態様によって、他のファイルから実際に導出されるコンテンツを別々に保存する代わりに、そのような派生的なコンテンツを表すか代りの仮想ファイルを、生成及び／又は提供することができる。例えば、そのような派生的なコンテンツに関する読み取り処理が受信される場合、派生的なコンテンツは、それが由来するコンテンツに基いて、算出／生成することができる。そうする際に、相当なストレージ効率を達成することができる。
【００７６】
特定の実施態様において、様々なグループ処理を提供することができる。例えば、そのような処理によって、本明細書に記載する技術が、特定の共通属性及び／又はコンテンツを有する複数オブジェクトを検索することを可能にする。加えて、前記のグループ処理によって、１以上の基準と一致すると判定された一部または全部のオブジェクトのメタデータ及び／又はコンテンツに関して、特定の操作を実行することが可能になる。
【００７７】
図３は、アプリケーション中心のオブジェクトストレージのための方法（３００）の態様のフローチャートを示すものである。特定の実施態様において方法（３００）は、本明細書に記載されるように、アプリケーション中心のオブジェクトインターフェースと関係することができる。この方法は、ハードウェア（回路類、専用ロジックなど）、ソフトウェア（本明細書に記載されるもののようなコンピューティング装置上で実行されるような）、または両者の組合せ、を含み得る処理ロジックによって実行される。１つの実施態様において、この方法は、図１と関連して図示され及び／又は本明細書に記載される１以上の要素によって実行され、他方、別の実施態様において、図３の１つ以上のブロックは、別の装置または機械によって実行され得る。
【００７８】
説明を簡潔にするため、本明細書に記載する様々な方法は、一連の動作として図示され本明細書に記載される。しかしながら、本開示に基づく動作は、様々な順序で及び／又は同時に、および本明細書に存在せず記載されない他の動作と共に、生じさせることが可能である。さらに、開示された主題に基づく方法を実現するために、すべての図示された動作が要求されなくてもよい。さらに当業者は、状態図または事象を通じ、一連の相互関係を有する状態として、代替的に方法を表すことができ得ることを理解し認識することになる。加えて、本明細書において開示された方法が、コンピューティング装置にそのような方法を移動させ転送することを容易にするための製品上で保存され得ることが認識されるべきである。本明細書で使用されるような、製品という用語は、任意のコンピュータ可読装置または記憶媒体からアクセス可能なコンピュータプログラムを包含することが意図される。
【００７９】
ブロック（３０５）において、例えばデータオブジェクトに関する、１以上のリクエストを受信することができる。特定の実施態様において、そのようなリクエストを、第１のアプリケーションから受信することができる。例えば、特定の実施態様において本明細書で詳細に記載するように、そのようなリクエストは、例えばデータオブジェクトを、読み取り、書き込み、修正するためのリクエストを含むことができる。特定の実施態様において、前記のデータオブジェクトが、単一データオブジェクトと関係可能であり（例えば本明細書で参照される）、一方、他の実施態様においては、前記のデータオブジェクトは、複数データオブジェクト（例えば前記のデータオブジェクトの組合せや合成物など）を含むか、及び／又はそれ以外の場合は関係することができることが理解されるべきである。図示によれば、特定の実施態様において、前記のデータオブジェクトはデータベーステーブルやファイルのディレクトリなどを含み得る。特定の実施態様において、様々な態様のブロック（３０５）を、サーバ（１２０）（例えば、ＡＰＩ１０６、ＯＤＳ１１２及び／又はストレージリソース１２２に関連する）によって実行することが可能であり、一方、他の実施態様において、そのような態様は、本明細書に記載するような１以上の他の要素／コンポーネントによって実行され得る。
【００８０】
ブロック（３１０）において、１以上のリクエスト（例えば（３０５）において受信されるもの）を、処理することができる。そうする際に、データオブジェクトの１以上の下位構造（例えば、リクエストが受信されるようなデータオブジェクト）を識別することができる。特定の実施態様において、ブロック３１０の様々な態様を、サーバ（１２０）（例えば、ＡＰＩ１０６、ＯＤＳ１１２及び／又はストレージリソース１２２に関連する）によって実行することができ、その一方、他の実施態様において、そのような態様を、本明細書に記載するもののような、１以上の他の要素／コンポーネント素によって実行し得る。
【００８１】
サーバ（１２０）特定の実施態様において、前記のリクエストを、例えばアプリケーション（例えば、そこからのリクエストが受信されるアプリケーション）の様々な使用パターンを決定するために、例えばデータオブジェクトに関して、例えば本明細書で詳細に記載する態様で、処理することができる。さらに、特定の実施態様においてデータオブジェクトの様々な下位構造を、データオブジェクトに関連するアプリケーションの識別/決定された使用パターンに基いて識別することができる。例えば、本明細書に記載するように、アプリケーションがデータオブジェクトにアクセスする方法は、そのようなデータオブジェクトの特定部分のみ（例えば比較的最近の部分）がアプリケーションによってアクセスされ、一方、他の部分はアプリケーションによって頻繁には（あるいは全く）アクセスされないこと示すことができる。加えて、特定の実施態様において、データオブジェクトの１以上の他の下位構造とは無関係に、前記のリクエストによってアクセスされるデータオブジェクトの様々な下位構造を識別するために、参照されるリクエストを処理することができる。例えば、本明細書に記載するように、データオブジェクトの１部分（例えば最も最近書込まれた部分）が、他の部分にはアクセスされずに、アクセスされる場合、そのようなものは、それぞれの部分を、独立した下位構造として保存することができる（本明細書に記載するような方法で）ことを示すことができる。同様に、特定の実施態様において、データオブジェクトの様々な下位構造を識別するために、データオブジェクトそれ自身を処理することができる（例えば、ファイルやオブジェクトなどの構造が、互いに独立して保存することができる様々な下位構造を反映できる）ことが理解されるべきである。
【００８２】
ブロック（３１５）において、データオブジェクトに対するストレージ構造を規定することができる。特定の実施態様において、そのようなストレージ構造は、データオブジェクトの様々な下位構造の識別（例えば３１０において識別される）に基いて/鑑みて、規定することができる。ある実施態様において、前記のストレージ構造は、様々な下位構造への独立したアクセスを可能にするより本明細書に記載されることのようなストレージ構造を含むことができる。特定の実施態様において、サーバ（１２０）によって（例えば、ＡＰＩ１０６、ＯＤＳ１１２及び／又はストレージリソース１２２に関連して）、ブロック（３１５）の様々な態様を実施することができ、一方、他の実施態様において、そのような態様は、本明細書に記載するもののような、１以上の他の要素／コンポーネントによって実行され得る。
【００８３】
ブロック（３２０）において、インターフェースを規定することができる。特定の実施態様において、そのようなインターフェースは、それを通じ、本明細書に記載されるような方法で、第１のアプリケーション（例えばリクエストが受信されたアプリケーション）が、データオブジェクト（例えば３１５において規定されるようなストレージ構造内に保存されるようなデータオブジェクト）にデータアクセスコマンドを提供することが可能であるようなものであり得る。本明細書で詳細に記載するように、ある実施態様において、各種パラメータを、前記のリクエストに加えることができる。そのようなパラメータは例えば、様々な下位構造（例えば、特定のリクエストやコマンドなどに関係を有するような下位構造）を識別及び／又は参照することができる。さらに、特定の実施態様において、例えば、第１のアプリケーション（例えばリクエストが受信されたアプリケーション）が、それを通じて、データアクセスコマンドを、データオブジェクト（例えば規定されたストレージ構造（例えば３１５において規定されるストレージ構造）内に保存されるようなデータオブジェクト）に提供する（及び／又は、そのようなデータアクセスコマンドをデータオブジェクトによって受信する）ことができるインターフェースのような、１以上のインターフェースを規定することができる。特定の実施態様において、サーバ（１２０）（例えば、ＡＰＩ１０６、ＯＤＳ１１２及び／又はストレージリソース１２２に関連する）によって、ブロック（３２０）の様々な態様を実行することができ、一方、他の実施態様において、そのような態様は、本明細書に記載するもののような、１以上の他の要素／コンポーネントによって実行され得る。
【００８４】
ブロック（３２５）において、例えばデータアクセス命令のような、少なくとも一つのコマンドを受信することができる。特定の実施態様において、そのようなコマンドを、データオブジェクトの１以上の下位構造（例えば、３１０において識別される下位構造）の少なくとも１つに関連して、受信することができる。さらに、特定の実施態様において、参照されるデータアクセスコマンドは、次のものを含むことができる（ただし限定されるものではない）：データ作成コマンド（例えば、データオブジェクトの１以上の下位構造の少なくとも１つを対象とし得る）、データ修正コマンド（例えば、データオブジェクトの１以上の下位構造の少なくとも１つを対象とし得る）、データ消去コマンド（例えば、データオブジェクトの１以上の下位構造の少なくとも１つを対象とし得る）、及び／又は、本明細書で記載及び／又は参照されるもののような様々な他のコマンド。特定の実施態様において、サーバ（１２０）（例えば、ＡＰＩ１０６、ＯＤＳ１１２及び／又はストレージリソース１２２に関連する）によって、ブロック（３２５）の様々な態様を実行することができ、一方、他の実施態様において、そのような態様は、本明細書に記載するもののような、１以上の他の要素／コンポーネントによって実行され得る。
【００８５】
ブロック（３３０）において、１以上の通知を、本明細書に記載される様な方法で、生成することができる。特定の実施態様において、そのような通知は、１以上のコマンド（例えば、３２５において受信されるもののような、データアクセスコマンド）に対応することができる。さらに、特定の実施態様において、参照される通知を、１以上のコマンド（例えばデータアクセスコマンド）の受信に応答して、生成することができる。加えて、特定の実施態様において、参照される通知を、様々なコマンド（例えばデータ・アクセスコマンド）の実行に応答して、例えば、データオブジェクトの様々な下位構造（例えば、３２５におけるコマンドの受信に関連する下位構造）に関連して、生成することができる。特定の実施態様において、サーバ（１２０）（例えば、ＡＰＩ１０６、ＯＤＳ１１２及び／又はストレージリソース１２２に関連する）は、ブロック（３３０）の様々な態様を実行することができ、一方、他の実施態様において、そのような態様は、本明細書に記載するもののような、１以上の他の要素／コンポーネントによって実行され得る。
【００８６】
ブロック（３３５）において、１以上の通知（例えば３３０において生成されるもの）を、本明細書に記載される様な方法で、提供することができる。特定の実施態様において、そのような通知を、第１のアプリケーション（例えば、３０５において受信されるリクエストが関連するアプリケーション）に提供することができる。他の実施態様において、前記の通知を、他のアプリケーション（例えば、３０５において受信されたリクエストの送信元となるアプリケーションとは異なるアプリケーション）に提供することができる。特定の実施態様において、サーバ（１２０）（例えば、ＡＰＩ１０６、ＯＤＳ１１２及び／又はストレージリソース１２２に関連する）によって、ブロック（３３５）の様々な態様を実行することができ、一方、他の実施態様において、そのような態様は、本明細書に記載するもののような、１以上の他の要素／コンポーネントによって実行され得る。
【００８７】
ブロック（３４０）において、第１の使用パターンを、例えばデータオブジェクトの第１の下位構造に関連して、決定することができる。例えば、データオブジェクト内の様々な下位構造の識別を反映する、データオブジェクトのためのストレージ構造を規定したので、様々なアプリケーションがそのような下位構造を利用する方法を、観察し、処理し、及び／又は分析することができる。例えば、そのような相互作用を、様々な下位構造に関連して実行される処理の様々なタイプの決定のために分析することができる。特定の実施態様において、サーバ（１２０）（例えば、ＡＰＩ１０６、ＯＤＳ１１２及び／又はストレージリソース１２２に関連する）によって、ブロック（３４０）の様々な態様を実行することができ、一方、他の実施態様において、そのような態様は、本明細書に記載するもののような、１以上の他の要素／コンポーネントによって実行され得る。
【００８８】
ブロック（３４５）において、データオブジェクトの第１の下位構造を、保存することができる。特定の実施態様において、そのような下位構造を、第１のストレージリソース１２２（例えばＳＳＤ、クラウドストレージ、及び／又は、他の同様の記憶媒体など、本明細書で記載及び／又は参照されるようなものを含むが、それらに限定されないもの）上に保存することができる。さらに、特定の実施態様において、そのような下位構造を、使用パターン（例えば３４５において決定される）に基いて、特定のストレージリソース上に保存することができる。例えば、そのような下位構造を、利用するために決定することができるような方法（例えば、そのような下位構造上で実行される処理やアプリケーションなどの特定のタイプ）に基いて、そのような処理の実行を向上させる及び／又は最適化する記憶媒体、及び／又は、アプリケーションを、本明細書に記載される様な方法で、選択することができる。特定の実施態様において、サーバ（１２０）（例えば、ＡＰＩ１０６、ＯＤＳ１１２及び／又はストレージリソース１２２に関連する）によって、ブロック（３４５）の様々な態様を実行することができ、一方、他の実施態様において、そのような態様は、本明細書に記載するもののような、１以上の他の要素／コンポーネントによって実行され得る。
【００８９】
ブロック（３５０）において、第２の使用パターンを、例えばデータオブジェクトの第２の下位構造（例えば、３４０において上記で参照した下位構造とは異なる）に関連して、決定することができる、例えば、データオブジェクト内の様々な下位構造の識別を反映するデータオブジェクトに対するストレージ構造を規定したので、様々なアプリケーションがそのような下位構造を利用する方法を、観察し、処理し、及び／又は、分析することが可能である。例えば、そのような相互作用を、様々な下位構造に関連して実行される様々なタイプの処理を決定するために、本明細書に記載される様な方法で、分析することができる。さらに、特定の実施態様において、第２の使用パターンを、データオブジェクトの第１の下位構造（例えば、３４０と３４５において上記で参照した下位構造）に関連して決定することができる。特定の実施態様において、サーバ（１２０）（例えば、ＡＰＩ１０６、ＯＤＳ１１２及び／又はストレージリソース１２２に関連する）によって、ブロック（３５０）の様々な態様を実行することができ、一方、他の実施態様において、そのような態様は、本明細書に記載するもののような、１以上の他の要素／コンポーネントによって実行され得る。
【００９０】
ブロック（３５５）において、データオブジェクトの第２の下位構造を保存することができる。特定の実施態様において、そのような下位構造を、第２のストレージリソース１２２（例えばＳＳＤ、クラウドストレージ、及び／又は、他の同様の記憶媒体や、本明細書で記載/参照されるものを含むが、それれに限定されない）に保存することができる。（例えば、３４５において、参照されるストレージリソースが、上記で参照したストレージリソースとは異なり得ることがことが理解されるべきである）。さらに、特定の実施態様において、そのような下位構造を、使用パターン（例えば３５０で決定されるような）に基いて、特定のストレージリソース上に保存することができる。例えば、そのような下位構造を利用することを決定できるような方法（例えば、そのような下位構造上で実行される処理やアプリケーションなどの特定タイプ）に基いて、そのような処理及び／又はアプリケーションの効率を向上させ及び／又は最適化する記憶媒体を、本明細書に記載される様な方法で、選択することができる。特定の実施態様において、サーバ（１２０）（例えば、ＡＰＩ１０６、ＯＤＳ１１２及び／又はストレージリソース１２２に関連する）によって、ブロック（３５５）の様々な態様を実行することができ、一方、他の実施態様において、そのような態様は、本明細書に記載するもののような、１以上の他の要素／コンポーネントによって実行され得る。
【００９１】
ブロック（３６０）において、データオブジェクトの下位構造（例えば３４５で保存されるような第１の下位構造）のストレージを、本明細書に記載される様な方法で、転送することができる。特定の実施態様において、そのような下位構造のストレージは、第１のストレージリソースから第２のストレージリソース（例えば第１のストレージリソースとは異なるストレージリソース）へ転送することができる。さらに、特定の実施態様において、本明細書に記載するように、参照される第１のストレージリソースは、第１のストレージ階層と関連する様々なストレージリソースを含むことができ、参照される第２のストレージリソースは、第２のストレージ階層と関連する様々なストレージリソースを含むことができる。加えて、特定の実施態様において、そのような下位構造のストレージは、第２の使用パターン（例えばブロック３５０において決定される第２の使用パターン）のような使用パターンに基いて転送することができる。特定の実施態様において、サーバ（１２０）（例えば、ＡＰＩ１０６、ＯＤＳ１１２及び／又はストレージリソース１２２に関連する）によって、ブロック（３６０）の様々な態様を実行することができ、一方、他の実施態様において、そのような態様は、本明細書に記載するもののような、１以上の他の要素／コンポーネントによって実行され得る。
【００９２】
ブロック（３６５）において、リクエストを完了する際に第１のインデックスまたは第２のインデックスのどちらを利用するかを決めるために、本明細書に記載される方法（実質的には、４２５における下記に詳細に記載する方法）で、１以上のリクエストを処理することができる。特定の実施態様において、第１のインデックスを、第１のフォーマット（例えばデータベースフォーマット）で表現されるようなデータオブジェクトに関連して生成することができ、および、第２のインデックスは、第２のフォーマット（例えばストリーミングコンテンツフォーマット）でアクセスされるようなデータオブジェクトに関連して生成することができる。ある実施態様において、リクエストは、第２のフォーマットに関係するリクエストを含むことができる。さらに、ある実施態様において、アプリケーション（参照されるリクエストがそこから受信される）は、リクエストを完了する場合にどのインデックスを利用するかの決定において、要因／理由となり得る。例えば、データベーステーブルなどに関連してフォーマット／構成されるリクエストが受信される場合、対応するインデックス（比較可能な方法でデータにアクセスする）を利用することができる（例えば、ストリームのようなデータにをアクセスする他のインデックスの代わりに）。特定の実施態様において、サーバ（１２０）（例えば、ＡＰＩ１０６、ＯＤＳ１１２及び／又はストレージリソース１２２に関連する）によって、ブロック（３６５）の様々な態様を実行することができ、一方、他の実施態様において、そのような態様は、本明細書に記載するもののような、１以上の他の要素／コンポーネントによって実行され得る。
【００９３】
ブロック（３７０）において、１以上のリクエストを、例えば第１のインデックスまたは第２のインデックスを通じて（４３０）における以下に記載する方法と実質的に比較可能な方法で）、完了することができる。特定の実施態様において、本明細書に記載されるように、そのようなリクエストを、仮想データオブジェクトを生成することにより完了することができる。本明細書に記載するように、そのような仮想データオブジェクトは、例えば、オブジェクト識別子（例えばファイル名など）、１以上のポインター（例えばデータオブジェクトの様々な要素に対する）、及び／又は、データオブジェクトの１以上の要素に関係する１以上のパラメータ（例えば、本明細書に記載するようなタイムスタンプ範囲など）を含むことができる。さらに、特定の実施態様において、参照される仮想データオブジェクトは、データオブジェクトのオブジェクト識別子および１以上の要素を含むことができる。加えて、特定の実施態様において、参照される仮想データオブジェクトは、オブジェクト識別子、データオブジェクトの１以上の要素に対する１以上のポインター、および、他のデータオブジェクトの１以上の要素に対する１以上のポインターを含むことができる。さらに他の実施態様において、参照される仮想データオブジェクトは、オブジェクト識別子、データオブジェクトの１以上の要素に関係する１以上のパラメータ、および、他のデータオブジェクトの１以上の要素に関係する１以上のパラメータを含むことができる。さらに他の実施態様において、参照される仮想データオブジェクトは、オブジェクト識別子、データオブジェクトの１以上の要素、および、他のデータオブジェクトの１以上の要素を含むことができる。さらに他の実施態様において、参照される仮想データオブジェクトは、オブジェクト識別子、データオブジェクト、および他のデータオブジェクトを含むことができる。特定の実施態様において、サーバ（１２０）（例えば、ＡＰＩ１０６、ＯＤＳ１１２及び／又はストレージリソース１２２に関連する）によって、ブロック（３７０）の様々な態様を実行することができ、一方、他の実施態様において、そのような態様は、本明細書に記載するもののような、１以上の他の要素／コンポーネントによって実行され得る。
【００９４】
図４は、アプリケーション中心のオブジェクトストレージのためのさらなる方法（４００）の態様のフローチャートを示す。ある実施態様において、方法（４００）は、本明細書に記載するように、複数のインデックスを通じて、管理オブジェクトリクエストに関係することができる。方法は、ハードウェア（回路類、専用ロジックなど）、ソフトウェア（例えば本明細書に記載するようなコンピューティング装置上で実行されるもの）、または両者の組合せを含み得る処理ロジックによって、実行される。１つの実施態様において、方法は、図１と関連して図示及び／又は記載される１以上の要素によって実行され、一方、他の実施態様において、図４の１以上のブロックが、他の機械によって実行され得る。
【００９５】
ブロック（４０５）において、データオブジェクト（例えば、本明細書で記載／参照されるような第１のデータオブジェクト）を受信することができる。特定の実施態様において、そのようなデータオブジェクトは、第１のフォーマットとすることができる。そのようなデータオブジェクトの例は、本明細書に記載及び／又は参照される、ファイル、ストリーム、データベース、及び／又は、他のそのようなタイプのデータ含むが、これらに限定されるものではない。特定の実施態様において、サーバ（１２０）（例えば、ＡＰＩ１０６、ＯＤＳ１１２及び／又はストレージリソース１２２に関連する）によって、ブロック（４０５）の様々な態様を実行することができ、一方、他の実施態様において、そのような態様は、本明細書に記載するもののような、１以上の他の要素／コンポーネントによって実行され得る。
【００９６】
ブロック（４１０）において、第１のインデックスを生成することができる。特定の実施態様において、そのようなインデックスは、データオブジェクト（例えばブロック４０５において受信されるデータオブジェクト）に関連して生成することができる。特定の実施態様において、そのようなインデックスは、例えば、データオブジェクトの元来のフォーマットについて、反映し、相当し、及び／又は、そうでなければ、関連するインデックスとすることができ、他の実施態様においては、参照されるインデックスは、そのようなフォーマットに対応しないことがある。特定の実施態様において、サーバ（１２０）（例えば、ＡＰＩ１０６、ＯＤＳ１１２及び／又はストレージリソース１２２に関連する）は、ブロック（４１０）の様々な態様を実行することができ、一方、他の実施態様において、そのような態様は、本明細書に記載するもののような、１以上の他の要素／コンポーネントによって実行され得る。
【００９７】
ブロック（４１５）において、第２のインデックスを生成することができる。特定の実施態様において、そのような第２のインデックスは、データオブジェクト（例えばブロック４０５において受信されるデータオブジェクト）に関連して生成することができる。特定の実施態様において、そのようなインデックスは、それによってデータオブジェクトが、本明細書に記載される様な方法で、第２のフォーマットでアクセスすることができるものとすることができる。例えば、データオブジェクトは、最初はストリームとして受信することができ、および、インデックスは、データオブジェクトをデータベーステーブルとしてアクセスすること/見なすことができるように、生成することができる。他の実施態様において、そのようなインデックスは、必ずしも前記の第２のフォーマットに関係しないもとしてもよい。特定の実施態様において、サーバ（１２０）（例えば、ＡＰＩ１０６、ＯＤＳ１１２及び／又はストレージリソース１２２に関連する）は、ブロック（４１５）の様々な態様を実行することができ、一方、他の実施態様において、そのような態様は、本明細書に記載するもののような、１以上の他の要素／コンポーネントによって実行され得る。
【００９８】
ブロック（４２０）において、リクエストは、データオブジェクト（例えばブロック４０５において受信されるデータオブジェクト）に関連して受信することができる。特定の実施態様において、そのようなリクエストは、第２のフォーマット（例えばデータオブジェクトが最初には受信されなかったフォーマット）に関係するリクエストを含むことができる。特定の実施態様において、そのようなリクエストはアプリケーションから受信することができる。さらに、特定の実施態様において、データオブジェクトは、１つのアプリケーション（例えばストリーミングコンテンツを提供するアプリケーション）から受信することができ、一方、前記のリクエストを、他のアプリケーション（例えば、データベーステーブルを処理する解析アプリケーション）から受信することができる他の実施態様において、データオブジェクトとそのリクエストは同じアプリケーションから受信することができる。加えて、特定の実施態様において、サーバ（１２０）（例えば、ＡＰＩ１０６、ＯＤＳ１１２及び／又はストレージリソース１２２に関連する）は、ブロック（４２０）の様々な態様を実行することができ、一方、他の実施態様において、そのような態様は、本明細書に記載するもののような、１以上の他の要素／コンポーネントによって実行され得る。
【００９９】
ブロック（４２５）において、例えば、リクエストを完了する際に第１のインデックスまたは第２のインデックスのどちらを利用するかを決めるために、本明細書に記載される様な方法で、リクエストを処理することができる。さらに、特定の実施態様において、アプリケーション（そこから参照されるリクエストが受信された）は、リクエストを完了する際にどちらのインデックスを利用するかを決める際の要因の一つとする／理由とすることができる。例えば、データベーステーブルなどに関連してフォーマット／構成されるリクエストが受信されるならば対応するインデックス（それは比較可能な方法でデータにアクセスする）を利用することができる（例えば、ストリームのようなデータにアクセスする他のインデックスに代わる）。特定の実施態様において、サーバ（１２０）（例えば、ＡＰＩ１０６、ＯＤＳ１１２及び／又はストレージリソース１２２に関連する）は、ブロック（４２５）の様々な態様を実行することができ、一方、他の実施態様において、そのような態様は、本明細書に記載するもののような、１以上の他の要素／コンポーネントによって実行され得る。
【０１００】
ブロック（４３０）において、例えば第１のインデックスまたは第２のインデックスを通じて、リクエストを完了することができる。特定の実施態様において、そのようなリクエストを、本明細書に記載されるような仮想データオブジェクトを生成することにより完了することができる。そのような仮想データオブジェクトは、例えば、オブジェクト識別子（例えば、ファイル名及び／又は他の同様の識別子）、１以上のポインター（例えば第１のデータオブジェクトの様々な要素に対する）、第２のデータオブジェクト（例えば第１のデータオブジェクト以外）の１以上の要素に対する１以上のポインター、データオブジェクトの１以上の要素（例えば本明細書に記載するようなタイムスタンプ範囲など）に関係する１以上のパラメータ、１以上の他のデータオブジェクト（例えば第１のデータオブジェクト以外）の１以上の要素に関係する１以上のパラメータ、第１のデータオブジェクトの１以上の要素、１以上の他のデータオブジェクト（例えば第１のデータオブジェクト以外）の１以上の要素、第１のデータオブジェクト及び／又は１以上の他のデータオブジェクトを含むことができる。特定の実施態様において、サーバ（１２０）（例えば、ＡＰＩ１０６、ＯＤＳ１１２及び／又はストレージリソース１２２に関連する）は、ブロック（４３０）の様々な態様を実行することができ、一方、他の実施態様において、そのような態様は、本明細書に記載するもののような、１以上の他の要素／コンポーネントによって実行され得る。
【０１０１】
ブロック（４３５）において、データオブジェクトの１以上の下位構造を識別することができる。（例えば、３１０において実質的に前述した方法で）。特定の実施態様において、サーバ（１２０）（例えば、ＡＰＩ１０６、ＯＤＳ１１２及び／又はストレージリソース１２２に関連する）は、ブロック（４４５）の様々な態様を実行することができ、一方、他の実施態様において、そのような態様は、本明細書に記載するもののような、１以上の他の要素／コンポーネントによって実行され得る。
【０１０２】
さらに、特定の実施態様において、、例えばデータオブジェクトに関連して、例えば本明細書で詳細に記載する方法で、様々な使用パターンのアプリケーション（例えば、リクエストがそこから受信されたアプリケーション）を決定するために、前記のリクエストを処理することができる。さらに、特定の実施態様においてデータオブジェクトの様々な下位構造を、識別/決定されたアプリケーションの使用パターンに基き、データオブジェクトに関連して、識別することができる。例えば、本明細書に記載するように、アプリケーションがデータオブジェクトにアクセスする方法は、そのようなデータオブジェクトの特定部分のみ（例えば比較的最近の部分）がアプリケーションによってアクセスされ、一方、他の部分はアプリケーションによって頻繁には（または全く）アクセスされないことを示すことができる。加えて、特定の実施態様において、前記のリクエストは、データオブジェクトの１以上の他の下位構造とは独立した参照されるリクエストによってアクセスされる、データオブジェクトの様々な下位構造を識別するために処理することができる。例えば、本明細書に記載するように、データオブジェクトの１部分（例えば最も最近書込まれた部分）がアクセスされ、同時に他の部分にはアクセスされない場合、そのようなものは、例えば本明細書に記載される方法で、独立した下位構造として各部分を保存することができることを示すことができる。特定の実施態様において、データオブジェクトそれ自体を、データオブジェクトの様々な下位構造を識別するために処理することができる（例えば、ファイル、オブジェクトなどの構造が、互いに独立して保存することが可能な様々な下位構造を反映できる）ことも理解されるべきである。
【０１０３】
ブロック（４４０）において、データオブジェクトのためのストレージ構造を規定することができる。特定の実施態様において、そのようなストレージ構造を、データオブジェクトの様々な下位構造の識別（例えば４３５で識別される）に基いて/鑑みて、規定することができる。特定の実施態様において、参照されるストレージ構造は、本明細書に記載するような、様々な下位構造に対する独立したアクセスを可能にするストレージ構造を含むことができる。特定の実施態様において、サーバ（１２０）（例えば、ＡＰＩ１０６、ＯＤＳ１１２及び／又はストレージリソース１２２に関連する）は、ブロック（４４０）の様々な態様を実行することができ、一方、他の実施態様において、そのような態様は、本明細書に記載するもののような、１以上の他の要素／コンポーネントによって実行され得る。
【０１０４】
ブロック（４４５）において、インターフェースを規定することができる。特定の実施態様において、そのようなインターフェースは、それを通じて、第１のアプリケーション（例えばリクエストが受信されるアプリケーション）が、本明細書に記載される様な方法で、データオブジェクト（例えば４４０で規定されるようなストレージ構造に保存されるようなデータオブジェクト）にデータアクセスコマンドを提供することができるものとすることができる。特定の実施態様において、複数のインターフェースを規定することができる。そのようなインターフェースは、第１のアプリケーションが様々なデータアクセスコマンドを、例えば規定されたストレージ構造に保存される第１のデータオブジェクトへ（例えば各インターフェースを通して）提供することができるように、構成することができる。本明細書で詳細に記載するように、ある実施態様において、様々なパラメータを、前記のリクエストに加えることができる。そのようなパラメータは、例えば、様々な下位構造（例えば、特定のリクエスト、コマンドなどが関係するそれらの下位構造）を識別及び／又は参照することができる。特定の実施態様において、サーバ（１２０）（例えば、ＡＰＩ１０６、ＯＤＳ１１２及び／又はストレージリソース１２２に関連する）によって、ブロック（４４５）の様々な態様を実行することができ、一方、他の実施態様において、そのような態様は、本明細書に記載するもののような、１以上の他の要素／コンポーネントによって実行され得る。
【０１０５】
ブロック（４５０）において、例えばデータアクセスコマンドのような、少なくとも１つのコマンドを受信することができる。特定の実施態様において、そのようなコマンドは、第１のデータオブジェクトの１以上の下位構造（例えば、４３５で識別されるそれらのた下位構造）の少なくとも１つに関連して受信することができる。さらに、特定の実施態様において、前記のデータアクセスコマンドは、以下を含み得る（ただし限定されない）：データ作成コマンド（例えば、１データオブジェクトの１以上の下位構造の少なくとも１つを対象とし得る）、データ修正コマンド（例えば、１データオブジェクトの１以上の下位構造の少なくとも１つを対象とし得る）、データ消去コマンド（例えば、１データオブジェクトの１以上の下位構造の少なくとも１つを対象とし得る）、及び／又は、本明細書で記載及び／又は参照されるのような様々な他のコマンド。特定の実施態様において、サーバ（１２０）（例えば、ＡＰＩ１０６、ＯＤＳ１１２及び／又はストレージリソース１２２に関連する）によって、ブロック（４５０）の様々な態様を実行することができ、一方、他の実施態様において、そのような態様は、本明細書に記載するもののような、１以上の他の要素／コンポーネントによって実行され得る。
【０１０６】
ブロック（４５５）において、１以上の通知を、本明細書に記載される様な方法で、生成することができる、特定の実施態様において、そのような通知は、１以上のコマンド（例えば、４５０で受信されるような、データアクセスコマンド）に対応することができる。さらに、特定の実施態様において、参照される通知を、１以上のコマンド（例えばデータアクセスコマンド）の受信に応答して生成することができる。加えて、特定の実施態様において、参照される通知を、様々なコマンド（例えばデータアクセスコマンド）の実行に応答して、例えば第１のデータオブジェクトの様々な下位構造（例えば、４５０において受信されたコマンドが関連する下位構造）に関連して、生成することができ、特定の実施態様において、サーバ（１２０）（例えば、ＡＰＩ１０６、ＯＤＳ１１２及び／又はストレージリソース１２２に関連する）によって、ブロック（４５５）の様々な態様を実行することができ、一方、他の実施態様において、そのような態様は、本明細書に記載するもののような、１以上の他の要素／コンポーネントによって実行され得る。
【０１０７】
ブロック（４６０）において、１以上の通知（例えば４６０において生成されるもの）を、本明細書に記載されるような方法で、提供することができる。特定の実施態様において、そのような通知を、第１のアプリケーション（例えば、４２０において受信されるリクエストが関連するアプリケーション）に提供することができる。他の実施態様において、参照される通知は、他のアプリケーション（例えば、４２０において受信したリクエストの送信元となるアプリケーションとは異なるアプリケーション）に提供することができる。特定の実施態様において、サーバ（１２０）（例えば、ＡＰＩ１０６、ＯＤＳ１１２及び／又はストレージリソース１２２に関連する）によって、ブロック（４６０）の様々な態様を実行することができ、一方、他の実施態様において、そのような態様は、本明細書に記載するもののような、１以上の他の要素／コンポーネントによって実行され得る。
【０１０８】
ブロック（４６５）において、第１の使用パターンを、例えばデータオブジェクトの第１の下位構造に関連して、決定することができる。例えば、データオブジェクト内の様々な下位構造の識別を反映するデータオブジェクトのためのストレージ構造を規定したので、様々なアプリケーションがそのような下位構造を利用する方法を、観察し、処理し、及び／又は、分析することができる。例えば、そのような相互作用は、様々な下位構造に関連して実行される様々なタイプの処理を決定するために分析することができる。特定の実施態様において、サーバ（１２０）（例えば、ＡＰＩ１０６、ＯＤＳ１１２及び／又はストレージリソース１２２に関連する）によって、、ブロック（４６５）の様々な態様を実行することができ、一方、他の実施態様において、そのような態様は、本明細書に記載するもののような、１以上の他の要素／コンポーネントによって実行され得る。
【０１０９】
ブロック（４７０）において、データオブジェクトの第１の下位構造を保存することができる。特定の実施態様において、そのような下位構造は、第１のストレージリソース１２２（例えばＳＳＤ、クラウドストレージ、及び／又は、他の同様の記憶媒体など、本明細書に記載/参照されるものを含むが、それらに限定されない）に保存することができる。さらに、特定の実施態様において、そのような下位構造を、使用パターン（例えば４６５で決定されるような）に基いた特定のストレージリソースに保存することができる。例えば、そのような下位構造を利用するために決定することができる方法（例えば、そのような下位構造上で実行される処理、アプリケーションなどの特定タイプ）に基き、そのような処理及び／又はアプリケーションの実行を向上及び／又は最適化する記憶媒体を、本明細書に記載される様な方法で、選択することができる。特定の実施態様において、サーバ（１２０）（例えば、ＡＰＩ１０６、ＯＤＳ１１２及び／又はストレージリソース１２２に関連する）によって、ブロック（４６５）の様々な態様を実行することができ、一方、他の実施態様において、そのような態様は、本明細書に記載するもののような、１以上の他の要素／コンポーネントによって実行され得る。
【０１１０】
ブロック（４７５）において、第２の使用パターンを、例えばデータオブジェクトの第２の下位構造（例えば、４７０において上記で参照した下位構造とは異なる）に関連して、決定することができる。例えば、データオブジェクト内の様々な下位構造の識別を反映する、データオブジェクトのためのストレージ構造を規定したので、様々なアプリケーションがそのような下位構造を利用する方法を、観察し、処理し、及び／又は分析することができる。例えば、そのような相互作用は、様々な下位構造に関連して実行される様々なタイプの処理を決定するために分析することができる。特定の実施態様において、サーバ（１２０）（例えば、ＡＰＩ１０６、ＯＤＳ１１２及び／又はストレージリソース１２２に関連する）によって、ブロック（４７５）の様々な態様を実行することができ、一方、他の実施態様において、そのような態様は、本明細書に記載するもののような、１以上の他の要素／コンポーネントによって実行され得る。
【０１１１】
ブロック（４８０）において、データオブジェクトの第２の下位構造を、保存することができる。特定の実施態様において、そのような下位構造は、第２のストレージリソース１２２（例えばＳＳＤ、クラウドストレージ、及び／又は、他の同様の記憶媒体など、本明細書で記載/参照されるものを含むが、これらに限定されない）に保存することができる（例えば、４７０において、参照されるストレージリソースが、上記で参照したストレージリソースとは異なり得ることがことが理解されるべきである）。さらに、特定の実施態様において、そのような下位構造を、使用パターン（例えば４７５において決定される）に基いて、特定のストレージリソース上に保存することができる。例えば、そのような下位構造を利用するために決定することができる方法（例えば、そのような下位構造上で実行される処理、アプリケーションなどの特定タイプ）に基き、そのような処理及び／又はアプリケーションの実行を向上及び／又は最適化する記憶媒体を、本明細書に記載される様な方法で、選択することができる。特定の実施態様において、サーバ（１２０）（例えば、ＡＰＩ１０６、ＯＤＳ１１２及び／又はストレージリソース１２２に関連する）によって、ブロック（４８０）の様々な態様を実行することができ、一方、他の実施態様において、そのような態様は、本明細書に記載するもののような、１以上の他の要素／コンポーネントによって実行され得る。
【０１１２】
図５は、アプリケーション中心のオブジェクトストレージのためのさらなる方法（５００）の態様のフローチャートを示す。特定の実施態様において、方法（５００）は、本明細書に記載されるように、アプリケーション中心のオブジェクト構成と関係することができる。方法は、ハードウェア（回路類、専用ロジックなど）、ソフトウェア（例えば本明細書に記載するようなコンピューティング装置上で実行されるもの）、または両者の組合せを含み得る処理ロジックによって、実行される。１つの実施態様において、この方法は、図１と関連して図示され及び／又は本明細書に記載される１以上の要素によって実行され、他方、別の実施態様において、図５の１つ以上のブロックは、別の装置または機械によって実行され得る。
【０１１３】
ブロック（５１０）において、１以上のリクエストを、本明細書に記載される様な方法で、受信することができる。特定の実施態様において、そのようなリクエストは、アプリケーションから受信することができる。さらに、特定の実施態様において、そのようなリクエストは、本明細書に記載されるように、データオブジェクトに関連して受信することができる（及び／又は、そうでなければ対応する及び／又は関連することができる）。特定の実施態様において、そのようなデータオブジェクトは１以上のデータオブジェクト（例えば組み合わされた/合成されあたデータオブジェクト）を含むことができる。さらに、特定の実施態様において、前記のリクエストは、１以上のフィルタリングルールを含むことができる。特定の実施態様において、サーバ（１２０）（例えば、ＡＰＩ１０６、ＯＤＳ１１２及び／又はストレージリソース１２２に関連する）によって、ブロック（５１０）の様々な態様を実行することができ、一方、他の実施態様において、そのような態様は、本明細書に記載するもののような、１以上の他の要素／コンポーネントによって実行され得る。
【０１１４】
ブロック（５２０）において、１以上のリクエスト（５１０で受信されるようなもの）を、処理することができる。そうする際に、アプリケーション（例えば、５１０において例クエストをそこから受信したアプリケーション）の１以上のデータ利用の特徴を、例えばデータオブジェクトに関連して、決定することができる（例えば、本明細書で記載される方法で）。参照される利用の特徴の実施態様は、本明細書で記載及び／又は参照される様々な使用パターンを含むが、これらに限定されない。特定の実施態様において、サーバ（１２０）（例えば、ＡＰＩ１０６、ＯＤＳ１１２及び／又はストレージリソース１２２に関連する）によって、ブロック（５２０）の様々な態様を実行することができ、一方、他の実施態様において、そのような態様は、本明細書に記載するもののような、１以上の他の要素／コンポーネントによって実行され得る。
【０１１５】
ブロック（５３０）において、データオブジェクトの１以上の態様が構成され得る。特定の実施態様において、そのような態様は、（例えば、（５２０）において判定されるような）１以上のデータ利用特性に基づいて／を考慮して構成され得る。更に、特定の実施態様において、データオブジェクトのストレージの様々な態様が構成され得る。加えて、特定の実施態様において、１以上の属性が、前記リクエスト（複数）（例えば、（５１０）において受け取られたもの）に加えられ得る。そのような属性は、例えば、データオブジェクトの１以上の要素の好ましいデータ配置、データオブジェクトの１以上の要素に関して行なわれるデータキャッシングの量、データオブジェクトの１以上の要素に関して行なわれるデータキャッシングの優先順位、及び／又はデータオブジェクトの１以上の要素に関して適用されるリードアヘッドウィンドウを含み得る。特定の実施態様において、ブロック（５３０）の様々な態様が（例えば、ＡＰＩ（１０６）、ＯＤＳ（１１２）及び／又はストレージリソース（１１２）と協働して）サーバー（１２０）により行われ、一方で他の実施態様において、そのような態様は、本明細書に記載されるものなど１以上の他の要素／コンポーネントにより行なわれてもよい。
【０１１６】
更に、特定の実施態様において、ストレージ階層が、データオブジェクトなどに関して選択され得る。特定の実施態様において、そのようなストレージ階層（又は複数のストレージ階層）は、前記ストレージ階層のパフォーマンス、ストレージ階層のスピード、ストレージ階層の容量、ストレージ階層の物理的位置、ストレージ階層の地理的位置、ストレージ階層に関連したアクセスプロトコル、ストレージ階層の利用可能性、及び／又はストレージ階層の１以上の機能的特性（例えば、暗号化、圧縮など）に基づいて／を考慮して選択され得る。
【０１１７】
特定の実施態様において、１以上のデータオブジェクトのストレージの様々な態様が構成され得る。例えば、１以上のトランザクションセマンティクス及び／又は１以上の識別子が、１以上のリクエストに加えられ得る。更に、特定の実施態様において、１以上のデータオブジェクトの少なくとも１つのストレージの１以上の態様が構成され得る。加えて、特定の実施態様において、１以上のトランザクションセマンティクス及び１以上の識別子は、例えば１以上のリクエストに加えられ得る。
【０１１８】
更に、特定の実施態様において、１以上のデータレイアウト及び／又は１以上のＡＰＩが、例えばアプリケーションに関して提供され得る。特定の実施態様において、前記データレイアウト及び／又はＡＰＩは、アプリケーションが、１以上の識別子などに基づいてデータオブジェクトの様々な要素にアクセスすることを可能にし得る。そのような識別子は、限定されないが、本明細書に記載されるような、１つ以上のレコード識別子及び／又は１以上の時系列識別子（ｃｈｒｏｎｏｌｏｇｉｃａｌ  ｉｄｅｎｔｉｆｉｅｒｓ）を含み得る。更に、特定の実施態様において、前記データレイアウト及び／又はＡＰＩは、別のアプリケーションが、データオブジェクトの１以上の要素にアクセスすることを可能にし得る。
【０１１９】
加えて、特定の実施態様において、（例えば、本明細書に記載されるように）データオブジェクトの１以上の要素が冗長であることが判定され得る。特定の実施態様において、そのような要素が冗長であることを判定した後、冗長であると判定された要素は、例えばデータオブジェクトから抽出され、そしてデータオブジェクトの残りの要素は、本明細書に記載される様式などで保存され得る。
【０１２０】
更に、特定の実施態様において、オブジェクトの１以上の要素は、例えば本明細書に記載される方法などで１以上のタグにより印をつけることができる。特定の実施態様において、そのようなタグは、例えば、前記リクエスト（複数）（例えば（５１０）にて受け取られたもの）に関連したメタデータといったメタデータの検査に基づいて／を考慮して作成され得る。更に、特定の実施態様において、前記タグは、データオブジェクトの１以上の要素の検査に基づいて／を考慮して作成され得る。
【０１２１】
特定の実施態様において、１以上の要素は、本明細書に記載される方法などにおいてデータオブジェクトに加えられ得る。そのような要素の例は、限定されないが１以上のフィールドを含む。例えば、１以上のフィールドは、そのような１以上のフィールドに対するデータオブジェクトにおける参照に基づいて、データオブジェクトに加えられ得る。更に、特定の実施態様において、１以上のストアドプロシージャが、本明細書に記載される方法などにおいてデータオブジェクトに関して起動され得る。
【０１２２】
加えて、特定の実施態様において、１以上の仮想オブジェクトが、本明細書に記載される方法などにおいてデータオブジェクトに関して提供され得る。そのような仮想オブジェクトは、例えば、本明細書に記載されるものなど、データオブジェクトの代替的フォーマットに関して１以上のリクエストのパフォーマンスを可能にし得る。
【０１２３】
更に、特定の実施態様において、前記リクエスト（複数）（例えば（５１０）にて受け取られたもの）は、データオブジェクトと１以上の属性を共有するものなど、多数のデータオブジェクトに関して実行され得る。
【０１２４】
特定の実施態様において、データオブジェクトの１以上の第１の要素が保存され得る。特定の実施態様において、そのような第１の要素は、本明細書に記載されるものなど、第１のストレージリソースに保存され得る。特定の実施態様において、データオブジェクトの前記第１の要素は、データオブジェクトの１以上の第１の要素のサイズ、データオブジェクトの１以上の第１の要素のアクセス頻度、データオブジェクトの１以上の第１の要素の経時年数、データオブジェクトの１以上の第１の要素に関連したポリシー、データオブジェクトの１以上の第１の要素に関連したスケジュール、及び／又はデータオブジェクトの１以上の第１の要素に関連した書き込み頻度に基づいて、第１のストレージリソースに保存され得る。更に、特定の実施態様において、データオブジェクトの１以上の第２の要素が第２のストレージリソースに保存され得る。
【０１２５】
加えて、特定の実施態様において、データオブジェクトの１以上の要素は、１以上のフィルタリングルール（例えば（５１０）にて受け取られたもの）を考慮して提供され得る（例えば、本明細書に記載される方法で）。
【０１２６】
ブロック（５４０）において、１以上のリクエスト（例えば（５１０）にて受け取られたもの）は、本明細書に記載される方法などにおいて１以上の動作に関連付けられ得る。特定の実施態様において、ブロック（５４０）の様々な態様が（例えば、ＡＰＩ（１０６）、ＯＤＳ（１１２）及び／又はストレージリソース（１１２）と協働して）サーバー（１２０）により行われ、一方で他の実施態様において、そのような態様は、本明細書に記載されるものなど１以上の他の要素／コンポーネントにより行なわれてもよい。
【０１２７】
ブロック（５５０）において、前記処理の１以上が実行され得る。特定の実施態様において、そのような処理は、本明細書に記載及び／又は参照されるものなど、トランザクションセマンティクス及び／又はＡＰＩセマンティクスの少なくとも１つにより指示されるような順序で実行され得る。特定の実施態様において、ブロック（５５０）の様々な態様が（例えば、ＡＰＩ（１０６）、ＯＤＳ（１１２）及び／又はストレージリソース（１１２）と協働して）サーバー（１２０）により行われ、一方で他の実施態様において、そのような態様は、本明細書に記載されるものなど１以上の他の要素／コンポーネントにより行なわれてもよい。
【０１２８】
図６は、アプリケーション中心のオブジェクトストレージのための更なる方法（６００）の態様のフローダイアグラムを表す。特定の実施態様において、方法（６００）は、本明細書に記載されるものなど、バーチャルデータオブジェクトに関連し得る。該方法は、ハードウェア（回路、専用ロジックなど）、ソフトウェア（本明細書に記載されるものなどのコンピューティング装置上で実行されるものなど）、又はその両方の組み合せを含み得るロジックの処理により、実行される。１つの実施態様において、前記方法は、図１に関連して表示及び／又は記載される１以上の要素により実行され、一方で他の幾つかの実施態様において、図６の１以上のブロックは、別の機械により実行され得る。
【０１２９】
ブロック（６１０）において、第１のデータオブジェクトが受け取られ得る。特定の実施態様において、そのような第１のデータオブジェクトは、本明細書に記載されるものなど、第１のフォーマットであり得る。特定の実施態様において、ブロック（６１０）の様々な態様が（例えば、ＡＰＩ（１０６）、ＯＤＳ（１１２）及び／又はストレージリソース（１１２）と協働して）サーバー（１２０）により行われ、一方で他の実施態様において、そのような態様は、本明細書に記載されるものなど１以上の他の要素／コンポーネントにより行なわれてもよい。
【０１３０】
ブロック（６２０）において、リクエストが受け取られ得る。特定の実施態様において、そのようなリクエストは、第２のフォーマット（例えば、受け取られ、保存され、前もってアクセスされるフォーマット以外のフォーマットなど）において、（例えば、（６１０）にて受け取られるような）第１のデータオブジェクトにアクセスするリクエストであり得る。特定の実施態様において、ブロック（６２０）の様々な態様が（例えば、ＡＰＩ（１０６）、ＯＤＳ（１１２）及び／又はストレージリソース（１１２）と協働して）サーバー（１２０）により行われ、一方で他の実施態様において、そのような態様は、本明細書に記載されるものなど１以上の他の要素／コンポーネントにより行なわれてもよい。
【０１３１】
ブロック（６３０）において、第２のフォーマットである第１のデータオブジェクト（例えば、（６１０）にて受け取られるような）を初期化するコマンドが受け取られ得る。特定の実施態様において、ブロック（６３０）の様々な態様が（例えば、ＡＰＩ（１０６）、ＯＤＳ（１１２）及び／又はストレージリソース（１１２）と協働して）サーバー（１２０）により行われ、一方で他の実施態様において、そのような態様は、本明細書に記載されるものなど１以上の他の要素／コンポーネントにより行なわれてもよい。
【０１３２】
ブロック（６４０）において、第１のデータオブジェクト（例えば、第１のフォーマットにある第１のデータオブジェクト）が処理され得る。処理を行う際に、バーチャルデータオブジェクトが、本明細書に記載される方法などにおいて作成され得る。特定の実施態様において、そのようなバーチャルデータオブジェクトは、第２のフォーマットにある第１のデータオブジェクトの表現を含み、及び／又はそれに対応／それを反映し得る。更に、特定の実施態様において、そのようなバーチャルデータオブジェクトは、（例えばブロック（６１０）における）第１のフォーマットにある第１のデータオブジェクトの受取に基づいて／応じて作成され得る。更に、特定の実施態様において、第１のフォーマットにある第１のデータオブジェクトは、バーチャルデータオブジェクトを作成するために、（例えばブロック（６２０）における）第２のフォーマットにある第１のデータオブジェクトにアクセスするリクエストの受取に基づいて処理され得る。更に、特定の実施態様において、第１のフォーマットにある第１のデータオブジェクトは、バーチャルデータオブジェクトを作成するために、（例えばブロック（６３０）における）第２のフォーマットにある第１のデータオブジェクトを初期化するコマンドの受取に基づいて処理され得る。加えて、特定の実施態様において、第１のフォーマットにある第１のデータオブジェクトは、バーチャルデータオブジェクトを作成するために処理され得る。特定の実施態様において、ブロック（６４０）の様々な態様が（例えば、ＡＰＩ（１０６）、ＯＤＳ（１１２）及び／又はストレージリソース（１１２）と協働して）サーバー（１２０）により行われ、一方で他の実施態様において、そのような態様は、本明細書に記載されるものなど１以上の他の要素／コンポーネントにより行なわれてもよい。
【０１３３】
本明細書で詳細に記載されるように、前記バーチャルデータオブジェクトは例えば、オブジェクト識別子（例えば、ファイル名など）、１以上のポインター（例えば、第１のデータオブジェクトの様々な要素に対する）、及び／又は第１のデータオブジェクトの１以上の要素に関係する１以上のパラメータ（例えば、本明細書に記載されるようなタイムスタンプ範囲など）を含み得る。更に、特定の実施態様において、前記バーチャルデータオブジェクトは、オブジェクト識別子及び第１のデータオブジェクトの１以上の要素を含み得る。加えて、特定の実施態様において、前記バーチャルデータオブジェクトは、オブジェクト識別子、第１のデータオブジェクトの１以上の要素に対する１以上のポインター、及び他のデータオブジェクトの１以上の要素に対する１以上のポインターを含み得る。また他の実施態様において、前記バーチャルデータオブジェクトは、オブジェクト識別子、第１のデータオブジェクトの１以上の要素に関係する１以上のパラメータ、及び他のデータオブジェクトの１以上の要素に関係する１以上のパラメータを含み得る。また他の実施態様において、前記バーチャルデータオブジェクトは、オブジェクト識別子、第１のデータオブジェクトの１以上の要素、及び他のデータオブジェクトの１以上の要素を含み得る。また他の実施態様において、前記バーチャルデータオブジェクトは、オブジェクト識別子、第１のデータオブジェクト、及び別のデータオブジェクトを含み得る。
【０１３４】
ブロック（６５０）において、第１のデータオブジェクトに関するリクエストが受け取られ得る。特定の実施態様において、そのようなリクエストは、本明細書に記載される方法などにおいて第２のフォーマットに関して構成されるアプリケーションなどのアプリケーションから受け取られ得る。特定の実施態様において、ブロック（６５０）の様々な態様が（例えば、ＡＰＩ（１０６）、ＯＤＳ（１１２）及び／又はストレージリソース（１１２）と協働して）サーバー（１２０）により行われ、一方で他の実施態様において、そのような態様は、本明細書に記載されるものなど１以上の他の要素／コンポーネントにより行なわれてもよい。
【０１３５】
ブロック（６６０）において、リクエスト（例えば（６５０）にて受け取られたリクエスト）が完了され得る。特定の実施態様において、そのようなリクエストは、本明細書に記載される方法などにおいてバーチャルデータオブジェクトを介して第１のデータオブジェクト及びアプリケーションに関して完了され得る。特定の実施態様において、ブロック（６６０）の様々な態様が（例えば、ＡＰＩ（１０６）、ＯＤＳ（１１２）及び／又はストレージリソース（１１２）と協働して）サーバー（１２０）により行われ、一方で他の実施態様において、そのような態様は、本明細書に記載されるものなど１以上の他の要素／コンポーネントにより行なわれてもよい。
【０１３６】
更なる例示により、記載されてきたように、本明細書に記載される様々な処理が、データ保存／管理システムと、保存データを所有及び／又はそれと相互に作用すると共に、データの保存と管理を提供するための機能を含み得る様々なアプリケーションとの間に位置し得る、インターフェースにより／インターフェースと協働して実行され得る。前記アプリケーション（及び／又はそのグループ又はカテゴリ）は、異なる及び／又は一意のデータ構造、及び／又は使用パターンを持つか、又はそれらに関連付けられ得る。例えば、様々な個人エントリーが独立して使用されるデータ実体となるように、特定のアプリケーションは、マルチフィールドエントリーを持つデータベースでもよい。例えば、４つのデータベースエントリーが一緒に保存されるような方法でアプリケーションからのデータがブロックに保存される場合、４つのデータベースエントリーは全て、全てのトランザクションリクエストのためにフェッチされ、（例えば、全てのユーザに関して）ロックされ、及び再び書き込まれる必要があり、その内３つは不必要となる（例えば、そのようなリクエストが実際にたった１つのエントリーに関係するシナリオにおいて）。従って、そのようなインターフェースは、前記データ構造が実際に特定のデータベースエントリーに実際に基づくものであり、且つ使用パターンが１つのリクエストにつき１つのエントリーを含んでいるという事実を構成することができない。
【０１３７】
従って、そのようなインターフェースは、例えばそのデータ構造及び／又は使用パターンを考慮して、例えば特定のアプリケーション及び／又はアプリケーションのカテゴリをより効率的に扱うために修正され得る（及び／又は、新しいインターフェースが定義され得る）。例えば、特定のデータベースエントリーをリクエストするパラメータが、例えば読み取りコマンドに提供され得る。別の例は、データが（例えばビデオカメラからの）録画及び／又は他のコンテンツストリームを含むシナリオにおいて、時間又は相対位置を識別するパラメータを加えることである。
【０１３８】
更に、前記インターフェースの前記修正／定義は、様々な専門の機能を加えることを含み得る。例えば、ログファイルアプリケーションには、全体のログファイルを呼び出す代わりに、特定の数のログエントリー（例えば、最近のエントリー）のみを見る、修正されたログファイル読み取りコマンドが提供され得る。
【０１３９】
結果として、記載された技術により、様々な処理、キャッシング、及びトランザクションセマンティクスが、データ自体へとより接近して動かされるようになり、更に、（例えば、多数のデータ管理ノード上で）そのような動作をより効率的に分配することができる。
【０１４０】
更に、前記インターフェースの修正及び／又は定義は、データ保存及び管理システム内に、改善された、増強された、及び／又はよりスマートなデータアクセスプリミティブ及びＡＰＩを提供することを含む。そのようなアイテムにより、アプリケーションは、データ保存システムに対してデータトランザクション処理及び同期化をアンロードし、例えばデータを配する又は処理する方法に関してデータ保存システムに対して提案又はヒントを提供し、ストレージシステム内の最適なデータレイアウト又は圧縮を使用し、及び／又は、本明細書に記載されるものなどのデータ又はメタデータへの変化に対するデータ保存システムから通知をリクエストすることが可能となり得る。
【０１４１】
注記したように、本明細書に記載及び／又は参照される様々なデータ要素は、実際的なデータの形態であり得、限定されないが、ファイル、オブジェクト、ブロックストレージ、データベースレコード、キー／バリュータプル、メッセージ、ログストリーム、メディアストリーム又はファイル、時系列データ等を含む。更に、そのようなデータオブジェクトは、コンテンツ、メタデータ、バージョン、及び／又は状態或いはコンテキストを含み得、且つ多数の場所においてコピーされ得る。
【０１４２】
また本明細書に記載されるように、記載された技術は、特定のアプリケーションデータが特定の下位構造を持つこと（例えば、データ構造の部分がアプリケーションの動作に関連し独立して使用されること）を様々な使用パターンが示しているシナリオにおいて、データ保存及び管理を可能にし、且つそれらを強化し得る。注記されるように、アプリケーションとのインターフェースを行うためにデータ保存及び管理システムが使用するインターフェースが、修正及び／又は定義され得る。アプリケーションデータ構造及び／又は使用パターンの様々な態様及び／又は詳細が、判定及び／又は獲得され得る。そのような使用パターンは、例えば、データの残りとは別に使用され得るデータ構造の下位構造の識別を可能にし得る。
【０１４３】
そのような下位構造を識別すると、データ保存オブジェクトは、例えばアプリケーションに関して設計／定義され得る。そのようなデータ保存オブジェクトは例えば、下位構造が独立したユニットとしてアクセスされることを可能にし得る。更に、下位構造への独立したアクセスを可能にするものなど、様々なデータアクセスコマンドが修正及び／又は定義され得る。例えば、下位構造を識別するパラメータは、特定のデータアクセスコマンドに加えられ得る（例えば、セキュリティーカメラからのビデオデータに関して、データ読み取りコマンドはパラメータとして時間のレコードを含み得る）。更に、データの保存は、例えば、アプリケーションを扱うＡＰＩにより使用され得るデータ保存オブジェクトを使用して実行され得る。
【０１４４】
データ保存オブジェクトのための１つの典型的な構造は、ヘッダーセクション及びインデックス付きサブセクションを提供することを含み得る。加えて、注記されるように、現在のデータは、（例えば、単一のファイル又は任意のデータブロックにおけるストレージと比較して）異なるユーザ間でアクセスが衝突することがあまり起こらないように、有機セクションに分けられ得る。更に、下位構造の一部がデータ構造における他の下位構造の複製である場合、この複製は、基準（例えば、データの元のインスタンスに対するポインター）として保存され、それによりストレージリソースをより良く使用することができる。
【０１４５】
例示により、データ構造が時間ベースのエントリーを持つファイルを含むシナリオにおいて、各エントリーは例えば下位構造となり得る。更に、様々なエントリーが、多くの基準、例えばレコード時間に基づいてインデックスを付けられ得る。
【０１４６】
加えて、本明細書に記載されるように、記載されたデータ保存システムは、例えば最も頻繁に使用されるデータが最も容易に利用可能となり得るように構成され得る、階層的メモリ構造を含み得る。記載されたデータオブジェクトにより、各下位構造は、例えばそれ自体のデータ使用パターンに従い階層的メモリ上で独立して配されることが可能となり得る。参照された構造が有機的である場合、参照された使用パターン（例えば、参照された下位構造を識別するために使用されるもの）は、（例えば、任意のデータ構造に基づいて、平均化又は最大化に対向して）データの使用をより正確に反映することができる。前記下位構造を独立的に／自在に（例えば、任意のブロックの一部としてではなく）削除することができることも、理解されたい。
【０１４７】
記載された技術の典型的な１つの実施態様は、記載されたデータエントリーが周期的な読み取りとなり得るような、様々なセンサ（例えば、セキュリティーカメラなどを含む）の周期的及び／又は継続的なスキャンに関するものであり得る。特異的に設計されたオブジェクトにそのような読み取りを保存する性能により、そのような読み取りがよりアクセス可能に及び／又は有用になることが可能になる。更なる例示により、そのようなデータ構造はログファイルであり得、例えば時間とデータに従い、前記エントリーが独立してインデックスを付けられる。また更なる例示により、ビデオの場合、フレーム及び／又はフレームのグループは、例えばレコードの時間に従い、インデックスを付けられ得る（及び／又は、そのようなフレーム及びフレームのグループは、ビデオ構造に関連したメタデータに従いインデックスを付けられ得る）。
【０１４８】
本明細書で提供される様々な例において、前記インデクシングは必ずしも、全てのデータ構造のために実行される必要はない（例えば、インデクシングは、規則的及び／又は不規則な間隔に制限され得る）。更なる例示により、１つの実施態様において、データオブジェクトはメッセージキューであり得、メッセージは第１の端部にて書き込まれ且つ読み取りポインターを使用して読み取られる。
【０１４９】
図７は、本明細書において記載及び／又は参照されるものといった様々なデータオブジェクトの態様を表す。図７に示されるように、データオブジェクト（７０２）は、（例えば、開示された技術を介して保存及び／又は管理するために、アプリケーション（１０４）により作成及び／又は提供され得るような）データオブジェクトであり得る。本明細書で詳細に記載されるように、データオブジェクト（７０２）の様々な態様、要素、及び／又は部分は、例えば、アプリケーション（及び／又は他のアプリケーション）が提供する様式が、データ（例えば使用パターン）と相互に作用する、及び／又はそれを利用することに基づいて、スキャン最適化され、構造化され、及び／又は半構造化され得る。加えて、データオブジェクト（７０２）は、例えば不揮発性メモリ及び／又はソリッドステートディスクに保存してもよいメタデータを含み得る。
【０１５０】
また図７に示されるように、前記データオブジェクトは更に、様々なデータオブジェクト又はチャンク（その各々がデータベースにエントリーファイル、ストリーム、列／フィールドなどを保存し得る）を含み／組み込み得る。そのような構造は、記載されたモデルを介して実際に任意の種類のデータの表示を可能にすることができる。例えば、前記データチャンクは、ファイルエクステント（７０４Ａ）（例えば、ディスクにおいて様々なファイルオフセットをブロックにマッピングするツリー又は他のそのような構造）、ストリーム（７０４Ｂ）（例えば、タイムスタンプにより編成され、且つ、１つのチャンクが満ちた場合に別のチャンクが更にデータを保存するために使用され得、それにより、参照されたタイムスタンプが対応するチャンクから特定の時間フレームに関連付けられたデータを検索するために使用され得る、データのチャンク）、及び／又は列（７０４Ｃ）（例えば、画像等を含み、且つ、例えば写真やテキストなどのデータ／コンテンツの異なる種類を含むそのようなカラムに対するポインターを、対応するメタデータが含むことができることに関する、データベースカラム）に関して構成又は配向されるデータチャンクを含み得る。
【０１５１】
注記したように、記載されたオブジェクトは、各種類のデータが記載されたデータモデルにマッピングされ得るため、実際に任意の種類のデータ（例えば、ファイル、オブジェクト、メディア（例えばビデオ）ストリーム、データストリーム（例えばセンサ情報）、ログファイル、時系列情報、データベースレコードなど）を保存するように構成され得る。更に、本明細書に記載されるように、様々な種類のデータは、例えば、１つのポリシー及び／又は階層化ポリシーの下で、１つのネームスペース内に保存され得、及び／又は１つの検索ツールなどを利用することができる。そうする際に、相当な効率が、例えば異なる種類のデータを保存するために同じ一定の方法を使用する技術にわたって達成され得る。
【０１５２】
本明細書に記載されるように、前記オブジェクトの各々はまた、１以上のサブオブジェクトを持つことができることを理解されたい。そのような階層構造により、記載された技術を使用して実際に任意の種類のデータを保存することが可能となる。加えて、記載された技術は、様々な時点で特定のデータの状態を反映する、保存されたデータのビューが提供されることを可能にし得る。
【０１５３】
記載されたデータ保存及びアクセス技術を使用して、データを保存することに関して１以上の保存タイプ／媒体を識別、判定、及び／又は選択することができることが、認識され得る。例えば、特定の種類のストレージは、サーチ、インデクシング、及び／又はアクセス、スキャン、及び／又はクエリに関して改善された結果をもたらし得るが、データの直接アクセスに関しては同等の結果をもたらさないこともある（一方で他の種類のストレージは反対の結果を引き起こし得る）。更なる例により、特定の種類のファイルシステムは、（ディレクトリの端部でファイルを直接識別するために名前／インデックスを使用することとは対照的に）ファイルを識別するために全体のディレクトリを辿ることを伴うこともある。記載された技術において、複数の種類のインデクシング機構が、単一のデータ構造（その各々が他のものと同期することができる）のために設けられ得る。リクエストの受け取り後、適切なインデックスを使用してリクエストされたデータを検索することができる。そのため、例えば、ランダムアクセスに関して、ディレクトリ内のファイルの場所を直接識別することができるハッシュ関数が提供され得る。特定の実施態様において、前記インデックスの各々は、他のインデックスに存在しない機能性／利点を補完するように構成され得る。例えば、データインジェスチョンがランダムアクセス／キーをベースとするインデックスを使用して行なうことができる一方、分析は、特定の基準に基づくデータ検索を可能にするインデックスを使用することができる。
【０１５４】
そうする際に、ファイル／オブジェクトはそれぞれ、例えば、記載された技術の中で一旦保存され、その一方で複数の方法でインデックスを付けられ得る。故に、例えばデータは、１つの方法で摂取され（例えば、１つのインデックスを使用して）、その一方で別の方法で分析される（例えば、別のインデックスを使用して）。
【０１５５】
更に、例えば、データがストリームとして保存されたとしても、異なる方法でデータにアクセスできる（それによりデータを一度だけ保存し、その一方で同じデータの異なるビューに相当するバーチャルファイルを提供する）、ファイルの異なるビューが提供され得る。例えば、ストリーミングデータは連続的に受け取られ、どのデータが該データのどの部分に対してマッピングを行うのかの識別は、プログラムにより示され得る（例えば、１つのビューは、２４時間ごとのデータストリーミングの間、バーチャルファイルを作成できる）。例えば、バーチャルファイルは、ファイル名を割り当てることができ、実際の基礎データ（例えば、継続的なストリームの経時年数の間隔）のどの部分がマッピングされるのかを定義することができる。
【０１５６】
従って、そのようなデータのプロパティ／特性を構成しない方法、及び／又はそのようなデータが実際に利用される方法でデータを保存するのではなく、且つ、（拡張可能でない場合もある）ストレージに特定のアプリケーションを密に関連付けるのではなく、記載された技術は、複数のアプリケーションにわたり拡張され得る柔軟な様式でストレージにアプリケーションデータ処理層をアウトソースするために、十分な量のロジック／プログラム可能性がストレージ（例えば、本明細書に記載されるような保存された手順、インデックスの作成、トランザクション、通知など）にて提供されることを可能にすることが、認識され得る。そうする際に、（例えば、注記されるように、例えばデータが移動するたびに、コンテキスト及び／又はセキュリティを危険にさらしかねない、異なるアプリケーションを利用するために）１つのシステムから別のシステムへとデータをコピー／移動する必要性を、排除することができる。そうすることにより、レイテンシも改善され得る（そのようなデータが適切な分析システムに転送されるまで待機する必要無く、リアルタイムの分析をデータの第１／単なるインスタンスに対して実行することができるため）。
【０１５７】
図８は、ＩｏＴ装置／データに関する、記載された技術の典型的な実施態様を表す。図８に表されるように、データは、（本明細書に記載されるような様々なＡＰＩと共に）１以上のＩｏＴゲートウエイ（８０４）を介して装置（８０２）へと／から送信され得る。特定の実施態様において、そのような装置は、例えば１つのストレージプラットフォーム（本明細書に記載されるものなど）に保存され（例えば、図８に表されるようなデータオブジェクト（８０６）として）、及び／又は書き込まれ得る、継続的なストリーミングデータ（例えば、センサ入力の継続的なストリーム）を提供することができる。データオブジェクト（８０６）が１つの形式（例えば、データストリーム）において連続的に受け取られ得る一方で、様々な他のアプリケーション、サービス、ツールなども、例えばリアルタイムでそのようなデータの分析を試みる場合があることが、認識され得る。例えば、リアルタイムで受け取られたＩｏＴデータをモニタリングし、分析することが、様々なイベント処理アプリケーション（５１４）及び／又は分析ツール（８１２）（例えば、Ｅｌａｓｔｉｃｓｅａｒｃｈ（登録商標）、Ｓｐａｒｋ（商標）、Ｈａｄｏｏｐ（登録商標）、Ｔａｂｌｅｕ（登録商標）など）には都合がよい場合もある。しかし、様々な装置（８０２）から受け取られたデータがストリームフォーマットにある一方で、前記アプリケーション、サービス、ツールなどは、他のフォーマット（例えば、データベースカラム／レコード、ファイルエクステントなどとして）でデータを処理するように構成されてもよい。従って、本来受け取られたフォーマットから、（注記されるように、レイテンシとオーバーヘッドを増大させることができる）前記アプリケーションやサービスなどによりリクエストされるフォーマットへとデータを変換する代わりに、記載された技術は、（例えば、その本来のフォーマットにある）データオブジェクト（８０６）の１つのコピーを維持し、一方で１以上の仮想オブジェクト（８０８Ａ）（８０８Ｂ）を作成することができる。本明細書に記載されるように、そのような仮想オブジェクトは、データ自体の様々なビューに対応する及び／又はそれを定義することができる。それぞれのインデックス（例えば、仮想オブジェクト（８０８Ａ）に相当するインデックス（８１４Ａ）、及び仮想オブジェクト（８０８Ｂ）に相当するインデックス（８１４Ｂ））と共に、それぞれのアプリケーション、サービス、ツールなど（例えば、アプリケーション（８１０）及びツール（８１２））は、対応するインデックスを介して、そのようなそれぞれのアプリケーションやサービス等と順に相互作用することができる、対応する仮想オブジェクトにおいて反映／表現されるような、元のデータオブジェクト（８０６）に関連するコマンドやリクエストなどを提供することができる。注記したように、そうする際に、受け取られたデータオブジェクトは、１回（例えば、その本来のフォーマットで）保存され得る一方で、他のアプリケーション／サービスが、そのようなアプリケーション／サービスの本来の動作／機能性に相当する／を反映する方法でそのようなデータオブジェクトと（それぞれの仮想オブジェクト及びインデックスを介して）相互に作用することを可能にする。そうする際に、例えば、複数のフォーマットで複数の回数とは対照的に、基礎のデータオブジェクトが一度保存されることを可能にすることにより、またその一方で、そのようなアプリケーションやサービスなどに固有であるコマンドなどを介してリアルタイムで参照されたデータに、参照されたアプリケーション、サービス、ツールなどが相互作用することを可能にすることにより（それにより、そのようなアプリケーション／サービスの態様を再構成する必要性を回避する）、相当な効率が実現され得る。
【０１５８】
この時点で、開示された技術の様々な実施態様が、本明細書で詳細に記載されるように、多数の利点及び従来の方法の改善を提供していることを、理解されたい。一例として、既存の技術が、データ自体の特徴を構成しない方法と同様に、それが利用／アクセスされる方法でデータを保存及び／又はアクセスする一方で、記載された技術は、そのようなデータを保存及び／又は管理することを決定する際にそのような（及び他の）要因を構成する。そうする際に、記載された技術は、アプリケーションのパフォーマンスを改善及び／又は最適化すると同時に、ストレージリソースをより効率的に利用することができる。加えて、既存の技術は、多数のアプリケーションやサービスなどによりそのようなデータにアクセスする／利用するために、データを異なる形式に複製及び／又は変換することをリクエストし得る一方で、記載された技術は、複数のインデックスなどを介して複数のアプリケーションやサービスなどへのアクセスを提供しつつ、データ自体の１つのコピーを維持することができる。そうする際に、アプリケーションのパフォーマンス及びストレージ使用率が最適化され得る。
【０１５９】
前述の記載の多くが、データ保存と管理に関連する記載された技術の様々な態様を示しているが、記載された技術はまた、任意の数の付加的又は代替的な設定又はコンテキストにおいて、及び任意の数の付加的なオブジェクトの方へと実装され得ることも、注意されたい。更なる技術的な利点、解決策、及び／又は改善（本明細書に記載及び／又は参照されたものを超える）が、そのような実施態様の結果として可能になることもあることを、理解されたい。
【０１６０】
図９は、例示的なコンピュータシステムを表し、その中では、本明細書で議論される方法の何れか１つ以上を機械に実行させるための一連の命令が、実行され得る。代替的な実施態様において、前記機械は、ＬＡＮ、イントラネット、エクストラネット、又はインターネットにおいて他の機械に接続されてもよい（例えば、ネットワークに繋げられる）。前記機械は、クライアントサーバネットワーク環境におけるサーバとして動作し得る。前記機械は、自動車、パーソナルコンピュータ（ＰＣ）、セットトップボックス（ＳＴＢ）、サーバ、ネットワークルーター、スイッチ又はブリッジ、又は、その機械によって得られるべき動作を特定する一連の命令（連続的、又はその他）を実行することができる任意の機械に統合され、及び／又はそれらと通信状態にあるコンピューティング装置であり得る。更に、機械は１つしか示されていないが、用語「機械」はまた、本明細書で議論される方法の１以上を実行するために一連（又は複数のセットの）命令を個々に又は組み合わせて実行する機械の集合を含むと、考慮される。
【０１６１】
典型的なコンピュータシステム（９００）は、バス（９０８）を介して互いに通信する、処理システム（プロセッサ）（９０２）、メインメモリ（９０４）（例えば読み出し専用メモリ（ＲＯＭ）、フラッシュメモリ、シンクロナスＤＲＡＭ（ＳＤＲＡＭ）などのダイナミックランダムアクセスメモリー（ＤＲＡＭ））、スタティックメモリー（９０６）（例えば、フラッシュメモリ、スタティックランダムアクセスメモリー（ＳＲＡＭ））、及びデータ記憶装置（９１６）を含んでいる。
【０１６２】
プロセッサ（９０２）は、マイクロプロセッサや中央処理装置などの１以上の処理装置を表わす。より具体的に、プロセッサ（９０２）は、複合命令セットコンピューティング（ＣＩＳＣ）マイクロプロセッサ、縮小命令セットコンピューティング（ＲＩＳＣ）マイクロプロセッサ、超長命令語（ＶＬＩＭ）マイクロプロセッサ、又は他の命令セットを実施するプロセッサ或いは命令セットの組み合わせを実施するプロセッサであり得る。プロセッサ（９０２）はまた、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、デジタル信号プロセッサ（ＤＳＰ）、ネットワークプロセッサなどの１以上の専用処理装置でもよい。プロセッサ（９０２）は、本明細書で議論される動作を行なうための命令（９２６）を実行するように構成される。
【０１６３】
コンピュータシステム（９００）は更にネットワークインターフェース装置（９２２）を含み得る。コンピュータシステム（９００）はまた、ビデオディスプレイユニット（９１０）（例えば、液晶ディスプレイ（ＬＣＤ）又はブラウン管（ＣＲＴ））、英数字入力装置（９１２）（例えばキーボード）、カーソル制御装置（９１４）（例えばマウス）、及び信号発生装置（９２０）（例えばスピーカー）を含んでもよい。
【０１６４】
データ記憶装置（９１６）は、本明細書に記載される方法又は機能の何れか１以上を実施し得る命令（９２６）の１以上のセットが保存されている、コンピュータ可読媒体（９２４）を含んでもよい。命令（９２６）はまた、コンピュータ可読媒体も構成するコンピュータシステム（９００）、メインメモリ（９０４）、及びプロセッサ（９０２）による命令の実行中に、メインメモリ（９０４）及び／又はプロセッサ（９０２）内で完全に又は少なくとも部分的に存在する場合がある。命令（９２６）は、ネットワークインターフェース装置（９２２）を介してネットワーク上で更に送信又は受信されてもよい。
【０１６５】
コンピュータ可読記憶媒体（９２４）は単一の媒体として例示的実施形態において示されている一方、用語「コンピュータ可読記憶媒体」は、命令の１以上のセットを保存する単一又は複数の媒体（例えば、集中型データベース又は分散型データベース、及び／又は関連するキャッシュとサーバ）を含むと考慮される。用語「コンピュータ可読記憶媒体」はまた、機械による実行のための一連の命令の保存、コード化、又は搬送が可能であるとともに、本開示の方法の何れか１以上を機械に行わせる、任意の媒体を含むと考慮される。用語「コンピュータ可読記憶媒体」は従って、限定されないがソリッドステートメモリ、光学媒体、及び磁気媒体を含むと考慮される。
【０１６６】
上述において、多数の詳細が説明されている。しかしながら、本開示の利益を得る当業者にとっては、これら具体的な詳細無しに実施形態が実行され得ることは、明白である。幾つかの例において、周知の構造及び装置が、詳細にというよりは、記載の曖昧さを避けるためにブロック図の形態で示されている。
【０１６７】
詳細な記載の一部は、コンピュータメモリー内のデータビット上での動作のアルゴリズム及び記号表示に関して示されている。このようなアルゴリズムの記載及び表示は、自身の作業の内容を他の当業者へと最も効果的に伝えるための、データ処理の分野における当業者により使用される手段である。アルゴリズムはここで、及び一般的には、所望の結果に通じる工程の首尾一貫した順序であると想到されている。この工程は、物理量の物理的な操作をリクエストする工程である。通常、必ずしもではないが、これらの量は、保存、転送、結合、比較、及びその他に操作されることが可能な電気又は磁気の信号の形態を取る。これらの信号をビット、値、要素、記号、文字、用語、数などと称することは、主に共通の使用により、時折好都合であることが分かった。
【０１６８】
しかし、これら及び同様の用語全ては、適切な物理量に関連付けられるとともに、このような量に適用される単なる都合の良い標識であることを、心に留めておきたい。別段の定めの無い限り、上述の議論から明白なように、記載の全体にわたり、「受け取る」、「処理する」、「証明する」、「識別する」などの用語を利用する議論は、コンピュータシステムのレジスター及びメモリ内の物理（例えば電子）量として表示されるデータを、コンピュータシステムのメモリ又はレジスター或いは他のそのような情報ストレージ、送信又は表示装置内で物理量として同様に表示される他のデータへと操作及び変形させる、コンピュータシステム、又は同様の電子コンピューティング装置の動作及びプロセスを指す。
【０１６９】
本開示の態様及び実施態様はまた、本明細書における動作を行なうための装置に関係する。特定の実施態様において、この装置は、リクエストされた目的のために特別に構築されてもよい。そのようなコンピュータプログラムは、フロッピーディスク、光ディスク、ＣＤ−ＲＯＭ、及び光磁気ディスクを含む任意のタイプのディスク、読み出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリー（ＲＡＭ）、ＥＰＲＯＭ、ＥＥＰＲＯＭ、磁気又は光カード、或いは電子命令を保存するのに適した任意のタイプの媒体を含むがこれらに限定されない、コンピュータ可読記憶媒体に保存され得る。
【０１７０】
本開示は、任意の特定のプログラミング言語に関して記載されていないことを、理解されたい。様々なプログラミング言語が、本明細書に記載されるような開示の教示を実施するために使用され得ることが、認識される。
【０１７１】
上記の説明は例示的なものであり、限定的なものではないことが意図されていることを理解されたい。他の多くの実施形態が、上述の記載を読み且つ理解することで当業者に明白となる。更に、上述の技術は、実際に任意のタイプのデータに適用され得る。それ故、本開示の範囲は、添付の請求項が題される完全な範囲の同等物と共に、添付の請求項を参照することで定められるべきである。
【図１】
2018505501.tif 000003
【図２】
2018505501.tif 000004
【図３】
2018505501.tif 000005
【図４】
2018505501.tif 000006
【図５】
2018505501.tif 000007
【図６】
2018505501.tif 000008
【図７】
2018505501.tif 000009
【図８】
2018505501.tif 000010
【図９】
2018505501.tif 000011
【国際調査報告】
2018505501.tif 000012
2018505501.tif 000013
2018505501.tif 000014