miroslav Šimulčík: temporálne databázy

28
Ing. Miroslav Šimulčík [email protected]

Upload: jano-suchal

Post on 18-Jun-2015

734 views

Category:

Technology


0 download

DESCRIPTION

Temporálne databázy umožňujú zachytávať históriu biznisových a systémových zmien dát a poskytujú prostriedky na pohodlnú prácu s historickými dátami. Majú široké uplatnenie v rôznych sektoroch ako napríklad poisťovníctvo, bankovníctvo či rezervačné systémy. Umožňujú jednoduché kontrolovanie vykonaných zmien, návrat k predchádzajúcim stavom dát a rôzne analytické dotazy nad históriou. V rámci prezentácie sa budem venovať všeobecnému prehľadu oblasti, existujúcim štandardom (napr. SQL:2011) a riešeniam a na jednoduchých príkladoch predvediem hlavnú funkcionalitu temporálnych databáz. Nakoniec ešte načrtnem možnosti pridania temporálnej podpory do Postgresql a porozprávam aj o tom, ako sa snažím temporálnu podporu dostať do oficiálneho release a čo všetko také niečo obnáša.

TRANSCRIPT

Page 1: Miroslav Šimulčík: Temporálne databázy

Ing. Miroslav Šimulčík [email protected]

Page 2: Miroslav Šimulčík: Temporálne databázy

Zachytávajú len jeden stav dát, väčšinou súčasný

Pri modifikácii sú staré hodnoty nahradené novými a ďalej nedostupné

Príklad: systém na správu zamestnancov ◦ Zamestnanec požiada o zvýšenie platu

Kedy sme mu naposledy zvýšili plat a o koľko?

◦ V databáze sa „pokazili“ dáta

Akou postupnosťou operácií dáta vznikli? Kto je za to zodpovedný?

Page 3: Miroslav Šimulčík: Temporálne databázy

Návrat k historickým dátam ◦ Restore databázy + rollforward

Ťažkopádne a nedostatočné riešenie

Zavedenie histórie – časté riešenia: ◦ Triggre

◦ Uložené procedúry

◦ Aplikačná vrstva

Netriviálne problémy ◦ Dotazy

◦ Modifikujúce operácie

◦ Dátová integrita

Page 4: Miroslav Šimulčík: Temporálne databázy

Databázy pracujúce s časom, umožňujúce zachytávať históriu v čase sa meniacich (temporálnych) dát.

Jednoduchá a efektívna práca s temporálnymi dátami

Bez nutnosti vývoja vlastných riešení

Široké spektrum uplatnenia ◦ Poisťovníctvo

◦ Bankovníctvo

◦ Zdravotníctvo

◦ Rezervačné systémy

Page 5: Miroslav Šimulčík: Temporálne databázy

Aplikačný čas ◦ Čas platnosti dát v reálnom svete ◦ Zadáva používateľ ◦ Zaznamenáva napríklad zmeny výšky platu ◦ Využitie

Analýzy vývoja dát Historické reporty

Systémový čas ◦ Čas operácie (INSERT, UPDATE, DELETE ...) v databázovom systéme ◦ Udržiavaný databázovým systémom ◦ Zaznamenáva napríklad opravy preklepov ◦ Využitie

Audity modifikácií Identifikácia a oprava chýb Obnova dát

Page 6: Miroslav Šimulčík: Temporálne databázy

Snapshot databázy ◦ Uchovávajú len aktuálne dáta

Page 7: Miroslav Šimulčík: Temporálne databázy

Historické databázy ◦ Zachytávajú zmeny v reálnom svete (biznise)

Page 8: Miroslav Šimulčík: Temporálne databázy

Rollback databázy ◦ Zachytávajú zmeny v databáze samotnej

Page 9: Miroslav Šimulčík: Temporálne databázy

Bitemporálne databázy ◦ Kombinácia historických a rollback databáz

Page 10: Miroslav Šimulčík: Temporálne databázy

TSQL2 (1994) ◦ Rozšírenie SQL-92 ◦ Základ novších štandardov ◦ Publikovaný, ale nebol predložený žiadnej štandardizačnej autorite

SQL/Temporal (1997) ◦ Časť štandardu SQL 3 ◦ Návrh na pridanie temporálnej podpory vychádzajúcej z TSQL2 bol

zamietnutý ISO komisiou ◦ Základ niektorých existujúcich riešení

SQL 2011 (koniec 2011) ◦ Výrazné rozdiely oproti TSQL2 ◦ Vydaný ISO ◦ Nie je voľne dostupný – dokopy cca 1300$

Page 11: Miroslav Šimulčík: Temporálne databázy

Len proprietárne

IBM DB2 10 ◦ Rozšírená syntax

