(57)【特許請求の範囲】
【請求項１】
データ解析システムでデータブロックを処理するコンピュータで実施する方法であって、
複数の連続するデータブロックをブロックキャッシュに格納することであって、各データブロックは、１つ以上のデータレコードを含み、各データレコードは、１つ以上の値および前記データレコードの終わりをマークするレコードマーカーを含む、ことと、
前記ブロックキャッシュ内のデータブロックをワーカースレッドに割り当てることと、
前記ワーカースレッドによって前記データブロックを分析して、前記データブロック内に含まれている前記１つ以上のデータレコードを識別することと、
前記データブロックが正しく分析されたかどうかを決定することであって、
前記データブロック内の真の最初のレコードマーカーロケーションを決定すること、
推定された最初のレコードマーカーロケーションが前記真の最初のレコードマーカーロケーションと一致するかどうかを決定すること、および
前記推定された最初のレコードマーカーロケーションが前記真の最初のレコードマーカーロケーションと一致することに応答して、前記データブロックが正しく分析されたと決定すること
によって、決定することと、
前記データブロックが正しく分析されたとの決定に応じて、前記データブロック内に含まれている前記１つ以上のデータレコードを、前記データ解析システムで実行されているデータ解析ワークフローに提供することと
を含む、方法。
【請求項２】
前記複数の連続するデータブロックを前記ブロックキャッシュに格納することは、
複数の入出力（Ｉ／Ｏ）要求をデータソースに発行することであって、前記複数のＩ／Ｏ要求は複数の連続して順序付けされたデータブロックを要求する、ことと、
前記複数のＩ／Ｏ要求に応答して、前記データソースから前記複数の連続して順序付けされたデータブロックを受信することであって、前記複数の連続して順序付けされたデータブロックは、当該データブロックの連続した順序と異なる順序で、前記データソースから受信される、ことと、
前記受信した複数の連続して順序付けされたデータブロックを前記ブロックキャッシュに格納することと
を含む、請求項１に記載の方法。
【請求項３】
前記複数の連続して順序付けされたデータブロックは、前記データブロックの前記連続した順序に応じて決定された前記ブロックキャッシュ内のロケーションに格納される、請求項２に記載の方法。
【請求項４】
複数のワーカースレッドがあり、前記ブロックキャッシュ内のデータブロックをワーカースレッドに割り当てることは、
複数のデータブロックを複数のワーカースレッドに割り当てることであって、前記複数のワーカースレッドは、前記割り当てられた複数のデータブロックを同時に分析するように適合されている、こと
を含む、請求項１に記載の方法。
【請求項５】
前記ワーカースレッドによって前記データブロックを分析して、前記データブロック内に含まれている前記１つ以上のデータレコードを識別することは、
前記データブロックをスキャンして前記データブロック内の最初のレコードマーカーロケーションを識別することと、
前記最初のレコードマーカーロケーションの後に位置する前記データブロック内のデータレコードを分析することと、
前記ワーカースレッドにより、次の連続するデータブロック内の最初のレコードマーカーロケーションの前に出現する当該次の連続するデータブロック中のデータレコードを分析すること
を含む、請求項１に記載の方法。
【請求項６】
前記データブロックの前記推定された最初のレコードマーカーロケーションは前記データブロックを分析する前記ワーカースレッドによって見出され、前記データブロック内の前記真の最初のレコードマーカーロケーションは他のワーカースレッドにより見出される、請求項１に記載の方法。
【請求項７】
前記推定された最初のレコードマーカーロケーションが前記真の最初のレコードマーカーロケーションと一致しないことに応答して、前記データブロックが正しく分析されなかったと決定することと、
前記データブロックが正しく分析されなかったと決定することに応じて、前記データブロック内の前記真の最初のレコードマーカーロケーションを使用して前記データブロックを再分析することと
をさらに含む、請求項１に記載の方法。
【請求項８】
データブロックを処理するためのコンピュータ実装されたデータ解析システムであって、
コンピュータプログラム命令を実行するためのコンピュータプロセッサと、
非一時的コンピュータ可読メモリであって、
複数の連続するデータブロックをブロックキャッシュに格納することであって、各データブロックは、１つ以上のデータレコードを含み、各データレコードは、１つ以上の値および前記データレコードの終わりをマークするレコードマーカーを含む、ことと、
前記ブロックキャッシュ内のデータブロックをワーカースレッドに割り当てることと、
前記ワーカースレッドによって前記データブロックを分析して、前記データブロック内に含まれている前記１つ以上のデータレコードを識別することと、
前記データブロックが正しく分析されたかどうかを決定することであって、
前記データブロック内の真の最初のレコードマーカーロケーションを決定すること、
推定された最初のレコードマーカーロケーションが前記真の最初のレコードマーカーロケーションと一致するかどうかを決定すること、および
前記推定された最初のレコードマーカーロケーションが前記真の最初のレコードマーカーロケーションと一致することに応答して、前記データブロックが正しく分析されたと決定すること
によって、決定することと、
前記データブロックが正しく分析されたとの決定に応じて、前記データブロック内に含まれている前記１つ以上のデータレコードを、前記データ解析システムで実行されているデータ解析ワークフローに提供することと
を含む動作を実行するために前記コンピュータプロセッサによって実行可能なコンピュータプログラム命令を格納する、非一時的コンピュータ可読メモリと
を備えた、システム。
【請求項９】
前記複数の連続するデータブロックを前記ブロックキャッシュに格納することは、
複数の入出力（Ｉ／Ｏ）要求をデータソースに発行することであって、前記複数のＩ／Ｏ要求は複数の連続して順序付けされたデータブロックを要求する、ことと、
前記複数のＩ／Ｏ要求に応答して、前記データソースから前記複数の連続して順序付けされたデータブロックを受信することであって、前記複数の連続して順序付けされたデータブロックは、当該データブロックの連続した順序と異なる順序で、前記データソースから受信される、ことと、
前記受信した複数の連続して順序付けされたデータブロックを前記ブロックキャッシュに格納することと
を含む、請求項８に記載のシステム。
【請求項１０】
前記複数の連続して順序付けされたデータブロックは、前記データブロックの前記連続した順序に応じて決定された前記ブロックキャッシュ内のロケーションに格納される、請求項９に記載のシステム。
【請求項１１】
複数のワーカースレッドがあり、前記ブロックキャッシュ内のデータブロックをワーカースレッドに割り当てることは、
複数のデータブロックを複数のワーカースレッドに割り当てることであって、前記複数のワーカースレッドは、前記割り当てられた複数のデータブロックを同時に分析するように適合されている、こと
を含む、請求項８に記載のシステム。
【請求項１２】
前記ワーカースレッドによって前記データブロックを分析して、前記データブロック内に含まれている前記１つ以上のデータレコードを識別することは、
前記データブロックをスキャンして前記データブロック内の最初のレコードマーカーロケーションを識別することと、
前記最初のレコードマーカーロケーションの後に位置する前記データブロック内のデータレコードを分析することと、
前記ワーカースレッドにより、次の連続するデータブロック内の最初のレコードマーカーロケーションの前に出現する当該次の連続するデータブロック中のデータレコードを分析すること
を含む、請求項８に記載のシステム。
【請求項１３】
前記データブロックの前記推定された最初のレコードマーカーロケーションは前記データブロックを分析する前記ワーカースレッドによって見出され、前記データブロック内の前記真の最初のレコードマーカーロケーションは他のワーカースレッドにより見出される請求項８に記載のシステム。
【請求項１４】
前記推定された最初のレコードマーカーロケーションが前記真の最初のレコードマーカーロケーションと一致しないことに応答して、前記データブロックが正しく分析されなかったと決定することと、
前記データブロックが正しく分析されなかったと決定することに応じて、前記データブロック内の前記真の最初のレコードマーカーロケーションを使用して前記データブロックを再分析することと
をさらに含む、請求項８に記載のシステム。
【請求項１５】
データ解析システム内でデータブロックを処理するために実行可能なコンピュータプログラム命令を格納する非一時的コンピュータ可読メモリであって、前記命令は、
複数の連続するデータブロックをブロックキャッシュに格納することであって、各データブロックは、１つ以上のデータレコードを含み、各データレコードは、１つ以上の値および前記データレコードの終わりをマークするレコードマーカーを含む、ことと、
前記ブロックキャッシュ内のデータブロックをワーカースレッドに割り当てることと、
前記ワーカースレッドによって前記データブロックを分析して、前記データブロック内に含まれている前記１つ以上のデータレコードを識別することと、
前記データブロックが正しく分析されたかどうかを決定することであって、
前記データブロック内の真の最初のレコードマーカーロケーションを決定すること、
推定された最初のレコードマーカーロケーションが前記真の最初のレコードマーカーロケーションと一致するかどうかを決定すること、および
前記推定された最初のレコードマーカーロケーションが前記真の最初のレコードマーカーロケーションと一致することに応答して、前記データブロックが正しく分析されたと決定すること
によって、決定することと、
前記データブロックが正しく分析されたとの決定に応じて、前記データブロック内に含まれている前記１つ以上のデータレコードを、前記データ解析システムで実行されているデータ解析ワークフローに提供することと
を含む動作を実行するために実行可能である、非一時的コンピュータ可読メモリ。
【請求項１６】
前記複数の連続するデータブロックを前記ブロックキャッシュに格納することは、
複数の入出力（Ｉ／Ｏ）要求をデータソースに発行することであって、前記複数のＩ／Ｏ要求は複数の連続して順序付けされたデータブロックを要求する、ことと、
前記複数のＩ／Ｏ要求に応答して、前記データソースから前記複数の連続して順序付けされたデータブロックを受信することであって、前記複数の連続して順序付けされたデータブロックは、当該データブロックの連続した順序と異なる順序で、前記データソースから受信される、ことと、
前記受信した複数の連続して順序付けされたデータブロックを前記ブロックキャッシュに格納することと
を含む、請求項１５に記載の非一時的コンピュータ可読メモリ。
【請求項１７】
複数のワーカースレッドがあり、前記ブロックキャッシュ内のデータブロックをワーカースレッドに割り当てることは、
複数のデータブロックを複数のワーカースレッドに割り当てることであって、前記複数のワーカースレッドは、前記割り当てられた複数のデータブロックを同時に分析するように適合されている、こと
を含む、請求項１５に記載の非一時的コンピュータ可読メモリ。
【請求項１８】
前記ワーカースレッドによって前記データブロックを分析して、前記データブロック内に含まれている前記１つ以上のデータレコードを識別することは、
前記データブロックをスキャンして前記データブロック内の最初のレコードマーカーロケーションを識別することと、
前記最初のレコードマーカーロケーションの後に位置する前記データブロック内のデータレコードを分析することと、
前記ワーカースレッドにより、次の連続するデータブロック内の最初のレコードマーカーロケーションの前に出現する当該次の連続するデータブロック中のデータレコードを分析すること
を含む、請求項１５に記載の非一時的コンピュータ可読メモリ。
【請求項１９】
前記データブロックの前記推定された最初のレコードマーカーロケーションは前記データブロックを分析する前記ワーカースレッドによって見出され、前記データブロック内の前記真の最初のレコードマーカーロケーションは他のワーカースレッドにより見出される、請求項１５に記載の非一時的コンピュータ可読メモリ。
【請求項２０】
前記推定された最初のレコードマーカーロケーションが前記真の最初のレコードマーカーロケーションと一致しないことに応答して、前記データブロックが正しく分析されなかったと決定することと、
前記データブロックが正しく分析されなかったと決定することに応じて、前記データブロック内の前記真の最初のレコードマーカーロケーションを使用して前記データブロックを再分析することと
をさらに含む、請求項１５に記載の非一時的コンピュータ可読メモリ。
【発明の詳細な説明】
【技術分野】
【０００１】
説明される実施形態は、一般に、コンピュータシステムでのデータを処理することに関し、特に、ストレージデバイスから取り出されたデータのブロックを非同期に処理することに関する。
【背景技術】
【０００２】
データ解析は、大きなデータセットからビジネス価値のある情報を取り出すことを含む。たとえば、小規模企業は、専用のコンピューティングおよび人的資源を使用するサードパーティのデータ解析環境を利用して、外部データプロバイダー、内部データソース（ローカルコンピュータのファイルなど）、ビッグデータストア、クラウドベースのデータ（ソーシャルメディア情報など）のような、様々なデータソースからの膨大な量のデータを、収集、処理、および解析する。データ解析で使用されるこのような大きなデータセットを、有用な定量的および定性的情報を抽出する方法で処理することは、典型的に、強力なコンピューティングプラットフォームに実装された複雑なソフトウェアツールが必要である。
【０００３】
さらに、異なるデータソースからのデータの大量のセットにアクセスし、処理し、解析するにために、効率的なデータ処理技術が必要とされる。さもないと、パフォーマンスのボトルネックが発生し、データ解析プラットフォームの機能を妨げ、データの処理を遅延させ、データから抽出される情報の品質を低下させる可能性が生じる場合がある。たとえば、データ解析システムへの入力のためにデータレコードが処理されるスループットは、重要な考慮事項である。データレコードがゆっくり処理される場合、データレコードを消費するデータ解析プラットフォームの部分がレコードを待機する必要があり、プラットフォームを通じて遅延が発生し得る。
【発明の概要】
【０００４】
上記およびその他の問題は、データ解析システムでデータブロックを処理するための方法、コンピュータ実装のデータ解析システム、およびコンピュータ読み取り可能なメモリによって対処される。本方法の一実施形態は、複数の連続するデータブロックをブロックキャッシュに格納することを含む。各データブロックは、１つ以上のデータレコードを含む。各データレコードは、１つ以上の値、およびデータレコードの終わりをマークするレコードマーカーを含む。この方法は、ブロックキャッシュ内のデータブロックをワーカースレッドに割り当てることをさらに含む。この方法は、ワーカースレッドによってデータブロックを分析（parse）して、データブロック内に含まれている１つ以上のデータレコードを識別することをさらに含む。この方法は、データブロックが正しく分析されたかどうかを決定することをさらに含む。この方法は、データブロックが正しく分析されたとの決定に応じて、データブロック内に含まれている１つ以上のデータレコードを、データ解析システムで実行されているデータ解析ワークフローに提供することも含む。
【０００５】
コンピュータ実装されたデータ解析システムの一実施形態は、コンピュータプログラム命令を実行するためのコンピュータプロセッサを含む。このシステムは、操作を実行するコンピュータプロセッサによって実行可能なコンピュータプログラム命令を格納する非一時的なコンピュータ可読メモリも含む。操作は、ブロックキャッシュに複数の連続するデータブロックを格納することを含む。各データブロックは、１つ以上のデータレコードを含む。各データレコードは、１つ以上の値、およびデータレコードの終わりをマークするレコードマーカーを含む。操作は、ブロックキャッシュ内のデータブロックをワーカースレッドに割り当てることをさらに含む。この操作は、ワーカースレッドによってデータブロックを分析して、データブロック内に含まれている１つ以上のデータレコードを識別することをさらに含む。この操作は、データブロックが正しく分析されたかどうかを決定することをさらに含む。この操作は、データブロックが正しく分析されたとの決定に応じて、データブロック内に含まれている１つ以上のデータレコードを、データ解析システムで実行するデータ解析ワークフローに提供することも含む。
【０００６】
非一時的なコンピュータ可読メモリの実施形態は、実行可能なコンピュータプログラム命令を格納する。この命令は、操作を実行するために実行可能である。操作は、ブロックキャッシュに複数の連続するデータブロックを格納することを含む。各データブロックは、１つ以上のデータレコードを含む。各データレコードは、１つ以上の値、およびデータレコードの終わりをマークするレコードマーカーを含む。この操作は、ブロックキャッシュ内のデータブロックをワーカースレッドに割り当てることをさらに含む。この操作は、ワーカースレッドによってデータブロックを分析して、データブロック内に含まれている１つ以上のデータレコードを識別することをさらに含む。この操作は、データブロックが正しく分析されたかどうかを決定することをさらに含む。この操作は、データブロックが正しく分析されたとの決定に応じて、データブロック内に含まれている１つ以上のデータレコードを、データ解析システムで実行するデータ解析ワークフローに提供することも含む。
【図面の簡単な説明】
【０００７】
【図１】図１は、一実施形態によるデータ解析システムを含むデータ解析環境を示すブロック図である。
【図２】図２は、一実施形態による、データを処理するデータ解析システムを使用して作成されたワークフローを示すブロック図である。
【図３】図３は、実施形態による図１のデータ解析システムとして使用するための典型的なコンピュータシステムの機能図を示すハイレベルブロック図である。
【図４】図４は、一実施形態によるデータ解析システムのデータ解析アプリケーションのより詳細な図を示すブロック図である。
【図５】図５は、一実施形態によるデータ解析アプリケーションのデータ受信モジュールのより詳細な図を示すブロック図である。
【図６】図６は、データブロックとデータレコードとの間の例示的な関係を示す図である。
【図７】図７は、一実施形態による、データソースから受信したデータブロックを処理する方法を示すフローチャートである。
【図８】図８は、一実施形態によるデータブロックを分析する方法を示すフローチャートである。
【０００８】
図面は、例示のみを目的としてさまざまな実施形態を示す。当業者は、本明細書に例示された構造および方法の代替的実施形態が、本明細書に記載の本発明原理から逸脱することなく利用することができることを以下の説明から容易に認識する。種々の図面における同様の参照記号および表示は、同様の要素を指す。
【発明を実施するための形態】
【０００９】
図１は、一実施形態によるデータ解析システム１１０を含むデータ解析環境１００を示すブロック図である。環境１００は、ネットワーク１３０を介してデータ解析システム１１０に接続された複数のデータソース１２０をさらに含む。例示された環境１００は、複数のデータソース１２０に結合された１つのデータ解析システム１１０のみを含むが、実施形態は、複数のデータ解析システムおよび単一のデータソースを有することができる。
【００１０】
上述のように、データソース１２０は、電子データをデータ解析システム１１０に提供する。データソース１２０は、ハードディスクドライブ（ＨＤＤ）またはソリッドステートドライブ（ＳＳＤ）などのストレージデバイス、複数のストレージデバイスへのアクセスを管理および提供するコンピュータ、ストレージエリアネットワーク（ＳＡＮ）、データベース、またはクラウドストレージシステムであり得る。データソース１２０は、別のソースからデータを取り出すことができるコンピュータシステムであってもよい。データソース１２０は、データ解析システム１１０から離れていてもよく、ネットワーク１３０を介してデータを提供してもよい。さらに、データソース１２０の一部またはすべてはデータ解析システムに直接結合され、ネットワーク１３０を介してデータを渡すことなく、データを提供してもよい。
【００１１】
データソース１２０によって提供されるデータは典型的に、データレコードに編成され、各データレコードは１つ以上の値を含む。たとえば、データソース１２０によって提供されるデータレコードは、一連のコンマ区切りされた値を含む場合がある。データは、データ解析システム１００を使用する企業に関連する情報を記述する。例えば、データソース１２０からのデータは、ウェブサイト上でアクセス可能なコンテンツおよび／またはソーシャルメディアアプリケーションとのコンピュータベースの相互作用（例えば、クリック追跡データ）を記述することができる。
【００１２】
データ解析システム１１０は、大量のデータを処理および解析するために利用されるコンピュータベースのシステムである。データは、ネットワーク１３０を介して複数のデータソース１２０から回収（collect）、収集（gather）、またはアクセスされる。データ解析システム１１０は、多種多様なデータソースからのデータにアクセスし、準備し、混合し、解析する際に使用されるスケーラブルなソフトウェアツールおよびハードウェアリソースを実装することができる。例えば、データ解析システム１１０は、データ集約型のプロセスとワークフローの実行をサポートする。データ解析システム１１０は、本明細書で説明される非同期データ処理技術を含むデータ解析機能を実装するために使用されるコンピューティングデバイスとすることができる。
【００１３】
データ解析システム１１０は、データ解析アプリケーション１４０として図１に示される１つ以上のソフトウェアアプリケーションをサポートするように構成することもできる。データ解析アプリケーション１４０は、１つ以上のデータソース１２０から取得した大量のデータを処理および解析する。場合によっては、データ解析アプリケーション１４０は、複数のエンドユーザにネットワークまたはクラウドベースのデータ解析ツールおよびマクロへのアクセスをサポートするソフトウェアを提供する。一例として、データ解析アプリケーション１４０は、ユーザが、モバイルアプリケーションストアまたは他のクラウドベースのサービスと同様の方法で、解析を共有、閲覧、および消費することを可能にする。解析データ、マクロ、およびワークフローは、たとえば、データ解析システム１１０の他のユーザがアクセスできる、小規模でカスタマイズ可能な解析アプリケーション（つまり、アプリ）としてパッケージ化されて実行されることができる。場合によっては、公開された解析アプリへのアクセスは、データ解析システム１１０によって管理されることができる。つまり、アクセスを許可することまたは取り消すことにより、アクセス制御およびセキュリティ機能を提供する。データ解析アプリケーション１４０は、作成、展開、公開、反復、更新などの解析アプリに関連付けられた機能を実行できる。さらに、データ解析アプリケーション１４０は、アクセス、準備、ブレンド、解析、および解析結果を出力する機能など、データ解析に関係するさまざまな段階で実行される機能をサポートできる。
【００１４】
データ解析アプリケーション１４０はまた、視覚的グラフィカルユーザーインターフェース（ＧＵＩ）を介して、反復可能なワークフローを設計および実行するソフトウェアツールをサポートすることができる。一例として、データ解析アプリケーション１４０に関連付けられたＧＵＩは、データ混合、データ処理、および高度なデータ解析のためのドラッグアンドドロップのワークフロー環境を提供する。さらに、ワークフローには、特定の処理操作またはデータ解析機能を実行する一連のデータ処理ツールを含めることができる。ワークフローの一部である各ツールは、ツールに固有のデータに関連する機能を実行する。例として、ワークフローは、入力／出力操作、準備操作、参加操作、予測的操作、空間的操作、調査操作、ならびに分析および変換（parse and transform）操作のうちの１つ以上を含むさまざまなデータ解析機能を実装するツールを含めることができる。ワークフローの詳細は、図２に関連して説明される。
【００１５】
データ解析アプリケーション１４０は、データソース１２０からデータのブロックを読み込む。たとえば、データ解析アプリケーション１４０は、ＳＳＤからデータのブロックを読み込み得る。データ解析アプリケーション１４０は、各データブロックを処理して、そこに含まれるデータレコードを取り出す。これらのデータレコードは、データ解析アプリケーション１４０によって実装されるデータ解析ワークフローによって処理される。
【００１６】
一実施形態では、データ解析アプリケーション１４０は、データソース１２０から受信されたデータの複数のブロックを非同期的に処理する。データ解析アプリケーション１４０は、並行して実行している複数のワーカースレッドを使用して、データブロックを同時に処理し、データレコードを生成する。典型的に各データブロックは複数のデータレコードを含み、しばしばデータレコードの境界はデータブロックの境界と一致しない。したがって、データレコードは２つの隣接するブロックにまたがること場合がある。さらに、スレッドはデータブロックを順不同で処理でき、そして、異なるスレッドが隣接するブロックを処理する場合がある。
【００１７】
データ解析アプリケーション１４０は、特定のデータレコードを推論的に処理し、その後にその処理が正しいことを確認することにより、隣接するブロックにまたがるデータレコードを把握する。推論的処理が正しくない場合、誤って処理されたデータレコードの部分のみを再処理する必要がある。以下でより詳細に説明するこの手法は、データ解析アプリケーション１４０が、データブロックをデータレコードに処理し、データレコードを高スループットでデータ解析ワークフローに提供することを可能にする。スループットは、他の手法を使用した場合の約０．１ＧＢ／秒と比較して、一実施形態では２．０ＧＢ／秒である。実際、この技術は典型的に、データソース１２０がデータブロックを物理的に提供できるレートに等しい持続的なデータ転送をサポートできる。この技法は、データ解析アプリケーション１４０が、データブロックの処理の遅延によるパフォーマンスペナルティを受けることなく、効率的に動作することを可能にする。
【００１８】
ネットワーク１３０は、データ解析システム１１０とデータソース１２０との間の通信経路を表す。一実施形態では、ネットワーク１３０はインターネットであり、標準の通信技術および／またはプロトコルを使用する。したがって、ネットワーク１３０は、イーサネット、８０２．１１、ＷｉＭＡＸ（ｗｏｒｌｄｗｉｄｅ  ｉｎｔｅｒｏｐｅｒａｂｉｌｉｔｙ  ｆｏｒ  ｍｉｃｒｏｗａｖｅ  ａｃｃｅｓｓｓ）、３Ｇ、ロングタームエボリューション（ＬＴＥ）、デジタル加入者線（ＤＳＬ）、非同期転送モード（ＡＴＭ）、ＩｎｆｉｎｉＢａｎｄ、ＰＣＩ Ｅｘｐｒｅｓｓ Ａｄｖａｎｃｅｄ Ｓｗｉｔｃｈｉｎｇなどの技術を使用するリンクを含むことができる。同様に、ネットワーク１３０で使用されるネットワーキングプロトコルは、マルチプロトコルラベルスイッチング（ＭＰＬＳ）、伝送制御プロトコル／インターネットプロトコル（ＴＣＰ／ＩＰ）、ユーザーデータグラムプロトコル（ＵＤＰ）、ハイパーテキストトランスポートプロトコル（ＨＴＴＰ）、シンプルメール転送プロトコル（ＳＭＴＰ）、ファイル転送プロトコル（ＦＴＰ）などを含むことができる。
【００１９】
ネットワーク１３０を介して交換されるデータは、ハイパーテキストマークアップ言語（ＨＴＭＬ）、拡張マークアップ言語（ＸＭＬ）などを含む技術および／またはフォーマットを使用して表されることができる。さらに、セキュアソケットレイヤー（ＳＳＬ）、トランスポートレイヤーセキュリティ（ＴＬＳ）、仮想プライベートネットワーク（ＶＰＮ）、インターネットプロトコルセキュリティ（ＩＰｓｅｃ）などの確立された暗号化技術を使用して、すべてまたは一部のリンクが暗号化されることができる。別の実施形態では、エンティティは、上記の技術の代わりに、またはそれに加えて、カスタムおよび/または専用のデータ通信技術を使用することができる。
【００２０】
図２は、一実施形態による、データを処理するデータ解析システム１１０を使用して作成されたワークフロー２００を示すブロック図である。一実施形態では、ワークフロー２００は、データ解析システム１１０のＧＵＩによってサポートされる視覚的なワークフロー環境を使用して作成される。視覚的なワークフロー環境は、ワークフローを設計するためのソフトウェアコードを提供する必要をなくす、およびワークフローによって実装される複雑な数式を識別する必要をなくす、ドラッグアンドドロップツールのセットを動作させる。別の実施形態では、ワークフロー２００は、拡張マークアップ言語（ＸＭＬ）文書などの文書で作成および記述される。ワークフロー２００は、データ解析システム１１０のコンピュータデバイスによって実行される。しかしながら、他の実施形態では、ワークフロー２００は、ネットワーク（例えば、ネットワーク１３０）を介してデータ解析システム１１０に通信可能に接続され得る別のコンピュータデバイスに配備される。
【００２１】
ワークフローは、特定の処理操作またはデータ解析機能を実行する一連のツールを含むことができる。一般的な例として、ワークフローのツールは、入力／出力操作、準備操作、参加操作、予測的操作、空間的操作、調査操作、ならびに分析および変換操作のうちの、データ解析機能の１つ以上を実行できる。ワークフローの実装は、データ解析プロセスの定義、実行、自動化を含むことができ、データがワークフロー内の各ツールに渡され、各ツールは受信したデータに対してそれぞれの処理操作を実行する。個々のレコードの集約グループを含むパケットは、ワークフローのツールを通して渡されることができ、このことは、個々の処理操作がデータに対してより効率的に動作することを可能にする。このような集約技術は、大量のデータを処理する場合でも、ワークフローの開発と実行の速度を上げることができる。ワークフローは、指定されたツールの操作シーケンスを指定して、反復可能な一連の操作を定義または構造化できる。場合によっては、ワークフローに含まれるツールが線型順序で実行される。別の場合、複数のツールは並行して実行される。
【００２２】
図示のように、図２のワークフロー２００は、入力ツール２０５および２０６、ならびにブラウズツール２３０として示される入力／出力ツールを含む。入力ツール２０５および２０６は、特定のデータソース１２０からのレコードにアクセスするように機能する。入力ツール２０５および２０６は、アクセスされたレコードをワークフローに取り込み、ワークフロー２００の後続のツールにレコードを提供する。この例では、入力ツール２０５はアクセスされたレコードをフィルタツール２１０に提供し、入力ツール２０６はアクセスされたレコードを選択ツール２１１に提供する。ブラウズツール２３０は、ワークフロー２００の最後に位置し、ワークフロー２００の上流のツールのそれぞれの実行から生じる出力を受け取る。この例では、ブラウズツール２３０は、ワークフロー２００の最後に配置されているが、ワークフローの任意の点にブラウズツール２３０が追加され、ワークフローの上流ツールの実行の様々な結果をレビューおよび検証することができる。
【００２３】
図２の例を続けると、ワークフロー２００は、フィルタツール２１０、選択ツール２１１、フォーミュラツール２１５、およびサンプルツール２１２として示される準備ツールを含む。フィルタツール２１０は、式に基づいてレコードをクエリし、式を満たすレコードを含む真のストリームおよび式を満たさないレコードを含む偽のストリームの２つのストリームにデータを分ける。選択ツール２１１は、フィールドの選択、選択解除、並べ替え、および名前変更、フィールドタイプまたはサイズの変更、ならびに説明の割り当てを行うために使用されることができる。フォーミュラツール２１５は、多種多様な計算および/または演算を実行する１つ以上の式を使用してフィールドを作成または更新する。サンプルツール２１２は、受信したレコードのストリームを、レコードの数、割合、またはランダムなセットに限定する。ワークフロー２００は、複数のデータソースをブレンドするジョインツール２２０も含む。具体的には、ジョインツール２２０は、共通のフィールド（またはレコード位置）に基づいて２つの入力データストリームを組み合わせる。
【００２４】
図２のワークフロー２００は、さらなる解析で使用されるフォーマットにデータを再構築および再形成することができる分析および変換ツールであるサマライズツール２２５を含むように示されている。サマライズツール２２５は、グループ化、合計、カウント、空間処理、および文字列連結によってデータの要約化を実行することもできる。一実施形態では、サマライズツール２２５によって生成された出力は、計算の結果を含む。
【００２５】
いくつかの実施形態では、ワークフロー２００の実行は、入力ツール２０５が、フィルタツール２１０およびフォーミュラツール２１５を通じて、すべてのレコードが処理されてジョインツール２２０に到達するまで、レコードを一度に１つ渡すことを生じさせる。その後、入力ツール２０６は、選択ツール２１１およびサンプルツール２１２を通じて、レコードが同じジョインツール２２０に渡されるまで、レコードを一度に１つ渡し始める。ワークフロー２００のいくつかの個々のツールは、データの最後のブロックを処理しながらデータのブロックの読み込みを開始したり、ソートツールなどのコンピュータ集約的な操作を複数の部分に分割したりするなど、独自の並列操作を実装する機能を持つことができる。ただし、一部の既存のワークフローテクニックでは、レコードのセットからの各レコードは、ワークフローのツールが複数のレコードを必要とする処理操作（たとえば、ソートツール、ジョインツール、サマライズツールなど）に到達するまで、ワークフローの各ツールによってパイプライン方式で一度に１レコードずつ個別に処理される。
【００２６】
図３は、実施形態による図１のデータ解析システム１１０として使用するための典型的なコンピュータシステム３００の機能図を示すハイレベルブロック図である。コンピュータシステム３００は、図２のワークフローを実装するためにデータ解析アプリケーション１４０を実行することができる。
【００２７】
例示されるコンピュータシステムは、チップセット３０４に結合された少なくとも１つのプロセッサ３０２を含む。プロセッサ３０２は、同じダイ上に複数のプロセッサコアを含むことができる。チップセット ３０４は、メモリコントローラハブ３２０および入出力（Ｉ／Ｏ）コントローラハブ３２２を含む。メモリ３０６およびグラフィックスアダプタ３１２はメモリコントローラハブ３２０に結合され、ディスプレイ３１８はグラフィックスアダプタ３１２に結合される。ストレージデバイス３０８、キーボード３１０、ポインティングデバイス３１４、およびネットワークアダプタ３１６は、Ｉ／Ｏコントローラハブ３２２に結合されている。いくつかの別の実施形態では、コンピュータシステム３００は、追加のコンポーネント、より少ないコンポーネント、または異なるコンポーネントを有してもよく、コンポーネントは違うように結合されていてもよい。例えば、コンピュータシステム３００の実施形態は、ディスプレイおよび／またはキーボードを欠く場合がある。加えて、コンピュータシステム３００は、いくつかの実施形態では、ラックマウント型ブレードサーバーとして、またはクラウドサーバーインスタンスとしてインスタンス化されてもよい。
【００２８】
メモリ３０６は、プロセッサ３０２によって使用される命令およびデータを保持する。いくつかの実施形態では、メモリ３６０はランダムアクセスメモリである。ストレージデバイス３０８は、非一時的なコンピュータ可読記憶媒体である。ストレージデバイス３０８は、ＨＤＤ、ＳＳＤ、または他のタイプの非一時的なコンピュータ可読記憶媒体とすることができる。データ解析システム１１０によって処理および解析されたデータは、メモリ３０６および／またはストレージデバイス３０８に格納されることができる。
【００２９】
ポインティングデバイス３１４は、マウス、トラックボール、または他のタイプのポインティングデバイスであり得、キーボード３１０と組み合わせて使用して、データをコンピュータシステム３００に入力する。グラフィックスアダプタ３１２は、ディスプレイ３１８上に画像および他の情報を表示する。いくつかの実施形態では、ディスプレイ３１８は、ユーザ入力および選択を受信するためのタッチスクリーン機能を含む。ネットワークアダプタ３１６は、コンピュータシステム３００をネットワーク１３０に結合する。
【００３０】
コンピュータシステム３００は、本明細書で説明される機能を提供するためのコンピュータモジュールを実行するように適合されている。本明細書で使用される「モジュール」という用語は、特定の機能を提供するためのコンピュータプログラム命令およびその他のロジックを指す。モジュールはハードウェア、ファームウェア、および/またはソフトウェアで実装されることができる。モジュールは、１つ以上のプロセスを含むことができ、および/またはプロセスの一部のみによって提供されることができる。モジュールは典型的に、ストレージデバイス３０８に格納され、メモリ３０６にロードされ、プロセッサ３０２によって実行される。
【００３１】
図４は、一実施形態によるデータ解析システム１１０のデータ解析アプリケーション１４０のより詳細な図を示すブロック図である。データ解析アプリケーション１４０は、データ受信モジュール４１０、ツールモジュール４２０、およびデータ出力モジュール４３０を含む。当業者は、他の実施形態がここで説明したものとは異なるおよび／または他のコンポーネントを有することができ、機能が異なる方法でコンポーネントの間に分散できることを認識するであろう。
【００３２】
データ受信モジュール４１０は、データソース１２０からデータを受信する。一実施形態では、データ受信モジュール４１０は、データソースからデータブロックを受信し、データブロックを分析してデータレコードを生成する。たとえば、データ受信モジュール４１０は、各データブロックが複数のデータレコードを含み、いくつかのデータレコードが複数のデータブロックにまたがる場合がある、ＳＳＤから読み取られたデータブロックを受信し得る。データ受信モジュール４１０は、データ解析アプリケーション１４０内の他のモジュールにデータレコードを渡す。
【００３３】
ツールモジュール４２０は、入力／出力操作、準備操作、参加操作、予測的操作、空間的操作、調査操作、ならびに分析および変換操作のうちの１つ以上を含む特定の処理操作またはデータ解析機能を実行するデータ処理ツールのセットを提供する。ツールは、データ受信モジュール４１０によってデータソース１２０から受信されたデータレコードを操作する。ツールモジュール４２０は、図２に関連して説明したワークフロー２００に含まれるツールを提供する。
【００３４】
データ出力モジュール４３０は、データ解析アプリケーション１４０によって実行された処理の結果を出力する。すなわち、データ出力モジュール４３０は、ワークフロー２００の実行によって生成された処理済みデータレコードを受信し、他のシステムおよび／または人間のレビュアーがデータレコードを利用できるようにする。たとえば、データ出力モジュール４３０は、企業に関連付けられた人間のレビュアーが企業に関連付けられたデータレコードの処理から生じるワークフロー２００の出力をレビューできるＧＵＩを提供してもよい。
【００３５】
図５は、一実施形態によるデータ解析アプリケーション１４０のデータ受信モジュール４１０のより詳細な図を示すブロック図である。データ受信モジュール４１０は、ファイル読み込みモジュール５１０、ブロックキャッシュ５２０、複数のワーカースレッド５３０、分析状態キャッシュ５４０、および報告モジュール５５０を含む。当業者は、他の実施形態がここで説明したものとは異なるおよび／または他のコンポーネントを有することができ、機能が異なる方法でコンポーネントの間に分散できることを認識するであろう。
【００３６】
ファイル読み込みモジュール５１０は、データブロックから構成されるファイルをデータソース１２０から読み込み、データブロックの処理を管理する。たとえば、ファイル読み込みモジュール５１０は、ＳＳＤから１つ以上のファイルを読み込むことができる。ファイルは、一連のデータブロックのセットとしてデータソース１２０に保存されている。ブロックのサイズは異なる場合があり、一実施形態では２５６ＫＢである。ファイル読み込みモジュール５１０は、ファイルの特定のデータブロックに対する１つ以上の入出力（Ｉ／Ｏ）要求をデータソース１２０に送信することによりファイルを読み取る。一実施形態では、ファイル読み込みモジュール５１０は、多くの別個のＩ／Ｏ要求を同時に発行することにより、ファイル内の一連の順序のすべてのブロックを要求し、各要求は特定のブロックを要求する。たとえば、ファイル読み込みモジュール５１０は、ファイルの最初の１００個のブロックに対して１００個のＩ／Ｏ要求のバッチを同時に発行し、最初のバッチの要求が満たされると次の一連のブロックに対して追加の要求を発行し得る。Ｉ／Ｏ要求は一連の順序でブロックを要求するが、データソース１２０は異なる順序で要求を完了し、非連続的なブロックを返してもよい。
【００３７】
ファイル読み込みモジュール５１０は、データソース１２０によって返されたデータブロックをブロックキャッシュ５２０に格納する。ブロックキャッシュ５２０は、ブロックがワーカースレッド５３０によって処理されている間、ブロックを格納する。一実施形態では、ブロックキャッシュ５２０は固定サイズを有し、したがって固定数のブロックを保持する。加えて、ファイル読み込みモジュール５１０は、（そのシーケンス番号によって識別される）所与のブロックがブロックキャッシュ内の特定の場所にあることが保証されるようにブロックキャッシュ５２０を管理する。この位置は、ブロックキャッシュ５２０に保持されることができるブロックの数を法とするブロックのシーケンス番号として計算される。
【００３８】
このようにブロックキャッシュ５２０を管理することは、ワーカースレッド５３０によるブロックの非同期並列処理中に発生する可能性のあるリソース競合を減らす。ブロックキャッシュ５２０は固定サイズであり、ブロックがキャッシュ内にある場合、ブロックは既知の場所にあるため、キャッシュにグローバルロックを保持する必要はない。キャッシュ内の各ブロックは、他のブロックとは独立してそのブロックの管理を容易にする３つのアトミック変数である、１）そのブロックを参照するワーカースレッドの数、２）所与の時間におけるそのキャッシュの場所によって表されるブロックのシーケンス番号、および３）ブロックが配置されているキャッシュ場所のステータス（使用可能、保留、未使用、割り当て解除など）を含む。これらの変数は、ロックを取得する必要なく、キャッシュ内の所与のブロックの可用性が一定の時間で決定されることを可能にする。
【００３９】
ファイル読み込みモジュール５１０は、ブロックキャッシュ５２０内のブロックを処理のためにワーカースレッド５３０に渡す。複数の独立に実行するワーカースレッド５３０がある。各スレッドは、プロセッサ３０２の別々のプロセッサコアで実行し得る。ワーカースレッド５３０は、ブロックキャッシュ５２０内のデータブロックを分析して、そこに含まれるデータレコードを取り出す。
【００４０】
ワーカースレッド５３０は一度に１つのデータブロックを分析し、複数のスレッドは同時に複数のブロックをまとめて処理する。所与のスレッド５３０は、ファイル読み込みモジュール５１０によって提供されるアプリケーションプログラミングインターフェース（ＡＰＩ）を使用して「ブロック取得」要求を行うことにより、ブロックキャッシュ５３０からデータブロックを要求する。スレッド５３０は、リクエストに応答して、ブロックキャッシュ５２０内のブロック（同等に、ブロックへのポインタまたは参照）を受け取る。このＡＰＩ呼び出しに応答して受信したブロックは、別のスレッドによって処理されていないものであり、ブロックは、スレッドによって処理された前のブロックに必ずしも連続して関連しているわけではない。ＡＰＩ呼び出しは、現在処理可能なブロックがないことを示すメッセージを返す場合がある。この場合、スレッドは、ブロックが使用可能になるのを待っている間に他のタスクを実行してもよい。
【００４１】
ワーカースレッド５３０は、ブロックを最初から最後まで連続して読み込み、そこに含まれるデータレコードおよびデータレコードの一部を識別することにより、データブロックを分析する。一実施形態では、各データレコードは、叙述されたデータ値のセットを含み、レコードマーカーによって終了する。たとえば、データレコードはコンマ区切り値（ＣＳＶ）のセットを含み得る。レコードマーカーは、改行文字または復帰文字とそれに続く改行文字など、レコードの終わりをマークする特別なである。したがって、ワーカースレッド５３０は、レコードマーカーの直後の位置から開始し、次のレコードマーカーに及ぶデータレコードを分析する。所与のデータブロックは複数のレコードを保持する場合があり、データレコードは複数のデータブロックにまたがることがある。
【００４２】
分析状態キャッシュ５４０は、ワーカースレッド５３０によって分析されたデータブロックを記述する情報を格納する。一実施形態では、分析状態キャッシュ５４０は、ワーカースレッド５３０によって分析されたデータブロックに対応するデータオブジェクトを保持する。データオブジェクト内の情報は、関連するデータブロック内の最初のレコードマーカーの推定されたロケーションおよび最初のレコードマーカーの実際のロケーションを含み、またブロック内で開始する分析済みのデータレコードも含む。データオブジェクト内の情報は、関連するデータブロックが正しく分析されたかどうか、およびデータブロックが再分析される必要があるかどうかも示す場合がある。
【００４３】
ワーカースレッド５３０は、スレッドがデータブロックを分析するときにオブジェクトの情報を更新する。動作中、ワーカースレッド５３０は、ブロックキャッシュ５２０からデータブロックを取得するために、ファイル読み込みモジュール５１０に対して「ブロック取得」ＡＰＩ呼び出しを行う。次に、ワーカースレッド５３０は、連続する順にデータブロックをスキャンして最初のレコードマーカーを見つける。ワーカースレッド５３０は、最初のレコードマーカーの直後のデータレコードから開始して、データブロックを最後まで分析する。ワーカースレッド５３０は、分析されたデータレコードを分析状態キャッシュ５４０内の関連するオブジェクトに格納する。ワーカースレッド５３０はまた、分析状態キャッシュ５４０にデータブロックで見つかった最初のレコードマーカーのロケーションを格納する。
【００４４】
この格納されたロケーションは、データブロック内の「推定された」最初のレコードマーカーと呼ばれる。これは、ワーカースレッドが当該ロケーションで終了するレコードの部分的なコンテキストしか有していないために、このロケーションが誤って検出された可能性があるためである。たとえば、一部のＣＳＶファイルでは、データが引用符で囲まれている場合がある。したがって、引用符で囲まれた改行文字は、レコード内のデータであり、レコードマーカーでない。レコードを分析するワーカースレッド５３０は、前のレコードが引用テキストで終了したかどうかを知らないため、したがって、文字が引用の一部であっても、改行文字をレコードマーカーとして誤って解析する可能性がある。
【００４５】
ワーカースレッド５３０がデータブロックの最後まで分析すると、ワーカースレッドはファイル読み取りモジュール５１０に対して「次のブロックを取得」ＡＰＩ呼び出しを行う。この呼び出しは、次に連続するデータブロック、つまりワーカースレッド５３０が分析したばかりのブロックに連続して続くデータブロックを要求する。さらに、「次のブロックを取得」ＡＰＩ呼び出しは、ワーカースレッドが分析した前のブロックを解放する。
【００４６】
ワーカースレッド５３０は、要求された次に連続するデータブロックを受信し、このブロックを最初から最初のレコードマーカーまで分析する。分析されたデータは、先行するデータブロックの最後の分析されたデータレコードに追加され、分析状態キャッシュ５４０に格納される。さらに、ワーカースレッド５３０は、次の連続するブロックに対応する分析状態キャッシュオブジェクトに最初のレコードマーカーのロケーションを記録する。このロケーションは、ブロック内の最初のレコードマーカーの実際のロケーションとして分析状態オブジェクトに記録される。つまり、ワーカースレッドはこのロケーションで終わるレコードの完全なコンテキストを有しているため、ロケーションが正確であることがわかる。
【００４７】
一実施形態では、ワーカースレッド５３０は、真の最初のレコードマーカーロケーションがデータブロック（すなわち、次の連続するデータブロック）の推定された最初のレコードマーカーロケーションと一致するかどうかを決定する。ロケーションが一致する場合、これは推定された最初のレコードマーカーのロケーションが正しいこと、およびデータブロックが正しく分析されたことを意味する。この場合、ワーカースレッド５３０は、ブロックの分析状態キャッシュオブジェクトに、ブロックが正しく分析されたことを示すインジケーションを格納する。
【００４８】
真の最初のレコードマーカーのロケーションが推定された最初のレコードマーカーのロケーションと一致しない場合、これはデータブロックが正しく分析されなかったことを意味する。この場合、ワーカースレッド５３０は、ブロックの分析状態キャッシュオブジェクトに、ブロックが誤って分析されたこと、および再分析が必要であることを示すインジケーションを格納する。一実施形態では、ワーカースレッド５３０は、ファイル読み込みモジュール５１０に対するＡＰＩ呼び出しを行い、再度分析する必要があるとしてデータブロックにフラグを立てる。次いで、ファイル読み込みモジュール５１０は、正しい最初のレコードマーカーロケーションを使用してデータブロックを分析するためにワーカースレッド５３０を割り当てることができる。
【００４９】
ファイル読み込みモジュール５１０は、ブロックキャッシュ５２０および分析状態キャッシュ５４０内の情報を使用して、ワークフロー２００のツールモジュール４２０に対するデータレコードを解放する。一実施形態では、ファイル読み込みモジュール５１０は、ブロックを使用するワーカースレッドがなくなり、ファイル内のすべての以前のブロックが解放され、および分析状態キャッシュ５４０がブロックは正しく解析されたこと示すことを示すと、ブロックキャッシュ５２０から所与のブロックのデータレコードを解放する。また、ファイル読み込みモジュール５１０は、データブロックをブロックキャッシュ５２０から同時に解放する。したがって、ファイル読み取りモジュール５１０は、ワーカースレッド５３０のためにブロックを（ファイル読み込みモジュールＩ／Ｏ要求を介して）プリロードし、ブロックの処理が完了するとブロックを解放する、ファイル全体にわたって移動するスライディングウィンドウとして、ブロックキャッシュ５２０を本質的に使用する。ファイル読み込みモジュール５１０は、多くの独立したワーカースレッドのニーズを効率的に満たし、他のソリューションよりも少ないメモリを使用する、これにより、データ解析システム１１０およびアプリケーション１４０のパフォーマンスを向上する。
【００５０】
報告モジュール５５０は、レコードが解放されたときにメッセージを選択的に出力する。メッセージは、データ解析アプリケーション１４０の別のコンポーネント、たとえば特定のツールモジュール４２０に出力される。一例では、報告モジュール５５０は、特定のレコードが解放されたとき、および／または特定のレコードより前のすべてのレコードが解放されたときにメッセージを出力する。したがって、報告モジュール５５０は、特定のレコードが解放されたとき、または他のイベントが発生したときに、データ解析アプリケーション１４０のコンポーネントに通知する容易さを提供する。
【００５１】
図６は、データブロックとデータレコードとの間の例示的な関係を示す図である。図６は、３つの一連のデータブロック６１０、６２０、および６３０と、７つの一連のデータレコード６１５、６２５、６３５、６４５、６５５、６６５、および６７５を示す。データレコードは、データブロックと完全には整合していない。たとえば、データブロック６１０は、レコード６１５および６２５のすべて、およびレコード６３５の一部を含む。レコード６３５はブロック６１０で始まり、ブロック６２０の途中で終わる。ブロック６２０を分析するワーカースレッド５３０は、最初にデータレコード６３５の一部を読み込み、次いでレコード６３５のレコードマーカーを読み込み、次いでレコードマーカーを含むレコード６４５のすべてを読み込み、次いでレコード６５５の一部を読み込む。
【００５２】
ファイル読み込みモジュール５１０がブロック６２０をワーカースレッド５３０に割り当てると仮定する。ブロック６２０を分析するワーカースレッド５３０は、レコード６３５の終わりをマークするレコードマーカーを見つけるまでデータブロックをスキャンする。ワーカースレッド３５０は、ブロック６２０に対応する分析状態キャッシュオブジェクト内にレコードマーカーのロケーションを、このブロックの推定された最初のレコードマーカーロケーションとして記録する。次いで、レコード６４５の始まり（最初のレコードマーカーロケーションの直後から開示する）から当該ブロックの終わりまで、データブロック６２０を分析し、分析結果をブロックの分析状態キャッシュオブジェクトに格納する。
【００５３】
データブロック６２０を分析する間、ワーカースレッド５３０は、データブロック６２０の終わりまでデータレコード６５５の一部を解析する。次いで、ワーカースレッド５３０は、データブロック６３０を要求および取得し、データブロック６２０を解放する。ワーカースレッド５３０は、データブロック６３０を最初から分析して、レコード６５５の終わりを示すレコードマーカー（すなわち、データブロック内の最初のレコードマーカー）に到達するまで続ける。ブロック６３０からの分析されたデータは、ブロック６２０からのレコード６５５のデータに追加され、それにより完全なデータレコードを形成し、この情報はブロック６２０の分析状態キャッシュオブジェクトに格納される。ワーカースレッド５３０は、レコード６５５の終わりをマークするマーカーを、ブロック６３０の真の最初のレコードマーカーロケーションとしてブロックに対応する分析状態キャッシュオブジェクト内に記録する。
【００５４】
ワーカースレッド５３０は、ブロック６３０の推定された最初のレコードマーカーロケーション（異なるワーカースレッドによって解析状態キャッシュオブジェクトに記録された）がブロックの真の最初のレコードマーカーロケーションと一致するかどうかを決定する。ロケーションが一致する場合、ワーカースレッド５３０は、ブロック６３０の分析状態キャッシュオブジェクトに、ブロックが正しく分析されたことを示すインジケーションを格納する。ロケーションが一致しない場合、ワーカースレッド５３０は、真の最初のレコードマーカーロケーションから再度分析される必要があるとしてデータブロック６３０にフラグを立てるファイル読み込みモジュール５１０に対するＡＰＩ呼び出しを行う。
【００５５】
図７は、一実施形態による、データソース１２０から受信したデータブロックを処理する方法７００を示すフローチャートである。いくつかの実施形態では、方法はデータ受信モジュール４１０によって実行されるが、方法の動作の一部または全部は他の実施形態の他のエンティティによって実行されてもよい。いくつかの実施形態では、フローチャートの操作は異なる順序で実行され、異なるおよび/または追加のステップを含む。
【００５６】
データ受信モジュール４１０は、データソース１２０からデータブロックを受信する７１０。とえば、データ受信モジュール４１０は、ＳＳＤに発行されたＩ／Ｏ要求に応答してデータブロックを受信し得る。データブロックは連続であるが、データ受信モジュール４１０は、ブロックを順不同で受信し得る７１０。データ受信モジュール４１０は、ブロックキャッシュ５２０にデータブロックを格納する７２０。データ受信モジュール４１０は、ブロックをワーカースレッド５３０に割り当てる７３０。各データブロックは、個々のワーカースレッド５３０に割り当てられる。ワーカースレッド５３０はデータブロックを分析し、複数のワーカースレッドは複数のデータブロックをまとめて並行して分析する。データ受信モジュール４１０は、分析状態キャッシュ５４０内のワーカースレッド５３０の分析アクティビティを記述する分析状態情報を維持する７４０。データ受信モジュール４１０は、ブロックキャッシュおよび分析状態キャッシュ５４０内の情報に基づいて、分析されたデータブロックからデータ解析ワークフローにデータレコードを解放し、ブロックキャッシュ５２０からデータブロックを解放する７５０。図７に示されるように、データ受信モジュール４１０は、データブロックがブロックキャッシュ５２０から解放されるときに、データソース１２０からさらなるデータブロックを受信し得る。
【００５７】
図８は、一実施形態によるデータブロックを分析する方法８００を示すフローチャートである。いくつかの実施形態では、この方法は、ファイル読み込みモジュール５１０およびワーカースレッド５３０を含むデータ受信モジュール４１０のコンポーネントによって実行される。本方法の動作の一部またはすべては、他の実施形態の他のエンティティによって実行されてもよい。いくつかの実施形態では、フローチャートの操作は異なる順序で実行され、異なるおよび/または追加のステップを含む。
【００５８】
ファイル読み込みモジュール５１０は、ブロックキャッシュ５２０内のデータブロックをワーカースレッド５３０に割り当てる８１０。ワーカースレッド５３０は、データブロックを連続する順にスキャンして、その中の最初のレコードマーカーの推定されたロケーションを見つける８２０。ワーカースレッド５３０は、データブロック内の、最初のレコードマーカーの直後から開始するデータレコードを分析する８３０。ワーカースレッド５３０は、解析結果をデータブロックの分析状態キャッシュオブジェクトに保存する。また、ワーカースレッド５３０は、最初のレコードマーカーのロケーションをオブジェクト内に、そのデータブロックの推定された最初のレコードマーカーのロケーションとして保存する。
【００５９】
ワーカースレッド５３０は、次に連続するデータブロックを取得し、最初のレコードマーカーに対してそのブロックを分析する８４０。ワーカースレッド５３０は、分析されたレコードを、そのレコードの残りのデータとともに、前のデータブロックの分析状態キャッシュオブジェクトに保存する。さらに、ワーカースレッド５３０は、分析状態キャッシュ５４０内の最初のレコードマーカーのロケーションを、次に連続するデータブロックの真の最初のレコードマーカーロケーションとして格納する８５０。
【００６０】
ワーカースレッド５３０は、次に連続するデータブロックの真の最初のレコードロケーションが、別のワーカースレッドによってそのデータブロックの分析状態キャッシュオブジェクトに格納された推定された最初のレコードロケーションと一致するかどうかの決定もする８６０および８７０。２つのロケーションが一致しない場合、ワーカースレッド５３０は、ブロックの分析状態キャッシュオブジェクトに、誤って分析されたこと、および再分析される必要があることを示すインジケーションを格納する８９０。ファイル読み込みモジュール５１０は、インジケーションを検出し、真の最初のレコードロケーションを使用して分析するためにワーカースレッド５３０にブロックを割り当てる。２つのロケーションが一致する場合、次に連続するデータブロックは正しく解析され、ファイル読み込みモジュール５１０はデータレコードをブロックからツールモジュール４２０に解放する。ステップ８３０でワーカースレッド５３０によって分析された以前のデータブロックは、そのブロックの推定された最初のレコードマーカーロケーションが検証されると解放される。
【００６１】
コンポーネントの特定の命名、用語の大文字化、属性、データ構造、またはその他のプログラミングまたは構造的側面は必須または重要ではなく、説明されている実施形態を実装するメカニズムは異なる名前、フォーマット、またはプロトコルを持っていてもよい。さらに、システムは、説明したようにハードウェアとソフトウェアの組み合わせを介して、または完全にハードウェア要素で実装され得る。また、本明細書で説明されるさまざまなシステムコンポーネント間の機能の特定の分割は単なる例示であり、必須ではない。単一のシステムコンポーネントによって実行される機能は、代わりに複数のコンポーネントによって実行され、複数のコンポーネントによって実行される機能は、代わりに単一のコンポーネントによって実行されてもよい。
【００６２】
上記の説明のいくつかの部分は、情報の操作のアルゴリズムおよび記号表現の観点から機能を示している。これらのアルゴリズムの説明と表現は、データ処理技術の当業者によって一般的に使用され、彼らの仕事の内容を他の当業者に効果的に伝える手段である。これらの操作は、機能的または論理的に説明されているが、コンピュータプログラムによって実装されると理解される。さらに、一般性を失うことなく、これらの操作の配置をモジュールと呼ぶこと、または機能名で呼ぶことが便利な場合もある。
【００６３】
上記の議論から明白であると特に明記しない限り、説明全体を通して、「処理」または「計算」または「計算」または「決定」または「表示」などの用語を利用する議論は、コンピュータシステムのメモリまたはレジスタ、またはその他の情報ストレージ、送信、表示デバイス内の物理（電子）量として表されるデータを操作および変換する、コンピュータシステムまたは同様の電子コンピューティングデバイスのアクションとプロセスと関連する。
【００６４】
本明細書で説明される特定の実施形態は、アルゴリズムの形で説明されるプロセスステップおよび命令を含む。実施形態のプロセスステップおよび命令は、ソフトウェア、ファームウェア、またはハードウェアで実施でき、ソフトウェアで実施した場合、ダウンロードしてリアルタイムネットワークオペレーティングシステムで使用される異なるプラットフォームに常駐し、そこから操作できることに留意されたい。
【００６５】
最後に、明細書で使用される文言は、主に読みやすさと教育目的のために選択されたものであり、本発明の主題を描写または制限するために選択されていない場合がある。したがって、実施形態の開示は、例示的であることを意図しているが、限定を意図するものでない。
【図１】
0006890721.tif 000002
【図２】
0006890721.tif 000003
【図３】
0006890721.tif 000004
【図４】
0006890721.tif 000005
【図５】
0006890721.tif 000006
【図６】
0006890721.tif 000007
【図７】
0006890721.tif 000008
【図８】
0006890721.tif 000009