Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Tabele historyczne w PostgreSQL Rafał Piechocki Promet.

Podobne prezentacje


Prezentacja na temat: "Tabele historyczne w PostgreSQL Rafał Piechocki Promet."— Zapis prezentacji:

1 Tabele historyczne w PostgreSQL Rafał Piechocki Promet

2 Tabele historyczne wprowadzenie

3 Cele i korzyści

4 Cele i korzyści stosowania tabel historycznych Archiwum wersji Pomoc w sporze Śledzenie zmian Podstawowe PITR Backup danych Wyłapywanie błędów Dodatkowe

5 Realizacja tabel historycznych

6 AplikacjaORMBaza danychSerwer bazy danych

7 Czynniki, które należy brać pod uwagę Wpływ na wydajność Przeźroczystość rozwiązania Łatwość dostępu do archiwum Łatwość implementacji Czynniki?

8 Przykładowe implementacje 1. Osobna tabela – change logi

9 Tabela podstawowa + tabela change logów ZDJECIE (tabela podstawowa) idpeselstatuskomunikatpracownik 1850505000070Promet 2 (update)87070700005Nie kolorowePromet CHANGE_LOG #tabelaiddataoperacja 3zdjecie1 2012-04-01 insert 4zdjecie2 2012-12-08 update CHANGE_LOG_VALUE #kolumnastaranowa 4status0 4komunikatNie kolorowe 4pracownikPromet

10 1.INSERT INTO dz_oceny (os_id,toc_kod,wart_oc_kolejnosc,prot_id,term_prot_nr) VALUES ('5094','ZAL-STD','1','136651','1'); 2.INSERT INTO M_CHANGE_LOG (TABLE_NAME, MOD_TIME, MOD_TYPE) VALUES ('dz_oceny', now(), 'insert'); 3.SELECT MAX(id) as max FROM M_CHANGE_LOG; 4.INSERT INTO M_CHANGE_LOG_VALUES (CHANGE_ID, FIELD_NAME, VALUE) VALUES (8044, 'os_id', '5094'); 5.INSERT INTO M_CHANGE_LOG_VALUES (CHANGE_ID, FIELD_NAME, VALUE) VALUES (8044, 'toc_kod', 'ZAL-STD'); 6.INSERT INTO M_CHANGE_LOG_VALUES (CHANGE_ID, FIELD_NAME, VALUE) VALUES (8044, 'wart_oc_kolejnosc', '1'); 7.INSERT INTO M_CHANGE_LOG_VALUES (CHANGE_ID, FIELD_NAME, VALUE) VALUES (8044, 'prot_id', '136651'); 8.INSERT INTO M_CHANGE_LOG_VALUES (CHANGE_ID, FIELD_NAME, VALUE) VALUES (8044, 'term_prot_nr', '1');

11 Tabele typu change log - podsumowanie Zalety: Łatwość wykrywania zmian Łatwość migracji danych Testowanie spójności danych Wady: Wydajność (liczba zapytań) Trudność implementacji Nieprzeźroczystość?

12 Przykładowe implementacje 2. Tabela + widok

13 Tabela + widok ZDJECIE (tabela podstawowa) idwaznoscpeselstatuskomunikatpracownik 12012-04-08850505000070 12012-04-1585050500007Nie kolorowePromet 12012-08-07850505000070 1infinity850505000071Zdjęcie OKPromet 2infinity870707000070 V_ZDJECIE (widok dla tabeli podstawowej) idwaznoscpeselstatuskomunikatpracownik 1infinity850505000071Zdjęcie OKPromet 2infinity870707000070 Filtr: WHERE waznosc=infinity

14 Tabela podstawowa ZDJECIE (tabela podstawowa) idwaznoscpeselstatuskomunikatpracownik 12012-04-08850505000070 12012-04-1585050500007Nie kolorowePromet 12012-08-07850505000070 1infinity850505000071Zdjęcie OKPromet 2infinity870707000070 Tabela zawiera zarówno bieżące dane jak i archiwalne. Klucz główny: (ID + waznosc), ograniczenia (pesel + waznosc) Triggery INSERT, UPDATE, DELETE: Oznaczają bieżący rekord jako wygasły Wstawiają nowy rekord oznaczony jako ważny Chronią archiwalne dane przed zmianą

