Materialiseret visning - Materialized view

I computing er en materialiseret visning et databaseobjekt, der indeholder resultaterne af en forespørgsel . For eksempel kan det være en lokal kopi af data, der findes eksternt, eller det kan være en delmængde af rækkerne og / eller kolonnerne i en tabel eller sammenføjningsresultat eller kan være et resumé ved hjælp af en samlet funktion .

Processen med at oprette en materialiseret visning kaldes undertiden materialisering . Dette er en form for caching af resultaterne af en forespørgsel svarende til memoization af værdien af ​​en funktion på funktionelle sprog, og den beskrives undertiden som en form for præberegning . Som med andre former for forudberegning bruger databasebrugerne typisk materialiserede visninger af ydeevneårsager, dvs. som en form for optimering.

Materialiserede visninger, der gemmer data baseret på eksterne tabeller, blev også kendt som snapshots (forældet Oracle-terminologi).

I enhver database management system efter relationelle model , en visning er en virtuel tabel repræsenterer resultatet af en database forespørgsel . Hver gang en forespørgsel eller en opdatering adresserer en almindelig visnings virtuelle tabel, konverterer DBMS disse til forespørgsler eller opdateringer mod de underliggende basistabeller. En materialiseret visning tager en anden tilgang: forespørgselsresultatet cachelagres som en konkret ("materialiseret") tabel (snarere end en visning som sådan), der kan opdateres fra de oprindelige basistabeller fra tid til anden. Dette muliggør meget mere effektiv adgang på bekostning af ekstra lagring og for nogle data, der potentielt er forældede. Materialiserede visninger finder anvendelse især i datalagringsscenarier , hvor hyppige forespørgsler af de faktiske basistabeller kan være dyre.

I en materialiseret visning kan indekser bygges på en hvilken som helst kolonne. I modsætning hertil er det i en normal visning typisk kun muligt at udnytte indekser på kolonner, der kommer direkte fra (eller har en tilknytning til) indekserede kolonner i basistabellerne; ofte tilbydes denne funktionalitet slet ikke.

Implementeringer

Oracle

Materialiserede visninger blev først implementeret af Oracle Database : Query-omskrivningsfunktionen blev tilføjet fra version 8i.

Eksempel på syntaks for at skabe en materialiseret visning i Oracle:

 CREATE MATERIALIZED VIEW MV_MY_VIEW
REFRESH FAST START WITH SYSDATE
   NEXT SYSDATE + 1
     AS SELECT * FROM <table_name>;

PostgreSQL

I PostgreSQL understøtter version 9.3 og nyere indbyggede visninger. I version 9.3 opdateres en materialiseret visning ikke automatisk og udfyldes kun på tidspunktet for oprettelsen (medmindre den WITH NO DATAbruges). Det opdateres muligvis senere manuelt ved hjælp af REFRESH MATERIALIZED VIEW. I version 9.4 kan opdateringen være samtidig med selekter i den materialiserede visning, hvis den CONCURRENTLYbruges.

Eksempel på syntaks for at oprette en materialiseret visning i PostgreSQL:

 CREATE MATERIALIZED VIEW MV_MY_VIEW
 [ WITH (storage_parameter [= value] [, ... ]) ]
    [ TABLESPACE tablespace_name ]
     AS SELECT * FROM <table_name>;

SQL Server

Microsoft SQL Server adskiller sig fra andre RDBMS ved at implementere materialiseret visning via et koncept kendt som "Indexed Views". Hovedforskellen er, at sådanne visninger ikke kræver opdatering, fordi de faktisk altid er synkroniseret med de originale data i tabellerne, der sammensætter visningen. For at opnå dette er det nødvendigt, at oprindelses- og destinationslinjerne er "deterministiske" i deres kortlægning, hvilket begrænser typerne af mulige forespørgsler til at gøre dette. Denne mekanisme er blevet realiseret siden 2000-versionen af ​​SQL Server.

Eksempel på syntaks for at oprette en materialiseret visning i SQL Server:

CREATE VIEW MV_MY_VIEW
WITH SCHEMABINDING
AS 
SELECT COL1, SUM(COL2) AS TOTAL
FROM <table_name>
GROUP BY COL1;
GO
CREATE UNIQUE CLUSTERED INDEX XV 
   ON MV_MY_VIEW (COL1);

Stream behandlingsrammer

Apache Kafka (siden v0.10.2), Apache Spark (siden v2.0) og materialiser alle materialiserede understøttede visninger på datastrømme.

Andre

Materialiserede visninger understøttes også i Sybase SQL Anywhere . I IBM DB2 kaldes de "materialiserede forespørgselstabeller". ClickHouse understøtter materialiserede visninger, der automatisk opdateres ved fletninger. MySQL understøtter ikke oprindelige materialiserede visninger, men løsninger kan implementeres ved hjælp af udløsere eller lagrede procedurer eller ved hjælp af open source-applikationen Flexviews . Materialiserede visninger kan implementeres i Amazon DynamoDB ved hjælp af datamodifikationshændelser fanget af DynamoDB Streams. Google meddelte den 8. april 2020 tilgængeligheden af ​​materialiserede visninger til BigQuery som en betaudgivelse.

Referencer

eksterne links