Dropboxはデルタエンコーディングアルゴリズムを使用して2つのファイルの差分を見つけます。最初は変更されたファイル、2つ目は古いファイルです。しかし、どこに古いファイルを保存しているのか、新しいファイルしかないためにどのように違いが見つかるのか、古いファイルはありませんでした。最初にサーバーからファイルをダウンロードして差異を見つけることはできません。どの方法を使用していますか?どのように1つのファイルからデルタを取得しますか?
答えて
Dropboxの従業員によってthis postによると、彼らがメモリ上に存在するデータの並べ替えを維持すると思われる:
Dropboxが同期中に、高価な データベースへのアクセスを防止するためのRAMでファイルに関するメタデータを保持します。メタデータには、Dropboxのファイル へのパス、チェックサム、変更時刻などが含まれています。 は、この情報をよりコンパクトにすることに熱心に取り組んでおり、メモリ使用量を改善するためにいくつかの面で取り組んでいます。私たちの技術は、 に限定されず、Pythonを書き直したり、カスタムメモリアロケータを書き込んだりするのに :-)。
これを行うには、ユーザーがファイルをドロップボックスフォルダにコピーするときに、デルタ差分を実行するための特別なハンドラがあると思います。そのためには、.NetのFileSystemWatcherクラスのようなものが、独自のパススルーシェルコピーハンドラと一緒にやっています(つまり、実行する必要がある場合は、diffが完了するまでファイルの一時コピーを保持できます)。
また、メモとして、dropboxはpythonとwxWdigetsで書かれています。
あなたはデルタ圧縮のために役立つかもしれないいくつかのサイト:
ありがとうございました。 .netでファイルのハッシュを取得してハッシュを比較するのはとても簡単ですが、古いハッシュと新しいハッシュを比較してファイルのバイトを変更する手助けをしてください。 –
@sukhraj:変更されたバイトを取得するためにハッシュを使用せず、変更をテストするためにのみ、デルタ差分アルゴリズムを自分で実行する必要があります。 Bindiffは基本的にバイナリのデルタ差分のプログラムですが、同じ方法が他のファイルタイプにも適用されます。オープンソースc(phd論文のために作られたもの)です。同じ方法が他のファイルタイプにも適用され、そのオープンソースは(phdの論文のために作られたものと同じように)適用されます。 – Necrolis
ありがとう、私は変更されたバイトを取得するためにVCDiffを使用することができます。私は2つのファイル古いファイルと変更されたファイルを持っている場合私はそれを使用することができますが、私は変更されたファイルを持っている! –
あなたはこれがであるべき言語についての心を開いているようですそれを絞るように気をつけますか? –
類似のものを実装するという文脈でこの質問はありますか?もしそうなら、あなたからもっと多くの情報が必要になるでしょう。 –