誰かが私がハードドライブシークがどのように機能するかを理解しようとするのを手伝ってくれるでしょうか。
読み取りパフォーマンスが絶対に不可欠な小さなバイナリデータベースファイルがあります。ファイル内の数バイトをスキップする必要がある場合は、seek()またはread()を使用してから、不要なデータを破棄する方が速いです。
ハードドライブの平均シーク時間が10msで、読み取り速度が300MB / sの場合、3MB未満の値のseek()よりもread()の方が速いと計算しました。本当ですか?新しいシークを実行するときに、既存のストリームを読み取るためのオーバーヘッドはありませんか?
インデックスに適したファイル構造はどれだと思いますか。
Entry1:Value:PointerIntoToData
Entry2:Value:PointerIntoToData
Entry3:Value:PointerIntoToData
Data, Data, Data
Or
Entry1:Value:Data
Entry2:Value:Data
Entry3:Value:Data
エントリを読み取るときに値が正しくない場合、その値は無視されます。したがって、ファイルをストリーミングするときは、次の方が高速です。1.エントリが不要な場合は、seek()を使用してスキップします。2。エントリが不要な場合は、データを読み取り、データを破棄します。3.または、最初の構造を使用します。最後にデータリポジトリへのseek()を入力する必要があります。
エントリは4バイト、値は8バイト、データは12KBです。
乾杯