2009-07-13 16 views
0

私は、PC上のファイルとフォルダのオンラインバックアップを自動的または手動で実行するアプリケーションの開発に取り組んでいます。現在のところ、私はサーバー上のファイルの最新バージョンのみを保持していました。次に、変更のみをオンラインサーバーに転送できるように、バージョン管理を実装する必要があります。ユーザーは、使用可能なバージョンのバックアップ・サーバーのファイル。は、オンラインバックアップツールでバージョン管理を実装する必要があります

このために重複排除を実行する必要があります。私は固定ブロックサイズを使用して実行することはできますが、各バージョンのバックアップでCRC情報を持つファイルを転送するオーバーヘッドに直面しています。

私はこのような技術に携わったことがないので、経験が不足しています。私は、アプリケーションにこの機能を多くの苦痛なしに埋め込む実現可能な方法があることを知りたいと思っています。任意のサードパーティツールが同じことを実行するのに役立つでしょうか?私にお知らせください?

注:私はFTPプロトコルを使用してデータを転送しています。

答えて

1

dumpという名前のプログラムがありますが、ファイルというよりはファイルシステムブロックで動作します。 rsyncも関心があります。

複数のバージョンのブロックが多数存在し、元の​​ファイルのさまざまなバージョンにどのように収まるかを把握する必要があります。そのため、この情報を追跡するためのデータベースと、与えられたファイル内のどのブロックを転送する必要があるかを判断するためにそれを問い合わせます。また、ファイルの先頭に何かを追加すると、単純なブロッキングと差分スキームを使用すると、すべてのブロックが「新規」になります。

これを行うには非常に複雑です。すでに利用可能なソリューションを徹底的に調査することを強くお勧めします。独自のソリューションを作成する必要があると判断した場合は、慎重に設計のメリットを検討してください。

+0

ええ、私は先週から研究をしています。私が解決策を思いついたのは、私がファイルを考慮して賢明にブロックしていて、すべてのバージョンでStructure_string(以前のバージョンからアクセスできるようにブロックの可用性を追跡する)+ CRCのコンパイル済みリストこのリストをダウンロードして現在のバージョンのリストと比較して、その差異を見つけることができるようにする。私は自分のアプローチが正しいのか、これらが現実世界でどのように実装されているのかを確認する必要があります。 – Sumeet

+0

私はそれが働くことができると確信していますが、それは理想的ではありません。私が言ったように、特定のタイプの変更は、ファイル全体(GBでもよい)を1バイトの変更のために転送させる原因になります。ブロックサイズによっては、サーバー上に数千または数百万の重複ブロック(各ファイル?)が存在する可能性があり、ディレクトリリストが無駄に遅くなります。 rsyncページの "delta encoding"リンクを見ていきます。これにより、実際に変更されたファイルの部分だけを送信することができます。この作業を効率化するために多くの作業が行われました。 dumpとrsyncのコードも同様に見ることができます。 –

+0

私はRsyncコードの作業を開始しました。どう思いますか?それは役に立ちますか? – Sumeet

関連する問題