MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Un champ de liste peut-il être une clé de partition dans MongoDB ?

Sur la base de certains des commentaires que je reçois et qui semblent affirmer qu'il n'est pas possible de partitionner en utilisant un champ de liste comme clé de partition, je voulais illustrer comment ce cas d'utilisation pourrait être partagé en utilisant les limitations de MongoDB :

Objet d'origine :

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: 
    ...
    ...
}

La couche de données divise l'objet en plusieurs objets pointeurs en fonction du nombre d'éléments dans le champ choisi pour la clé de partition :

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']
}

Explication :

  • Le champ categories peut maintenant être la clé de partition dans MongoDB.
  • L'objet d'origine sera désormais stocké dans un magasin clé-valeur. Les requêtes sur les données dans MongoDB renverront un objet pointeur qui sera utilisé pour obtenir l'objet du magasin clé-valeur.
  • Les requêtes sur les données MongoDB ne toucheront qu'un seul fragment.
  • Les insertions sur les données MongoDB toucheront autant de fragments qu'il y a d'éléments dans la liste, dans la plupart des cas, seul un petit sous-ensemble du nombre total de fragments sera affecté.