Materialisierte Sichten

Materialisierte Ansichten machen eine Aggregationsabfrage über eine Quelltabelle oder über eine andere materialisierte Sicht verfügbar.

Materialisierte Ansichten geben immer ein aktuelles Ergebnis der Aggregationsabfrage zurück (immer frisch). Das Abfragen einer materialisierten Ansicht ist effizienter, als die Aggregation direkt über die Quelltabelle auszuführen.

Hinweis

Warum materialisierte Ansichten verwenden?

Durch die Investition von Ressourcen (Datenspeicher, CPU-Hintergrundzyklen) für materialisierte Ansichten häufig verwendeter Aggregationen erhalten Sie die folgenden Vorteile:

  • Leistungsverbesserung: Das Abfragen einer materialisierten Ansicht ist in der Regel besser als das Abfragen der Quelltabelle für dieselben Aggregationsfunktionen.

  • Frische: Eine materialisierte Ansichtsabfrage gibt immer die aktuellsten Ergebnisse zurück, unabhängig davon, wann die Materialisierung zuletzt erfolgt ist. Die Abfrage kombiniert den materialisierten Teil der Sicht mit den Datensätzen in der Quelltabelle, die noch nicht materialisiert wurden (der delta Teil), und liefert immer die aktuellsten Ergebnisse.

  • Kostenreduzierung:Das Abfragen einer materialisierten Ansicht verbraucht weniger Ressourcen aus dem Cluster als die Aggregation über die Quelltabelle. Die Aufbewahrungsrichtlinie der Quelltabelle kann reduziert werden, wenn nur Aggregation erforderlich ist. Durch dieses Setup werden die Kosten für den heißen Cache für die Quelltabelle reduziert.

Beispiele für Anwendungsfälle finden Sie unter Anwendungsfälle für materialisierte Ansicht.

Funktionsweise materialisierter Ansichten

Eine materialisierte Ansicht besteht aus zwei Komponenten:

  • Ein materialisiertes Teil – eine Tabelle mit aggregierten Datensätzen aus der Quelltabelle, die bereits verarbeitet wurden. Diese Tabelle enthält immer einen einzelnen Datensatz pro Gruppenkombination der Aggregation.
  • Ein Delta : die neu erfassten Datensätze in der Quelltabelle, die noch nicht verarbeitet wurden.

Beim Abfragen der materialisierten Ansicht wird der materialisierte Teil mit dem Deltateil kombiniert, sodass ein aktuelles Ergebnis der Aggregationsabfrage bereitgestellt wird. Der Offlinematerialisierungsprozess erfasst neue Datensätze vom Delta in die materialisierte Tabelle und aktualisiert vorhandene Datensätze. Wenn die Schnittmenge zwischen dem Delta und dem materialisierten Teil groß ist und viele Datensätze Aktualisierungen erfordern, kann dies negative Auswirkungen auf den Materialisierungsprozess haben. Informationen zur Problembehandlung in solchen Situationen finden Sie unter Überwachen materialisierter Ansichten .

Abfragen materialisierter Ansichten

Es gibt zwei Möglichkeiten, eine materialisierte Ansicht abzufragen:

  • Abfragen der gesamten Ansicht: Wenn Sie die materialisierte Sicht nach ihrem Namen abfragen, kombiniert die materialisierte Ansichtsabfrage ähnlich wie beim Abfragen einer Tabelle den materialisierten Teil der Ansicht mit den Datensätzen in der Quelltabelle, die noch nicht materialisiert wurden (die delta).

    • Das Abfragen der materialisierten Ansicht gibt immer die aktuellsten Ergebnisse zurück, basierend auf allen Datensätzen, die in der Quelltabelle erfasst wurden. Weitere Informationen zu den materialisierten und nicht materialisierten Teilen in der materialisierten Ansicht finden Sie unter Funktionsweise materialisierter Ansichten.
    • Diese Option funktioniert möglicherweise nicht am besten, da sie das Teil während der delta Abfragezeit materialisieren muss. Die Leistung hängt in diesem Fall vom Alter der Ansicht und den in der Abfrage angewendeten Filtern ab. Der Abschnitt zum Materialized View-Abfrageoptimierer enthält mögliche Möglichkeiten, die Abfrageleistung beim Abfragen der gesamten Ansicht zu verbessern.
  • Nur den materialisierten Teil abfragen: Eine andere Möglichkeit zum Abfragen der Ansicht ist die Verwendung der materialized_view() -Funktion. Diese Option unterstützt das Abfragen nur des materialisierten Teils der Ansicht, während gleichzeitig die maximale Latenz angegeben wird, die der Benutzer tolerieren möchte.

    • Diese Option wird nicht garantiert, dass die aktuellsten Datensätze zurückgegeben werden, aber sie sollte immer leistungsintensiver sein als das Abfragen der gesamten Ansicht.
    • Diese Funktion ist nützlich für Szenarien, in denen Sie bereit sind, etwas Frische für die Leistung zu opfern, z. B. für Telemetriedashboards.

