Principer för materialiserade vyer

Den här artikeln innehåller information om principer som kan ställas in för materialiserade vyer.

Kvarhållnings- och cachelagringsprincip

En materialiserad vy har en kvarhållningsprincip och cachelagringsprincip. Den materialiserade vyn härleder databaskvarhållnings- och cachelagringsprinciperna som standard. Dessa principer kan ändras med hjälp av hanteringskommandon för kvarhållningsprinciper eller kommandon för hantering av cachelagringsprinciper.

Båda principerna tillämpas endast på den materialiserade delen av den materialiserade vyn. En förklaring av skillnaderna mellan den materialiserade delen och deltadelen finns i hur materialiserade vyer fungerar. Om till exempel cachelagringsprincipen för en materialiserad vy är inställd på 7d, men cachelagringsprincipen för källtabellen är inställd på 0d, kan det fortfarande finnas diskmissar när du frågar den materialiserade vyn. Det här beteendet beror på att källtabellen (deltadelen) också deltar i frågan.

Kvarhållningsprincipen för den materialiserade vyn är inte relaterad till källtabellens kvarhållningsprincip. Kvarhållningsprincipen för källtabellen kan vara kortare än kvarhållningsprincipen för den materialiserade vyn, om källposter krävs under en kortare period. Vi rekommenderar en minsta kvarhållningsprincip på minst några dagar och återställningsbarheten inställd på true i källtabellen. Den här inställningen möjliggör snabb återställning för fel och för diagnostiska ändamål.

Anteckning

Ingen kvarhållningsprincip i källtabellen stöds inte.

Både kvarhållnings- och cachelagringsprinciperna beror på tiden för att skapa utrymme. Den senaste uppdateringen för en post avgör tiden för att skapa utrymme för en materialiserad vy.

Anteckning

Materialiseringsprocessen försöker minimera mängden uppdateringar av den materialiserade delen av vyn. I fall där en post inte behöver uppdateras i vyn uppdateras den inte. När den materialiserade vyn till exempel är en take_any(*) aggregering matas inte nya poster med samma grupperingsnycklar in i vyn igen, och därför matas kvarhållningsprincipen in av den tidigaste posten.

Partitioning-principen

En partitioneringsprincip kan tillämpas på en materialiserad vy. Vi rekommenderar att du konfigurerar en partitioneringsprincip i en materialiserad vy endast när de flesta eller alla visningsfrågor filtreras efter en av den materialiserade vyns grupperingsnycklar. Den här situationen är vanlig i lösningar för flera klientorganisationer, där en av den materialiserade vyns grupperingsnycklar är klientens identifierare (till exempel tenantId, customerId). Mer information finns i det första användningsfallet som beskrivs på sidan med scenarier som stöds av partitioneringsprincipen .

Kommandon för att ändra partitioneringsprincipen för en materialiserad vy finns i partitioneringsprincipkommandon.

Om du lägger till en partitioneringsprincip i en materialiserad vy ökar antalet utrymmen i den materialiserade vyn och skapar mer "arbete" för materialiseringsprocessen. Mer information om orsaken till det här beteendet finns i processen för återskapande av utrymmen som nämns i hur materialiserade vyer fungerar.

Säkerhetsprincip för radnivå

Säkerhet på radnivå kan tillämpas i en materialiserad vy med flera begränsningar:

  • Principen kan endast tillämpas på materialiserade vyer med arg_max()/arg_min()/take_any() aggregeringsfunktioner, eller när säkerhetsfrågan på radnivå refererar till gruppen efter nycklar för den materialiserade vyaggregeringen.
  • Principen tillämpas endast på den materialiserade delen av vyn.
    • Om samma säkerhetsprincip på radnivå inte har definierats i källtabellen i den materialiserade vyn kan frågor i den materialiserade vyn returnera poster som ska döljas av principen. Detta beror på att frågan till den materialiserade vyn även kör frågor mot källtabellen.
    • Vi rekommenderar att du definierar samma säkerhetsprincip på radnivå både i källtabellen och den materialiserade vyn om vyn är en arg_max() eller arg_min()/take_any().
  • När du definierar en säkerhetsprincip på radnivå i källtabellen för en arg_max() eller arg_min()/take_any() materialiserad vy misslyckas kommandot om det inte finns någon säkerhetsprincip på radnivå definierad i själva den materialiserade vyn. Syftet med felet är att varna användaren om en potentiell dataläcka, eftersom den materialiserade vyn kan exponera information. Du kan åtgärda det här felet genom att utföra någon av följande åtgärder:
    • Definiera säkerhetsprincipen på radnivå i den materialiserade vyn.
    • Välj att ignorera felet genom att lägga till allowMaterializedViewsWithoutRowLevelSecurity egenskapen i kommandot alter policy. Exempel:
    .alter table SourceTable policy row_level_security enable with (allowMaterializedViewsWithoutRowLevelSecurity=true) "RLS_function"

Kommandon för att konfigurera en säkerhetsprincip på radnivå i en materialiserad vy finns i row_level_security principkommandon.