database di documenti-oriented - Che cosa succede se il cambiamento definizioni del documento?

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

Domanda

A quanto ho capito, è possibile inserire tutte le informazioni non strutturate in un database document-oriented. Immaginiamo un documento come questo:

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

Più tardi, in una nuova versione, questa struttura viene riscritta per

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

Come si fa a fare questo con i database document-oriented? Avete preparare unione-script, che alterano tutte le voci presenti nel database? O sono modi migliori c'è possibile gestire i cambiamenti nella struttura?

È stato utile?

Soluzione

Rifattorizzare qui implica che ci sia una mappatura deterministica dal vecchio schema per il nuovo schema. Così l'opzione più efficace è quello di fare la stessa cosa faresti con un database SQL ed effettivamente aggiornare i documenti.

Banche dati orientati ai documenti vi danno un'altra opzione, anche se dipende da quale DODB e come lo si usa sul front-end. Tale facoltà è quella di lasciare semplicemente i dati da solo, e supportare la definizione "vecchia" nella vostra applicazione, come una sorta di opzione di compatibilità con le versioni. In altre parole, si sta facendo queste traduzioni on-the-fly, al contrario di un aggiornamento di una volta permanente.

Questo non è realmente un'opzione con un database SQL, perché dovreste mantenere la colonna obsoleta intorno e possibilmente indicizzati. Con un DODB, non sei davvero sprecare spazio di dati o di un indice. Avresti per pesare i vantaggi e gli svantaggi.

Lo svantaggio principale è, ovviamente, l'inconsistenza, che potrebbe crescere nel tempo e portare a bug. Un altro svantaggio è forse la spesa computazionale di fare questo on-the-fly, o l'impossibilità di utilizzare efficacemente la nuova struttura (per esempio, si potrebbe desiderare di indice sul solo la lastname). Così, la maggior parte del tempo, penso che vorrei solo scegliere di eseguire un aggiornamento di massa.

C'è un chiaro vantaggio di preservare i vecchi documenti, tuttavia; se non siete certi che la vostra refactoring è perfetto - per esempio, se i dati nella colonna name hanno non seguono una convenzione coerente, forse in alcuni casi di lastname, firstname e in altri casi di firstname lastname e in altri casi di company name - allora facendo le conversioni on-the-fly, senza fare un aggiornamento permanente consente di perfezionare la mappatura nel corso del tempo, in modo da poter utilizzare i campi firstname e lastname quando disponibile, ma ripiegare al name indovinando-game per i dati legacy.

Come detto, probabilmente sarei riservo la seconda opzione per i casi eccezionali in cui io non sono sicuro che sarò in grado di ottenere il "refactoring" corretta per ogni record / documento. Tuttavia, è un'opzione che è a disposizione di voi che non avete davvero con altri tipi di database.

Oltre a questi due, non vedo altre alternative chiare. E 'una specie di una decisione binario; o si aggiorna in modo permanente i dati esistenti o non fare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top