10億個のファイルを持つ外部ディスクがあります。コンピュータAに外部ディスクをマウントすると、私のプログラムはすべてのファイルのパスをスキャンし、ファイルのパスをデータベーステーブルに保存します。その後、外部ディスクを取り出すと、それらのデータはテーブルに残ります。問題は、コンピュータBでいくつかのファイルが削除され、それをコンピュータAに再度マウントした場合、コンピュータAでデータベーステーブルを同期する必要があるということです。ただし、すべてのファイルをスキャンする必要はありません多くの時間と多くのメモリを無駄にします。使用されるメモリを最小限に抑えながら、すべてのファイルをスキャンせずにデータベーステーブルを更新する方法はありますか?多数のファイルを扱います
さらに私の場合、メモリの制限は時間よりも重要です。つまり、私はむしろより多くの時間を節約するよりも多くのメモリを節約することを意味します。
私はこのセクションのファイルが削除されているかどうかをチェックするために、多くのセクションにファイルをカットし、いくつかの特定の機能(SHA1かもしれない)を使用することができると思います。しかし、私はセクションにファイルをカットする方法を見つけることができません。誰かが私を助けたり、より良いアイデアをくれますか?
次のように削除:あなたが制御できないシステムベースの削除?またはあなたが何かできるアプリケーションでトリガされるAの削除? – Krrose27
スキャン処理で大量のメモリが使用されるのはなぜですか?基本的には、一度に1つのディレクトリにファイルをリストするだけです。 – Joni
しかし、私はディレクトリ上のファイル数を制御できません。 1つのディレクトリに10億のファイルがある可能性があります。また、ファイルをすぐにスキャンするときに1つのデータを挿入すると、多くのメモリが節約されますが、I/Oの問題のために時間がかかります。一括挿入を使用すると、より効率的です。 – s011208