ハードドライブの検索方法を理解しようとする人がいます。データベース構造とハードドライブのシーク時間の混乱
私は読取りパフォーマンスが絶対に必要不可欠な小さなバイナリデータベースファイルを持っています。ファイル内で数バイトをスキップする必要がある場合は、seek()またはread()を使用して不要なデータを破棄する方が速いです。
平均は、ハードドライブのシークタイム10msの場合で、読み出し速度は、それが(読むために迅速だと算出した300メガバイト/ sのIである)(求めるより)3メガバイトよりも小さい値を持ちます。本当ですか?既存のストリームを読んでいない新しいシークを実行するときにオーバーヘッドはありますか?
あなたは、インデックスのより適切なファイル構造と思いますか?
Entry1:Value:PointerIntoToData
Entry2:Value:PointerIntoToData
Entry3:Value:PointerIntoToData
Data, Data, Data
Or
Entry1:Value:Data
Entry2:Value:Data
Entry3:Value:Data
値が正しくない場合にエントリを読み取ると、無視されます。だから、それが迅速にファイルをされたストリーミング時:エントリが使用することを必要とされていない場合に求める 1.()のエントリーが必要とされないとき2. その上をスキップすることが、データ 3.または使用最初の構造を捨てる読みますエントリが必要な場合は、最後のデータリポジトリへのseek()が必要です。
エントリは4バイトで、値である8バイト&データがどのように "絶対に必要" 12キロバイト
乾杯
私はまだプログラムをテストしていませんが、まだ別のファイル構造を探しています。ミリ秒ごとに、私は理論上の最大値に興味があります。だから、私はあなたが気づくために働くテスト環境が必要だと思いますか?ハードドライブが別のプロセスからロードされている可能性があります。ありがとう – user72523
あなたが主張しているように、毎ミリ秒ごとに、データベースをメモリに読み込んでみてください。あなたはそれがあなたのシステムメモリに簡単に収まるように、それは小さいと言います(あなたは3Mを引用します)。 しかし、速度が実際の要件か想像上の要件かどうかを判断する必要があります。あなたはなぜスピードが必要ですか? –
非常にまれで病理学的な構成のみでは、ハードウェアの特性が非常に短期間を除いてソフトウェアのパフォーマンスを最適化するのに役立つと思っています。そして、徹底的なテストの後まで。ハードウェアの変更が速すぎると、「試してみるもの」のリストが上に移動します。 – dkretz