node.js Datenbank [geschlossen]

115

Ich suche nach einer Datenbank, die mit einer node.js-App gekoppelt werden kann. Ich gehe davon aus, dass eine json / nosql-Datenbank einer relationalen Datenbank vorzuziehen ist [ich kann auf eine nicht übereinstimmende json / sql-Impedanz verzichten]. Ich denke darüber nach:

  • couchdb
  • mongodb
  • redis

Hat jemand irgendwelche Ansichten / Kriegsgeschichten zur Kompatibilität / Bereitstellbarkeit der oben genannten mit node.js? Irgendwelche klaren Favoriten?

Justin
quelle
2
Ich denke, es wäre hilfreich, die Frage zu beantworten, wenn noch umfassendere Anforderungen genannt werden. Jede DB hat ihre eigenen Vor- und Nachteile und Besonderheiten. Teilen Sie uns die technischen Daten mit!
Samyak Bhuta

Antworten:

79

Ich bin der Entwickler des Mongodb-Treibers für node.js. Ich benutze Mongodb für meine eigenen Projekte und war sehr zufrieden mit der Leistung von Mongodb.

Mongodb-Treiber für node.js.

(Schamloser Stecker) Sie können jederzeit Fragen zum Treiber unter stellen

Google-Gruppe für den Mongodb-Treiber

oder hier bei Stackoverflow

Viel Spaß mit node.js. Ich liebe die Plattform absolut: D.

christkv
quelle
1
Schauen Sie sich auch Mungo an, ein ziemlich nettes ORM, das auf dem Mongodb-Treiber für node.js aufbaut / diesen verwendet
Taxilian
2
Wir verwenden Node.js + MongoDB seit einiger Zeit und es läuft großartig. Und ein großes Lob an @christkv, der Fahrer ist absolut solide und wird Sie nicht enttäuschen. Wir haben die Datei node.js / express.js + mongodb problemlos auf EC2 bereitgestellt. Beachten Sie auch, dass wir keinen Mungo verwenden. Wenn Sie über Herausforderungen sprechen (vorausgesetzt, Sie sind bereits gut in Node), müssen Sie gut in Mongo sein, um die Dinge (Abfragen und Aggregation) für jede ernsthafte Anwendungs- oder Serviceentwicklung zu erledigen. Wenn Sie sich noch in der Evaluierungsphase befinden, sollten Sie zunächst lernen, wie sich Mongo von anderen DBs unterscheidet.
Samyak Bhuta
Soweit ich weiß, kommen einige wirklich coole Funktionen auf den Markt, um die Aggregation in Mongodb zu beschleunigen. Eine davon sind native Aggregationsfunktionen. slidehare.net/cwestin63/mongodb-aggregation-mongosf-may-2011 und auch ein möglicher Wechsel zu v8 anstelle von spidermonkey für die Javascript-Engine, mit dem jeder Befehl zum Reduzieren von Karten in einem eigenen Thread ausgeführt werden kann (bye bye singlethreaded map-redu )
christkv
25

Obwohl Ihre Wahl sehr stark von den Funktionen abhängt, die Sie anstreben, schätze ich CouchDB für seine native JavaScript-Umgebung sehr. Sowohl Daten als auch Ansichten sind in JavaScript geschrieben, sodass sie meiner Meinung nach sehr gut zu node.js passen.

Es gibt auch verschiedene Client-Bibliotheken , einige sind eher niedrig, andere wirklich sehr abstrahiert.

Aber wie gesagt, Sie sollten auch über die Funktionen nachdenken, die Sie für Ihre Datenbank benötigen.

b_erb
quelle
18

Redis ist eine beliebte Wahl. Was Sie suchen, ist ein Datenbanktreiber, der nicht blockiert.

