+ All Categories
Home > Documents > Obecné praktiky práce s DB

Obecné praktiky práce s DB

Date post: 20-Mar-2016
Category:
Upload: laurie
View: 63 times
Download: 0 times
Share this document with a friend
Description:
Obecné praktiky práce s DB. Lubomír Andrle Lubomir.andrle @unicorn.eu. Osnova. Datová vrstva z pohledu programátora Typické úlohy a problémy SQL tipy Integrace pomocí DB. Přehled vrstev systému. Datová vrstva. Služby pro ukládání a načítání dat, dotazování - PowerPoint PPT Presentation
28
Obecné praktiky práce s DB Lubomír Andrle Lubomir.andrle @unicorn.eu
Transcript
Page 1: Obecné praktiky práce s DB

Obecné praktiky práce s DB

Lubomír [email protected]

Page 2: Obecné praktiky práce s DB

Osnova

• Datová vrstva z pohledu programátora• Typické úlohy a problémy• SQL tipy• Integrace pomocí DB

Page 3: Obecné praktiky práce s DB

Přehled vrstev systému

Page 4: Obecné praktiky práce s DB

Datová vrstva• Služby pro ukládání a načítání dat, dotazování• Většinou reprezentovaná relačním databázovým systémem

– Oracle– MS SQL– MySQL– …

• Typické objekty– Tabulky– Pohledy– Uložené procedury

• Časté využití O-R mapování pro přístup k datům z business vrstvy– Mapování objektové struktury aplikace na relační strukturu databáze

• Objektové databáze

Page 5: Obecné praktiky práce s DB

Datová vrstva v N-vrstvé aplikaci I

Page 6: Obecné praktiky práce s DB

Datová vrstva v N-vrstvé aplikaci II

• Zajišťuje persistenci dat• Zprostředkovává jednotný přístup k datům• Typově jde obvykle o OLTP databázi rozšířenou

o dávkové zpracování• Nejčastější implementace– Relační databáze– Soubory– Objektové databáze

Page 7: Obecné praktiky práce s DB

Přístup k datům I.

• Probíhá pomocí dotazovacích jazyků– SQL (Standard Query Language) pro relační databáze– OQL (Object Query Language) pro objektové databáze– Nativním prostředky dané platformy (např. COM objekty)

• SQL– Standardizováno ANSI normami– Neustále se vyvíjí– Jednotlivé relační databáze

• Nepokrývají standardy na 100%• Obsahují specifická rozšíření• Implementace jednotlivých elementů (např. transakce)

nemusí být shodná

Page 8: Obecné praktiky práce s DB

Přístup k datům II.

• Standardizovaná rozhraní (ovladače)– Definují API mezi obchodní logikou a databází– Unifikují jednotlivá API databázových systémů– Případně softwarově simulují chybějící funkce

Page 9: Obecné praktiky práce s DB

Přístup k datům III.

• Nejběžnější API– ODBC (standard C)– JDBC (Java)– ADO (.NET)– OLE DB• Microsoft specifické řešení postavené na COM

objektech• Podporuje i nerelační databáze (např. MS Excel)• Dosud podporováno zejména v MS SQL

Page 10: Obecné praktiky práce s DB

TYPICKÉ ÚLOHY A PROBLÉMY

Page 11: Obecné praktiky práce s DB

Konkurenční přístup k datům I.

• Změny prováděné v databázi probíhají v transakcích• Tyto transakce splňují tzv. ACID pravidla

– Atomic– Consistent– Isolation– Durability

• Přístup k datům je interně řízen pomocí mechanismu zámků

• Implementace těchto pravidel v jednotlivých databázích není 100% shodné

Page 12: Obecné praktiky práce s DB

Konkurenční přístup k datům II.

• Malé srovnání Oracle a MS SQL

Page 13: Obecné praktiky práce s DB

Optimalizace výkonu - indexy

• Nástroj pro optimalizaci rychlosti přístupu k datům• Databáze obvykle automaticky vytvoří index

– Pod primárním klíčem– Pod alternativním klíčem

• Indexy pod cizími klíči– Vhodné téměř ve všech případech, kromě odkazů na číselníkové

tabulky o několika málo záznamech– Je nutné definovat manuálně

• Databáze nabízejí specializované typy indexů kromě standardního B-Tree – např. clustered, bitmap, full-text

Page 14: Obecné praktiky práce s DB

Historická data• Jak řešit historická data v tabulkách?• Je nutné začít již u datového modelu

– Historické záznamy musí být identifikovatelné (např. datum vytvoření)– Musí být možné udělat konzistentní časový řez daty

• Možná řešení– Pravidelný přesun do historických tabulek– Nastavením historizačního flagu (vhodné u menších tabulek)– „Historické“ záznamy lze skrýt před BL pomocí pohledů

• Implementace partitioningu – Pomůže eliminovat potřebu historických tabulek– Nezachrání chybný návrh, stále je potřeba „partition key“– Oracle nyní podporuje automatické vytváření partition

Page 15: Obecné praktiky práce s DB

SQL TIPY

Page 16: Obecné praktiky práce s DB

Databázové triggery

• Kdy ano?– DB scope– Pro vytváření speciálních auditních záznamů (autonomními

transakcemi)

• Pro účely komplexní validace– Vylepšený check

• Proč jinde ne?– Skryté před vývojáři BL– Štěpí BL do více vrstev– Obtížně debugovatelné

