Anwendungsfälle für NoSQL [geschlossen]

144

NoSQL hat in letzter Zeit in unserer Branche viel Aufmerksamkeit erhalten. Ich bin wirklich interessiert daran, was die Leute über die besten Anwendungsfälle für die Verwendung über relationalen Datenbankspeicher denken. Was sollte einen Entwickler zu der Annahme veranlassen, dass bestimmte Datensätze besser für eine NoSQL-Lösung geeignet sind? Ich interessiere mich besonders für MongoDB und CouchDB, da sie anscheinend die größte Abdeckung in Bezug auf die PHP-Entwicklung erhalten, und das ist mein Fokus.

Robjmills
quelle
6
Cassandra und MongoDB sind völlig unterschiedliche Produkte - völlig unterschiedliche Kategorien . Diese Frage wäre einfacher zu beantworten, wenn nach Anwendungsfällen für einen bestimmten Datenbanktyp (OODB, DODB, DKVS usw.) gefragt würde. "NoSQL" ist nur ein Überbegriff für "alles, was nicht SQL ist" - es könnte sein Genauso gut wie BerkleyDB oder eine Reihe von Flatfiles, die auf einer Netzwerkfreigabe gespeichert sind.
Aaronaught
@Aaronaught ich schätze die Unterschiede, ich denke, ich bin vielleicht schuldig, einen Überbegriff mit nosql
robjmills

Antworten:

86

Versprechen Sie sich nur, dass Sie niemals versuchen werden, ein relationales Datenmodell einer NoSQL-Datenbank wie MongoDB oder CouchDB zuzuordnen ... Dies ist der häufigste Fehler, den Entwickler bei der Bewertung neuer Technologien machen.

Dieser Ansatz ist analog zu dem Versuch, ein Auto zu nehmen und damit Ihren Wagen wie ein Pferd die Straße hinunterzuziehen.

Es ist natürlich eine natürliche Reaktion aufgrund der Erfahrung aller, aber der wahre Wert bei der Verwendung einer Dokumentendatenbank besteht darin, Ihr Datenmodell zu vereinfachen und Ihr Leid als Entwickler zu minimieren. Ihre Codebasis wird kleiner, Ihre Fehler werden weniger und leichter zu finden sein, die Leistung wird fantastisch sein und die Skalierung wird viel einfacher.

Als Joomla-Gründer bin ich voreingenommen :-), aber aus dem CMS-Bereich kommend, ist so etwas wie MongoDB eine Silberkugel, da Inhalte ganz natürlich Dokumentensystemen zugeordnet werden.

Ein weiterer guter Fall für MongoDB ist die Echtzeitanalyse, da MongoDB eine sehr starke Leistung und Skalierbarkeit aufweist, insbesondere in Bezug auf die Parallelität. Auf der MongoDB.org-Website gibt es Fallstudien, die diese Attribute belegen.

Ich stimme der Vorstellung zu, dass jede Datenbank ihre eigenen Ziele und Anwendungsfälle hat. Nehmen Sie den Zweck jeder Datenbank zur entsprechenden Auswertung.

Raumschlüssel
quelle
1
Wirklich gut gesagt, Spacemonkey, ich bin in der gleichen Position wie Seengee, klar, wir sollen neu denken und uns fragen, wie ich meine Anwendungsdaten in eine Dokumentstruktur strukturiere und uns dabei von der RDBMS-Denkweise entferne diese Analyse
am
49

Einige großartige Anwendungsfälle - für MongoDB jedenfalls - werden auf der MongoDB-Site erwähnt. Die angegebenen Beispiele sind Echtzeitanalyse, Protokollierung und Volltextsuche. Diese Artikel sind alle eine Lektüre wert http://www.mongodb.com/use-cases

Es gibt auch eine großartige Beschreibung, welche NoSQL-Datenbank für welche Art von Projekt am besten geeignet ist: http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis

Robjmills
quelle
8

