MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Un campo elenco può essere una chiave shard in MongoDB?

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.