MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Diferença de desempenho do Mongodb entre índices Hash e Ascending (Alguma razão para não usar hash em um campo não ordenado?)


Dado esse campo key é indexado em ambos os casos, a pesquisa de índice de complexidade em si seria muito semelhante. Como o valor de a seria com hash , e armazenado na árvore de índice.

Se estivermos procurando o custo de desempenho geral, a versão com hash incorreria em um custo extra (insignificante) de hash do valor de a antes de corresponder o valor na árvore de índice. Veja também mongo/db/index /hash_access_method.h

Além disso, o índice com hash não poderia utilizar a compressão de prefixo de índice ( Tigre com Fio) . A compactação de prefixo de índice é especialmente eficaz para alguns conjuntos de dados, como aqueles com baixa cardinalidade (por exemplo, país) ou aqueles com valores repetidos, como números de telefone, códigos de previdência social e coordenadas geográficas. É especialmente eficaz para índices compostos , onde o primeiro campo é repetido com todos os valores exclusivos do segundo campo.

Geralmente não há razão para hash um valor que não seja de intervalo. Para escolher uma chave de fragmentação, considere a cardinalidade , frequência e taxa de alteração do valor.

O índice com hash é comumente usado para um caso específico de fragmentação . Quando uma chave de fragmentação valor é um aumentando/diminuindo monotonicamente valor, a distribuição de dados provavelmente entraria em apenas um fragmento. É aqui que uma chave de fragmentação com hash pode melhorar a distribuição de gravações. É uma pequena compensação melhorar muito seu cluster de fragmentação. Consulte também Fragmento de hash vs Intervalo .

Se vale a pena, depende do caso de uso. Um valor de hash personalizado significaria que qualquer consulta para o valor de hash teria que passar por um código de hash personalizado, ou seja, aplicativo.

A vantagem de utilizar a função de hash integrada é que o MongoDB calcula automaticamente os hashes ao resolver consultas usando índices de hash. Portanto, os aplicativos não precisam calcular hashes.