私は自分の言葉でHDFSの高スループットと低遅延の意味を定義しようとしましたが、次の定義を思いつきました。
HDFSは、データセット内の特定のレコード(低遅延)ではなく、データセットのバッチにすばやくアクセスするように最適化されています(高スループット)。
それは意味がありますか? :)
ありがとう!
あなたが説明したことは、純粋な意味でのスループットと遅延の違いというよりも、異なるアクセスパターン(シーケンシャル、バッチ、ランダムアクセス)の最適化の違いに似ていると思います。
高遅延システムについて考えるとき、アクセスしているレコードについては考えていませんが、レコードにアクセスするとオーバーヘッドコストが高くなります。 HDFSからファイルの最初のバイトにアクセスするだけでも、約1秒以上かかる場合があります。
より定量的な傾向がある場合は、レコード数Nにアクセスするために必要な合計時間をT(N)=aN+b
と考えることができます。ここで、a
はスループットを表し、b
はレイテンシーを表します。 HDFSのようなシステムでは、Nが非常に大きいため、b
は無関係になり、低いa
を優先するトレードオフが有益です。これとは対照的に、低レイテンシのデータストアでは、各読み取りが1つのレコードにのみアクセスすることが多く、低b
に最適化する方が適切です。
そうは言っても、あなたの発言は間違っていません。それは間違いなく真実であり、バッチアクセスストアのレイテンシーとスループットが高いのに対し、ランダムアクセスストアのレイテンシーとスループットは低い場合がよくありますが、必ずしもそうとは限りません。
これでスイングします。
低遅延のデータアクセス:Enterキー(または送信ボタン)を押すと、最大で数秒以内に結果が得られると期待しています。私のデータベースクエリ時間は1秒未満である必要があります。データの高スループット:数百万行のデータをスキャンして、サブセットをカウントまたは合計したいと思います。これが完了するまでに数分(または複雑さによってははるかに長い時間)かかると思います。より多くのバッチスタイルのジョブを考えてください。
警告:これは実際にはmap/reduceの問題でもあります。 M/Rジョブのセットアップと処理には、少しオーバーヘッドがかかります。低遅延のデータアクセスに向けて現在取り組んでいるプロジェクトがいくつかあります。
また、HDFSはデータをブロックに格納し、それらを多くのノードに分散します。これは、最終的な答えを得るのに(ほとんど)常に何らかのネットワークデータ転送が必要であり、スループットやその他のさまざまな要因に応じて、物事を少し「遅く」することを意味します。
お役に立てば幸いです。 :)