Page 17: Obecné praktiky práce s DB

Funkce ve „where“ klauzuli SQL

• Obecně jde o „špatný nápad“– Nepředvídatelný počet provedení (závisí na prováděcím

plánu).– Performance dopad– Může vést na skryté implicitní konverze datových typů– V N-vrstvé architektuře lze funkci obvykle vyhodnotit v BL

• Pokud přeci jen není vyhnutí– Funkce by měla být deterministická– Neprovádí změny stavu db

Page 18: Obecné praktiky práce s DB

Výčty v IN klauzuly dotazu• Jak řešit dlouhé výčty hodnot v IN operátoru?

– Příklad: Select kódUC from tPráva where role in (role1, role2, role3, …, roleN)

• Nevýhody– Snížený výkon (každá varianta dotazu je originál)– Vede na velmi podobné dotazy (a tím pádem i hash kódy do SQL

cache)– Dotaz je nutné pokaždé dynamicky skládat

• Možná řešení– Batch operace– Oracle podporuje předávání seznamů (polí)– Použití vnořeného dotazu může být efektivnější

Select kódUC from tPráva where role in (select role from tPřiřazeníRolí where uživatel=uživ1)

Page 19: Obecné praktiky práce s DB

Načtení hodnoty atributu do proměnné

• Oracle– Příkaz: select attr into var from table where podmínky

• Podmínce vyhovuje 0 záznamů: výjimka NO_DATA_FOUND• Podmínce vyhovuje více než 1 záznam: výjimka TOO_MANY_ROWS

• MS SQL– Příkaz: select @var = attr from table where podmínky

• Podmínce vyhovuje 0 záznamů: vrátí hodnotu NULL• Podmínce vyhovuje více než 1 záznam: vrátí hodnotu posledního

záznamu!• Počet nalezených záznamů nutné vyhodnocovat přes proměnnou

@@ROWCOUNT ihned po provedení SQL dotazu.

• Jde o naprosto odlišné chování při stejné operaci!!!

Page 20: Obecné praktiky práce s DB

SQL dotazy – filtrování a vyhledávání

• Co je špatně na tomto kódu?// načte hlášky z loguDataSet ds = execute(„select * from LOG_TABLE“)// vyfiltruje jen chybové hlášky return extractErrors(ds);

• Filtrujte a vyhledávejte výhradně na datové vrstvě– Ulehčíte paměti i procesoru

Page 21: Obecné praktiky práce s DB

Taky nezapomeňte …• Řazení dat pomocí „order by“ je ovlivněno regionálním

nastavením databáze a session, která operaci provádí• Oracle podporuje operátor „connect by“ pro procházení

stromové struktury• Dávkové zpracování v jedné transakci může trvat dlouho

– V Oracle pouze držíte zámky (celkem levné)– V MS SQL držíte serverové zdroje, může dojít k eskalaci zámků a

deadlockům• Dynamický datový model (vytváření tabulek online) může být

možným řešením, ale nejspíš narazíte na odpor DBA

Page 22: Obecné praktiky práce s DB

INTEGRACE POMOCÍ DB

Page 23: Obecné praktiky práce s DB

Integrace na databázové úrovni• Základní principy

– Oddělení konzumenta od interních datových struktur– Každý konzument má obvykle svoje vlastní db objekty tvořící rozhraní– Rozhraní používají pokud možno pouze základní datové typy– Rozhraní konzument by mělo být snadno odpojitelné

• Možné implementace– Pomocí databázových pohledů / snapshotů– S využitím speciálních tabulek– Za pomoci nativních prostředků databáze (např. Oracle Streams)

• Nutné vyřešit synchronizace přístupů k rozhraní– Čtení vs zápis (obvykle nebude transakční)– Lze implementovat specializovanou řídící tabulkou

Page 24: Obecné praktiky práce s DB

Sdílená databáze

• Základní princip - přístup do „cizí“ DB pro data• Přístup přes DB link (A) nebo dedikovaný data

source (B)

• Dávková i online integrace• Synchronní i asynchronní

Page 25: Obecné praktiky práce s DB

Integrace na DB úrovni - příklad

Page 26: Obecné praktiky práce s DB

Sdílená databáze – „online“ integrace

• „Online“ integrace – přístup na živá data– Volání uložené procedury/funkce– Přístup do „online“ tabulek

• Na co si dát pozor– Nutná definice formálního rozhraní pro integraci – Menší závislost na změnách vnitřních tabulek systému– DB zámky na živých datech mohou blokovat online zpracování– Řízení zátěže

• Jemné omezení: povoleny pouze konkrétní operace (přístup přes DB funkci)• Hrubé omezení: profily,...

• Často „quick hack“ integrace – Nevyžaduje žádné složité budování infrastruktury– Problematický pattern z pohledu mj. škálovatelnosti a údržby … mnohde

zakázané

Page 27: Obecné praktiky práce s DB

Sdílená databáze – „offline“ integrace

• „Offline“ integrace– Data jsou připravena v dedikovaných tabulkách – Přenos dat (celé nebo části) do cílového systému nebo

pouze dotazování nad daty– Použití

• Reporting - přímá podpora v reportovacích nástrojích (Cognos)• Přenos dat do centralizovaného úložiště (ODS)

• Na co si dát pozor– Stejné jako u online integrace– Zamykání není většinou tak kritické

Page 28: Obecné praktiky práce s DB

Q & A


Recommended