base de données orientée documents - Que faire si le document en modifier les définitions?

StackOverflow https://stackoverflow.com/questions/2845899

Question

Si je comprends bien, vous pouvez entrer des informations non structurées dans une base de données orientée document. Imaginons un document comme celui-ci:

{
  name: 'John Blank',
  yearOfBirth: 1960
}

Plus tard, dans une nouvelle version, cette structure est refactorisé à

{
  firstname: 'John',
  lastname: 'Blank',
  yearOfBirth: 1960
}

Comment faites-vous cela avec les bases de données orientées document? Avez-vous pour préparer fusion-scripts, qui modifient toutes vos entrées dans la base de données? Ou y at-il de meilleures façons dont vous pouvez gérer les changements dans la structure?

Était-ce utile?

La solution

refactorisation ici implique qu'il ya une cartographie déterministe de l'ancien schéma du nouveau schéma. Donc, la solution la plus efficace est de faire la même chose que vous feriez avec une base de données SQL et mettre à jour les documents.

Les bases de données orientées document ne vous donner une autre option, même si elle dépend de DODB et comment vous l'utilisez sur le front-end. Cette option est de laisser simplement les données seul, et appuyer la définition de « vieux » dans l'application comme une sorte d'option compatibilité descendante. En d'autres termes, vous faites ces traductions sur la volée, par opposition à une mise à jour unique permanent.

Ce n'est pas vraiment une option avec une base de données SQL parce que vous auriez à garder la colonne obsolète autour et peut-être indexé. Avec un DODB, vous n'êtes pas vraiment perdre de l'espace de données ou de l'indice. Il faudrait peser les avantages par rapport aux inconvénients.

Le principal inconvénient est, de toute évidence, l'incohérence, ce qui pourrait se développer au fil du temps et conduire à des bugs. Un autre inconvénient est peut-être la charge de calcul de le faire sur la volée, ou l'incapacité d'utiliser efficacement la nouvelle structure (par exemple, vous pouvez indexer uniquement sur le lastname). Ainsi, la plupart du temps, je pense que je voudrais simplement choisir d'exécuter une mise à jour de masse.

Il y a un avantage clair pour préserver les documents anciens, cependant; si vous n'êtes pas certain que votre refactoring est parfait - par exemple, si les données de votre colonne name ne suivaient pas une convention cohérente, peut-être dans certains cas, il est lastname, firstname et dans d'autres cas, il est firstname lastname et dans d'autres cas, il est company name - alors faire vos conversions sur la volée sans faire une mise à jour permanente vous permet d'affiner la cartographie au fil du temps, vous pouvez utiliser les champs de firstname et lastname lorsqu'ils sont disponibles, mais revenir à la name deviner-jeu pour les données existantes.

Comme indiqué, je serais probablement réserve la deuxième option pour des cas exceptionnels, où je ne suis pas convaincu que je serai en mesure d'obtenir le « refactoring » correcte pour chaque enregistrement / document. Néanmoins, il est une option qui est disponible pour vous que vous n'avez pas vraiment avec d'autres types de bases de données.

En dehors de ces deux, je ne vois pas d'autres alternatives claires. Il est une sorte de décision binaire; soit mise à jour en permanence les données existantes ou vous ne faites pas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top