Die von Ihnen aufgelisteten Datenbanken sind alle sehr unterschiedlich. Redis greift die Idee von Schlüsselwertspeichern auf und führt sie aus. Dabei werden verschiedene Datentypen und Methoden zum Abfragen von Daten hinzugefügt. Die Leute bemerken oft, dass Redis auch sehr gut verkleinert werden; Dies bedeutet, dass der Overhead trotz der Leistungsfähigkeit sehr gering ist.

Hier ist eine Liste der verfügbaren Datenbankmodule: http://wiki.github.com/ry/node/modules#database

Jökull
quelle
Ja, Redis ist großartig, aber anscheinend können wir Binärdaten speichern, aber nicht abrufen! Zumindest konnte ich keinen Redis-Befehl für Binärdaten finden.
AppleGrew
"Ja wirklich?" Ich habe Binärdaten gespeichert (unter Verwendung der Buffer-Klasse von Node) und es hat gut funktioniert. Welche Version von Redis / Node?
DanielS
12
Standardmäßig gibt node_redis JavaScript-Zeichenfolgen für alle Befehle zurück. Um stattdessen Puffer zu erhalten, erstellen Sie einen Client mit createClient (Port, Host, {return_buffers: true}).
Matt Ranney
4
@ MattRanney, du sparst mir gerade Stunden mehr beim Graben! Ich habe dies nirgendwo in den Node-Redis-Dokumenten gesehen und bin buchstäblich 5 Stunden in die Zeit gesunken. Meine Wertschätzung ist in diesem Moment unbegrenzt.
Ghayes
Theoretisch klingt alles gut, aber nehmen Sie ein praktisches Beispiel: Sie haben eine JSON-API, die Sie alle 20 Sekunden abfragen und die ein Array zurückgibt. Sie möchten dies zwischenspeichern können. Würden Sie trotzdem mit Redis arbeiten?
Ich
15

Ich mag CouchDB wirklich. Es ist eine Art Lernkurve, aber Ansichten sind wirklich mächtig, wenn Sie erst einmal verstanden haben, wie man sie verwendet. Es gibt ein Modul namens Cradle auf Github und Npm , mit dem man sehr einfach arbeiten kann. Ich konnte nicht testen, wie schnell es ist, aber es ist sehr flexibel (Sie können auch in einem Browser auf Ihre Daten zugreifen, wenn Sie möchten).

Das Hauptproblem hierbei ist, welches Datenbankdesign für Ihre Anwendung sinnvoll ist. Haben Sie Daten, die größtenteils von zentraler Bedeutung sind? Wenn ja, verwenden Sie Redis. Haben Sie Daten, bei denen nicht alle Dokumente unbedingt dieselben Felder haben? Verwenden Sie in diesem Fall eine NoSQL-Datenbank wie CouchDB.

Das nächst schlechtere an der Verwendung einer blockierenden Datenbank ist die Verwendung der falschen Datenbank für Ihre Daten. CouchDB wird von Apache verwaltet, sodass Sie wissen, dass es von guter Qualität ist. Es ist jedoch nicht sinnvoll, es zu verwenden, wenn Ihre Daten in einer SQL-Tabelle oder einem einfachen Schlüsselwertspeicher sinnvoller sind.

Denken Sie an Ihren Anwendungsfall. Möchten Sie eher eine Volltextsuche durchführen, nur Daten nach Schlüssel abrufen oder Bereiche von Dokumenten mit ähnlichen Attributen abrufen?

Beatgammit
quelle
8

Vielleicht möchten Sie Persistenz , Persistenz- / Datenbanksystem auf hoher Ebene für node.js überprüfen.

von thechangelog.com :

Persistenz ist ein Projekt, mit dem eine API auf hoher Ebene für die Persistenz von Daten zwischen Prozessläufen ermöglicht werden soll. Ziel ist es, Backends zu unterstützen, die einfach zu bedienen, leistungsstark, flexibel oder nach Möglichkeit alle oben genannten Funktionen sind.

