Sulla base di alcuni dei feedback che ottengo che sembrano affermare che non è possibile eseguire lo shard utilizzando un campo elenco come chiave shard, volevo illustrare come questo caso d'uso potrebbe essere suddiviso utilizzando le limitazioni di MongoDB:
Oggetto originale:
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:
...
...
}
Il livello dati divide l'oggetto in più oggetti puntatore in base al numero di elementi nel campo scelto per la chiave shard:
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']
}
Spiegazione:
- Il campo
categories
ora può essere la chiave shard in MongoDB. - L'oggetto originale verrà ora archiviato in un archivio chiave-valore. Le query sui dati in MongoDB restituiranno un oggetto puntatore che verrà utilizzato per ottenere l'oggetto dall'archivio valori-chiave.
- Le query sui dati di MongoDB colpiranno solo uno shard.
- Gli inserimenti nei dati MongoDB colpiranno tanti shard quanti sono gli elementi nell'elenco, nella maggior parte dei casi, sarà interessato solo un piccolo sottoinsieme del numero totale di shard.