Gerealiseerde weergaven

Gerealiseerde weergaven geven een aggregatiequery weer over een brontabel of over een andere gerealiseerde weergave.

Gerealiseerde weergaven retourneren altijd een up-to-date resultaat van de aggregatiequery (altijd nieuw). Het uitvoeren van query's op een gerealiseerde weergave is beter dan het uitvoeren van de aggregatie rechtstreeks op de brontabel.

Notitie

Waarom gerealiseerde weergaven gebruiken?

Door resources (gegevensopslag, CPU-cycli op de achtergrond) te investeren voor gerealiseerde weergaven van veelgebruikte aggregaties, profiteert u van de volgende voordelen:

  • Prestatieverbetering: Het uitvoeren van query's op een gerealiseerde weergave werkt doorgaans beter dan het uitvoeren van query's op de brontabel voor dezelfde aggregatiefuncties.

  • Versheid: Een gerealiseerde weergavequery retourneert altijd de meest recente resultaten, onafhankelijk van wanneer de materialisatie voor het laatst heeft plaatsgevonden. De query combineert het gerealiseerde deel van de weergave met de records in de brontabel, die nog niet zijn gerealiseerd (het delta deel), wat altijd de meest recente resultaten oplevert.

  • Kostenreductie:het uitvoeren van query's op een gerealiseerde weergave verbruikt minder resources uit het cluster dan het uitvoeren van de aggregatie via de brontabel. Het bewaarbeleid van de brontabel kan worden verminderd als alleen aggregatie is vereist. Deze installatie vermindert de kosten voor de dynamische cache voor de brontabel.

Zie Use Cases voor gerealiseerde weergave voor voorbeelden.

Hoe gerealiseerde weergaven werken

Een gerealiseerde weergave bestaat uit twee onderdelen:

  • Een gerealiseerd onderdeel: een tabel met geaggregeerde records uit de brontabel, die al zijn verwerkt. Deze tabel bevat altijd één record volgens de groepeer-op-combinatie van de aggregatie.
  • Een delta : de zojuist opgenomen records in de brontabel die nog niet zijn verwerkt.

Bij het uitvoeren van query's op de gerealiseerde weergave wordt het gerealiseerde deel gecombineerd met het delta-gedeelte, wat een up-to-date resultaat van de aggregatiequery oplevert. Het offline materialisatieproces neemt nieuwe records op van de delta naar de gerealiseerde tabel en werkt bestaande records bij. Als het snijpunt tussen de delta en het gerealiseerde deel groot is en veel records moeten worden bijgewerkt, kan dit een negatieve invloed hebben op het materialisatieproces. Zie Gerealiseerde weergaven bewaken voor het oplossen van dergelijke situaties.

Gerealiseerde weergavequery's

Er zijn twee manieren om een query uit te voeren op een gerealiseerde weergave:

  • Query uitvoeren op de hele weergave: wanneer u een query uitvoert op de gerealiseerde weergave op basis van de naam, net als bij het uitvoeren van query's op een tabel, combineert de gerealiseerde weergavequery het gerealiseerde deel van de weergave met de records in de brontabel die nog niet zijn gerealiseerd (de delta).

    • Als u een query uitvoert op de gerealiseerde weergave, worden altijd de meest recente resultaten geretourneerd, op basis van alle records die zijn opgenomen in de brontabel. Zie hoe gerealiseerde weergaven werken voor meer informatie over de gerealiseerde versus niet-gerealiseerde onderdelen in de gerealiseerde weergave.
    • Deze optie werkt mogelijk niet optimaal omdat het onderdeel tijdens de delta query moet worden gerealiseerd. De prestaties zijn in dit geval afhankelijk van de leeftijd van de weergave en de filters die in de query zijn toegepast. De sectie Gerealiseerde weergavequeryoptimalisatie bevat mogelijke manieren om de queryprestaties te verbeteren bij het uitvoeren van query's op de hele weergave.
  • Voer alleen een query uit op het gerealiseerde deel: een andere manier om query's uit te voeren op de weergave is met behulp van de materialized_view() functie . Deze optie ondersteunt alleen het uitvoeren van query's op het gerealiseerde deel van de weergave, terwijl de maximale latentie wordt opgegeven die de gebruiker bereid is te tolereren.

    • Deze optie retourneert niet gegarandeerd de meest recente records, maar het moet altijd beter zijn dan het uitvoeren van query's op de hele weergave.
    • Deze functie is handig voor scenario's waarin u bereid bent om wat nieuwheid op te offeren voor prestaties, bijvoorbeeld voor telemetriedashboards.

