MongoDB

MongoDB ist die führende Open-Source, Document Datenbank die für einfache Entwicklung und Skalierung aber auch für Big Data Szenarien entwickelt wurde.

MongoDB Patterns: Das Annäherungs-Pattern

Marc-David Militz
Expert
  • Artikel von Daniel Coupal und Ken W. Alger

    • englischer Originalartikel
      https://www.mongodb.com/blog/post/building-with-patterns-the-outlier-pattern
      Übersetzung mit freundlicher Genehmigung von MongoDB


      Stellt euch eine kleine Stadt, mit ca. 39.000 Einwohnern vor. Die exakte Anzahl der Einwohner verändert sich laufend, Leute ziehen weg oder hin, Babies werden geboren und Menschen sterben. Wie könnten unsere Zeit locker damit verbringen, täglich die exakte Einwohnerzahl festzustellen. Ehrlichgesagt ist die ungefähre Zahl 39.000, in den meisten Fällen aber absolut ausreichend. Ganz ähnlich ist das in vielen Anwendungen, die wir entwickeln, eine "ungefähre Zahl" ist oftmals "ausreichend". Wenn also eine "ungefähre Zahl" Zahl "ausreichend" ist, dann handelt es sich um eine Möglichkeit das Annäherungs-Pattern anzuwenden.

      • Das Annäherungs-Pattern

        • Das Annäherungs-Pattern kann dann angewendet werden, wenn wir Berechnungen anzeigen sollen die sehr viele Ressourcen (Zeit, Arbeitsspeicher, CPU) in Anspruch nehmen und für die absolute Präzision nicht die allerhöchste Priorität hat. Ein Beispiel dafür wäre die Frage der Einwohnerzahl. Was würde mich die Ermittlung der exakten Einwohnerzahl kosten (Ressourcen)? Wie verändern sich die Daten während die Verarbeitung läuft? Welche Auswirkungen auf die Planungsstrategie der Stadt hat es, wenn die Einwohnerzahl 39.012 ist und nicht 39.000.

          Vom Standpunkt der Applikation aus gesehen, ist es möglich einen Annäherungs-Faktor zu definieren, der mit weniger Datenbankzugriffen statistisch relevante Ergebnisse liefert. Nehmen wir, z.B. mal an, dass die Stadtplanung vorsieht ein Feuerwehr Löschfahrzeug pro 10.000 Einwohnern bereit zu stellen. Wahrscheinlich währen 100 Einwohner, für die Planung ein guter Schritt, um das Reporting zu updaten. Man kann auf diese Weise auf jeden Fall sehen, dass man sich der nächsten Schwelle nähert und schon mal mit der Budgetplanung anfängt.

          In einer Applikation können wir, anstatt bei jeder Änderung die Einwohnerzahl zu updaten, nur bei jeder 100 Änderung einen Zähler entsprechenden hochzusetzen. Damit reduziert man die schreibenden Zugriffe auf nur noch 1% der Änderungen, man spart also 99% der Zugriffe ein. Eine weitere Möglichkeit wäre es eine Funktion zu haben, die eine Zufallszahl auswirft. Wenn diese Funktion beispielsweise eine Zahl zwischen 0 und 100 zurückgibt, dann würde in 1% der Fälle die Zahl 0 zurückgegeben werden. Wenn die Zahl 0 das Kriterium für ein Update ist, dann kann das Auftreten dieser Zahl den Zähler um 100 erhöhen.

          Warum sollten wir uns um diese Problematik überhaupt kümmern? Bei der Arbeit mit großen Datenmengen oder großen Mengen zum Benutzerzugriffen kommt es in der Regel zu einer großen Menge von schreibenden Zugriffen. Je weiter man das Szenario hochskaliert, desto höher wird die Auswirkung auf die Applikation und ab einer bestimmten Größe wird dies automatisch zum wichtigsten Faktor.
          Durch das Reduzieren von Schreiboperationen und dem damit verbundene einsparen von Ressourcen, für Daten die nicht immer "perfekt" sein müssen, können gigantische Fortschritte in der Performance gemacht werden.

          • Beispiel Use-Cases

            • Einwohnerzahlen sind ein Beispiel für das Annäherungs-Pattern. Ein weiterer Einsatzbereich wären z.B. die Besucher von Webseiten. Man kann generell sagen, dass es keinen Unterschied macht ob wir auf einer Webseite 700.000 oder 699.983 Besucher haben. Aus diesem Grund können wir in unserer Applikation einen Counter einbauen und diesen erhöhen, wenn eine definierte Schwelle erreicht wird. Das kann einen enormen Einfluß auf die Performance haben.
              Zeit und Ressourcen aufzuwenden, um Schreiboperationen für geschäftskritische Prozesse sicherzustellen macht absolut Sinn, aber diese Ressourcen für das Speichern von Besucherzahlen aufzuwenden nicht unbedingt.

              Das Bild zeigt nicht nur, wie das Annäherungs-Pattern verwendet werden kann, um Zählvorgänge zu reduzieren, sondern gleichzeitig die Komplexität der Systemarchitektur, und damit auch die Kosten, reduziert. Das führt zu weiteren Einsparungen die über die reine Zeit, die für das Schreiben der Daten benötigt wird, hinausgeht. Ähnlich wie beim Berechnungs-Pattern https://www.qualiero.com/community/mongodb/mongodb-theorie/mongodb-patterns-das-berechnungs-pattern.html, wir CPU Zeit eingespart, indem Berechnungen weniger häufig vorgenommen werden.

              [Zusammenfassung]
              Das Annäherungs-Pattern ist eine exzellente Lösung für Anwendungen, die mit Daten arbeiten, die schwierig und/oder teuer zu berechnen sind und wo die absolute Genauigkeit nicht unbedingt notwendig ist. Wir kommen mit weniger Schreiboperationen auf der Datenbank aus, steigern dadurch die Performance und können trotzdem statistisch relevante Zahlen liefern. Auf der negativ Seite muss man sagen dass man keine exakten Zahlen hat und die Implementierung direkt in der Anwendung erfolgen muss.

              Alle Rechte für die verwendete Grafik liegen bei MongoDB https://www.mongodb.com
              Wer mehr über das Schema Design in MongoDB erfahren möchte, dem sei der Qualiero Kurs für Datenbank Entwickler empfohlen https://www.qualiero.com/lerninhalte/classroom-trainings/mongodb-datenbank-entwickler-kurs.html

Latest member activities

Recommend this community post