Database node.js [chiuso]


115

Sto cercando un database da associare a un'app node.js. Presumo che un db json / nosql sarebbe preferibile a un DB relazionale [posso fare a meno di qualsiasi disadattamento di impedenza json / sql]. Sto considerando:

  • CouchDB
  • MongoDB
  • Redis

Qualcuno ha opinioni / storie di guerra sulla compatibilità / implementabilità di quanto sopra con node.js? Qualche chiaro preferito?


2
Penso che sarebbe utile rispondere alla domanda se si menzionassero requisiti anche più ampi. Ogni DB ha i suoi pro, contro e specialità. Fateci sapere le specifiche!
Samyak Bhuta

Risposte:


79

Sono lo sviluppatore del driver mongodb per node.js. Sto usando mongodb per i miei progetti e sono stato molto contento delle prestazioni di mongodb.

Driver Mongodb per node.js

(Spina spudorata) Sentiti libero di fare qualsiasi domanda sul conducente su

Gruppo Google per il driver mongodb

o qui su Stackoverflow

Divertiti con node.js. Adoro la piattaforma: D


1
guarda anche mongoose, che è un ORM abbastanza carino che si basa su / utilizza il driver mongodb per node.js
taxilian

2
Stiamo usando Node.js + MongoDB da un po 'di tempo e sta andando alla grande. E complimenti a @christkv, il driver è solido come una roccia e non ti deluderà. Abbiamo implementato con facilità node.js / express.js + mongodb su EC2. Inoltre, tieni presente che non stiamo usando Mongoose. Parlando di sfide (supponendo che tu sia già bravo in Node), devi essere bravo nel modo Mongo di fare le cose (query e aggregazione) per qualsiasi seria applicazione o sviluppo di servizi. Imparare come Mongo è diverso dagli altri DB sarebbe davvero dovresti farlo prima se sei ancora in fase di valutazione.
Samyak Bhuta,

da quello che ho capito alcune funzionalità davvero interessanti stanno arrivando sulla linea per accelerare l'aggregazione in mongodb. Uno di questi sono le funzioni di aggregazione native. slideshare.net/cwestin63/mongodb-aggregation-mongosf-may-2011 e anche un possibile passaggio a v8 invece di spidermonkey per il motore javascript che consentirà a ciascun comando map-reduce di essere eseguito nel proprio thread (bye bye singlethreaded map-reduce )
christkv

25

Sebbene la tua scelta dipenda molto dalle funzionalità che stai cercando, apprezzo molto CouchDB per il suo ambiente JavaScript nativo. Sia i dati che le viste sono scritti in JavaScript, quindi a mio parere si adatta molto bene a node.js.

Sono disponibili anche diverse librerie client , alcune di livello piuttosto basso, altre davvero molto astratte.

Ma come ho detto, dovresti anche pensare alle funzionalità di cui hai bisogno per il tuo database.


18

Redis è una scelta popolare. Quello che stai cercando è un driver di database che non si blocchi.

I database che hai elencato sono tutti molto diversi. Redis prende l'idea degli archivi di valori-chiave e funziona con essa, aggiungendo una varietà di tipi di dati e modi per eseguire query sui dati. Le persone spesso notano che anche redis si ridimensiona molto bene; il che significa che ha un overhead molto basso nonostante abbia la capacità di eseguire.

Ecco un elenco dei moduli di database disponibili: http://wiki.github.com/ry/node/modules#database


Sì, Redis è fantastico, ma sembra che possiamo memorizzare dati binari ma non possiamo recuperarli! Almeno non sono riuscito a trovare alcun comando Redis per i dati binari.
AppleGrew

Veramente? Memorizzavo dati binari (usando la classe Buffer di Node) e funzionava bene. Quale versione di Redis / Node?
DanielS

12
Per impostazione predefinita, node_redis restituirà stringhe JavaScript per tutti i comandi. Per ottenere invece i buffer, creare un client con createClient (port, host, {return_buffers: true});
Matt Ranney

4
@ MattRanney, il risparmio mi ha fatto risparmiare ore in più di scavare! Non l'ho visto da nessuna parte nei documenti di node-Redis e ho letteralmente sprecato 5 ore. Il mio apprezzamento è senza limiti in questo momento.
ghayes

beh, tutto suona bene in teoria ma prendi un esempio pratico, hai un'API JSON che interroghi ogni 20 secondi che restituisce un array, vuoi essere in grado di memorizzarlo nella cache, andresti ancora con Redis? devo anche fare una ricerca sfocata attraverso questo array
PirateApp

15

Mi piace molto CouchDB. È un po 'una curva di apprendimento, ma le visualizzazioni sono davvero potenti una volta che hai capito come usarle. C'è un modulo chiamato cradle su github e npm con cui è davvero facile lavorare. Non sono stato in grado di testare quanto sia veloce, ma è davvero flessibile (puoi accedere ai tuoi dati anche da un browser se lo desideri).

