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

Um campo de lista pode ser uma chave de fragmentação no MongoDB?


Com base em alguns dos feeds que estou recebendo que parecem afirmar que não é possível fragmentar usando um campo de lista como uma chave de fragmento, eu queria ilustrar como esse caso de uso poderia ser fragmentado usando as limitações do MongoDB:

Objeto original:

widget:
{
    primary_key: '2389sdjsdafnlfda'

    categories: ['hair', 'nails', 'dress']
    colors:     ['red', 'white']

    #All the other fields in the document that don't need to be queried upon: 
    ...
    ...
}

A camada de dados divide o objeto em vários objetos de ponteiro com base no número de elementos no campo escolhido para a chave de fragmentação:

widget_pointer:
{
    primary_key: '2389sdjsdafnlfda'
    categories: 'hair',
    colors:     ['red', 'white']
}

widget_pointer:
{
    primary_key: '2389sdjsdafnlfda'
    categories: 'nails',
    colors:     ['red', 'white']
}

widget_pointer:
{
    primary_key: '2389sdjsdafnlfda'
    categories: 'dress',
    colors:     ['red', 'white']
}

Explicação:

  • O campo categories agora pode ser a chave de fragmentação no MongoDB.
  • O objeto original agora será armazenado em um armazenamento de valor-chave. As consultas nos dados no MongoDB retornarão um objeto de ponteiro que será usado para obter o objeto do armazenamento de valor-chave.
  • As consultas nos dados do MongoDB atingirão apenas um fragmento.
  • As inserções nos dados do MongoDB atingirão tantos fragmentos quantos forem os elementos na lista; na maioria dos casos, apenas um pequeno subconjunto do número total de fragmentos será afetado.