◦ Dodržiava štandard SQL 2011

Oracle 11g Workspace Manager ◦ Nepodporuje štandardy

◦ Pomocou prostriedkov databázy (uložené procedúry)

Teradata Database 13 ◦ Vychádza zo SQL/Temporal

◦ Poskytuje najbohatšiu temporálnu podporu

Page 12: Miroslav Šimulčík: Temporálne databázy

Predstavuje interval hodnôt Môže byť založený na rôznych typoch ◦ date, timestamp, integer, decimal... ◦ rôzna granularita

Rôzna uzavretosť hraníc Operácie ◦ UNION, EXCEPT, INTERSECT

Predikáty ◦ PRECEDES, SUCCEEDS, MEETS, OVERLAPS, CONTAINS

Vhodný na vyjadrenie období platnosti záznamov SQL 2011 – slabá podpora

Page 13: Miroslav Šimulčík: Temporálne databázy

CREATE TABLE person (

id INTEGER PRIMARY KEY,

first_name VARCHAR(50),

last_name VARCHAR(50),

sys_start TIMESTAMP GENERATED ALWAYS AS ROW START,

sys_end TIMESTAMP GENERATED ALWAYS AS ROW END,

PERIOD FOR SYSTEM_TIME (sys_start, sys_end)

) WITH SYSTEM VERSIONING;

Page 14: Miroslav Šimulčík: Temporálne databázy

Syntax príkazov nezmenená

Hodnoty pre začiatok a koniec platnosti stĺpcov sa generujú automaticky

INSERT ◦ Správanie nezmenené

◦ Začiatok platnosti = začiatok transakcie

◦ Koniec platnosti = max. hodnota typu

UPDATE ◦ Automatické vytvorenie novej verzie

a ukončenie platnosti starej verzie

◦ Len aktuálne platné riadky môžu byť

modifikované

DELETE ◦ Automatické ukončenie platnosti starej verzie

◦ Len aktuálne platné riadky môžu byť vymazané

1999 9999

UPDATE

2012 (zač. transakcie)

1999 9999 2012

1999 9999

DELETE

2012

1999 2012

Page 15: Miroslav Šimulčík: Temporálne databázy

Bežný SELECT pracuje len s aktuálnymi verziami záznamov ◦ Spätná kompatibilita s existujúcimi aplikáciami

Na prístup k historickým verziám definuje štandard rozšírenú syntax: ◦ FOR SYSTEM_TIME AS OF <point in time 1>

◦ FOR SYSTEM_TIME BETWEEN <point in time 1> AND

<point in time 2>

◦ FOR SYSTEM_TIME FROM <point in time 1> TO <point in

time 2>

Príklad SELECT *

FROM person

FOR SYSTEM_TIME AS OF '2012-09-26-19.00.00.000000'

Page 16: Miroslav Šimulčík: Temporálne databázy

CREATE TABLE person (

id INTEGER,

first_name VARCHAR(50),

last_name VARCHAR(50),

bus_start TIMESTAMP NOT NULL,

bus_end TIMESTAMP NOT NULL,

PERIOD FOR bus_time (bus_start, bus_end)

PRIMARY KEY (id, bus_time WITHOUT OVERLAPS)

);

Page 17: Miroslav Šimulčík: Temporálne databázy

Hodnoty pre začiatok a koniec platnosti stĺpcov zadáva používateľ

INSERT ◦ Syntax a správanie nezmenené

UPDATE ◦ S nezmenenou syntaxou

Ľubovoľná modifikácia riadkov v tabuľke (aj začiatok a koniec platnosti) ◦ FOR PORTION OF <application time period name> FROM <point in

time 1> TO <point in time 2> Zabezpečené automatické rozdeľovanie riadkov Nie je možné modifikovať začiatok a koniec platnosti riadkov UPDATE person

FOR PORTION OF bus_time

FROM '2012-09-26-19.00.00.000000'

TO '2013-12-14-01.00.00.000000'

SET name = 'Ferko'

Page 18: Miroslav Šimulčík: Temporálne databázy

1992 2020

UPDATE

2008 2000

2020 2008 2000

2025 2020

UPDATE

2012 2000

2020 2012 2000

2020

UPDATE

2000

2020 2000

2020 2000

UPDATE

2005 2010

2020 2000 2005 2010

Page 19: Miroslav Šimulčík: Temporálne databázy

DELETE ◦ S nezmenenou syntaxou – mazanie ľubovoľných riadkov

◦ FOR PORTION OF <application time period name> FROM <point in time 1> TO <point in time 2>

Zabezpečené automatické rozdeľovanie riadkov

DELETE FROM person

FOR PORTION OF bus_time

FROM '2012-09-26-19.00.00.000000'

