Ho lavorato principalmente su database RDBMS. Ha studiato di recente MongoDB e mi è piaciuto dove non è necessario definire gli schemi in anticipo. Quindi gli sviluppatori di applicazioni possono iniziare subito a scrivere il codice. Lo svantaggio principale che si afferma nella maggior parte degli articoli è che MongoDB (o qualsiasi altro DB basato su documenti) non è adatto ai requisiti transazionali. Mi chiedo perché è non va bene per le transazioni. Sto solo cercando di capire con l'aiuto del caso d'uso che abbiamo in qualsiasi applicazione web
Considera un caso d'uso in cui abbiamo una pagina del profilo utente con più indirizzi come indirizzo primario, secondario e postale. L'utente può avere più conti bancari. In RDBMS creeremo sotto le tabelle
- Utente (Tabella user_profile)
- Indirizzo (chiave esterna che punta alla tabella utente)
L'utente e l'indirizzo vengono creati in una transazione, ma sia l'indirizzo che la creazione dell'utente devono essere atomici.
- Account (chiave esterna che punta alla tabella utente)
Con MongoDb ci sarà un singolo documento JSON User
contenente array di indirizzi e matrici di account. Quindi la mia comprensione è che non c'è bisogno di transazioni in mongodb
al primo posto in molti posti perché memorizzerà tutte le cose relative all'utente in un singolo documento. Ma sì, in alcuni casi in cui la transazione avviene tra gli utenti
quindi avremo bisogno di transazioni come il trasferimento di account da un account a un altro account.
Quindi il modo in cui i documenti sono archiviati in MongoDB, la maggior parte dei luoghi in cui sono necessarie le transazioni saranno eliminati. Non è vero? Se sì c'è un modo in cui possiamo mantenere la transazione attraverso i documenti anche probabilmente attraverso il commit a due fasi?
Vedo un buon motivo per utilizzare mongodb o qualsiasi altro DB basato su documenti anche per applicazioni che richiedono transazioni in RDBMS, ma MongoDB elimina la necessità di transazione se stessa eccetto dove è richiesta la transazione attraverso il documento. L'utilizzo del DB basato su documenti offre il vantaggio di uno sviluppo più rapido, di un recupero e di un aggiornamento delle chiamate migliori.
Fammi sapere se la comprensione è corretta?
Aggiornamento: -
Gli altri vantaggi di Mongo che vedo sono: -
-
I join non sono richiesti, quindi prestazioni migliori e query meno complesse.
-
Il throughput di lettura / scrittura è migliore in mongo (non l'ho provato io stesso affermando solo dai fautori di archivi di documenti)
-
Se per un documento particolare ho bisogno di memorizzare alcune informazioni extra (ad esempio, voglio memorizzare il campo di commento per specifici tipi di documento) Non devo aggiungere una colonna per tutti i documenti,
-
Memorizza i dati in forma json
-
Elimina la necessità di transazioni nella maggior parte dei luoghi come nell'esempio sopra indicato perché memorizza tutte le informazioni connesse nel documento singolo stesso
Contro
Il più grande e unico problema che vedo non è in grado di supportare la transazione tra i documenti che è richiesta la maggior parte delle applicazioni Web in un determinato momento, anche se i numeri possono essere pochi. Abbiamo bisogno di ricorrere a tecniche come il commit a due fasi in quei casi.
Inoltre sono d'accordo sul fatto che la dichiarazione So application developers straightaway can start writing the code
può essere un vantaggio o una rovina a seconda della situazione. In RDBMS, il nostro tipo di policy viene elaborato, esaminato in anticipo e quindi seguito da tutti. Se vogliamo cambiare questa politica, è un po 'difficile. In Mongo come DB, non hai una politica in atto, ma devi decidere un contratto informale e contare che tutti lo seguono. Ovviamente ci sono molte possibilità che possa essere usato impropriamente, quindi (codice dell'applicazione) deve essere rivisto più spesso per confermare il contratto che abbiamo deciso e se per qualche motivo vogliamo cambiare contratto è molto facile da incorporare qui