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つのファイル古いファイルと変更されたファイルを持っている場合私はそれを使用することができますが、私は変更されたファイルを持っている! –
- 1. 2つのXmlSerializer出力からデルタを取得
- 2. AngularJSで1つの投稿をどのように取得しますか?
- 3. はどのように他のサーバからファイルを取得し、
- 4. DatePickerDialogからどのようにDatePickerを取得しますか?
- 5. Gitで1つのファイルしか取得できませんか?
- 6. 1つのswfファイルから別のswfファイルにオブジェクトを取得する方法
- 7. リモートのMercurialリポジトリから1つのファイルを取得
- 8. 1つのファイルXcode 4をどのようにコンパイルしますか?
- 9. Wicketのドロップダウンリストからどのように値を取得しますか?
- 10. チームエクスプローラからどのようにデフォルトのTFSサーバーを取得しますか?
- 11. どのように1つのエンコーディングを持つ型のサイズを取得できますか?
- 12. MongoDB - 各会話から最後に1つのメッセージを取得しますか?
- 13. どのように私は1つのサブから他のサブにオブジェクトを取得する
- 14. アップロードしたファイルのパスをどのように取得できますか?
- 15. svcutilがC#ファイルからドキュメントを取得するようにしますか?
- 16. メッセージとオプション属性をPubSubIOからどのように取得しますか?
- 17. モバイルウェブサイトからデバイス情報をどのように取得しますか?
- 18. UIDatepickerからどのように数値を取得しますか?
- 19. どのようにして/ proc/cpuinfoからモデルを取得できますか?
- 20. Android APIはどのようにデータをハードウェアから取得しますか?
- 21. 私はこのようになりますファイルから整数を取得しようとしているファイル
- 22. Android上でXmlResourceParserを使用してXmlファイルから1つの要素のみの値を取得するにはどうすればよいですか?
- 23. レポのサブモジュールをどのように取得しますか?
- 24. プロットデバイスウィンドウのタイトルをどのように取得しますか?
- 25. フレームワークにどのようにコアデータモデルを取得しますか?
- 26. どのようにASTParserを使用してJavaファイルからSuperClass名を取得できますか?
- 27. 配列出力から1つの値を取得しますか?
- 28. Twitterはどのようにジオロケーションデータを取得しますか?
- 29. ClojureScriptでどのようにタイムスタンプを取得しますか?
- 30. fdでファイルサイズをどのように取得しますか?
あなたはこれがであるべき言語についての心を開いているようですそれを絞るように気をつけますか? –
類似のものを実装するという文脈でこの質問はありますか?もしそうなら、あなたからもっと多くの情報が必要になるでしょう。 –