Tipp

Abfragen über den materialisierten Teil sind immer besser als das Abfragen der gesamten Ansicht. Verwenden Sie immer die materialized_view() Funktion, sofern für Ihren Anwendungsfall zutreffend.

  • Materialisierte Ansichten sind an cluster- oder datenbankübergreifenden Abfragen beteiligt, werden aber nicht in Wildcard-Unionen oder Suchvorgängen eingeschlossen.

    • Die folgenden Beispiele enthalten alle materialisierte Ansichten mit dem Namen ViewName:
    cluster('cluster1').database('db').ViewName
    cluster('cluster1').database('*').ViewName
    database('*').ViewName
    database('DB*').ViewName
    database('*').materialized_view('ViewName')
    database('DB*').materialized_view('ViewName')
    
    • Die folgenden Beispiele enthalten keine Datensätze aus materialisierten Ansichten:
    cluster('cluster1').database('db').*
    database('*').View*
    search in (*)
    search * 
    

Abfrageoptimierer für materialisierte Ansicht

Beim Abfragen der gesamten Ansicht wird der materialisierte Teil während der Abfragezeit mit dem delta kombiniert. Dies umfasst das Aggregieren und delta Verbinden mit dem materialisierten Teil.

  • Das Abfragen der gesamten Ansicht ist besser, wenn die Abfrage Filter für die Gruppe nach Schlüsseln der materialisierten Ansichtsabfrage enthält. Weitere Tipps zum Erstellen einer materialisierten Ansicht basierend auf Ihrem Abfragemuster finden Sie im .create materialized-view Abschnitt Leistungstipps .
  • Der Abfrageoptimierer wählt Zusammenfassungs-/Verknüpfungsstrategien aus, von denen erwartet wird, dass sie die Abfrageleistung verbessern. Die Entscheidung, ob die Abfrage gemischt werden soll, basiert beispielsweise auf der Anzahl der Datensätze.delta Die folgenden Clientanforderungseigenschaften bieten eine gewisse Kontrolle über die angewendeten Optimierungen. Sie können diese Eigenschaften mit Ihren materialisierten Ansichtsabfragen testen und ihre Auswirkungen auf die Abfrageleistung auswerten.
Name der Clientanforderungseigenschaft Typ BESCHREIBUNG
materialized_view_query_optimization_costbased_enabled bool Wenn dieser Wert auf falsefestgelegt ist, deaktiviert Optimierungen zum Zusammenfassen/Verknüpfen in materialisierten Ansichtsabfragen. Verwendet Standardstrategien. Der Standardwert ist true.
materialized_view_shuffle dynamic Erzwingen Sie das Shuffling der materialisierten Ansichtsabfrage, und stellen Sie (optional) bestimmte Schlüssel bereit, nach denen Sie shuffle können. Weitere Beispiele finden Sie unten.

Beispiele

  1. Fragen Sie die gesamte Ansicht ab. Die neuesten Datensätze in der Quelltabelle sind enthalten:

    ViewName
    
  2. Fragen Sie nur den materialisierten Teil der Ansicht ab, unabhängig davon, wann er zuletzt materialisiert wurde.

    materialized_view("ViewName")
    
  3. Fragen Sie die gesamte Ansicht ab, und geben Sie einen "Hinweis" zur Verwendung der shuffle Strategie an. Die neuesten Datensätze in der Quelltabelle sind enthalten:

    • Beispiel 1: Shuffle basierend auf der Id Spalte (ähnlich wie bei Verwendung von hint.shufflekey=Id):
    set materialized_view_shuffle = dynamic([{"Name" : "ViewName", "Keys" : [ "Id" ] }]);
    ViewName
    
    • Beispiel 2: Shuffle basierend auf allen Schlüsseln (ähnlich der Verwendung von hint.strategy=shuffle):
    set materialized_view_shuffle = dynamic([{"Name" : "ViewName" }]);
    ViewName
    

