正しい答えは「場合によりますが、測定する必要があります」のはずですが、これは、許容できる確実性で限定されていない答えを与えることができる場合です。
データベース サーバーと直接通信すると、ほぼ確実に高速になります。
その理由は、最初にディスクに書き込み、次にデータをネットワーク経由で送信する前に再度読み取ることは、ディスク ドライブからの追加の遅延と帯域幅の制約を伴うためだけではありません (すべてのファイルが少なくとも 1 ページを占有するため、これは避けられません)。ページ キャッシュ、10 億のファイル (それぞれのコンテンツが 1 バイトしかない場合でも) は、少なくとも 4 TiB 相当のバッファーを必要とするため、キャッシュはありません)。4TiB のデータの読み取りには、高速ディスクでの順次読み取りを想定すると、3 ~ 5 時間かかります。ディスクへの書き込みは、遅延ライトバックのおかげで実際にはほとんど順次に行われますが、データを送信する前に再度読み込むことは、連続していないことがほぼ保証されています (また、先読みが発生するようなことはなく、個別のファイルでは不可能です)。運が良ければ一部の操作はまだ重複している可能性がありますが、
要求を受け入れるデータベースの能力またはネットワーク帯域幅によって制限される可能性があることは事実ですが、これは、余分なコピーを追加しなくても、常に制限されているものであり、少なくとも前者はあなたのものです.かなり簡単に最適化できます。インデックスなしでデータベースにデータを挿入できます。これは非常に高速です。その後、データベース サーバーは、後で必要になる可能性のある任意のインシデントを作成できます。もちろん、これには時間がかかる場合がありますが、更新のたびにインデックスを更新するよりも桁違いに高速である可能性があります (さらに、限られた時間のジョブが迅速に終了することが重要である場合、誰が気にしますか)。
ただし、さらに重要なことは、10 億個のファイルを開いたり閉じたり、再度開いたりするだけでも、かなりの時間がかかることです (これには、ディレクトリ階層のトラバース、名前から inode への変換、アクセス チェックなどが含まれます)。個々のファイルにアクセスすることはまったく正気ではありません。物理的な「シーク」が行われないソリッド ステート ディスクでも、ランダム アクセス時間は「ゼロ」ではありません (はるかに小さいですが、0.1ms × 10 億は、シークに約 3 時間余分に費やされます!)。