Frage

Ich habe hören eine Menge Gerede über Schema-weniger (oft verteilt) Datenbanksysteme wie MongoDB, CouchDB, SimpleDB, etc ...

Während ich kann verstehen, dass sie für einige Zwecke wertvoll sein könnte, in den meisten meiner Anwendungen Ich versuche, Objekte zu bestehen, die eine bestimmte Anzahl von Feldern eines bestimmten Typs haben, und ich denke nur, automatisch in dem relationalen Modell. Ich bin in Bezug auf die Reihen mit einzigartigen integer IDs, null / nicht null Felder, SQL-Datentypen, und wählen Sie Abfragen immer denken Sets zu finden.

Während ich auf die verteilte Natur und einfache JSON / RESTful Schnittstellen dieser neuen Systeme angezogen bin, ich verstehe nicht, wie schwach typisierte Schlüssel / Wert-Hashes mich mit meiner Entwicklung helfen. Warum sollte ein lose typisiert, schema-System weniger gut für saubere Datensatz zu halten? Wie kann ich zum Beispiel, finden Sie alle Artikel mit Daten zwischen x und y, wenn sie nicht Daten haben könnten? Gibt es einen Begriff von einem Join?

Ich verstehe viele Systeme ihre eigenen Unterschiede und Stärken haben, aber ich bin auf den Unterschied in Paradigma fragen. Ich nehme an, das ist eine offene Frage, aber vielleicht die Gemeinschaft der Antworten und Möglichkeiten, sie habe persönlich die Vorteile dieser Systeme gesehen werden dazu beitragen, erleuchte mich und andere über, wenn ich möchte Verwendung dieses (zugegebenermaßen mehr hip) Systeme machen statt die traditionelle RDBMS.

War es hilfreich?

Lösung

Ich werde nur zurufen ein oder zwei häufigsten Gründe (ich bin sicher, dass Menschen Essay Antworten schreiben)

  1. Bei stark verteilten Systemen, jedes gegebene Datensatz kann verteilt auf mehrere Server sein. Wenn das passiert, können die relationalen Zwänge, die die DB-Engine stark reduziert garantieren werden. Einige Ihre referentielle Integrität in Anwendungscode behandelt werden muß. Dabei werden Sie schnell feststellen, mehrere Schmerzpunkte:

    • Ihre Logik ist verteilt auf mehrere Ebenen (app und db)
    • Ihre Logik ist verteilt auf mehrere Sprachen (SQL und Ihre App-Sprache der Wahl)

    Das Ergebnis ist, dass die Logik weniger verkapselt ist, weniger tragbar und sehr viel teurer zu ändern. Viele Entwickler finden sich mehr Logik in App-Code und weniger in der Datenbank zu schreiben. Genommen auf die Spitze, wird das Datenbankschema nicht relevant.

  2. Schema-Management-insbesondere auf Systeme, bei denen Ausfallzeiten keine Option ist-ist schwierig. das Schema Komplexität reduziert reduziert diese Schwierigkeit.

  3. ACID nicht funktioniert sehr gut für verteilte Systeme ( BASE CAP , etc). Die SQL-Sprache (und das gesamte relationale Modell zu einem gewissen Grad) für eine Transaktions ACID Welt optimieren. So einige der SQL-Sprache verfügt und Best Practices sind nutzlos, während andere sind sogar schädlich. Einige Entwickler fühlen sich unwohl über „gegen den Strich“ und bevorzugen SQL vollständig zugunsten einer Sprache fallen, die von Grund auf für ihre Anforderungen entwickelt wurde.

  4. Kosten: Die meisten RDBMS-Systeme sind nicht frei. Die Führer in Skalierung (Oracle, Sybase, SQL Server) sind alle kommerziellen Produkte. Bei großen ( „Web-scale“) Systeme handelt, können Datenbanklizenzkosten erfüllen oder übertreffen die Hardware-Kosten nicht überschreiten! Die Kosten sind hoch genug, um die normalen build / kaufen Überlegungen drastisch zu ändern, um eine individuelle Lösung auf der Oberseite eines OSS-Angebots Aufbau (alle wesentlichen NoSQL-Angebote sind OSS)

Andere Tipps

ist Schemaless groß aus zwei Gründen:

  1. Gehirn Anschaulichkeit von Dokumentenspeicherung zu optimieren
  2. Sparse-Matrix und Entity-Attribute-Value Speicherplatzprobleme.

Ich habe sowohl SQL und No-SQL für Produktionsanwendungen in Ruby on Rails verwendet. Ich bin kein Datenbankexperte und ich muss zugeben, zu googeln ACID und ähnliche Begriffe, wie sie mir nicht vertraut sind.

„Ah ha! Ein weiteres Know-nichts Trendfolger Springen auf dem neuesten Zug“ kann man sagen. Aber eigentlich bin ich wirklich mit meiner Entscheidung zufrieden MongoDB verwenden auf unserem letzten 2 Jahre alt App und hier ist warum ...

Die Kehrseite des Gehirn optimierende Anschaulichkeit war meine Erfahrung mit der Magento E-Commerce-System. Ich will es nicht heftig zu schlagen, weil es mich gut gedient zu der Zeit, aber es wirklich genau der Prozessor stark versucht, die Attribute für jedes Produkt zu berechnen. Der zugrundeliegende Grund war das Entity-Attribute-Value Shop von Produktdaten. Cache oder verdammt sein, war die Lösung.

