<?xml version="1.0" encoding="UTF-8"?>
<TEI xml:space="preserve" xmlns="http://www.tei-c.org/ns/1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.tei-c.org/ns/1.0 https://raw.githubusercontent.com/kermitt2/grobid/master/grobid-home/schemas/xsd/Grobid.xsd"
 xmlns:xlink="http://www.w3.org/1999/xlink">
	<teiHeader xml:lang="de">
		<fileDesc>
			<titleStmt>
				<title level="a" type="main">Nutzung von Proxys zur Ergänzung von Datenbankfunktionen</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author>
							<persName><forename type="first">Alexander</forename><surname>Adam</surname></persName>
							<affiliation key="aff0">
								<orgName type="institution">Technische Universität Chemnitz</orgName>
								<address>
									<addrLine>Straße, Nationen 62</addrLine>
									<postCode>09107</postCode>
									<settlement>Chemnitz</settlement>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Sebastian</forename><surname>Leuoth</surname></persName>
							<affiliation key="aff1">
								<orgName type="institution">Technische Universität Chemnitz</orgName>
								<address>
									<addrLine>Straße, Nationen 62</addrLine>
									<postCode>09107</postCode>
									<settlement>Chemnitz</settlement>
								</address>
							</affiliation>
						</author>
						<author role="corresp">
							<persName><forename type="first">Wolfgang</forename><surname>Benn</surname></persName>
							<email>benn@cs.tu-chemnitz.de</email>
							<affiliation key="aff2">
								<orgName type="institution">Technische Universität Chemnitz</orgName>
								<address>
									<addrLine>Straße, Nationen 62</addrLine>
									<postCode>09107</postCode>
									<settlement>Chemnitz</settlement>
								</address>
							</affiliation>
						</author>
						<title level="a" type="main">Nutzung von Proxys zur Ergänzung von Datenbankfunktionen</title>
					</analytic>
					<monogr>
						<imprint>
							<date/>
						</imprint>
					</monogr>
					<idno type="MD5">2FB920A4923429D12360DB2D950D67AE</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2023-03-24T05:23+0000">
					<desc>GROBID - A machine learning software for extracting information from scholarly documents</desc>
					<ref target="https://github.com/kermitt2/grobid"/>
				</application>
			</appInfo>
		</encodingDesc>
		<profileDesc>
			<textClass>
				<keywords>
					<term>Datenbankerweiterung</term>
					<term>Indizierung</term>
					<term>Proxy</term>
				</keywords>
			</textClass>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>In dieser Arbeit präsentieren wir eine Möglichkeit, Funktionalitäten -in diesem Fall primär Indizes -in eine Datenbank einzubringen. Dies geschieht in einer Weise, dass weder die Datenbank noch eine Anwendung, welche die Datenbank nutzt, etwas davon bemerken soll. Auf diese Weise soll die aufwendige Anpassung der Anwendungen an eine zusätzliche Komponente vermieden werden. Zugleich wird auch verhindert, dass die Datenbank durch das Einbringen neuer Funktionalitäten instabiler wird.</p></div>
			</abstract>
		</profileDesc>
	</teiHeader>
	<text xml:lang="de">
		<body>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="1.">EINLEITUNG</head><p>Datenbanken sind allgegenwärtig und nicht mehr aus dem täglichen Leben wegzudenken. Sie verwalten von vertraulichen Personendaten bis hin zum Zahlungsverkehr von Banken sehr viele Bereiche der Gesellschaft. Daraus ergeben sich einige Anforderungen, denen Datenbanksysteme gerecht werden müssen. So kann erwartet werden, dass Zugangsrichtlinien eingehalten und die Daten sicher -d. h. vor fremdem Zugriff und Verlust -verwahrt werden.</p><p>Datenbanken, wie wir sie heute kennen, haben sich dabei über viele Jahre hinweg entwickelt. Angefangen von den ersten Systemen, wie z. B. System R <ref type="bibr" target="#b4">[4]</ref> und IMS <ref type="bibr" target="#b8">[8]</ref>, bis zu den heutigen großen relationalen Datenbanksystemenbspw. Oracle <ref type="bibr" target="#b14">[14]</ref> und IBM DB2 <ref type="bibr" target="#b3">[3]</ref>, um nur einige zu nennen -wurden immer wieder neue Funktionalitäten hinzugefügt. Entwicklungen an Datenbanksystemen finden dabei meist direkt bei den Datenbankherstellern statt. Diese integrieren neue Techniken in ihre Datenbanken, wenn diese ausreichend getestet, ausgereift und für eine breite Öffentlichkeit nutzbar und nützlich sind. Selbst einige Spezialgebiete wurden bereits abgedeckt, so z. B. die Speicherung und schnelle Abfrage von räumlichen Daten mittels Oracle Spacial <ref type="bibr" target="#b17">[17]</ref> oder dessen Pendant bei IBM, des DB2 Spatial Extenders <ref type="bibr" target="#b12">[12]</ref>. Beide bauen einen neuen Index -einen R-Baum <ref type="bibr" target="#b9">[9]</ref> bei Oracle, ein Grid bei DB2 <ref type="bibr" target="#b2">[2]</ref> -ein.</p><p>All das führt dazu, dass heutige relationale Datenbanken für sehr viele Bereiche Lösungen in Form von Indizes bereits zur Verfügung stellen. Allerdings gibt es auch Anwendungsgebiete -jene, die nicht genügend Nachfrage bieten können -bei denen diese Standardlösungen nicht anwendbar sind. Der Anwender steht dann vor der Wahl, eine komplett eigene Datenbanklösung zu erstellen oder aber eine bestehende Datenbank zu erweitern. Eine Eigenentwicklung kommt dabei für die wenigsten in Frage, da diese immens zeit-und damit kostenintensiv ist. Sie muss darüberhinaus auch selbst weiterentwickelt und mit Aktualisierungen versorgt werden, ein weiterer sehr kostenintensiver Punkt, der gegen eine solche Entwicklung spricht.</p><p>Bei der zweiten Möglichkeit -der Erweiterung eines Datenbanksystems -wird über vom Datenbankhersteller bereitgestellte Schnittstellen die Funktionalität einer bestehenden Datenbank um die geforderten Eigenschaften erweitert. Es ist schwierig, diese Erweiterungen dauerhaft in Datenbanken zu integrieren. Zum einen haben die Datenbankhersteller ein berechtigtes Interesse daran, nur gut getestete Komponenten in ihre Produkte einfließen zu lassen, zum anderen müssen diese weitestgehend allgemein einsetzbar sein.</p><p>In einigen Umgebungen ist es allerdings nicht möglich, Eingriffe in die Datenbank oder die Anwendungen, die auf sie Zugriff nehmen, vorzunehmen. Ein Szenario ist hier der Betrieb eines Rechenzentrums, welches Datenbankdienstleistungen zur Verfügung stellt. Hier können weder Eingriffe in die Datenbanken vorgenommen werden, noch ist dies bei den Anwendungen möglich, da diese den Kunden gehören.</p><p>Aus diesem Grund wollen wir einen Weg schaffen, der sich in eben diesen Situationen einsetzen lässt und der dann auch für andere offensteht. Es soll dabei möglichst erreicht werden, dass das Zusatzmodul, ein Proxy, komplett transparent in die bestehende Infrastruktur integriert werden kann.</p><p>Im nächsten Abschnitt werden wir zunächst auf andere Techniken eingehen, die genutzt werden können, neue Funktionalitäten, speziell Indizes, in Datenbanken einzufügen. Anschließend werden wir unser Konzept aufzeigen und einige Spezialfälle diskutieren.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.">STAND DER TECHNIK 2.1 ADT</head><p>Klassischerweise können neue Funktionalitäten in Datenbanksysteme mittels Stored Procedures und eigenen abstrakten Datentypen (ADT) implementiert werden. Die meisten Datenbanksysteme bieten diese Möglichkeiten. <ref type="bibr" target="#b11">[11,</ref><ref type="bibr" target="#b15">15,</ref><ref type="bibr" target="#b18">18]</ref> Diese Erweiterungsmöglichkeiten sind jedoch begrenzt, da mit ihnen immer die Ablage der Daten in den vorgegebenen Strukturen der Datenbank einhergeht. Auch lassen sich so die internen Abläufe nur schwer beeinflussen. Postgres bietet beispielsweise die Möglichkeit die verfügbaren Indizes mittels Callback-Funktionen auf den ADT anwendbar zu machen. Eine komplett neue Indexstruktur lässt sich so allerdings nicht einbauen. Außerdem wird bei einer Anfrage nicht die Selektionsbedingung des WHERE-Teiles mit übergeben. Das bedeutet, dass immer der komplette Tabelleninhalt zurückgeliefert werden muss und die Datenbank die Bedingungen des WHERE-Teiles schließlich selbst auswertet.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.2">Plugins</head><p>Um nun diese Einschränkungen zu umgehen, wurden tiefergreifende Möglichkeiten geschaffen, auch eigene Indizes in Datenbanksysteme einzubringen. Allgemein wird diese Möglichkeit auch als "Extensible Indexing" bezeichnet. Oracle setzt dies im Datacartridge Framework <ref type="bibr">[5]</ref>, IBM DB2 mit dem DB2 Extender <ref type="bibr" target="#b19">[19]</ref> um. Weitere Ausführungen zu u. a. Informix DataBlades <ref type="bibr" target="#b20">[20]</ref> und GiST <ref type="bibr" target="#b10">[10]</ref> sind auch in <ref type="bibr" target="#b1">[1]</ref> sowie auf allgemeinerem Niveau in <ref type="bibr" target="#b13">[13]</ref> zu finden. Beide Verfahren -Plugins und ADTs -haben einen gemeinsamen Schwachpunkt: sie müssen immer in die Datenbank selbst integriert werden. Ein solcher Eingriff, in die u. U. für ein Unternehmen kritischen Datenbestände ist, schon allein aufgrund von Sicherheitsbedenken, schwierig bis unmöglich umzusetzen. Bei einer komplett neuen Datenbank, die erst ihren Regelbetrieb aufnehmen muss, ist dieser Weg jedoch gangbar.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Pluginschnittstelle</head></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.3">GreenSQL</head><p>Einen anderen Weg geht das GreenSQL-Projekt. Ziel von GreenSQL ist es, eine Datenbank vor schädlichen SQL-Befehlen zu schützen. Dabei nutzt es auch einen Proxyansatz. Die GreenSQL kennt dabei die folgenden Betriebsmodi:</p><p>• Simulationsmodus: Es findet hierbei kein Eingriff in die Kommunikation statt. Es werden ausschließlich alle Anfragen untersucht und bei verdächtigen Anfragen ein Verantwortlicher informiert.</p><p>• Blockierung von verdächtigen Anfragen: Hier werden Heuristiken angewandt, um die eingehenden Anfragen zu beurteilen. Wird eine Anfrage als "verdächtig" eingestuft, so wird noch in einer Positivliste nachgeschaut, ob die Anfrage doch zulässig ist. Ist sie zulässig, so wird sie an den Datenbankserver weitergeleitet, ansonsten wird direkt ein leeres Ergebnis zurückgeliefert.</p><p>• Lernmodus: Um nicht auf die Heuristiken angewiesen zu sein, kann GreenSQL in diesem Modus eine Liste zugelassener Anfragen erzeugen.</p><p>• Schutz vor unbekannten Anfragen: Nachdem alle zugelassenen Anfragen "gelernt" wurden, werden in diesem Modus alle unbekannten Anfragen blockiert.</p><p>Die Anfragen werden dabei mittels Mustererkennung untersucht. Eine Anfrage wird also nicht geparst und anhand eines Syntaxbaumes untersucht, was genau bewirkt werden soll. Damit ist der Nutzen auf Anfragen beschränkt, die keine komplexe syntaktische Struktur aufweisen. Des weiteren ist GreenSQL auf MySQL zugeschnitten. Es kennt die Tabellennamen des Systemkataloges, die sich aber bei anderen Datenbanken zu denen von MySQL unterscheiden.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.">UNSER ANSATZ 3.1 Allgemein</head><p>Da weder die Datenbank noch die Anwendung angepasst werden dürfen, muss also eine externe Lösung angestrebt werden. In Abbildung 2(a) ist nocheinmal das Ausgangszenario dargestellt. Im weiteren werden wir uns auf SQL <ref type="bibr" target="#b6">[6]</ref> als Kommunikationssprache hin zur Datenbank beschränken. Diese Einschränkung ist insofern unkritisch, da die meisten Datenbanksysteme auf diese Art angesprochen werden und sich der folgende Ansatz auch auf andere Anfragemöglichkeiten übertragen lässt.</p><p>Der einzig verbleibende Punkt, um noch etwas zu integrieren, ist die Kopplung zwischen Anwendung und Datenbank, Es gibt mehrere Möglichkeiten, einen Proxy in eine bestehende Systemlandschaft zu integrieren:</p><note type="other">Anwendung Datenbank SQL Antwort</note><p>• Nicht-transparente Integration, indem der Anwendung der Proxy als neuer Datenbankserver mitgeteilt wird. Im Idealfall ist dies nur ein einziger Eintrag in der Anwendung.</p><p>• Ersetzen des Datenbankservers durch den Proxy. Hierbei übernimmt der Proxy die Adresse des Datenbankservers und der Datenbankserver bekommt eine neue Adresse zugeteilt. </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.">AUSBLICK</head><p>Das beschriebene Verfahren befindet sich noch in Entwicklung. Von den vorgestellten Komponenten wurde der SQL-Parser umgesetzt. Ein weiterer Punkt, das Verändern von SQL-Anfragen, stellt eine Herausforderung dar, da die Übertragungswege von und zu den Datenbanken herstellerabhängig sind. Erste Tests zeigten Prüfsummen, die sich allerdings nur auf die Länge der Anfrage bezogen. Eine Veränderung wurde erfolgreich vorgenommen. Dieser Punkt ist allerdings ein weites Feld und wir werden uns zunächst auf eine Schnittstelle festlegen, im speziellen auf das Oracle Call Interface (OCI) <ref type="bibr" target="#b16">[16]</ref>.</p><p>Auch muss die Leistungsfähigkeit der beschriebenen Veränderungsverfahren noch untersucht werden. Anfängliche Tests mit manueller Erweiterung der Anfragen zeigten bereits Geschwindigkeitssteigerungen.</p><p>Der entwickelte Proxy kann prinzipiell nicht nur einen datenbankexternen Index ermöglichen. Er erlaubt auch eine Fülle anderer Funktionen. So kann er dazu genutzt werden, Antworten auf Anfragen an die Datenbank zwischenzuspeichern, er kann Adapterfunktionen zu anderen SQL-Dialekten oder zu ganz anderen Anfrageparadigmen sein. Diese stehen nicht im direkten Fokus der Arbeit, sollen aber definitiv evaluiert werden.</p></div><figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_0"><head>Abbildung 1 :</head><label>1</label><figDesc>Abbildung 1: Mittels eines Datenbankplugins wie hier dargestellt lassen sich neue Funktionen in eine Datenbank integrieren, insbesondere Indizes (vgl.[5]).</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_1"><head>Abbildung 2 :</head><label>2</label><figDesc>Abbildung 2: Integrationsszenario. In Teil (a) ist dargestellt, wie sich der bisherige Ablauf bei der Kommunikation von Anwendung und Datenbank darstellt. Teil (b) zeigt, wie sich der Proxy einfügt und die Kommunikation auf ihn umgeleitet wird.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_0"><head>Interner Aufbau des Proxys. Der Proxy besteht im Wesentlichen aus einem SQL- Parser, dem eigentlichen Index und einer Verwal- tungskomponente, die diese Komponenten mitein- ander koppelt. Um die Datenbankanfragen einzule- sen, wird noch eine Datenbankhersteller-spezifische Schnittstelle benötigt.</head><label></label><figDesc>Anschließend wird geprüft, ob der Proxy überhaupt etwas mit dieser Anfrage anfangen kann. Im Falle eines Index werden also die Tabellen, auf die sich die Anfrage bezieht, mit den indizierten Tabellen verglichen. Wenn keine indizierte Tabelle getroffen wurde, so wird die Anfrage unbehandelt an die Datenbank weitergereicht, von dieser beantwortet und das Ergebnis an die Anwendung zurückgeliefert.</figDesc><table><row><cell></cell><cell cols="2">Anwendung</cell><cell>Datenbank</cell></row><row><cell></cell><cell></cell><cell cols="2">Datenbankhersteller−spezifische Kopplungskomponente</cell></row><row><cell></cell><cell></cell><cell>Verwaltungskomponente</cell></row><row><cell></cell><cell></cell><cell>SQL−Parser</cell></row><row><cell></cell><cell></cell><cell cols="2">Indizierungskomponente</cell></row><row><cell></cell><cell cols="3">Abbildung 3: Wird die Anfrage bearbeitet, so muss der SQL-Parser diese</cell></row><row><cell></cell><cell cols="3">zuerst in Unteranfragen zerlegen. Abbildung 4 zeigt eine sol-</cell></row><row><cell></cell><cell cols="3">che zerlegte Anfrage, die eine Unteranfrage beinhaltet. Bei</cell></row><row><cell></cell><cell cols="3">der Beantwortung muss der Baum, der sich aus dieser Struk-</cell></row><row><cell></cell><cell cols="3">tur ergibt, von den Blättern her zur Wurzel hin abgearbei-</cell></row><row><cell></cell><cell cols="3">tet werden. Es muss also zunächst die Anfrage "SELECT mid</cell></row><row><cell>• Transparentes Einklinken des Proxys. Dabei werden</cell><cell cols="3">FROM abt WHERE nr = 3" abgearbeitet werden. Die Ergeb-</cell></row><row><cell>auf Netzwerkebene die Datenpakete, die für den Da-</cell><cell cols="3">nisse dieser Teilanfrage werden dann in den darüberliegen-</cell></row><row><cell>tenbankserver bestimmt sind, auf den Proxy umge-</cell><cell cols="3">den Knoten eingebaut. Sobald alle Kindknoten eines Kno-</cell></row><row><cell>leitet (Destination Network Address Translation) [7].</cell><cell cols="3">tens abgearbeitet wurden, kann der Knoten selbst bearbeitet</cell></row><row><cell>Diese Variante ist vom Anpassungsaufwand für die An-</cell><cell cols="2">werden.</cell></row><row><cell>wendung als auch für den Datenbankserver am gerings-</cell><cell></cell><cell></cell></row><row><cell>ten (im Idealfall Null). Dabei ist jedoch zu beachten,</cell><cell>0</cell><cell cols="2">SELECT * FROM mitarb WHERE mitarb.id IN ( 1 )</cell></row><row><cell>dass es sich hierbei um einen Eingriff in eventuell ver-</cell><cell></cell><cell></cell></row><row><cell>trauliche Kommunikation handelt.</cell><cell>1</cell><cell>SELECT mid FROM abt WHERE abt.nr = 3</cell></row><row><cell>Ziel soll es sein, die letzte Möglichkeit zu realisieren. Bei ei-ner Neuinstallation ist ein neues Indizierungsverfahren, egal</cell><cell cols="2">Abbildung 4:</cell></row><row><cell>ob Datenbank intern oder extern, verhältnismäßig einfach zu</cell><cell></cell><cell></cell></row><row><cell>integrieren. Die Integration in bestehende Systemlandschaf-</cell><cell></cell><cell></cell></row><row><cell>ten aber gestaltet sich schwierig. Eine transparente Lösung</cell><cell></cell><cell></cell></row><row><cell>ist hier die einzig anwendbare.</cell><cell></cell><cell></cell></row><row><cell>3.2 Bearbeitung einer Anfrage</cell><cell></cell><cell></cell></row><row><cell>Egal für welche Integrationsvariante sich entschieden wur-</cell><cell></cell><cell></cell></row><row><cell>de, im Betrieb sind die Aufgaben der Kernkomponenten des</cell><cell></cell><cell></cell></row><row><cell>Proxys gleich. Diese Kernkomponenten und ihr Zusammen-</cell><cell></cell><cell></cell></row><row><cell>spiel sind in Abbildung 3 dargestellt. Sendet die Anwendung</cell><cell></cell><cell></cell></row><row><cell>eine Anfrage an die Datenbank, wird diese zunächst von der</cell><cell></cell><cell></cell></row><row><cell>Verwaltungskomponente des Proxys entgegengenommen.</cell><cell></cell><cell></cell></row></table></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_1"><head>Anfragebaum für eine kleine geschach- telte SQL-Anfrage. Anfrage 1 ist in Anfrage 0 ein- gebettet, ihre Ergebnisse sind für die Beantwortung von Anfrage 0 entscheidend.</head><label></label><figDesc></figDesc><table><row><cell cols="4">werden, die auch tatsächlich an einem für den Index aus-</cell></row><row><cell cols="4">wertbaren Vaterknoten direkt oder indirekt angeschlossen</cell></row><row><cell>sind.</cell><cell></cell><cell></cell></row><row><cell cols="4">Bei der Auswertung eines Anfragebaumes ergibt sich das</cell></row><row><cell cols="4">in Abbildung 5 dargestellte Kommunikationsschema. Es ist</cell></row><row><cell cols="4">zu erkennen, dass während der Beantwortung einer Anfrage</cell></row><row><cell cols="4">u. U. mehrere Anfragen an die Datenbank abgeschickt wer-</cell></row><row><cell cols="4">den müssen, während die Anwendung auf die Antwort war-</cell></row><row><cell cols="4">tet. Dieses Wechselspiel von Proxy und Datenbank kann bei</cell></row><row><cell cols="4">entsprechend tief geschachtelten Anfragen sehr lange dau-</cell></row><row><cell cols="4">ern. Es muss noch untersucht werden, bis zu welcher Tiefe</cell></row><row><cell cols="4">sich die Ausführung der Auflösung tatsächlich lohnt und ab</cell></row><row><cell cols="4">wann die gesamte Anfrage direkt an die Datenbank weiter-</cell></row><row><cell cols="2">geleitet werden sollte.</cell><cell></cell></row><row><cell>Anwendung</cell><cell></cell><cell>Proxy</cell><cell>Datenbank</cell></row><row><cell cols="2">Anfrage</cell><cell></cell></row><row><cell></cell><cell></cell><cell>Verarbeitung</cell><cell>Anfrage</cell></row><row><cell></cell><cell></cell><cell></cell><cell>Antwort</cell><cell>Verarbeitung</cell></row><row><cell></cell><cell></cell><cell>Verarbeitung</cell><cell>Anfrage</cell></row><row><cell></cell><cell></cell><cell></cell><cell>Antwort</cell><cell>Verarbeitung</cell></row><row><cell cols="2">Antwort</cell><cell>Verarbeitung</cell></row><row><cell>Idle</cell><cell>Warten</cell><cell></cell><cell>Arbeiten</cell></row><row><cell>Abbildung 5:</cell><cell></cell><cell></cell></row><row><cell></cell><cell></cell><cell></cell><cell>In eine Anfrage, die Daten aus Unteranfragen benötigt, wer-</cell></row><row><cell></cell><cell></cell><cell></cell><cell>den die Ergebnisse dieser Unteranfrage zunächst direkt ein-</cell></row><row><cell></cell><cell></cell><cell></cell><cell>gesetzt. Im vorigen Beispiel würde also bspw. eine Anfra-</cell></row><row><cell></cell><cell></cell><cell></cell><cell>ge wie "SELECT * FROM mitarb WHERE id IN (17,23,42)"</cell></row><row><cell></cell><cell></cell><cell></cell><cell>erzeugt werden.</cell></row><row><cell></cell><cell></cell><cell></cell><cell>Im Falle eines Index ist es nicht sinnvoll, jeden Zweig im An-</cell></row><row><cell></cell><cell></cell><cell></cell><cell>fragebaum zu verfolgen. Es müssen nur Blätter ausgewertet</cell></row></table></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_2"><head>Kommunikationsschema. Die Abbil- dung zeigt das Kommunikationsverhalten der ein- zelnen Teilnehmer. Zu bemerken ist, dass nicht jede Anfrage der Anwendung auch nur eine Anfrage des Proxys bei der Datenbank bedingt, sondern auch eine Reihe solcher Anfragen an die Datenbank aus- lösen kann.</head><label></label><figDesc>Ein Index muss nicht die Daten selbst, sondern nur Identifikatoren speichern, die einzelne Datensätze eindeutig identifizieren. Sein Ergebnis sind also idealerweise Primärschlüssel der eigentlichen Tupel in der Datenbank. Werden einer Datenbank die Tupelidentifikatoren (TIDs) der gesuchten Datensätze mitgeteilt, kann diese sie sehr schnell finden. Es kann allerdings vorkommen, dass die von einem Index zurückgelieferten Ergebnisse unscharf, es also zu viele sind. Deshalb müssen alle WHERE-Bedingungen der originalen Anfrage erhalten bleiben.Problematisch an dieserLösung kann die begrenzte Länge von SQL-Ausdrücken sein, die eine Datenbank verarbeiten kann. Für den Fall einer Überschreitung dieser Maximallänge muss ein anderer Weg gegangen werden. So können die Ergebnisse, die der Index zurückliefert, in der Datenbank in eine seperate, temporäre Tabelle eingefügt werden. Die neue SQL-Anfrage hätte dann die Form: SELECT * FROM mitarb WHERE gehalt &gt; 2000 AND id IN (SELECT * FROM temp_tabelle)</figDesc><table><row><cell>eine um den Primärschlüssel id erweiterte Anfrage werden:</cell></row><row><cell>SELECT * FROM mitarb WHERE gehalt &gt; 2000</cell></row><row><cell>AND id IN (4, 18)</cell></row><row><cell>Eine Möglichkeit der Datenbank, die Ergebnisse eines Index</cell></row><row><cell>mitzuteilen, ist die Erweiterung der ursprünglichen Anfra-</cell></row><row><cell>ge um seine Ergebnisse. Zum Beispiel kann so aus einem</cell></row><row><cell>einfachen</cell></row><row><cell>SELECT * FROM mitarb WHERE gehalt &gt; 2000</cell></row></table></figure>
		</body>
		<back>
			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<monogr>
		<title/>
		<author>
			<persName><surname>Literatur</surname></persName>
		</author>
		<imprint/>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<analytic>
		<title level="a" type="main">Towards Truly Extensible Database Systems</title>
		<author>
			<persName><forename type="first">R</forename><surname>Acker</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Pieringer</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Bayer</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">DEXA 2005</title>
				<editor>
			<persName><forename type="first">K</forename><surname>Andersen</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">J</forename><surname>Debenham</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">R</forename><surname>Wagner</surname></persName>
		</editor>
		<meeting><address><addrLine>Berlin Heidelberg</addrLine></address></meeting>
		<imprint>
			<publisher>Springer-Verlag</publisher>
			<date type="published" when="2005">2005</date>
			<biblScope unit="page" from="596" to="605" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b2">
	<analytic>
		<title level="a" type="main">DB2 Spatial Extender -Spatial data within the RDBMS</title>
		<author>
			<persName><forename type="first">D</forename><forename type="middle">W</forename><surname>Adler</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">VLDB &apos;01: Proceedings of the 27th International Conference on Very Large Data Bases</title>
				<meeting><address><addrLine>San Francisco, CA, USA</addrLine></address></meeting>
		<imprint>
			<publisher>Morgan Kaufmann Publishers Inc</publisher>
			<date type="published" when="2001">2001</date>
			<biblScope unit="page" from="687" to="690" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b3">
	<monogr>
		<title level="m" type="main">DB2 9 Unveiled: Overview and New Enhancements</title>
		<author>
			<persName><forename type="first">R</forename><surname>Ahuja</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2006-07">July 2006</date>
		</imprint>
		<respStmt>
			<orgName>IBM Software Group</orgName>
		</respStmt>
	</monogr>
