Я видел это в презентации несколько недель назад, пытался реализовать, потерпел неудачу и забыл об этом.Но теперь я хочу знать, как это работает =)
Это способ эффективной передачи / хранения данных.Это будет работать на любом языке.Вот что (я думаю) делает:
У вас есть 1 очень большой файл (например, вся коллекция 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.
Во второй ссылке (видео) хорошие вещи начинаются с 6:30
.Теперь я видел это дважды ... Я до сих пор не понимаю =)
Ключевые слова: Delta encoding
и Rabin fingerprints
.