2. Erweiterbarkeit von Datenbanksystemen Allgemeine Aspekte der Erweiterbarkeit 2 Erweiterbarkeit von Datenbanksystemen Kritik an traditionellen DB-Systemen: Armut an Datentypen und Funktionen Datenbankanwendungen verlangen in zunehmendem Maße nach der Möglichkeit des Speicherns und Verarbeitens von Objekten, die – sehr groß sind (Texte, Bilder, Videos) oder – ein komplexes Verhalten haben (Komponenten im Entwurf). Die hierzu notwendigen Konzepte sind nicht im voraus absehbar und schwierig in ein einheitliches Datenmodell integrierbar. Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 2. Erweiterbarkeit von Datenbanksystemen 45 Allgemeine Aspekte der Erweiterbarkeit ☞ Erweiterbare Datenbanksysteme bieten die Möglichkeit, spezifische zusätzliche Datentypen mit zugehörigen Funktionen in ein DBSystem zu integrieren. Die traditionellen Vorteile relationaler Systeme sind nicht inkompatibel mit einem reichhaltigen und erweiterbarem System von Datentypen und Funktionen. Objektrelationale Systeme kombinieren – deklarative Anfragesprachen wie SQL und multiple Sichten auf die Daten mit – der Fähigkeit, neue Datentypen und Funktionen zum Speichern und Manipulieren von Objekten zu definieren. ☞ In objektrelationalen DB-Systemen wird mehr von der Semantik der gespeicherten Daten erfaßt. Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 46 2. Erweiterbarkeit von Datenbanksystemen Allgemeine Aspekte der Erweiterbarkeit Ebenen der Erweiterbarkeit Neue Typen und Funktionen sollen auf jeder Ebene unterstützt werden können: Von der Bereitstellung neuer Typen auf der konzeptuellen Ebene über die Integration zugehöriger Funktionen in SQL (externe Ebene) über die Bereitstellung spezieller Speicherstrukturen bis zur Optimierung von Zugriffen (interne Ebene). Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 2. Erweiterbarkeit von Datenbanksystemen 47 Allgemeine Aspekte der Erweiterbarkeit Beispiel: Datentyp zur Repräsentation von Polygonen Auf der konzeptuellen Ebene muß der Datentyp definierbar sein, so daß er z.B. als Attributstyp in einer Relation verwendbar ist. Funktionen bzw. Prädikate für Polygone (z.B. “Punkt liegt in Polygon”) müssen definierbar und in SQL integrierbar sein, so daß sie für Anfragen nutzbar sind. Spezielle Speicher- und Zugriffsstrukturen müssen die effiziente Auswertung einer Funktion wie “Punkt liegt in Polygon” unterstützen. ☞ Die Erweiterbarkeit der internen Ebene ist der schwierigste Teil. Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 48 2. Erweiterbarkeit von Datenbanksystemen Allgemeine Aspekte der Erweiterbarkeit Wir betrachten zunächst die Erweiterung auf konzeptioneller und externer Ebene: ☞ Benutzerdefinierte Funktionen ☞ Benutzerdefinierte Aggregatfunktionen ☞ Tabellenfunktionen ☞ Benutzerdefinierte Typen Im nächsten Kapitel werden wir die Voraussetzungen für die Erweiterbarkeit auf der internen Ebene kennenlernen. Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 2. Erweiterbarkeit von Datenbanksystemen 49 Benutzerdefinierte Funktionen Benutzerdefinierte Funktionen (UDF) Hierbei handelt es sich um Funktionen, die vom Benutzer erzeugt und unter Verwendung einer speziellen Anweisung (create function) in eine Datenbank integriert werden. Für die Programmierung von UDFs wird üblicherweise C eingesetzt. Die UDFs erweitern den Vorrat an SQL-Funktionen. Es kann sich hierbei um eine skalare Funktion, eine Aggregatsfunktion oder eine Tabellenfunktion handeln. Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 50 2. Erweiterbarkeit von Datenbanksystemen Benutzerdefinierte Funktionen Integration von benutzerdefinierten Funktionen in eine DB: DBS−Kern Aufruf Funktions−API Built−In Funktionen Benutzerdef. Funkt. dynamisches Binden Deklaration der Funktion Dyn. Bibliothek Compilierung/ Erzeugung dyn. Bibliothek Create Function Anw. Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 2. Erweiterbarkeit von Datenbanksystemen C Quelle 51 Benutzerdefinierte Funktionen Die Integration besteht aus zwei Schritten: 1. Implementierung Auf Basis eines standardisierten APIs wird eine C-Funktion erstellt, übersetzt und in einer dynamischen Bibliothek (shared object) abgelegt. 2. Deklaration Mit Hilfe einer create function Anweisung wird die UDF dem Datenbanksystem bekannt gemacht. Hierdurch steht eine entsprechende SQL-Funktion zur Verfügung. Bei erstmaliger Benutzung der UDF/SQL-Funktion wird die dynamische Bibliothek an den DB-Kern gebunden und die betreffende CFunktion aufgerufen. Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 52 2. Erweiterbarkeit von Datenbanksystemen Benutzerdefinierte Funktionen UDF-Implementierung für skalare Funktionen In DB2 gelten folgende Konventionen für eine C-Funktion, die als Implementierung einer skalaren UDF dienen soll: "! #$%&' ! #'(% &) ))*% +! ,-.%-/012 0! + !*354 3678 9:% +!<;=1 !+ > 29?34 ! #@% > 29?34 ! 1 '(% ))&)*%A+! ,-.%-/012 0! + > 29?34 !B 988 #7?403C% +!<;=1 !+ #29?3 ! >D 8 > 44:% +!<;=1 !+ #29?3 !" E-E9:% +! ,- !0+ #29?3 ! >#F 1E-E9:% +! ,- !0+ #29?3 !G9 >&> H +!<;=1 !+ IKJ Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 2. Erweiterbarkeit von Datenbanksystemen 53 Benutzerdefinierte Funktionen Erläuterungen zu den Parametern: 1. Die ersten L Parameter der C-Funktion entsprechen den L Parametern der zugehörigen SQL-Funktion. Die Werte sind in entsprechende C-Typen konvertiert. Es werden grundsätzlich Zeiger übergeben. 2. Zeiger auf den Rückgabewert 3. Indikatorvariablen für die L Eingabeparameter 4. Indikatorvariable für den Rückgabewert 5. 203NMPO0Q , null-terminiert, zur Rückgabe von SQLSTATE, ist initialisiert mit RS&SS&SST&SR . Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 54 2. Erweiterbarkeit von Datenbanksystemen Benutzerdefinierte Funktionen 6. Voller qualifizierter Name der aufgerufenen SQL-Funktion. Dies macht es möglich, daß mehrere UDFs durch die gleiche C-Funktion implementiert werden. 7. spezifischer Name zur Unterscheidung bei der Überladung von Funktionsnamen; macht es ebenfalls möglich, daß mehrere UDFs durch die gleiche C-Funktion implementiert werden. 8. 203NMVU S Q , null-terminiert zur Übergabe einer Fehlermeldung an die SQLCA (Feld >5D 8&?335 ). Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 2. Erweiterbarkeit von Datenbanksystemen 55 Benutzerdefinierte Funktionen Zuordnung zwischen SQL- und C-Datentypen für UDFs (DB2): SQL-Datentyp Smallint Integer Decimal(p,s) Real Double Char(n) Varchar(n) Date Time Timestamp Blob(n), Clob(n) Lokator für Blob, Clob C-Datentyp short long — float double char[n+1], null-terminiert char[n+1], null-termiert char[11], null-terminiert, yyyy-mm-dd char[9], null-terminiert, hh.mm.ss char[27], null-terminiert, yyyy-mm-dd-hh.mm.ss.nnnnnn struct W unsigned long length; char data[n]; X unsigned long Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 56 2. Erweiterbarkeit von Datenbanksystemen Benutzerdefinierte Funktionen Beispiel: UDF in DB2 zur Berechnung des Quadrats einer Zahl, siehe auch Home-Page (Datei >D 031Y)Z ). [\^]5_a`cbdfehg#ikj#`liZmEicnpoKqsrEt uv \cdxwlypz#{p|a}5~k{pfikjkbple1 ` v ]\^]` v ]#fepn u f` ir v n\^]d\_Zn v ir v pnfepn\^]d _rhikj`finkn#e_rEk]f]Ecoe _rhiEe#_]coEe_rEoeiaip#e klepn u l`#\^]xl\^] Erzeugung der dynamischen Bibliothek: H"/*/0 F "/,?+E > 3+,E?'+6U )aE+108 1 >5D 9?3C)k H"/ > 29?3?/ >D 0 31Y) > >5D 9?3C)c Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 2. Erweiterbarkeit von Datenbanksystemen 57 Benutzerdefinierte Funktionen PostgreSQL: [\^]5_a`cbdfehg v inllfeiqsrEt [\^]5_a`cbdfehgZol9qsrEt }#¡#{kp¢#£p¤5~k¥p#{~cf#¥f{k¦0§5ikjkbple ¨EknpbaoAiZjkbfe1©}#¡l{pp¢l£¤5~k¥k{p|aªl¡lw \^]#nx« ¬}#¡#{¡p­l¤f|aªl¡#{~ca¤#®f¯1±° \^]#n_²«³«7 }#¡#{kªa­l¤p¢#ªf{~ca¤#®f¯1©_ Erzeugung der dynamischen Bibliothek: ´ H9&*/"/0 F "/,?+E > 3 +8&108&+ > 7 3 ?+ F > 4H31 E> D ?8 /U )'Y)a+ > 37?+18 1&+ > D 031Y)Z ´ H9&*/ > 29?310µ/ >5D 0 31Y) > >5D 9? 3C)c Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 58 2. Erweiterbarkeit von Datenbanksystemen Benutzerdefinierte Funktionen UDF-Deklaration (skalar) Typischerweise werden die folgenden Dinge für eine skalare UDF in deren Deklaration festgelegt: Name und Signatur Typ des Rückgabewertes Externer Name, d.h. Pfad der dynamischen Bibliothek und Funktionsname Implementierungssprache Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 2. Erweiterbarkeit von Datenbanksystemen 59 Benutzerdefinierte Funktionen Behandlung von Null-Werten Ist das Ergebnis 988 falls einer der Parameter den Wert & 8&8 hat? abgeschirmte Ausführung Soll die Ausführung der Funktion im gleichen Adressraum wie der Datenbankprozess stattfinden? deterministische Ausführung Ist garantiert, ob die Funktion bei identischen Parameterwerten identische Ergebnisse liefert? weitere Dinge sind DBS-spezifisch Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 60 2. Erweiterbarkeit von Datenbanksystemen ?3 in DB2: Deklaration der UDF >5D 9 3&4* E490E >5D 9?31 &8 I 3140 3? > 1 &8 »&4?3?8¼9 ½ >D 9?3C) > ¾ >5D 9?3:½ 14?3@ > 4& ?»47?398<1E490E 4 10? 4<& 8&8 088 81H? 9H >5D 8 F 031547?3 > 4¸78&"?7' >D 8 88à F 0318&8&8 J Benutzerdefinierte Funktionen /&/*-7¶ & ·H?954 3 /&/*¸ F ¹ º1H /&/*¿»47?3?03*-E9 /&/ ¹ > 98544 > 4 ? &º490E98 /&/ &29&1H9EH<E 1 031E9403 /&/"º1 ,#47?3º490E /&/À 4 ?3ÂÁ0 >> Ã854 /&/"º1µ1H > #2@3147¶Á0 > 9E23 &H /&/"º1 Á? &3? *Ã7& 7?3547?3Ä 988 /&/*7?30Ã754 ,f F 8&E1490?3? &H >>lF 3#2 /&/ Å'E8H4037 > 2 /&/ 981EH547?37 > 2 9?3Ä=ÅÆ > # Ç /&/ F ?3888ÄÁ? > 9E23 1HÄ9H78#2 Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 2. Erweiterbarkeit von Datenbanksystemen Deklaration der UDF >5D 9?3 in PostgreSQL: 61 Benutzerdefinierte Funktionen 3&4* E490E >5D 9?3318 I 3140 3? > 318 > ½k+E299&'+ F 91º7&'E9+ F > 4&H31 > + >5D ?31&+ >ED 7031C) > (½&%"½ >5D 9?3:½ 81H? 9H ½aȽ I J ÃE402 É >&> 43&E4.%A > ?#298& È Beispiel: Nutzung der UDF >D 031 : ·¿Ê¿1Ç0 1'(% >5D 9?3x7Ë181H42 I Æ ¹ ; Ã1? Ì)k? &14370 > ÍÎ ¿ ¹ ¿ @ GÏ ½Ð?ѽ Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 62 2. Erweiterbarkeit von Datenbanksystemen Benutzerdefinierte Funktionen Funktionsresolution Der Name der UDF kann ein Schema enthalten. Ebenso kann beim Aufruf ein Schemaname angegeben werden (qualifizierter Funktionsname). Nachteile der Verwendung qualifizierter Funktionsnamen: – lang, umständlich – Anwendungen sollten nicht von einem speziellen Schema, in dem die Funktionen liegen, abhängig sein. Fehlt der Schemanamen, dann werden die Schemata des sogenannten Funktionspfades nach einer anwendbaren Funktionen durchsucht. Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 2. Erweiterbarkeit von Datenbanksystemen 63 Benutzerdefinierte Funktionen Vorbelegung des Funktionspfades: ·57·,0Ñ%·57·?Æ?=1- %¬=9·¿ ¹ Änderung: ·?¿& Ç= ¹¹ ¿&-µÆ?=1-1Ç0,5;?-<Á Î Eine Funktion ist auf einen gegebenen Aufruf anwendbar, falls: – der Funktionsname mit dem im Aufruf genannten übereinstimmt und – die Argumente des Aufrufs in die Parameter dieser Funktion propagierbar sind. Propagierbar bedeutet, daß – der Datentyp jedes Funktionsparameters entweder mit dem Datentyp des entsprechenden Aufrufsarguments übereinstimmt oder – die Aufrufargumente entlang von Konversionspfaden in die Typen der Funktionsparameter umgewandelt werden können. Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 64 2. Erweiterbarkeit von Datenbanksystemen Benutzerdefinierte Funktionen Wichtige Konversionspfade: – Smallint Ò Integer Ò Decimal Ò Real Ò Double – Char Ò Varchar Ò Long Ò Varchar Ò Clob Die Datentypen Blob, Date, Time und Timestamp erfordern eine exakte Übereinstimmung. Länge, Genauigkeit sowie Anzahl von Nachkommastellen werden bei der Überprüfung der Anwendbarkeit ignoriert, für die Anwendung der Funktion findet aber eine Konversion statt. Auf dem Funktionspfad können sich nun mehrere anwendbare Funktion befinden. Die Funktionsresolution sorgt für die Auswahl einer möglichst “guten” Funktion. Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 2. Erweiterbarkeit von Datenbanksystemen 65 Benutzerdefinierte Funktionen Ablauf der Funktionsresolution: 1. Zunächst wird die Menge aller anwendbaren Funktionen bestimmt. 2. Betrachte die Argumente des Aufrufs von links nach rechts. Für jedes Argument werden die Funktionen eliminiert, die in bezug auf den Konversionspfad nicht die “beste verfügbare” Übereinstimmung liefern. 3. Bleibt mehr als eine Funktion übrig, wird die Funktion aus dem Schema genommen, das zuerst im Funktionspfad auftritt. Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 66 2. Erweiterbarkeit von Datenbanksystemen Benutzerdefinierte Funktionen Beachtenswerte Punkte bei UDFs ☞ Die UDF sollte reentrant sein, d.h. es sollten keine statischen Variablen benutzt werden. So wird gewährleistet, daß die UDF gleichzeitig von verschiedenen Applikationen benutzt werden kann. ☞ Falls die UDF dynamisch Speicher allokiert, sollte dieser vor dem Ausstieg freigegeben werden. Ausnahme: Scratchpad-Funktionen, später mehr I ☞ Niemals ?»4. für die Beendigung der UDF verwenden! I I ☞ Auch kein F 3#14C oder > ?C ! Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 2. Erweiterbarkeit von Datenbanksystemen ☞ Für Implementierungen in C++ ?»47?3? klaration angeben. 67 Benutzerdefinierte Funktionen R Ç R als Teil der Funktionsde- ☞ Beim Debugging einer UDF kann eine Datei auf dem Server für die Protokollierung verwendet werden. Hierbei muß auf die Zugriffsrechte geachtet werden, denn der Server-Prozeß läuft nicht unter der eigenen Benutzerkennung. Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 68