Bauen mit Mustern: Eine Zusammenfassung

MongoDB

Zum Abschluss der Reihe „Bauen mit Mustern“ ist dies eine gute Gelegenheit, die Probleme, die die behandelten Muster lösen, noch einmal zusammenzufassen und einige der Vorteile und Nachteile jedes Musters hervorzuheben. Die am häufigsten gestellte Frage zu Schema-Design-Mustern lautet: „Ich entwerfe eine Anwendung für X, wie modelliere ich die Daten?“ Wir hoffen, dass Sie im Laufe dieser Blogserie herausgefunden haben, dass es bei der Beantwortung dieser Frage viele Dinge zu berücksichtigen gilt. Wir haben jedoch Charts für Anwendungsfälle beigefügt, die unserer Meinung nach hilfreich waren, um zumindest eine erste Anleitung zu Datenmodellierungsmustern für generische Anwendungsfälle zu geben.

Beispielanwendungsfälle

Die folgenden Charts sind eine Richtlinie dafür, was wir nach jahrelanger Erfahrung in der Zusammenarbeit mit unseren Kunden darüber herausgefunden haben, welche Schema-Design-Muster in einer Vielzahl von Anwendungen verwendet werden. Hierbei handelt es sich nicht um eine in Stein gemeißelte Festlegung von Regeln darüber, welches Designmuster für eine bestimmte Art von Anwendung verwendet werden kann. Stellen Sie sicher, dass Sie sich diejenigen ansehen, die in Ihrem Anwendungsfall häufig verwendet werden. Verwerfen Sie die anderen jedoch nicht, sie könnten immer noch zutreffen. Wie Sie Schema Ihrer Anwendung entwerfen, hängt stark von Ihren Datenzugriffsmustern ab.

Use Cases vs Patterns Matrix

Zusammenfassungen von Designmustern

Annäherung

Das Approximationsmuster ist nützlich, wenn häufig teure Berechnungen durchgeführt werden und die Präzision dieser Berechnungen nicht die höchste Priorität hat.

Vorteile

  • Weniger Schreibvorgänge in die Datenbank.
  • Behalten Sie statistisch gültige Zahlen bei.

Nachteile

  • Genaue Zahlen werden nicht dargestellt.
  • Die Umsetzung muss in der Anwendung erfolgen.

Attribute

Das Attributmuster ist nützlich für Probleme, bei denen es um große Dokumente mit vielen ähnlichen Feldern geht, aber es gibt eine Teilmenge von Feldern, die gemeinsame Merkmale aufweisen, und wir möchten diese Teilmenge von Feldern sortieren oder abfragen. Wenn die Felder, nach denen wir sortieren müssen, nur in einer kleinen Teilmenge von Dokumenten zu finden sind. Oder wenn beide Bedingungen in den Dokumenten erfüllt sind.

Vorteile

  • Es werden weniger Index benötigt.
  • Abfragen lassen sich einfacher schreiben und sind im Allgemeinen schneller.

Aufspaltung

Das Bucket Pattern ist eine großartige Lösung für die managed von Streaming-Daten wie Time Series, Real-Time Analytics oder Internet of Things (IoT).

Vorteile

  • Reduziert die Gesamtzahl der Dokumente in einer collection.
  • Verbessert die Indexleistung.
  • Kann den Datenzugriff durch die Nutzung der Voraggregation vereinfachen.

Berechnet

Wenn es sehr leseintensive Datenzugriffsmuster gibt und diese Daten wiederholt von der Anwendung berechnet werden müssen, ist das berechnete Muster eine großartige Option zum Erkunden.

Vorteile

  • Reduzierung der CPU-Auslastung bei häufigen Berechnungen.
  • Abfragen lassen sich einfacher schreiben und sind im Allgemeinen schneller.

Nachteile

  • Es kann schwierig sein, die Notwendigkeit dieses Musters zu erkennen.
  • Das Anwenden oder Überbeanspruchen des Musters sollte vermieden werden, sofern dies nicht erforderlich ist.

Dokumentversionierung

Wenn Sie frühere Versionen von Dokumenten in MongoDB verwalten müssen, ist das Dokumentversionierungsmuster eine mögliche Lösung.

Vorteile

  • Einfache Implementierung, auch auf bestehenden Systemen.
  • Keine Auswirkungen auf die Leistung bei Abfragen der neuesten Revision.

Nachteile

  • Verdoppelt die Anzahl der Schreibvorgänge.
  • Abfragen müssen auf die richtige collection abzielen.

Erweiterte Referenz

Das Muster „Extended Reference“ ist am nützlichsten, wenn Ihre Anwendung viele JOIN-Vorgänge durchführt, um häufig aufgerufene Daten zusammenzuführen.

