2012-10-02 25 views
6

Sono stato google per un po ', non sono sicuro se Spring Data MongoDB supporti per il salvataggio di massa.Spring Data MongoDB supporto bulk insert/save

Ho bisogno di salvare una raccolta di documenti in mongo come atomica, tutti salvati o nessuno salvato.

Qualcuno può condividere un collegamento o un codice di esempio per questo?

+1

Non esiste alcun concetto di transazioni in MongoDB. Ogni operazione è atomica ma un salvataggio in serie non può essere. –

risposta

12

Quando si effettua un salvataggio con il driver Java MongoDB, è possibile passare un solo documento a MongoDB.

Quando si esegue un inserimento, è possibile passare un singolo elemento o passare una serie di elementi. Quest'ultimo è ciò che risulterà in un "bulk-insert" (cioè, il comando di inserimento singolo da parte del client comporterà l'inserimento di più documenti sul server).

Tuttavia, poiché MongoDB non supporta la nozione di transazione, se uno degli inserimenti fallisce, non c'è modo di indicare che i documenti precedentemente inseriti devono essere cancellati o ripristinati.

Ai fini dell'atomicità, ogni inserimento di documento è un'operazione separata e non vi è alcun modo supportato per fare in modo che MongoDB inserisca tutto o nessuno.

Se questo è qualcosa che l'applicazione richiede ci possono essere altri modi per realizzarla: - cambiare il vostro schema in modo che questi sono documenti secondari di un unico documento genitore (poi c'è tecnicamente solo un "insert" del genitore documento) - scrivere la semantica della transazione nel codice dell'applicazione - utilizzare un database che supporta in modo nativo due transazioni di commit a fasi.

Problemi correlati