</biblStruct>

<biblStruct xml:id="b4">
	<analytic>
		<title level="a" type="main">System R: relational approach to database management</title>
		<author>
			<persName><forename type="first">M</forename><forename type="middle">M</forename><surname>Astrahan</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><forename type="middle">W</forename><surname>Blasgen</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><forename type="middle">D</forename><surname>Chamberlin</surname></persName>
		</author>
		<author>
			<persName><forename type="first">K</forename><forename type="middle">P</forename><surname>Eswaran</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">N</forename><surname>Gray</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><forename type="middle">P</forename><surname>Griffiths</surname></persName>
		</author>
		<author>
			<persName><forename type="first">W</forename><forename type="middle">F</forename><surname>King</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><forename type="middle">A</forename><surname>Lorie</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><forename type="middle">R</forename><surname>Mcjones</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">W</forename><surname>Mehl</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><forename type="middle">R</forename><surname>Putzolu</surname></persName>
		</author>
		<author>
			<persName><forename type="first">I</forename><forename type="middle">L</forename><surname>Traiger</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><forename type="middle">W</forename><surname>Wade</surname></persName>
		</author>
		<author>
			<persName><forename type="first">V</forename><surname>Watson</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">ACM Trans. Database Syst</title>
		<imprint>
			<biblScope unit="volume">1</biblScope>
			<biblScope unit="issue">2</biblScope>
			<biblScope unit="page" from="97" to="137" />
			<date type="published" when="1976">1976</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b5">
	<monogr>
		<title level="m" type="main">Oracle Database Data Cartridge Developers Guide</title>
		<author>
			<persName><forename type="first">E</forename><surname>Belden</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><surname>Chorma</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Das</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Y</forename><surname>Hu</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Kotsovolos</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Lee</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Leyderman</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Mavris</surname></persName>
		</author>
		<author>
			<persName><forename type="first">V</forename><surname>Moore</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Morsi</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Murray</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Raphaely</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><surname>Slattery</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Sundara</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Yoaz</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2009-07">July 2009</date>
			<publisher>Oracle</publisher>
		</imprint>
	</monogr>
	<note>11g Release 2 (11.2</note>
</biblStruct>

<biblStruct xml:id="b6">
	<analytic>
		<title level="a" type="main">SEQUEL: A structured English query language</title>
		<author>
			<persName><forename type="first">D</forename><forename type="middle">D</forename><surname>Chamberlin</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><forename type="middle">F</forename><surname>Boyce</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 1974 ACM SIGFIDET (now SIGMOD) workshop on Data description, access and control</title>
				<meeting>the 1974 ACM SIGFIDET (now SIGMOD) workshop on Data description, access and control<address><addrLine>New York, NY, USA</addrLine></address></meeting>
		<imprint>
			<publisher>ACM</publisher>
			<date type="published" when="1974">1974</date>
			<biblScope unit="page" from="249" to="264" />
		</imprint>
	</monogr>
	<note>SIGFIDET &apos;74</note>
</biblStruct>

<biblStruct xml:id="b7">
	<monogr>
		<title level="m" type="main">RFC 1631 -The IP Network Address Translator (NAT)</title>
		<author>
			<persName><forename type="first">K</forename><forename type="middle">B</forename><surname>Egevang</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><surname>Francis</surname></persName>
		</author>
		<imprint>
			<date type="published" when="1994-05">May 1994</date>
		</imprint>
		<respStmt>
			<orgName>Cray Communications, NTT Software Lab</orgName>
		</respStmt>
	</monogr>
</biblStruct>

<biblStruct xml:id="b8">
	<monogr>
		<title level="m" type="main">The State of IMS</title>
		<author>
			<persName><forename type="first">R</forename><forename type="middle">L</forename><surname>Gilliam</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2005-04">Apr. 2005</date>
			<biblScope unit="volume">100</biblScope>
			<biblScope unit="page">6877</biblScope>
			<pubPlace>Route; Sommers NY, USA</pubPlace>
		</imprint>
		<respStmt>
			<orgName>IBM Corporation ; Department DQZA</orgName>
		</respStmt>
	</monogr>
</biblStruct>

<biblStruct xml:id="b9">
	<analytic>
		<title level="a" type="main">R-trees: a dynamic index structure for spatial searching</title>
		<author>
			<persName><forename type="first">A</forename><surname>Guttman</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">SIGMOD &apos;84: Proceedings of the 1984 ACM SIGMOD international conference on Management of data</title>
				<meeting><address><addrLine>New York, NY, USA</addrLine></address></meeting>
		<imprint>
			<publisher>ACM</publisher>
			<date type="published" when="1984">1984</date>
			<biblScope unit="page" from="47" to="57" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b10">
	<analytic>
		<title level="a" type="main">Generalized Search Trees for Database Systems</title>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">M</forename><surname>Hellerstein</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">F</forename><surname>Naughton</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Pfeffer</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">VLDB &apos;95: Proceedings of the 21th International Conference on Very Large Data Bases</title>
				<meeting><address><addrLine>San Francisco, CA, USA</addrLine></address></meeting>
		<imprint>
			<publisher>Morgan Kaufmann Publishers Inc</publisher>
			<date type="published" when="1995">1995</date>
			<biblScope unit="page" from="562" to="573" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b11">
	<monogr>
		<title level="m">SQL Reference</title>
				<imprint>
			<publisher>IBM Corporation</publisher>
			<date type="published" when="2009-11">Nov. 2009</date>
			<biblScope unit="volume">1</biblScope>
		</imprint>
		<respStmt>
			<orgName>IBM</orgName>
		</respStmt>
	</monogr>
</biblStruct>

<biblStruct xml:id="b12">
	<monogr>
		<title level="m" type="main">DB2 Spatial Extender und Geodetic Data Management Feature -Benutzer-und Referenzhandbuch</title>
		<imprint>
			<date type="published" when="2006-07">July 2006</date>
		</imprint>
		<respStmt>
			<orgName>IBM Deutschland GmbH</orgName>
		</respStmt>
	</monogr>
</biblStruct>

<biblStruct xml:id="b13">
	<analytic>
		<title level="a" type="main">The Paradigm of Relational Indexing: A Survey</title>
		<author>
			<persName><forename type="first">H.-P</forename><surname>Kriegel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Pfeifle</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Pötke</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><surname>Seidl</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 10th Conference on Database Systems for Business, Technology, and the Web (BTW&apos;03)</title>
		<title level="s">GI-Edition Lecture Notes in Informatics</title>
		<meeting>the 10th Conference on Database Systems for Business, Technology, and the Web (BTW&apos;03)<address><addrLine>Leipzig, Deutschland</addrLine></address></meeting>
		<imprint>
			<date type="published" when="2003">2003</date>
			<biblScope unit="page" from="285" to="304" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b14">
	<monogr>
		<title level="m" type="main">Oracle Database 11g The Complete Reference</title>
		<author>
			<persName><forename type="first">K</forename><surname>Loney</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2009">2009</date>
			<publisher>McGraw-Hill, Inc</publisher>
			<pubPlace>New York, NY, USA</pubPlace>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b15">
	<monogr>
		<title level="m" type="main">Oracle Database SQL Language Reference</title>
		<author>
			<persName><forename type="first">D</forename><surname>Lorentz</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><forename type="middle">B</forename><surname>Roeser</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2009-10">Oct. 2009</date>
			<publisher>Oracle</publisher>
		</imprint>
	</monogr>
	<note>11g Release 2 (11</note>
</biblStruct>

<biblStruct xml:id="b16">
	<monogr>
		<title level="m" type="main">Oracle Call Interface Programmer&apos;s Guide</title>
		<author>
			<persName><forename type="first">J</forename><surname>Melnick</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2009-10">Oct. 2009</date>
			<publisher>Oracle</publisher>
			<biblScope unit="volume">2</biblScope>
		</imprint>
	</monogr>
	<note>11g Release</note>
</biblStruct>

<biblStruct xml:id="b17">
	<monogr>
		<title level="m" type="main">Oracle Spatial Developers Guide</title>
		<author>
			<persName><forename type="first">C</forename><surname>Murray</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2009-12">Dec. 2009</date>
			<publisher>Oracle</publisher>
		</imprint>
	</monogr>
	<note>11g Release 2 (11</note>
</biblStruct>

<biblStruct xml:id="b18">
	<monogr>
		<title level="m">The PostgresSQL Global Development Group</title>
				<imprint>
			<date type="published" when="2009">2009</date>
		</imprint>
	</monogr>
	<note>PostgreSQL 8.4.3 Documentation</note>
</biblStruct>

<biblStruct xml:id="b19">
	<monogr>
		<title level="m" type="main">DB2 Index Extensions by example and in detail</title>
		<author>
			<persName><forename type="first">K</forename><surname>Stolze</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><surname>Steinbach</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2003-12">Dec. 2003</date>
		</imprint>
	</monogr>
	<note type="report_type">IBM Developer works DB2 library</note>
</biblStruct>

<biblStruct xml:id="b20">
	<analytic>
		<title level="a" type="main">The Montage extensible DataBlade architecture</title>
		<author>
			<persName><forename type="first">M</forename><surname>Ubell</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">SIGMOD Rec</title>
		<imprint>
			<biblScope unit="volume">23</biblScope>
			<biblScope unit="issue">2</biblScope>
			<biblScope unit="page">482</biblScope>
			<date type="published" when="1994">1994</date>
		</imprint>
	</monogr>
</biblStruct>

				</listBibl>
			</div>
		</back>
	</text>
</TEI>