Vorteile

  • Verbessert die Leistung, wenn viele JOIN-Vorgänge ausgeführt werden.
  • Schnellere Lesevorgänge und eine Reduzierung der Gesamtzahl der JOINs.

Nachteile

  • Datenvervielfältigung.

Ausreißer

Finden Sie, dass es einige Abfragen oder Dokumente gibt, die nicht in Ihre übrigen typischen Datenmuster passen? Treiben diese Ausnahmen Ihre Anwendungslösung voran? Wenn ja, ist das Ausreißermuster eine wunderbare Lösung für diese Situation.

Vorteile

  • Verhindert, dass einige Dokumente oder Abfragen die Lösung einer Anwendung bestimmen.
  • Abfragen sind auf „typische“ Anwendungsfälle zugeschnitten, Ausreißer werden jedoch dennoch berücksichtigt.

Nachteile

  • Oft auf bestimmte Abfragen zugeschnitten, daher funktionieren Ad-hoc-Abfragen möglicherweise nicht gut.
  • Ein Großteil dieses Musters wird mit Anwendungscode erstellt.

Vorabzuteilung

Wenn Sie die Struktur Ihres Dokuments kennen und Ihre Anwendung diese lediglich mit Daten füllen muss, ist das Pre-Allocation Pattern die richtige Wahl.

Vorteile

  • Designvereinfachung, wenn die Dokumentstruktur im Voraus bekannt ist.

Nachteile

  • Einfachheit versus Leistung.

Polymorph

Das polymorphe Muster ist die Lösung, wenn es eine Vielzahl von Dokumenten gibt, die mehr Ähnlichkeiten als Unterschiede aufweisen und die Dokumente in einer einzigen collection aufbewahrt werden müssen.

Vorteile

  • Einfach umzusetzen.
  • Abfragen können für eine einzelne collection ausgeführt werden.

Schemaversionierung

Nahezu jede Anwendung kann vom Schema-Versionierungs muster profitieren, da im Laufe der Lebensdauer einer Anwendung häufig Änderungen am Datenschema vorgenommen werden. Dieses Muster ermöglicht, dass frühere und aktuelle Versionen von Dokumenten nebeneinander in einer collection vorhanden sind.

Vorteile

  • Keine Ausfallzeiten erforderlich.
  • Steuerung der Schemamigration.
  • Reduzierte zukünftige technische Schulden.

Nachteile

  • Möglicherweise sind während der Migration zwei Index für dasselbe Feld erforderlich.

Teilmenge

Das Subset muster löst das Problem, dass die Arbeitsfestlegung die RAM-Kapazität überschreitet, da bei großen Dokumenten ein Großteil der Daten im Dokument nicht von der Anwendung verwendet wird.

Vorteile

  • Reduzierung der Gesamtgröße der Arbeitsfeststellung.
  • Kürzere Festplattenzugriffszeit für die am häufigsten verwendeten Daten.

Nachteile

  • Wir müssen die Teilmenge managed.
  • Das Einlesen zusätzlicher Daten erfordert zusätzliche Fahrten in die Datenbank.

Baum

Wenn Daten eine hierarchische Struktur haben und häufig abgefragt werden, ist das Baum muster das zu implementierende Entwurfsmuster.

Vorteile

  • Erhöhte Leistung durch Vermeidung mehrerer JOIN-Vorgänge.

Nachteile

  • Aktualisierungen des Graph müssen in der Anwendung managed werden.

Fazit

Wie Sie hoffentlich in dieser Serie gesehen haben, bietet das MongoDB-Dokumentmodell viel Flexibilität bei der Modellierung von Daten. Diese Flexibilität ist unglaublich leistungsfähig, aber diese Leistung muss im Hinblick auf die Datenzugriffsmuster Ihrer Anwendung genutzt werden. Denken Sie daran, dass Schema-Design in MongoDB einen enormen Einfluss auf die Leistung Ihrer Anwendung hat. Wir haben festgestellt, dass Leistungsprobleme häufig auf ein schlechtes Schema-Design zurückzuführen sind.

Bedenken Sie, dass diese Schema-Design-Muster zur weiteren Leistungssteigerung des Dokumentmodells zusammen verwendet werden können, wenn und sofern dies sinnvoll ist. Beispielsweise kann die Schemaversionierung in Verbindung mit allen anderen Mustern verwendet werden, während sich Ihre Anwendung weiterentwickelt. Mit den zwölf behandelten Schema-Design-Mustern verfügen Sie über die Werkzeuge und Kenntnisse, die Sie benötigen, um die Leistungsfähigkeit der Flexibilität des Dokumentmodells zu nutzen.