15 Widok dla tabeli podstawowej Filtr wybiera z tabeli podstawowej wyłącznie te rekordy, które nie wygasły. Widok zawiera zatem wyłącznie bieżące dane. Możliwość wprowadzenia reguł dla widoku = możliwość wykonywania na widoku operacji: INSERT UPDATE DELETE V_ZDJECIE (widok dla tabeli podstawowej) idwaznoscpeselstatuskomunikatpracownik 1infinity850505000071Zdjęcie OKPromet 2infinity870707000070

16 Demonstracja Tabela + widok

17 Tabela + widok - podsumowanie Zalety: Łatwy dostęp do archiwum Bezpieczeństwo danych Wady: Klucze główne, ograniczenia Rozmiar tabeli podstawowej Nienaturalne operacje Problematyczna zmiana struktury

18 Przykładowe implementacje 3. Tabela podstawowa + tabela archiwalna

19 Tabela podstawowa + tabela archiwalna ARCHIWUM.ZDJECIE (tabela archiwalna) idtimestamppeselstatuskomunikatpracownik 12012-04-08850505000070 12012-04-0885050500007Nie kolorowePromet 12012-06-07850505000070 12012-07-15850505000071Zdjęcie OKPromet 22012-08-08870707000070 PUBLIC.ZDJECIE (tabela podstawowa) idtimestamppeselstatuskomunikatpracownik 12012-07-15850505000071Zdjęcie OKPromet 22012-08-08870707000070

20 Tabela podstawowa PUBLIC.ZDJECIE (tabela podstawowa) idtimestamppeselstatuskomunikatpracownik 12012-07-15850505000071Zdjęcie OKPromet 22012-08-08870707000070 Zawiera wyłącznie aktualne dane Triggery INSERT, DELETE, UPDATE kopiują dane do archiwum, nie zmieniając nic w tabeli podstawowej. Mogą dziedziczyć podstawową strukturę z szablonu

21 Tabela archiwalna Tabela znajduje się w osobnym schemacie DB Zawiera dane archiwalne + dane bieżące Dane mogą być chronione przed zmianą/kasowaniem Schemat może być umieszczony na innym Storage-u ARCHIWUM.ZDJECIE (tabela archiwalna) idtimestamppeselstatuskomunikatpracownik 12012-04-08850505000070 12012-04-0885050500007Nie kolorowePromet 12012-06-07850505000070 12012-07-15850505000071Zdjęcie OKPromet 22012-08-08870707000070

22 Tabela podstawowa + tabela archiwalna Wykorzystywane mechanizmy DBMS: Dziedziczenie struktury Triggery Procedury składowane Rozwiązane problemy: Spójność struktury tabeli podstawowej z archiwalną Łatwość tworzenia tabel archiwalnych i potrzebnych triggerów

23 Dziedziczenie tabel Wzorzec (dla wszystkich tabel, które mają mieć archiwum) Tabela podstawowaTabela archiwalna zapewnienie spójności struktury dla tabel (konieczne) wskazuje jakie tabele mają być archiwizowane (opcjonalne)

24 Demonstracja Tabela podstawowa + tabela archiwalna

25 Zalety: Łatwy dostęp do danych Dostosowanie się do zmian struktury Wydajność Przeźroczystość dla aplikacji Naturalne zapytania SQL Tabela archiwalna jako backup, PITR Wady: Implementacja w innych DBMS?

26 Kiedy stosować, a kiedy nie?

27 Kiedy (nie) stosować? Warto stosować: Kluczowe dane Nie warto stosować: Często zmieniające się dane Dane statyczne Dane wtórne/redundantne

28 Pytania?


Pobierz ppt "Tabele historyczne w PostgreSQL Rafał Piechocki Promet."

Podobne prezentacje


Reklamy Google