Il problema principale qui è quale design del database ha senso per la tua applicazione. Hai dati che sono in gran parte di natura chiave-valore? In tal caso, utilizza Redis. Hai dati in cui non tutti i documenti hanno necessariamente gli stessi campi? In tal caso, utilizza un database NoSQL come CouchDB.

La cosa peggiore successiva all'utilizzo di un database di blocco è l'utilizzo del database sbagliato per i tuoi dati. CouchDB è gestito da Apache, quindi sai che è di buona qualità, ma non ha senso usarlo se i tuoi dati hanno più senso in una tabella SQL o in un semplice archivio di valori-chiave.

Pensa al tuo caso d'uso. Sarà più probabile che tu voglia fare una ricerca full-text, ottenere semplicemente i dati per chiave o ottenere intervalli di documenti con attributi simili?


8

Potrei voler controllare Persistence , persistance / database system di alto livello per node.js.

da thechangelog.com :

Persistence è un progetto per consentire un'API di alto livello per la persistenza dei dati tra le esecuzioni del processo. L'obiettivo è supportare backend facili da usare, potenti, flessibili o tutto quanto sopra, se possibile.

I database supportati includono:

  • PostgreSQL: un database relazionale di livello aziendale. Il driver è implementato in JavaScript puro e comunica su TCP utilizzando il protocollo cablato PostgreSQL.
  • Sqlite3: un database relazionale semplice, veloce e senza server. Questo driver è un wrapper per il programma sqlite3 della riga di comando. Richiede che sqlite3 sia nel percorso. La comunicazione è estremamente veloce, ma i tipi non sono molto precisi. Vengono restituiti solo stringhe e valori nulli.
  • MongoDB - Un database scalabile, ad alte prestazioni, open source, privo di schemi e orientato ai documenti. Questo driver implementa anche il protocollo wire in JavaScript e comunica con il server su TCP.
  • JSON-DB: un database di sistema senza schemi e orientato ai documenti che utilizza semplici file flat contenenti oggetti JSON. Questo non ha alcun requisito tranne il nodo e un filesystem. Le prestazioni devono essere determinate una volta implementate completamente.

13
La persistenza non è stata aggiornata da marzo 2010 ed è disponibile nella versione 0.0.4, quindi sembra che potrebbe essere stata abbandonata.
Lacchè


3

Non sono sicuro che la soluzione corretta sia concentrarsi esclusivamente sulla mappatura di un database al tuo stack web, ma piuttosto anche sulla considerazione dei requisiti specifici dell'applicazione.

Stai analizzando i feed di Twitter o altri dati ad alto volume per i modelli, ma non hai bisogno del supporto transazionale? Quindi scegli qualcosa di veramente veloce.

Vuoi solo memorizzare alcune informazioni di base in poche tabelle e attualmente non è un'app "focalizzata sull'azienda"? Quindi scegli qualcosa di interessante da imparare.

Forse hai intenzione di archiviare dati che sono veramente importanti per un cliente, robusti, che devono essere transazionali e avere la replica in tempo reale su strutture di hosting remoto, ecc. Quindi forse guarda qualcosa come postgresql. Non rispecchierebbe altrettanto bene, ma il driver node.js funziona abbastanza bene e se non hai paura mortale di sql ottiene ciò che desideri in / out abbastanza facilmente.

Per quanto riguarda la mia opinione, penso che andare con uno stack più nuovo come node.js (rispetto ai framework tradizionali in php / java) stia aggiungendo una "nuova" complessità tale da non dover aggiungere ulteriori livelli tutti in una volta. Questo è un buon articolo che discute che:

http://nodeguide.com/convincing_the_boss.html


2

Parlerò della mia esperienza: CouchDB viene fornito con una curva di apprendimento definita, mentre MongoDB mi è sembrato molto facile da imparare e configurare. Non ho mai usato Redis. Suggerisco MongoDB - ma quel fanboyismo forse spudorato - non ho numeri, eh, solo pretese di facilità d'uso.


1

sporco è ancora un altro archivio chiave-valore di file flat. Come suggerisce il nome, è una soluzione rapida e sporca ma performante per casi semplici. Non sono l'autore :)



0

Ho trovato CouchDB molto facile da padroneggiare. Ci sono un sacco di libri elettronici disponibili su Internet che vi insegnerà come utilizzare CouchDB con Node.js .

Ho trovato questo libro molto utile per imparare a usare CouchDB.

Per utilizzare CouchDB con Node.js, utilizzo il modulo NANO .

CouchDB può essere ospitato su Iriscouch o Cloudant .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.