Tip

Query's op het gerealiseerde onderdeel presteren alleen beter dan het uitvoeren van query's op de hele weergave. Gebruik altijd de materialized_view() functie wanneer dit van toepassing is voor uw use-case.

  • Gerealiseerde weergaven maken deel uit van query's tussen clusters of databases, maar zijn niet opgenomen in jokertekens of zoekopdrachten.

    • De volgende voorbeelden bevatten allemaal gerealiseerde weergaven met de naam ViewName:
    cluster('cluster1').database('db').ViewName
    cluster('cluster1').database('*').ViewName
    database('*').ViewName
    database('DB*').ViewName
    database('*').materialized_view('ViewName')
    database('DB*').materialized_view('ViewName')
    
    • De volgende voorbeelden bevatten geen records uit gerealiseerde weergaven:
    cluster('cluster1').database('db').*
    database('*').View*
    search in (*)
    search * 
    

Gerealiseerde weergavequeryoptimalisatie

Wanneer u een query uitvoert op de hele weergave, wordt het gerealiseerde deel tijdens de querytijd gecombineerd met de delta . Dit omvat het delta samenvoegen en samenvoegen met het gerealiseerde deel.

  • Het uitvoeren van query's op de hele weergave werkt beter als de query filters bevat op de groeperen op sleutels van de gerealiseerde weergavequery. Zie de sectie Prestatietips voor meer tips over het maken van uw .create materialized-view gerealiseerde weergave op basis van uw querypatroon.
  • Het queryoptimalisatieprogramma kiest samenvatten/samenvoegen strategieën die naar verwachting de queryprestaties verbeteren. De beslissing over het wijzigen van de query is bijvoorbeeld gebaseerd op het aantal records in delta een deel. De volgende eigenschappen van clientaanvragen bieden enige controle over de toegepaste optimalisaties. U kunt deze eigenschappen testen met uw gerealiseerde weergavequery's en de impact ervan op de prestaties van query's evalueren.
Naam van clientaanvraageigenschap Type Description
materialized_view_query_optimization_costbased_enabled bool Als dit is ingesteld op false, worden optimalisaties voor samenvatten/samenvoegen in gerealiseerde weergavequery's uitgeschakeld. Maakt gebruik van standaardstrategieën. De standaardinstelling is true.
materialized_view_shuffle dynamic Dwing het versnipperen van de gerealiseerde weergavequery af en geef (optioneel) specifieke toetsen op om door te schuiven. Zie de onderstaande voorbeelden .

Voorbeelden

  1. Voer een query uit op de hele weergave. De meest recente records in de brontabel zijn opgenomen:

    ViewName
    
  2. Voer alleen een query uit op het gerealiseerde deel van de weergave, ongeacht wanneer dit voor het laatst is gerealiseerd.

    materialized_view("ViewName")
    
  3. Voer een query uit op de hele weergave en geef een 'hint' op voor het gebruik van shuffle strategie. De meest recente records in de brontabel zijn opgenomen:

    • Voorbeeld 1: shuffle op basis van de Id kolom (vergelijkbaar met het gebruik van hint.shufflekey=Id):
    set materialized_view_shuffle = dynamic([{"Name" : "ViewName", "Keys" : [ "Id" ] }]);
    ViewName
    
    • Voorbeeld 2: willekeurige volgorde toepassen op basis van alle toetsen (vergelijkbaar met het gebruik van hint.strategy=shuffle):
    set materialized_view_shuffle = dynamic([{"Name" : "ViewName" }]);
    ViewName
    