TO '2013-12-14-01.00.00.000000'

Page 20: Miroslav Šimulčík: Temporálne databázy

1992 2020

DELETE

2008 2000

2020 2008

2025 2020

DELETE

2012 2000

2012 2000

2020

DELETE

2000 2020 2000

DELETE

2005 2010

2020 2000 2005 2010

Page 21: Miroslav Šimulčík: Temporálne databázy

CREATE TABLE department (

id INTEGER,

name VARCHAR(50),

bus_start TIMESTAMP NOT NULL,

bus_start TIMESTAMP NOT NULL,

PERIOD FOR business_time (bus_start, bus_end)

PRIMARY KEY (id, business_time WITHOUT OVERLAPS)

);

CREATE TABLE person (

id INTEGER,

first_name VARCHAR(50),

last_name VARCHAR(50),

department_id INTEGER,

bus_start TIMESTAMP NOT NULL,

bus_start TIMESTAMP NOT NULL,

PERIOD FOR bus_time (bus_start, bus_end)

PRIMARY KEY (id, bus_time WITHOUT OVERLAPS)

FOREIGN KEY (department_id, PERIOD bus_time)

REFERENCES department(id, PERIOD bus_time)

);

Page 22: Miroslav Šimulčík: Temporálne databázy

Množinové operácie ◦ Vyhodnocované v každom časovom okamihu ◦ Nezahrnuté v SQL 2011 ◦ Príklad:

person

id first_name last_name bus_time

1 Paľko Malý [1989-1999)

4 Janko Hraško [2006 - 2020)

2 Jožko Mrkvička [1999-∞)

person

id first_name last_name bus_time

1 Paľko Malý [1960-1980)

2 Jožko Mrkvička [1985-2005)

3 Peter Krasko [1960 - 1970)

person

id first_name last_name bus_time

2 Jožko Mrkvička [1999-2005)

INTERSECT

Page 23: Miroslav Šimulčík: Temporálne databázy

Agregačné funkcie ◦ Vyhodnocované v každom časovom okamihu ◦ Nezahrnuté v SQL 2011 ◦ Príklad:

person

id first_name last_name salary bus_time

1 Paľko Malý 1000 [1960-1980)

2 Janko Hraško 900 [1970 - ∞)

3 Jožko Mrkvička 1500 [1975-1990)

salary_sum bus_time

1000 [1960-1970)

1900 [1970-1975)

3400 [1975-1980)

2400 [1980-1990)

900 [1990-∞)

SELECT SUM(salary) FROM person

Page 24: Miroslav Šimulčík: Temporálne databázy

DISTINCT ◦ Duplicitné riadky musia platiť v rovnakom čase

◦ Nezahrnuté v SQL 2011

JOIN ◦ Spájané riadky musia platiť v rovnakom čase

◦ Realizovateľné aj v SQL 2011

Page 25: Miroslav Šimulčík: Temporálne databázy

Range types (PERIOD) ◦ od verzie 9.2

◦ Možnosť indexovania GIST indexom

Podpora všetkých spomínaných predikátov

EXCLUDE constraint – flexibilnejší UNIQUE constraint ◦ Zabránenie prekrývaniu období platnosti

EXCLUDE USING gist (id WITH =, bus_time WITH &&)

Page 26: Miroslav Šimulčík: Temporálne databázy

Vytvorený v rámci diplomovej práce

Snaha o zaradenie do oficiálneho release

Pôvodne založený na štandarde SQL/Temporal

Funkcionalita zahrnutá priamo v backende (nie extension)

Pre prijatie je nutný redizajn ◦ Podpora SQL 2011

◦ Využitie novo pridanej funkcionality

V súčasnosti - čakanie na schválenie nového návrhu komunitou

Následne – implementácia ◦ Extension / core funkcionalita ?

Page 27: Miroslav Šimulčík: Temporálne databázy

Implementačný jazyk – C Rozšírenie syntaxe ◦ Gramatika v BNF, z ktorej sa pomocou nástroja Bison generuje

prekladač v jazyku C

Úpravy systémových katalógov ◦ Pridanie stĺpcov na ukladanie informácií o temporálnych tabuľkách

Zmeny vo vnútorných štruktúrach Spúšťače na odkladanie starých verzií záznamov ◦ Používajú pripravené príkazy, ukladané do hash tabuliek

Rozsah zmien – cca 4000 riadkov v 80 súboroch Modifikované moduly: ◦ Parser – zaoberá sa prekladom a spracovávaním SQL príkazov

preložených do vnútornej štruktúry ◦ Command – zabezpečuje spracovanie a vykonávanie príkazov na

vytváranie a úpravu databázových objektov

Page 28: Miroslav Šimulčík: Temporálne databázy

Otázky?