1つのアプローチは、ファイルとファイルシステム(その大部分)を使用し、ある種のメモリキャッシュまたはマッピングを提供することです。
大量のファイルやサイズの大きいファイルを扱っている場合は、追加のハードウェア、RAMについて話していない限り、それをメモリサイズと実際に一致させることはできません(またはアーカイブ全体をメモリに解凍することはできません)。
具体的には、個人的には...
class MemoryArchive {}
...これはファイルのフロントを装っており、バックエンドでアーカイブします。
アーカイブをディスクの一時ファイルフォルダに解凍します。ほとんどのunziputilsと同様に、アクセスの「小さな単位」、つまりファイルを処理します。
基本MemoryArchive
的にはすべてがメモリ内にあるように動作するため、メモリストリーム(またはオブジェクトレベルでの直接アクセスに使用することを決定したもの)の代わりに、ディスク上の一時ファイルであるファイルストリームにマッピングする必要があります。
また、メモリ内の内容がディスク上のコンテンツと同期されていることを確認し、「統合」を維持する必要があるため、同期(および/またはエラー、問題)を処理するための堅牢な方法があります。
その時点で(そしてシステムの性質などに応じて)、主要なタスクは、データベース管理システムに似始めた場所であるファイルシステムストレージの周りにある種のトランザクションをコーディングする必要があるかもしれません。しかし、それはもう一方の「スケールの端」にあるでしょう-そしてあなたがそれなしで生きることができて、それを単純に保つことができれば、それはそれほど問題ではないかもしれません。
ただのアイデアですが、それはすべてあなたの特定の詳細に依存します-
つまり、物事の規模(それは大きく異なる可能性があります-つまり、メモリが特定の場合にロードできる場合、そして処理が十分に速い場合)、どのように小さな変化'アーカイブ内とアーカイブの大きさ、変更の頻度と性質。
最も簡単なケースでは、一時ファイルとして保存し、必要に応じて小さな増分変更を処理することになります。
そして、ある種のものを持っているMemoryArchive
と、将来に向けて物事を取り巻くことができます。そのため、それを変更したり、アーカイブのサイズなどに基づいていくつかのアプローチを組み合わせたりすることができます。実際、これらのシナリオでは、通常、いくつかの「アプローチの組み合わせ」が最適です。さまざまなファイルやサイズを処理する場合、「1つですべてに対応する」ソリューションを作成することはほとんどできないためです。
お役に立てれば、