Was ich an NoSQL mag, hat nichts mit Leistung und alles mit Benutzerfreundlichkeit zu tun. Dokumentenspeicher sind einfacher zu bearbeiten, wenn Ihre atomaren Dateneinheiten dokumentähnlich sind, da die Serialisierung zu und von Objekten trivial ist. Es macht einfach mehr Spaß und das ist ein wichtiger Faktor für persönliche oder Nebenprojekte.

Ysimonson
quelle
1
Ich würde nicht genau sagen, dass es trivial ist , aber dies ist ansonsten ein guter Punkt für dokumentenorientierte Datenbanken. Das Gegenteil gilt für einige andere NoSQL-Produkte. DKVS sind in der Regel schwieriger zuzuordnen als SQL / relationale DBs.
Aaronaught
8

Ich benutze seit einiger Zeit NoSQL-DBs und dies ist mein Beitrag zum Thema:

Ein großer Anwendungsfall für eine NoSQL - Datenbank ist eine Anwendung für Statistik und / oder Berichte Generation , expecially , wenn Daten von einer Dritten Quelle vorgesehen ist.

In einer solchen Situation kann eine NoSQL-Datenbank eine gute Wahl sein

Betrachten wir zum Beispiel MongoDB :

Sobald Sie Ihre Daten in JSON haben (sie könnten von einer Drittanbieter-API stammen oder aus einer SQL-Anwendung exportiert werden), ist es in MongoDB ziemlich einfach, die JSON- Daten in die Datenbank zu importieren und zu aktualisieren . beispielsweise mit dem Befehlszeilen mongoimportDienstprogramm

Zu diesem Zeitpunkt ist es sehr einfach, dynamische Abfragen mit Filterung und Gruppierung zu erstellen , die gut zu dieser Art von Anwendung passen.

Beispiel: Verwenden des Aggregation Framework :

$pipeline = [];

//filter by date
$pipeline[] = [ '$match' => [ 'created_at' => [ '$gte' => $starDate, '$lte' => $endDate ]  ]  ];

//if we want to filter by a specific field, we add the filter to the pipeline array
if( $filters->isFilterByField() )
    $pipeline[] = [ '$match' => [ 'field' => $fieldValue ] ];    

//group the results by date and get the count
$pipeline[] = [ '$group' => [ '_id' => '$created_at', 'num_elements' => [ '$sum' => 1 ] ] ];

return $collection->aggretate( $pipeline );

Ich möchte auf die Leichtigkeit hinweisen, mit der wir Filter mithilfe von PHP-Datenstrukturen dynamisch hinzufügen / entfernen können und die mühsame Verkettung von Zeichenfolgen beim Aufbau unserer Abfragen vermeiden. Mit diesem Ansatz ist das Hinzufügen / Entfernen von Filtern dinamycally so einfach wie das Hinzufügen / Entfernen von Elementen zu einem Array

Ein weiterer großer Vorteil ergibt sich aus der Tatsache, dass eine solche Lösung wahrscheinlich schneller ist als die Verwendung einer relationalen Datenbank , in der Verknüpfungen mit verschiedenen Tabellen hergestellt werden müssen, um alle benötigten Daten zu erhalten

Außerdem ist dieser Anwendungsfall optimal, da alle Hauptgrenzen einer NoSQL-Datenbank vermieden werden:

  • Fehlende Transaktionen: Die Anwendung führt keine Schreibvorgänge durch, sondern nur Lesevorgänge. Daher benötigen wir überhaupt keine Transaktionen

  • Fehlende Verknüpfungen zwischen Tabellen: Wir benötigen keine Verknüpfungen, da wir Redundanz verwenden können , um unsere denormalisierten Daten in den Sammlungen zu speichern . Da wir nur Daten lesen, müssen wir uns keine Sorgen um die Synchronisierung denormalisierter Daten zwischen Aktualisierungen machen.

Auf diese Weise können wir uns darauf konzentrieren, die Daten redundant in einer Weise zu speichern, die gut zu unseren Abfragen passt und sich auf einzelne Sammlungen konzentriert.

Ich schreibe das nur, denn hätte ich so etwas vor einiger Zeit gelesen, hätte ich mir Zeit gespart, um Nachforschungen anzustellen

Hoffe, es wird jemandem nützlich sein