Prestatieoverwegingen

De belangrijkste inzenders die van invloed kunnen zijn op een gerealiseerde weergavestatus zijn:

  • Clusterresources: Net als elk ander proces dat op het cluster wordt uitgevoerd, verbruiken gerealiseerde weergaven resources (CPU, geheugen) van het cluster. Als het cluster overbelast is, kan het toevoegen van gerealiseerde weergaven aan het cluster leiden tot een verslechtering van de prestaties van het cluster. Bewaak de status van uw cluster met behulp van metrische gegevens over de clusterstatus. Geoptimaliseerde automatische schaalaanpassing houdt momenteel geen rekening met de status van gerealiseerde weergaven als onderdeel van regels voor automatisch schalen.

  • Overlappen met gerealiseerde gegevens: Tijdens de materialisatie worden alle nieuwe records die sinds de laatste materialisatie (de delta) zijn opgenomen in de brontabel, verwerkt en gerealiseerd in de weergave. Hoe hoger het snijpunt tussen nieuwe records en reeds gerealiseerde records is, hoe slechter de prestaties van de gerealiseerde weergave zijn. Een gerealiseerde weergave werkt het beste als het aantal records dat wordt bijgewerkt (bijvoorbeeld in arg_max weergave) een kleine subset van de brontabel is. Als alle of de meeste gerealiseerde weergaverecords in elke materialisatiecyclus moeten worden bijgewerkt, presteert de gerealiseerde weergave mogelijk niet goed.

  • Opnamesnelheid: Er zijn geen in code vastgelegde limieten voor het gegevensvolume of de opnamesnelheid in de brontabel van de gerealiseerde weergave. De aanbevolen opnamesnelheid voor gerealiseerde weergaven is echter niet meer dan 1-2 GB per seconde. Hogere opnamesnelheden kunnen nog steeds goed presteren. Prestaties zijn afhankelijk van de clustergrootte, beschikbare resources en de hoeveelheid snijpunt met bestaande gegevens.

  • Aantal gerealiseerde weergaven in cluster: De bovenstaande overwegingen zijn van toepassing op elke afzonderlijke gerealiseerde weergave die in het cluster is gedefinieerd. Elke weergave verbruikt eigen resources en veel weergaven concurreren met elkaar op beschikbare resources. Hoewel er geen in code vastgelegde limieten zijn voor het aantal gerealiseerde weergaven in een cluster, kan het cluster mogelijk niet alle gerealiseerde weergaven verwerken wanneer er veel zijn gedefinieerd. Het capaciteitsbeleid kan worden aangepast als het cluster meer dan één gerealiseerde weergave bevat. Verhoog de waarde van ClusterMinimumConcurrentOperations in het beleid om meer gerealiseerde weergaven gelijktijdig uit te voeren.

  • Gerealiseerde weergavedefinitie: de gerealiseerde weergavedefinitie moet worden gedefinieerd volgens de best practices voor query's voor de beste queryprestaties. Zie tips voor opdrachtprestaties maken voor meer informatie.

Gerealiseerde weergave boven gerealiseerde weergave

Een gerealiseerde weergave kan worden gemaakt boven een andere gerealiseerde weergave als de gerealiseerde bronweergave een ontdubbelingsweergave is. Met name de aggregatie van de gerealiseerde bronweergave moet zijn take_any(*) om bronrecords te ontdubbelen. De tweede gerealiseerde weergave kan gebruikmaken van alle ondersteunde aggregatiefuncties. Zie opdracht voor specifieke informatie over het maken van een gerealiseerde weergave over een gerealiseerde weergave.create materialized-view.

Tip

Wanneer u een query uitvoert op een gerealiseerde weergave die is gedefinieerd in een andere gerealiseerde weergave, raden we u aan om alleen een query uit te voeren op het gerealiseerde deel met behulp van de materialized_view() functie. Het uitvoeren van query's op de hele weergave is niet goed wanneer beide weergaven niet volledig zijn gerealiseerd. Zie Gerealiseerde weergavequery's voor meer informatie.