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

O caso dos índices com hash do MongoDB


Além de índices escalares (ascendentes, descendentes), o MongoDB também suporta índices 'hashed'. Quando você usa um índice com hash em um campo, o MongoDB calcula um hash do valor do campo e armazena o hash no índice. Índices com hash dão suporte apenas à comparação de igualdade e não dão suporte a consultas de intervalo e normalmente são usados ​​em cenários de fragmentação.


Criando um índice de hash do MongoDB


Você pode usar a seguinte sintaxe para criar um índice com hash:
db.collection.ensureIndex({'field':'hashed'});

Você pode criar um índice escalar e um índice com hash no mesmo campo.

Fragmentação do MongoDB


Normalmente, a fragmentação do MongoDB é implementada usando o particionamento "baseado em intervalo". Nessa abordagem, cada fragmento recebe um intervalo de valores da chave de fragmento. Se a chave de fragmento estiver aumentando monotonicamente como carimbos de data/hora ou objectID, isso às vezes pode resultar em um fragmento "quente", porque os valores mais recentes sempre acabam sendo roteados para o mesmo fragmento.

A maneira de contornar isso é usar o 'particionamento baseado em hash'. Um hash da chave de estilhaço é calculado e esse valor de hash é usado para rotear para um estilhaço em vez do valor real. Isso ajuda a distribuir a carga uniformemente em todos os fragmentos, em vez de enviar todos os dados mais recentes para o mesmo fragmento. O particionamento baseado em hash é implementado usando índices com hash em sua chave de fragmentação. Para obter mais informações, consulte a documentação de fragmentação.

Prós e contras do índice com hash

  • Prós


    Os índices com hash tendem a ser menores do que os índices escalares porque apenas um hash da chave é armazenado em vez da chave completa. Por exemplo. Em um teste simples com 100k documentos, adicionamos índices escalares e hash em um campo de string – ‘fieldName’. Como mostrado abaixo, o índice hash tende a ser consideravelmente menor que os índices escalares:
    "indexSizes" : {
            "_id_" : 811008,
            "firstName_1" : 4415488,
            "firstName_hashed" : 1490944
    }
    
  • Contras


    Não suporta consultas de intervalo. Se você executar uma consulta de intervalo em um índice com hash, isso resultará em uma verificação de índice.
Índices de hash do MongoDB para fragmentos - prós e contrasClique para tweet

Restrições de índice com hash

    1. Índices com hash não são compatíveis com matrizes.
    2. Índices com hash não podem ser índices compostos.
    3. Você não pode adicionar restrições exclusivas em índices com hash.