Moppo
quelle
3

Ich kann diesen Vortrag von Martin Fowler nur empfehlen:

https://www.youtube.com/watch?v=qI_g07C_Q5I

ZUSAMMENFASSUNG: Martin gibt eine schnelle Einführung in NoSQL-Datenbanken: woher sie stammen, welche Art von Datenmodellen sie verwenden und wie Sie die Konsistenz unterschiedlich betrachten müssen. Daraus skizziert er, welche Umstände Sie in Betracht ziehen sollten, warum sie relationale Datenbanken nicht überflüssig machen und die wichtige Konsequenz der polyglotten Persistenz.

Es zeichnet ein schönes Bild von NoSQL, den verschiedenen Kategorien und den Dingen, die jeder verstehen muss, wenn er aus der Welt der relationalen Datenbanken kommt. Grüße.

user3631881
quelle
Verstanden, wird es für die Zukunft im Auge behalten.
user3631881
3

Zuerst müssen Sie die CAP-Theorie (Konsistenz, Verfügbarkeit und Partitionierung, wo Sie zwei von drei aufgreifen müssen) und unseren Geschäftsanwendungsfall verstehen. MongoDB erfüllt Konsistenz und Partitionierung & Couch DB erfüllt Verfügbarkeit & Partitionierung.

Edureka-Videos auf YouTube zu NoSQL sind einige der besten Video-Tutorials.

https://www.youtube.com/watch?v=gJFG04Sy6NY

https://www.youtube.com/watch?v=KSq6tMMXZ8s

https://www.youtube.com/watch?v=3z1KFA2qcSo

Gute Präsentationen finden Sie auf slidehare.net

http://www.slideshare.net/quipo/nosql-databases-why-what-and-when?qid=3bb9f7f6-a53d-41b1-8403-cd6f181d0ca7&v=qf1&b=&from_search=1

http://www.slideshare.net/EdurekaIN/no-sql-databases-35591065?qid=f1b9c095-6d70-4d0a-91da-1df664c4f389&v=qf1&b=&from_search=3 (Diese Präsentation unterstützt Video-Tutorials in Youtube)

Ravindra Babu
quelle
1

Für einige Anwendungsfälle, die Sie benötigen, insbesondere für analytische Abfragen, können Sie mit diesem Wrapper von Postgres SQL-Abfragen in MongoDB ausführen .

metdos
quelle
1

Da es jetzt viel mehr NoSQL-Datenbanken auf dem Markt gibt als jemals zuvor, empfehle ich einen Blick auf den Gartner Magic Quadrant, wenn Sie nach einer Datenbank suchen, die sich auch hervorragend für Unternehmensanwendungen eignet, die auf Support, Erweiterbarkeit, Verwaltung und Unterstützung basieren kosten.

http://www.gartner.com/technology/reprints.do?id=1-23A415Q&ct=141020&st=sb

Ich möchte Couchbase jedem empfehlen, der es noch nicht ausprobiert hat, aber nicht auf der im Bericht (2.5.1) gezeigten Version basiert, da es fast zwei Revisionen hinter dem heutigen CB Server liegt und sich der Veröffentlichung von 4.0 in 2H15 nähert .

http://www.couchbase.com/coming-in-couchbase-server-4-0

Der andere Teil von Couchbase als Anbieter / Produkt ist, dass es sich um einen Mehrzweck-DB-Typ handelt. Es kann als reiner K / V-Speicher, dokumentenorientierte Datenbank mit mehrdimensionaler Skalierung, Memcached, Cache-beiseite mit Persistenz fungieren und unterstützt ANSI 92-kompatibles SQL mit automatischen Verknüpfungen, Replikation auf DR-Cluster per Knopfdruck und Es ist sogar eine mobile Komponente in das Ökosystem integriert.

Wenn nichts anderes, lohnt es sich, die neuesten Benchmarks zu überprüfen:

http://info.couchbase.com/Benchmark_MongoDB_VS_CouchbaseServer_HPW_BM.html http://info.couchbase.com/NoSQL-Technical-Comparison-Report.html

Austin Gonyou
quelle