Überlegungen zur Leistung

Die Standard Mitwirkenden, die sich auf die Integrität einer materialisierten Ansicht auswirken können, sind:

  • Clusterressourcen: Wie jeder andere Prozess, der auf dem Cluster ausgeführt wird, verbrauchen materialisierte Ansichten Ressourcen (CPU, Arbeitsspeicher) aus dem Cluster. Wenn der Cluster überlastet ist, kann das Hinzufügen materialisierter Ansichten zu einer Beeinträchtigung der Leistung des Clusters führen. Überwachen Sie die Integrität Ihres Clusters mithilfe von Clusterintegritätsmetriken. Die optimierte autoskalierte Skalierung berücksichtigt die Integrität materialisierter Ansichten derzeit nicht als Teil von Regeln für die automatische Skalierung.

  • Überlappung mit materialisierten Daten: Während der Materialisierung werden alle neuen Datensätze, die seit der letzten Materialisierung (delta) in der Quelltabelle erfasst wurden, verarbeitet und in der Ansicht materialisiert. Je höher die Schnittmenge zwischen neuen Datensätzen und bereits materialisierten Datensätzen ist, desto schlechter ist die Leistung der materialisierten Ansicht. Eine materialisierte Ansicht funktioniert am besten, wenn die Anzahl der Datensätze, die aktualisiert werden (z. B. in arg_max der Ansicht), eine kleine Teilmenge der Quelltabelle ist. Wenn alle oder die meisten materialisierten Ansichtsdatensätze in jedem Materialisierungszyklus aktualisiert werden müssen, funktioniert die materialisierte Ansicht möglicherweise nicht gut.

  • Erfassungsrate: Es gibt keine hartcodierten Grenzwerte für das Datenvolumen oder die Erfassungsrate in der Quelltabelle der materialisierten Ansicht. Die empfohlene Erfassungsrate für materialisierte Ansichten beträgt jedoch nicht mehr als 1 bis 2 GB/Sekunde. Höhere Erfassungsraten können weiterhin gut funktionieren. Die Leistung hängt von der Clustergröße, den verfügbaren Ressourcen und der Anzahl der Überschneidung mit vorhandenen Daten ab.

  • Anzahl materialisierter Ansichten im Cluster: Die obigen Überlegungen gelten für jede einzelne materialisierte Ansicht, die im Cluster definiert ist. Jede Ansicht verbraucht ihre eigenen Ressourcen, und viele Ansichten konkurrieren miteinander um verfügbare Ressourcen. Obwohl es keine hartcodierten Grenzwerte für die Anzahl materialisierter Ansichten in einem Cluster gibt, kann der Cluster möglicherweise nicht alle materialisierten Ansichten verarbeiten, wenn viele definiert sind. Die Kapazitätsrichtlinie kann angepasst werden, wenn mehr als eine einzelne materialisierte Ansicht im Cluster vorhanden ist. Erhöhen Sie den Wert von ClusterMinimumConcurrentOperations in der Richtlinie, um mehr materialisierte Ansichten gleichzeitig auszuführen.

  • Definition der materialisierten Ansicht: Die materialisierte Ansichtsdefinition muss gemäß den bewährten Methoden der Abfrage definiert werden, um eine optimale Abfrageleistung zu erzielen. Weitere Informationen finden Sie unter Erstellen von Tipps zur Befehlsleistung.

Materialisierte Ansicht über materialisierte Ansicht

Eine materialisierte Ansicht kann über eine andere materialisierte Sicht erstellt werden, wenn die materialisierte Quellsicht eine Deduplizierungssicht ist. Insbesondere muss die Aggregation der materialisierten Quellsicht sein take_any(*) , um Quelldatensätze zu deduplizieren. Die zweite materialisierte Ansicht kann alle unterstützten Aggregationsfunktionen verwenden. Spezifische Informationen zum Erstellen einer materialisierten Ansicht über eine materialisierte Ansicht finden Sie unter .create materialized-view Befehl.

Tipp

Beim Abfragen einer materialisierten Sicht, die über eine andere materialisierte Sicht definiert ist, wird empfohlen, den materialisierten Teil nur mithilfe der materialized_view() -Funktion zu abfragen. Das Abfragen der gesamten Ansicht ist nicht leistungsfähig, wenn beide Ansichten nicht vollständig materialisiert sind. Weitere Informationen finden Sie unter materialisierte Sichtenabfragen.