Der große Vorteil für mich ist die Optimierung des einzigen Ort, der wirklich zählt - Ihr eigenes Gehirn . So viele Technologien auf ihre Effizienz in Speicher, Prozessoren, Hardware critiqued und noch eine DB hat, die extrem intuitiv zu verstehen, bringt seine eigenen Verdienste. Wir haben es schnell gefunden Features in unseren Code hinzuzufügen, da die Datenbank einfach viel wie die reale Welt sieht, wir sind Modellierung. Wenn ich E-Commerce-Kunden gefragt habe mich mit ihrer Produktliste präsentieren werden sie natürlich dazu neigen, Excel zu verwenden (Tabellenspeicher denken). Die ersten Spalten sind einfach:

  1. Produkte
  2. Preis
  3. Produkttyp (

Dann wird es schwieriger und in Notizen, Farbkodierung und Links zu anderen Tabellen (yep .. Beziehungen)

  1. Farbe (Nur einige Produkte)
  2. Size (X Large, groß, klein) - nur für Produkte 8'9'10 verwenden Golfclubs eine andere Skala
  3. Farbe 2. Die Katzekrägen haben zwei Farben zur Auswahl.
  4. Wattage
  5. Befestigungstyp (männlich, weiblich)

So endet es in einem schrecklichen Durcheinander von Excel-Tabellen, die für mich keinen Sinn machen und nicht viel Sinn für die Menschen, die Arbeit mit dem Tag Produkte und tagaus. Wir werfen unsere Arme in der Luft und zu entscheiden, durch den Katalog zu gehen und dann trifft es mich! Wäre es nicht toll, wenn Sie die Daten speichern können, wie es im Katalog erscheint !? Nur Sammlungen von Aufzeichnungen für jedes Produkt, dass nur Listen des Attribut dieses Produkts. Sie können dann zu einem späteren Zeitpunkt gemeinsame Attribute Index für den Abruf auswählen. Natürlich, das ist ein Dokument zu speichern.

Insgesamt Dokument speichert sind groß, wenn Sie ein spärliche Matrix Problem oder Objekte haben, die ihre Attribute im Laufe der Zeit mutieren. in einer No-SQL Welt für 2 Jahre gelebt haben, kann ich denke an eine reale Anwendung nicht, die nicht diese Funktionen hat, weil die Welt sich wie ein Dokumentspeicher aussieht.

Das Hauptanliegen sollte das sein, was Sie brauchen mit Ihren Daten zu tun. Wenn Sie eine große Datenmenge haben und eine traditionelle RDBMS sind der Suche nach einem Engpass werden dann möchten Sie vielleicht mit einem schemaless oder aa NoSQL Lösung.

Die meisten Umgebungen, dass ich mir bewusst bin mit NoSQL Lösungen auch eine RDBMS-Lösung in irgendeiner Form verwenden oder Mode. RDBMS-basierte Lösungen sind die Norm, wo die Datenintegrität ist extrem wichtig, und Sie müssen ACID-Transaktionen. Allerdings, wenn Ihr System nicht hoch Transaktion basiert, aber Sie müssen wirklich schnell skalieren oder skalieren, ein NoSQL Lösung wünschenswert sein.

habe ich nur mit MongoDB gespielt, aber eine Sache, die mich wirklich interessiert war, wie konnte man Nest Dokumente. In MongoDB ein Dokument ist im Grunde wie eine Schallplatte. Das ist wirklich schön, weil traditionell in einem RDBMS, wenn Sie eine „Person“ Rekord ziehen benötigt und erhalten die zugehörige Adresse, Arbeitgeber info, etc. würden Sie häufig auf mehrere Tabellen gehen, kommen sie auf, mehrere Datenbank machen Anrufe. In einer NoSQL-Lösung wie MongoDB, können Sie nisten nur die zugehörigen Datensätze (Dokumente) und sich nicht mit Fremdschlüssel haben, Fügen, mehrere Datenbankaufrufe. Alles im Zusammenhang mit, dass ein Datensatz gezogen wird.

Dies ist besonders praktisch, wenn mit Objekten zu tun. Sie können in vielen Fällen nur speichern ein Objekt als eine Reihe von verschachtelten Dokumenten.

NoSQL-Datenbanken sind nicht schemaless; Das Schema ist in den Daten eingebettet. Sie sind richtig semistrukturierte genannt. In einigen KV-Daten speichern, jedoch kann das Schema auch in Code eingebettet werden. Der Vorteil des semi-strukturierten Ansatz ist zweifach: Flexibilität in der die Spalten Teil einer Zeile (eine Zeile sind, könnten 5 Spalten und eine andere haben 5 verschiedene Spalten, und Flexibilität in den Eigenschaften der Spalten (zB variable Längen)

Normalerweise ist die Attraktion ist, dass der Schlangenöl - die meisten Menschen favourising sie haben keine Ahnung von der relationalen Satz und sprechen SQL auf einem Niveau zu machen Profis kotzen. Keine Ahnung, was sauer sind, ehy sie wichtig sind etc.

damit nicht sagen, sie haben keine gültige Verwendungen .... nur zu sagen, dass vor allem die Attraktion ist, zu wissen Menschen nicht, was sie wissen sollten und dumm Schlussfolgerungen zu machen. Auch nicht jeder so ist, aber die meisten Entwickler sind sie begünstigen -. Nicht gut in ihrem Verständnis, was acutally ein Datenbanksystem für verantwortlich ist

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top