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.