私は数週間前のプレゼンテーションでそれを見て、それを実装しようとしましたが、失敗し、それを忘れました。しかし今、私はそれがどのように機能するか知りたいです=)
これは、データを効率的に転送/保存する方法です。それはどんな言語でも機能します。これは(私が思うに)それがすることです:
非常に大きなファイルが1つあります(たとえば、Webサイトのjavascriptコレクション全体)。
- 48バイトのブロックに分割します
- 48バイトのすべてのブロックをハッシュします(例:MD5)
- 0x00で終わるハッシュ上のブロックのリストを分割します
- 大きなブロック(> = 1ハッシュ)は異なるサイズになります。非常に大きいものもあれば、非常に小さいものもあります。
- それらのハッシュの間にブロックを接着します(ここでも、実際のデータのサイズが大きく異なります)
- それらのブロックをハッシュする
- これで、大きなファイルの現在のバージョンを表すハッシュのリストができました。
大きなファイルでコードの一部が変更された場合、変更されるハッシュは1つまたは2つだけであるという考え方です。新しいファイルを使用すると、上記のすべての手順を実行し、実際に変更された部分(ブロック、ハッシュで識別可能)のみをアップロード/ダウンロードします。変更されたコードの量とそのコードを囲むブロックのサイズに応じて、4つを超えるブロックをダウンロードする必要はありません。(ファイル全体ではなく)通信のもう一方の端は、元のブロック(同じアルゴリズム、同じ機能)を新しいブロックに置き換えます。
おなじみですか?彼らは名前について言及しましたが、何も見つかりませんでした。私がそれを構築しようとしたとき、それはうまくいきませんでした。なぜなら、正確に48バイトを変更しないと[1]、その変更後のすべてのハッシュが異なるからです[2]。
誰かが名前を知っているなら:素晴らしい。誰かがそれを説明することができれば:完璧です!
更新
私はそれが含まれていたプレゼンテーションを見つけました。それは新製品「サイロ」で言及されました(そして使用されました) :http: //research.microsoft.com/apps/pubs/default.aspx?id = 131524関連:http: //channel9.msdn.com/Events/MIX/MIX11/RES04(つまり、実際にはMicrosoftの調査でした!きちんと!)
最初のリンクから:
Silo対応のページは、このローカルストレージをLBFSスタイルのチャンクストアとして使用します。
2番目のリンク(ビデオ)では、良いものはで始まり6:30
ます。今、私はそれを二度見ました...私はまだそれを理解していません=)
キーワードはとDelta encoding
ですRabin fingerprints
。