rdiff を使用してオンライン バックアップを行う製品があります。現在起こっていることは次のとおりです。
ファイルをステージング領域にコピーします (作業中にファイルが消えたり変更されたりしないようにします)
元のファイルをハッシュし、rdiff 署名を計算します (差分差分に使用されます) rdiff 差分差分を計算します (以前のバージョンがない場合、この手順はスキップされます)
結果のデルタ差分を圧縮および暗号化します
現在、これらのフェーズは互いに別個に実行されています。最終結果は、ファイルを複数回反復処理することです。小さなファイルの場合、これは大したことではありませんが (特にディスク キャッシングの場合)、大きなファイル (数十または数百 GB) の場合、これは実際のパフォーマンス キラーです。
これらのすべてのステップを 1 つの読み取り/書き込みパスに統合したいと考えています。
そのためには、ファイル ハッシュ、rdiff 署名、圧縮および暗号化されたデルタ差分ファイルなど、すべての「出力」を保持しながら、上記のすべての手順をストリーミング方式で実行できる必要があります。これには、ソース ファイル (たとえば、100k?) からデータのブロックを読み取り、メモリ内のファイルを反復してハッシュ、rdiff 署名を更新し、デルタ差分を実行し、出力を圧縮/暗号化出力ストリームに書き込む必要があります。 . 目標は、ディスクのスラッシングの量を大幅に最小限に抑えることです。
現在、署名を計算し、バイナリ デルタを生成するために、rdiff.exe (基盤となる librsync ライブラリの最上位の薄いレイヤー) を使用しています。これは、これらが別のプロセスで行われ、ストリーミング方式ではなくワンショットで行われることを意味します。
librsync ライブラリを使用して必要なことを行うにはどうすればよいですか?