これはソフトウェア設計の質問です
私はスピードのために次のルールに取り組んでいました
cache memory > memory > disk > network
各ステップは前のステップの5〜10倍です(たとえば、キャッシュメモリはメインメモリの10倍高速です)。
現在、ギガビットイーサネットの遅延はローカルディスクよりも小さいようです。したがって、おそらく、大規模なリモートインメモリDBから読み取る操作は、ローカルディスクの読み取りよりも高速です。これは私のような古いタイマーに異端のように感じます。 (ネットワークラウンドトリップを行う必要がないように、ディスク上にローカルキャッシュを構築するのに少し時間を費やしただけなので、私の質問です)
誰かがこの分野で経験/数/アドバイスを持っていますか?
そして、はい、実際に調べる唯一の方法は構築して測定することですが、一般的なルールについて疑問に思っていました。
edit:
これは、トップの回答からの興味深いデータです。
同じデータセンター内での往復500,000 ns
ディスクシーク10,000,000 ns
これは私にとってショックです。私のメンタルモデルは、ネットワークの往復が本質的に遅いということです。そして、そうではありません-ディスクの「往復」よりも10倍高速です。
Jeff attwoodがこのvブログをトピックに投稿しました http://blog.codinghorror.com/the-infinite-space-between-words/
GoogleフェローのJeff Deanが引用している、あなたが探していると思われる数値をいくつか示します。
誰もが知っておくべき数字
L1 cache reference 0.5 ns Branch mispredict 5 ns L2 cache reference 7 ns Mutex lock/unlock 100 ns (25) Main memory reference 100 ns Compress 1K bytes with Zippy 10,000 ns (3,000) Send 2K bytes over 1 Gbps network 20,000 ns Read 1 MB sequentially from memory 250,000 ns Round trip within same datacenter 500,000 ns Disk seek 10,000,000 ns Read 1 MB sequentially from network 10,000,000 ns Read 1 MB sequentially from disk 30,000,000 ns (20,000,000) Send packet CA->Netherlands->CA 150,000,000 ns
これは、大規模な分散システムを構築することによる設計、レッスン、およびアドバイスというタイトルの彼のプレゼンテーションからのものであり、ここから入手できます。
講演は 大規模分散システムおよびミドルウェア(LADIS)2009 で行われました。
言われています そのgcc -O4は、書き換えのためにコードをJeff Deanに電子メールで送信します。
ネットワーク対ディスクに関しては多くの変数がありますが、一般的に、ディスクの方が高速です。
SATA 3.0およびSASバスは6 Gbpsですが、ネットワークは1 Gbpsからプロトコルオーバーヘッドを差し引いたものです。RAID-1015k SASを使用すると、ネットワークの速度が非常に遅くなります。さらに、ディスクキャッシュ、およびシナリオに応じてソリッドステートハードドライブの可能性も速度を向上させる可能性があります。ランダムデータアクセスとシーケンシャルデータアクセスが要因となり、データが転送されるブロックサイズも影響します。これはすべてアプリケーションに依存しますディスクへのアクセスに使用されています。
さて、ネットワークを介して転送しているものはいずれにしても、ディスクとの間でやり取りされるという事実については触れていません。
それは、ネットワークリソースに要求しているデータがすぐに利用できる(メモリ内など)か、それともディスクから読み取るかによって異なります。
いずれにせよ、スループットが高くなる場合もありますが、レイテンシは高くなると思います。
IMXディスクはさらに高速です。ネットワークの理論上の転送速度は高いですが、実際にはそれに近づきません。
約2年前、ラップトップでハードドライブに問題が発生し、DMAが消えました。これにより、ハードドライブは劇的に遅くなり、特にネットワークよりも遅くなりました。しかし、別のコンピューターに切り替えたとき、インターネットより早くHDDの元の状態に戻りました。
ギガビットネットワークでの私の経験は、適切なサーバーがあれば、スループットと遅延の点でローカルパフォーマンスを上回ることができるということです。参照 ネットワークテスト:ギガビットのパフォーマンスは得られていますか?
すべての実用的な目的のために、ネットワークとローカルストレージを同等のものとして扱い、メモリキャッシュのみを使用することをお勧めします。
あなたが述べたような標準的な警告は、一般的な規則がないという点で真です。実際、ほとんどの場合、適切に構成されたサーバーで作業し、メトリックを使用してデータ転送の最適な方法を評価する必要があります。
低速のハードドライブを備えたローエンドマシンを使用している場合、高速のストレージアレイを備えたサーバーへのギガビットネットワーク接続を使用する方がほぼ確実に速くなります。
同様に、ほぼ同じハードウェアの2台のマシンで作業している場合は、レイテンシとネットワークオーバーヘッドによりローカルストレージが高速になります。それは本当に常識です。
場合によります。 I/Oが主にランダムアクセスである場合、そのフラットなスループットは、利用可能なネットワーク帯域幅と比較してそれほど大きくありません。ただし、ほとんどのネットワークトラフィックは、最終的にはI/Oを伴うプロセスによって生成されます。ネットワークトラフィックを生成しているプロセスのワーキングセットがキャッシュに収まる場合は、ディスクの帯域幅による制約を受けません。キャッシュをスラッシュすると、ディスクがボトルネックになります。
私はデータウェアハウスシステムで作業しており、正規のDWクエリはテーブルスキャンです。クエリがファクトテーブル(またはパーティション)の行の数パーセントを超える場合、シーケンシャルI/Oを使用したテーブルまたはパーティションスキャンは、インデックスのルックアップとシークを使用したランダムアクセスクエリプランよりも効率的です。
ネットワークストレージ(つまり、SAN)は、適切に調整されていない限り、ストリーミングワークロードでうまく機能しない傾向があります。 SANが汎用の統合環境で使用されている場合、データウェアハウスのようなストリーミングスパイクロードに対してはほぼ確実に最適化されていません。ベンダーのホワイトペーパーで提案されているのを見たことがあります。 SANこれは、ストリーミングI/Oと同じように調整されていないため、同じスループットを得るには、約3倍のディスク数が必要です。
私の経験はそれと一致しています。実際、データウェアハウスを統合環境に展開したことがなく、同じETLプロセスをデスクトップPCで大幅に速く実行できなかった。主要ベンダーからの営業担当者もいますSAN設備は、多くの顧客がSANがないため、DWシステムに直接接続ストレージを使用しているとオフレコで言っていますt十分に速い。
ネットワークストレージは、ランダムアクセスワークロードの直接接続ストレージよりもIOPSあたり少なくとも1桁高く、ストリーミングでは2桁近く高くなります。
私がこれで体験したことは、1ギガビットの接続でファイルをダウンロードしようとすると、通常、ハードディスクがボトルネックになるということです。ただし、最初に接続を確立する必要があることにも注意してください。これには時間がかかります。したがって、データネットワークの大きなチャンクを送信する場合、実際にはディスクよりも高速になる可能性があります。
はい、一般的に、ネットワークはハードドライブよりも高速になりましたが、時間の経過とともに変化する可能性があります。
私は思うので、私はそうです
アプリケーションが実行されている場合、それはホストマシンが動作していることを意味しますが、ネットワーク経由での動作には共通のプロトコルが必要であり、ピアの可用性、チャネルのセキュリティを確認します...そして、ピアが異なるプラットフォームを使用している場合、単一のマシン。
誰が最強かというより、トレードオフの観点からこれを見る方が好きです...
この比較の正確なユースケースを説明する必要があります。ハードドライブには、シーク時間+転送速度とキャッシュがあります。ネットワークには遅延、転送速度、プロトコルのオーバーヘッドがあります...
私はあなたの元のキャッシュメモリ>メモリ>ディスク>ネットワークはまだ一般的に成り立っていると思います
個人的には、考慮すべき要素がいくつかあると思います。たとえば、ローカルでアクセスしているメモリまたはディスクと、ネットワーク経由でアクセスするメモリまたはディスクの速度はどのくらいですか。リモートデータが非常に高速なSSDにあり、エンドツーエンドでインストールされたギガビットネットワークよりも高速である場合、リモートは、大きなストリーミングファイルに対して高速である可能性があります。
ただし、小さなデータユニットにランダムにアクセスしていて、ネットワークに欠陥がなく、ホップ数も多くなく、アクセスしているだけではない場合、ローカルキャッシュの方が、機械的ディスクドライブが100に近い場合でも高速であると思います。時間の割合。しかし、興味深い点を挙げます。ネットワークの速度が向上し続けるとしたら、どれだけのローカルストレージが必要になるでしょうか。
まあ、 Light Peak は100GBpsのネットワーク速度を目指しており、RAMの速度に近づいています。もちろん、ネットワークはデータを送信側はデータを生成できます。つまり、送信側がハードディスクからデータを読み取っている場合、受信側は、超高速ネットワークであっても、ディスクが読み取った速度と同じ速度でのみデータを取得します。
ディスクは、SCSI、SASまたはIDEバスを介してCPUに接続されています。これは、特定のプロトコルを実行する内部ネットワークです-SCSIまたはATAPI。イーサネットは設計されていますSAS/SCSI/IDEよりもはるかに遅い距離で動作する可能性があります。どちらが高速かは、比較するテクノロジーによって異なります。20年前のラップトップHDDを10Gbpsで比較すると、RAMストレージの場合、勝者は常にネットワーキングであり、ストレージを購入するときは、価格と管理性を比較する必要があります。
覚えておくべきことの1つは、ネットワークに依存するということです。たとえば、Webサイトでのパフォーマンスに責任があるとします。このWebサイトは、もちろんローカルネットワークを介してデータベースサーバーに接続されています。また、一種のネットワークであるインターネットを介してWebサーファーにも接続されています。
多くの場合、静的IPとクロスオーバーケーブルまたはautomdxを介してWebサーバーとデータベースサーバーの間に専用リンクを設定し、非常に高速にしたいので、遅延を抑え、トラフィックに専用リンクを提供できます。データベースサーバーは、あらゆる種類の作業を行って、できるだけ多くのデータベースをメモリに保持します。多くの場合、コンテンツ全体といくつかのインデックスで成功します。このデータベースへのクエリは、ディスクへのクエリと同じくらい高速になるでしょう。
一方、特定のWebテクノロジ(asp.net webforms viewstate、私はあなたを見ています)は、(一種の)キャッシュとしてクライアントWebブラウザとの間で多くの情報をプッシュします。これがローカルLAN接続である場合(およびasp.net Webフォームの防御では、これはほとんどの場合真実です)、それはそれほど悪いことではありませんが、公共のインターネットではこれは絶対にkillパフォーマンスになる可能性があります。多くの場合、これをデータベースまたはローカルディスクにプッシュする方がはるかに優れています。