Poiché mongo non ha uno schema, vuol dire che non dovremo fare migrazioni quando cambiamo i modelli?Il django con mongodb fa delle migrazioni una cosa del passato?
Che aspetto ha il processo di migrazione con un db non relazionale?
Poiché mongo non ha uno schema, vuol dire che non dovremo fare migrazioni quando cambiamo i modelli?Il django con mongodb fa delle migrazioni una cosa del passato?
Che aspetto ha il processo di migrazione con un db non relazionale?
Penso che questa sia davvero una buona domanda, ma le risposte saranno un po 'sparse in base alle librerie che stai utilizzando e alle tue aspettative per una "migrazione".
Diamo uno sguardo ad alcune azioni comuni di migrazione:
alcune rughe
Tuttavia, il concetto di un nome di campo in tandem con un oggetto ActiveRecord è solo un po distorta. Un oggetto ActiveRecord fornisce effettivamente mappature delle proprietà dell'oggetto ai campi effettivi del database.
In un tipico RDBMS la "dimensione" di un nome di campo non è realmente rilevante. Tuttavia, in Mongo, il nome del campo occupa effettivamente spazio dati e questo fa una grande differenza in termini di prestazioni.
Ora, se si sta utilizzando una forma di "oggetto dati" come ActiveRecord, perché si tenta di memorizzare i nomi dei campi completi nei dati? Il DB dovrebbe probabilmente memorizzare tutti i campi in ordine alfabetico con una mappa sul lato Oggetto. Quindi un documento potrebbe avere 8 campi/proprietà e i nomi dei DB dovrebbero essere "a", "b" ... "j", ma i nomi degli oggetti sarebbero leggibili come "Nome", "Prezzo", "Quantità".
Il motivo per cui viene presentato il problema è che aggiunge un'altra piega a Modificare un nome di campo. Se stai implementando una mappatura, la modifica di un nome di campo non causa affatto una migrazione.
Alcuni più rughe
Se fai desidera implementare una migrazione su una cancellazione, allora dovrete farlo dopo una distribuzione. Dovrai anche riconoscere che non salverai spazio sul disco quando lo farai.
Mongo pre-alloca lo spazio e in realtà non "restituisce" a meno che non si esegua una riparazione DB. Quindi, se elimini un mucchio di campi sui documenti, quei documenti occupano ancora lo stesso spazio sul disco. Se i documenti vengono successivamente spostati, è possibile recuperare spazio, tuttavia i documenti si spostano solo quando crescono.
Se si rimuove un grande campo da un sacco di documenti che si vorrà fare una riparazione o un check out il nuovo compact
di comando sul posto.
Nessun proiettile d'argento. Aggiungere o rimuovere campi è più semplice con db non relazionale (non utilizzare campi non necessari o utilizzare nuovi campi), la ridenominazione di un campo è più semplice con il db tradizionale (di solito devi cambiare molti dati in caso di ridenominazione del campo in schemi db), la migrazione dei dati è alla pari, a seconda dell'attività.
Che aspetto ha il processo di migrazione con un db non relazionale?
Dipende se è necessario aggiornare tutti i dati esistenti o meno.
In molti casi, potrebbe non essere necessario toccare i vecchi dati, ad esempio quando si aggiunge un nuovo campo facoltativo. Se anche questo campo ha un valore predefinito, potrebbe non essere necessario aggiornare i vecchi documenti, se l'applicazione è in grado di gestire correttamente un campo mancante. Tuttavia, se si desidera creare un indice sul nuovo campo per poter cercare/filtrare/ordinare, è necessario aggiungere nuovamente il valore predefinito nei vecchi documenti.
Qualcosa come la ridenominazione dei campi (banale in un db relazionale, perché è sufficiente aggiornare il catalogo e non toccare alcun dato) è un'importante operazione in MongoDB (è necessario riscrivere tutti i documenti).
Se è necessario aggiornare i dati esistenti, in genere è necessario scrivere una funzione di migrazione che itera su tutti i documenti e li aggiorna uno per uno (sebbene questo processo possa essere condiviso ed eseguito in parallelo). Per i set di dati di grandi dimensioni, questo può richiedere molto tempo (e spazio) e si possono perdere le transazioni (se si finisce con una migrazione che si è interrotta a metà).
Non credo che la rinomina del campo esista ancora sull'ultimo mongo. –