Xxhash: janela rolante xxhash

Criado em 19 abr. 2019  ·  6Comentários  ·  Fonte: Cyan4973/xxHash

Oi,

O xxhash oferece suporte a hash baseado em janela contínua? Por exemplo, suponha que usamos uma janela contínua de tamanho fixo de 48 bytes. Primeiro calculamos um xxhash para os primeiros 48 bytes (0-47 bytes). Então, é possível calcular a próxima janela rolante do deslocamento de 1-48, subtraindo o impacto do 0º byte e adicionando o 48º byte, sem calcular um xxhash do zero?

question

Todos 6 comentários

Não, xxhash não é um hash contínuo.
Isso exigiria consumir byte após byte de entrada e preservar a linearidade matemática perfeita, enquanto xxhash ingere dados por faixas completas e quebra a linearidade propositalmente para melhorar a distribuição de bits.

Obrigado pela sua explicação! Acho que preciso procurar outros hashes rolantes.

@ Cyan4973 Estando também em busca de uma função hash de rolagem muito rápida, aqui está uma pergunta de acompanhamento:

Seria possível para você delinear em breve, ou criar um link para, técnicas que tornam o xxHash rápido e bem distribuído, que ainda podem ser aplicadas aos hashes contínuos?

Seria fantástico ser capaz de criar um hash contínuo, por exemplo, para rsync ou desduplicação de dados na memória ala bup , que funcione próximo ao desempenho de xxHash.

Os hashes de rolamento que conheço são fundamentalmente diferentes de xxhash ou de qualquer outro hash de alta qualidade.
Imho, essas 2 categorias não se sobrepõem.

Você está pensando muito estreito, @ Cyan4973.

XXH3 é definitivamente capaz de ser um hash contínuo. Só não no sentido tradicional.

Cada 1024 bytes alinhados (um bloco, dado o tamanho do segredo padrão) pode ser empurrado ou removido. Isso requer todos os 8 acumuladores, mas é definitivamente factível.

Bem, isso é verdade.
Acontece que todos os hashes contínuos que conheço têm granularidade de nível de byte, e os aplicativos que os usam tendem a precisar desse nível de granularidade (encontrar pontos de corte flexíveis em um documento maior é bastante comum).

Uma granularidade de nível KB parece de fato possível com XXH3,
embora exija um aplicativo capaz de tirar vantagem desse nível de granularidade.

Além disso, não é exatamente tão simples quanto um hash regular,
onde RH(p, p+N) = H(RH(p-1, p+N-1), p+N) - h(p-1) .
Para XXH3, como não há linearidade, ainda é necessário recombinar e embaralhar todos os fragmentos de 1 KB digeridos na ordem correta.
Isso ainda é menos trabalho do que reprocessar toda a entrada, mas a carga de trabalho aumenta linearmente com o tamanho do segmento a processar.

Esta página foi útil?
0 / 5 - 0 avaliações