Unterstützte Datenbanken umfassen:

  • PostgreSQL - Eine relationale Datenbank auf Unternehmensebene. Der Treiber ist in reinem JavaScript implementiert und kommuniziert über TCP mithilfe des PostgreSQL-Wire-Protokolls.
  • Sqlite3 - Eine einfache, schnelle, serverlose relationale Datenbank. Dieser Treiber ist ein Wrapper um das Befehlszeilenprogramm sqlite3. Es erfordert, dass sqlite3 im Pfad ist. Die Kommunikation ist extrem schnell, aber die Typen sind nicht sehr präzise. Es werden nur Zeichenfolgen und Nullen zurückgegeben.
  • MongoDB - Eine skalierbare, leistungsstarke, Open Source, schemafreie, dokumentenorientierte Datenbank. Dieser Treiber implementiert auch das Drahtprotokoll in JavaScript und kommuniziert mit dem Server über TCP.
  • JSON-DB - Eine hausgemachte systemschemafreie, dokumentenorientierte Datenbank, die einfache Flatfiles mit JSON-Objekten verwendet. Dies hat überhaupt keine Anforderungen außer Knoten und einem Dateisystem. Die Leistung ist zu bestimmen, sobald sie vollständig implementiert ist.
Gary S. Weaver
quelle
13
Die Persistenz wurde seit März 2010 nicht mehr aktualisiert und befindet sich in Version 0.0.4. Es scheint also, als ob sie aufgegeben wurde.
Lacker
5

Haftungsausschluss: Ich bin der Autor.

Vielleicht werfen Sie einen Blick auf BarricaneDB hier angekündigt .

Fadedbee
quelle
3

Ich bin mir nicht sicher, ob die richtige Lösung darin besteht, sich ausschließlich auf die Zuordnung einer Datenbank zu Ihrem Webstack zu konzentrieren, sondern auch anwendungsspezifische Anforderungen zu berücksichtigen.

Analysieren Sie Twitter-Feeds oder andere Daten mit hohem Datenvolumen auf Muster, benötigen jedoch keine Transaktionsunterstützung? Dann wählen Sie etwas sehr schnell.

Möchten Sie nur einige wirklich grundlegende Informationen in ein paar Tabellen speichern und es handelt sich derzeit nicht um eine "unternehmensorientierte" App? Wählen Sie dann etwas Cooles aus, um es zu lernen.

Vielleicht werden Sie Daten speichern, die für einen Client wirklich wichtig sind, robust sind, transaktional sein müssen und eine Live-Replikation auf Remote-Hosting-Einrichtungen usw. haben. Dann schauen Sie sich vielleicht etwas wie postgresql an. Es würde nicht so gut spiegeln, aber der node.js-Treiber funktioniert ziemlich gut und wenn Sie keine Todesangst vor SQL haben, bekommt er ziemlich einfach das, was Sie wollen.

Was meine eigene Meinung betrifft, denke ich, dass die Verwendung eines neueren Stacks wie node.js (im Vergleich zu herkömmlichen Frameworks in PHP / Java) genug "neue" Komplexität hinzufügt, dass man nicht alle zusätzlichen Ebenen auf einmal hinzufügen sollte. Dies ist ein guter Artikel, in dem Folgendes besprochen wird:

http://nodeguide.com/convincing_the_boss.html

Qooleot
quelle
2

Ich werde aus meiner Erfahrung sprechen: CouchDB hat eine bestimmte Lernkurve, während MongoDB für mich sehr einfach zu erlernen und einzurichten war. Ich habe noch nie Redis benutzt. Ich schlage MongoDB vor - aber diesen vielleicht schamlosen Fanboyismus - ich habe keine Zahlen, heh, nur Ansprüche auf Benutzerfreundlichkeit.

PinkElephantsOnParade
quelle
1

Dirty ist ein weiterer Flat-File-Schlüsselwertspeicher. Wie der Name schon sagt, ist es eine schnelle und schmutzige, aber performante Lösung für einfache Fälle. Ich bin nicht der Autor :)

nponeccop
quelle