2013-08-22 19 views
43

Recentemente ho giocato un po 'con Node.js. Nel mio caso specifico ho finito con MongoDB, in parte perché aveva un senso per quel progetto perché era molto semplice, e in parte perché Mongoose sembrava essere un modo estremamente semplice per iniziare.I database relazionali sono inadeguati per Node.js?

Ho notato che sembra esserci un grado di antipatia nei confronti dei database relazionali quando si utilizza Node.js. Sembrano essere mal supportati rispetto ai database non relazionali all'interno dell'ecosistema Node.js, ma non riesco a trovare una ragione concisa per questo.

Quindi, la mia domanda è, c'è una solida ragione tecnica per cui i database relazionali sono meno adatti per lavorare con Node.js di alternative come MongoDB?

EDIT: Voglio solo per chiarire alcune cose:

  • che sto in particolare non in cerca di dettagli relativi a una specifica applicazione che sto costruendo
  • Né sto cercando per ragioni non tecniche (per esempio, non sono in cerca di risposte come "Node e MongoDB sono entrambi nuovi così gli sviluppatori li usano insieme")

Quello che sto cercando è esclusivamente motivi tecnici, SOLO. Ad esempio, se ci fosse un motivo tecnico per cui i database relazionali hanno avuto un rendimento insolitamente basso con Node.js, questo sarebbe il tipo di cosa che sto cercando (notare che dalle risposte finora non sembra che sia il caso)

+0

Questo è stato chiuso altrove: http://programmers.stackexchange.com/questions/198224/why-is-mongodb-popular-with-node-js – WiredPrairie

risposta

23

No, non c'è un motivo tecnico. Si tratta principalmente di opinioni e l'uso di NoSQL con Node.js è attualmente una scelta popolare.

Concesso, l'ecosistema del nodo è largely community-driven. Tutto ciò che va oltre il numero core API di Node richiede il coinvolgimento della comunità. E, certamente, le persone saranno più propense a supportare ciò che è in linea con le loro preferenze personali.

Tuttavia, molti utilizzano e supportano ancora database relazionali con Node.js. Alcuni progetti notevoli includono:

+0

questa è probabilmente una delle risposte più tristi che ho visto - ci sono enormi differenze tecniche tra MongoDB e RDBM, ecc. –

+1

@AlexanderMills Esistono certamente differenze tra i tipi di database, ma questi non significano che i database relazionali non sono adatti per l'uso con Node.js. –

+0

destra, sono d'accordo, vedere la mia risposta per le differenze tecniche –

8

Può spiegare esattamente quali sono i problemi specifici che si trovano ad affrontare con il database e node.js scelto?

alcuni motivi per cui MongoDB potrebbe essere più popolare di database relazionali:

  • MongoDB è essenzialmente un negozio oggetto JSON, in modo che si traduce molto bene per un'applicazione javascript. Le funzioni di MongoDB sono funzioni javascript.

  • Sto solo indovinando qui, ma dal momento che i database NoSQL sono più recenti e hanno programmatori più entusiasti che lo sperimentano, probabilmente avete un maggiore coinvolgimento in quei moduli NPM.

Oltre a ciò, Node.js è tecnicamente la scelta perfetta per qualsiasi tipo di applicazione di database.Ho lavorato personalmente su una piccola applicazione Node.js/MySQL e non ho affrontato alcun ostacolo.

Ma tornando al mio punto principale, potremmo parlare di questo tutto il giorno, e non è questo il forum. Se hai problemi specifici in qualsiasi codice con Node.js e il tuo database di scelta, chiedi invece queste domande.

Modifica: motivi strettamente tecnici, a parte la compatibilità JSON su entrambi i lati: non ce ne sono.

+0

Ho chiarito la mia domanda un po 'per escludere risposte non tecniche.Sto cercando solo ragioni tecniche (se ce ne sono) per cui uno sviluppatore non dovrebbe utilizzare un database relazionale con Node.js. –

+1

@MatthewDaly Ragioni strettamente tecniche, a parte la compatibilità JSON su entrambi i lati: non ce ne sono. Sentiti libero di utilizzare il tuo Node.js con il tuo archivio dati relazionale. Finché è popolare come MySQL o PostgreSQL, non dovresti avere problemi. – Munim

13

Mi piace Node.js, ma con il nodo in realtà rende più senso per utilizzare un RDBM, in contrapposizione a un DB non relazionale. Con una soluzione noSQL/non-relazionale, spesso è necessario eseguire join manuali nel codice Node.js e talvolta lavorare con una mancanza di transazioni, una caratteristica tecnica di RDBM con funzionalità di commit/rollback. Qui ci sono alcuni potenziali problemi con l'utilizzo dei server non relazionali DB + Node.JS:

(a) le giunture sono più lenti e le risposte sono più lenti, perché il nodo non è C/C++

(b) la join costosi bloccano il ciclo di eventi , perché il join si verifica nel codice Node.js non su alcuni server di database

(c) la scrittura manuale di join è spesso difficile e soggetta a errori; le vostre query noSQL potrebbero essere facilmente errate o il vostro codice di join potrebbe essere errato o non ottimale; i join ottimizzati sono già stati eseguiti dai master degli RDBM e i join negli RDBM sono stati dimostrati corretti, matematicamente nella maggior parte dei casi.

(d) Alcuni database non relazionali, come MongoDB, Non transazioni di supporto - nel caso della mia squadra, che significa che dobbiamo usare un blocco distribuito esterno in modo che più query possono essere raggruppati insieme in una transazione atomica . Sarebbe un po 'più semplice se potessimo semplicemente usare le transazioni ed evitare blocchi a livello di applicazione.

con un più potente sistema di database relazionale che può fare ottimizzato unisce in C/C++ sul server di database, piuttosto che nel codice Node.js, si lascia che il server Node.js fare ciò che è meglio a.

Con ciò detto, penso che sia piuttosto stupido che molti importanti fornitori noSQL non supportino i join (?). La completa normalizzazione è solo un sogno per quanto posso vederlo. E la mancanza di transazioni può essere un po 'strana. Senza transazioni, solo una query è atomica, non è possibile rendere atomiche più query senza un meccanismo di blocco a livello di applicazione:/

Per inciso, preferisco il termine "non relazionale" in contrapposizione a "noSQL".

9

Nella mia esperienza il nodo tende ad essere popolare con i database che hanno un'API stateless, questo si adatta molto bene alla natura asincrona dei nodi. La maggior parte dei database relazionali utilizza connessioni stateful per le transazioni, ciò minimizza i vantaggi principali di I/O asincroni non bloccati.

Problemi correlati