<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Nutzung von Proxys zur Ergänzung von Datenbankfunktionen</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Alexander Adam</string-name>
          <email>alad@cs.tu-chemnitz.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Sebastian Leuoth</string-name>
          <email>lese@cs.tu-chemnitz.de</email>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Wolfgang Benn</string-name>
          <email>benn@cs.tu-chemnitz.de</email>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Technische Universität</institution>
          ,
          <addr-line>Chemnitz, Straße der Nationen 62, 09107 Chemnitz</addr-line>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Technische Universität</institution>
          ,
          <addr-line>Chemnitz, Straße der Nationen 62, 09107 Chemnitz</addr-line>
        </aff>
        <aff id="aff2">
          <label>2</label>
          <institution>Technische Universität</institution>
          ,
          <addr-line>Chemnitz, Straße der Nationen 62, 09107 Chemnitz</addr-line>
        </aff>
      </contrib-group>
      <abstract>
        <p>ZUSAMMENFASSUNG 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>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;Datenbankerweiterung</kwd>
        <kwd>Indizierung</kwd>
        <kwd>Proxy</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <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 [
        <xref ref-type="bibr" rid="ref5">4</xref>
        ] und IMS [
        <xref ref-type="bibr" rid="ref9">8</xref>
        ], bis
zu den heutigen großen relationalen Datenbanksystemen –
bspw. Oracle [
        <xref ref-type="bibr" rid="ref15">14</xref>
        ] und IBM DB2 [
        <xref ref-type="bibr" rid="ref4">3</xref>
        ], 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 [
        <xref ref-type="bibr" rid="ref18">17</xref>
        ]
oder dessen Pendant bei IBM, des DB2 Spatial Extenders
[
        <xref ref-type="bibr" rid="ref13">12</xref>
        ]. Beide bauen einen neuen Index – einen R-Baum [
        <xref ref-type="bibr" rid="ref10">9</xref>
        ] bei
Oracle, ein Grid bei DB2 [
        <xref ref-type="bibr" rid="ref3">2</xref>
        ] – 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.
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.
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.
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>
    </sec>
    <sec id="sec-2">
      <title>STAND DER TECHNIK 2.1 ADT</title>
      <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. [
        <xref ref-type="bibr" rid="ref12 ref16 ref19">11, 15, 18</xref>
        ]
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>
    </sec>
    <sec id="sec-3">
      <title>2.2 Plugins</title>
      <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 [
        <xref ref-type="bibr" rid="ref1 ref6">5</xref>
        ], IBM DB2 mit
dem DB2 Extender [
        <xref ref-type="bibr" rid="ref20">19</xref>
        ] um. Weitere Ausführungen zu u. a.
Informix DataBlades [
        <xref ref-type="bibr" rid="ref21">20</xref>
        ] und GiST [
        <xref ref-type="bibr" rid="ref11">10</xref>
        ] sind auch in [
        <xref ref-type="bibr" rid="ref2">1</xref>
        ]
sowie auf allgemeinerem Niveau in [
        <xref ref-type="bibr" rid="ref14">13</xref>
        ] zu finden.
      </p>
      <p>Datenbankerweiterung
komplett eigene</p>
      <p>Datenverwaltung
Pluginschnittstelle
Bereitstellung von
Zugriffsfunktionen
für Erweiterungen</p>
      <p>Datenbank Server
Bereitstellung von
− Zugriffskontrolle
− ACID
− SQL Schnittstelle
außerhalb der Datenbank
datenbankverwalteter</p>
      <p>
        Bereich
Abbildung 1: Mittels eines Datenbankplugins wie
hier dargestellt lassen sich neue Funktionen in
eine Datenbank integrieren, insbesondere Indizes (vgl.
[
        <xref ref-type="bibr" rid="ref1 ref6">5</xref>
        ]).
      </p>
      <p>Diese Pluginschnittstellen ermöglichen es, komplett neben
der Datenbank Indexfunktionalitäten bereitzustellen und die
Datenbank so auf eine reine Verwaltungskomponente zu
reduzieren. Die Datenbank macht weiterhin die
Zugriffskontrolle, SQL-Auswertung, Transaktionen, gibt dann die
eigentliche Ausführung aber an das Plugin ab. Dieses kann
z. B. speziell strukturierte Daten sehr effizient außerhalb der
Datenbank vorhalten.</p>
      <p>Neben konkreten Pluginschnittstellen, steht bei
OpensourceProjekten auch der Weg des direkten Eingriffes in den
Datenbankkern offen. Da sich interne Strukturen bei solchen
Projekten allerdings häufig ändern, ist hier der
Wartungaufwand für eine solche Lösung enorm. Des weiteren müssen
an dieser Stelle auch alle Funktionen, die angepasst werden,
und deren Seiteneffekte beachtet werden.</p>
      <p>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>
    </sec>
    <sec id="sec-4">
      <title>2.3 GreenSQL</title>
      <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:
• 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.
• 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.
• Lernmodus: Um nicht auf die Heuristiken angewiesen
zu sein, kann GreenSQL in diesem Modus eine Liste
zugelassener Anfragen erzeugen.
• 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>
    </sec>
    <sec id="sec-5">
      <title>3. UNSER ANSATZ</title>
    </sec>
    <sec id="sec-6">
      <title>3.1 Allgemein</title>
      <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 [
        <xref ref-type="bibr" rid="ref7">6</xref>
        ] 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,
Antwort
(a)
Proxy
(b)</p>
      <p>SQL
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.
sprich die Kommunikationsstrecke. Abbildung 2(b) zeigt,
wie ein solcher Eingriff aussehen könnte. Ein Proxy nimmt
den Datenverkehr von der Anwendung entgegen und wertet
diesen aus. Er miemt also die Datenbank. Zur Beantwortung
der Anfrage kann der Proxy trotzdem mit der Datenbank
kommunizieren.</p>
      <p>
        Es gibt mehrere Möglichkeiten, einen Proxy in eine
bestehende Systemlandschaft zu integrieren:
• Nicht-transparente Integration, indem der Anwendung
der Proxy als neuer Datenbankserver mitgeteilt wird.
Im Idealfall ist dies nur ein einziger Eintrag in der
Anwendung.
• Ersetzen des Datenbankservers durch den Proxy.
Hierbei übernimmt der Proxy die Adresse des
Datenbankservers und der Datenbankserver bekommt eine neue
Adresse zugeteilt.
• Transparentes Einklinken des Proxys. Dabei werden
auf Netzwerkebene die Datenpakete, die für den
Datenbankserver bestimmt sind, auf den Proxy
umgeleitet (Destination Network Address Translation) [
        <xref ref-type="bibr" rid="ref8">7</xref>
        ].
Diese Variante ist vom Anpassungsaufwand für die
Anwendung als auch für den Datenbankserver am
geringsten (im Idealfall Null). Dabei ist jedoch zu beachten,
dass es sich hierbei um einen Eingriff in eventuell
vertrauliche Kommunikation handelt.
      </p>
      <p>Ziel soll es sein, die letzte Möglichkeit zu realisieren. Bei
einer Neuinstallation ist ein neues Indizierungsverfahren, egal
ob Datenbank intern oder extern, verhältnismäßig einfach zu
integrieren. Die Integration in bestehende
Systemlandschaften aber gestaltet sich schwierig. Eine transparente Lösung
ist hier die einzig anwendbare.</p>
    </sec>
    <sec id="sec-7">
      <title>3.2 Bearbeitung einer Anfrage</title>
      <p>Egal für welche Integrationsvariante sich entschieden
wurde, im Betrieb sind die Aufgaben der Kernkomponenten des
Proxys gleich. Diese Kernkomponenten und ihr
Zusammenspiel sind in Abbildung 3 dargestellt. Sendet die Anwendung
eine Anfrage an die Datenbank, wird diese zunächst von der
Verwaltungskomponente des Proxys entgegengenommen.
Abbildung 3: Interner Aufbau des Proxys. Der
Proxy besteht im Wesentlichen aus einem
SQLParser, dem eigentlichen Index und einer
Verwaltungskomponente, die diese Komponenten
miteinander koppelt. Um die Datenbankanfragen
einzulesen, wird noch eine Datenbankhersteller-spezifische
Schnittstelle benötigt.</p>
      <p>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.
Wird die Anfrage bearbeitet, so muss der SQL-Parser diese
zuerst in Unteranfragen zerlegen. Abbildung 4 zeigt eine
solche zerlegte Anfrage, die eine Unteranfrage beinhaltet. Bei
der Beantwortung muss der Baum, der sich aus dieser
Struktur ergibt, von den Blättern her zur Wurzel hin
abgearbeitet werden. Es muss also zunächst die Anfrage „SELECT mid
FROM abt WHERE nr = 3“ abgearbeitet werden. Die
Ergebnisse dieser Teilanfrage werden dann in den
darüberliegenden Knoten eingebaut. Sobald alle Kindknoten eines
Knotens abgearbeitet wurden, kann der Knoten selbst bearbeitet
werden.
0 SELECT * FROM mitarb WHERE mitarb.id IN ( 1 )
1 SELECT mid FROM abt WHERE abt.nr = 3
Abbildung 4: Anfragebaum für eine kleine
geschachtelte SQL-Anfrage. Anfrage 1 ist in Anfrage 0
eingebettet, ihre Ergebnisse sind für die Beantwortung
von Anfrage 0 entscheidend.</p>
      <p>In eine Anfrage, die Daten aus Unteranfragen benötigt,
werden die Ergebnisse dieser Unteranfrage zunächst direkt
eingesetzt. Im vorigen Beispiel würde also bspw. eine
Anfrage wie „SELECT * FROM mitarb WHERE id IN (17,23,42)“
erzeugt werden.</p>
      <p>Im Falle eines Index ist es nicht sinnvoll, jeden Zweig im
Anfragebaum zu verfolgen. Es müssen nur Blätter ausgewertet
werden, die auch tatsächlich an einem für den Index
auswertbaren Vaterknoten direkt oder indirekt angeschlossen
sind.</p>
      <p>Bei der Auswertung eines Anfragebaumes ergibt sich das
in Abbildung 5 dargestellte Kommunikationsschema. Es ist
zu erkennen, dass während der Beantwortung einer Anfrage
u. U. mehrere Anfragen an die Datenbank abgeschickt
werden müssen, während die Anwendung auf die Antwort
wartet. Dieses Wechselspiel von Proxy und Datenbank kann bei
entsprechend tief geschachtelten Anfragen sehr lange
dauern. Es muss noch untersucht werden, bis zu welcher Tiefe
sich die Ausführung der Auflösung tatsächlich lohnt und ab
wann die gesamte Anfrage direkt an die Datenbank
weitergeleitet werden sollte.
Abbildung 5: Kommunikationsschema. Die
Abbildung zeigt das Kommunikationsverhalten der
einzelnen 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
auslösen kann.</p>
      <p>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.</p>
      <p>Eine Möglichkeit der Datenbank, die Ergebnisse eines Index
mitzuteilen, ist die Erweiterung der ursprünglichen
Anfrage um seine Ergebnisse. Zum Beispiel kann so aus einem
einfachen</p>
      <sec id="sec-7-1">
        <title>SELECT * FROM mitarb WHERE gehalt &gt; 2000</title>
        <p>eine um den Primärschlüssel id erweiterte Anfrage werden:</p>
      </sec>
      <sec id="sec-7-2">
        <title>SELECT * FROM mitarb WHERE gehalt &gt; 2000</title>
        <p>AND id IN (4, 18)
Problematisch an dieser Lö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:</p>
      </sec>
      <sec id="sec-7-3">
        <title>SELECT * FROM mitarb WHERE gehalt &gt; 2000</title>
        <p>AND id IN (SELECT * FROM temp_tabelle)</p>
      </sec>
    </sec>
    <sec id="sec-8">
      <title>4. AUSBLICK</title>
      <p>
        Das beschriebene Verfahren befindet sich noch in
Entwicklung. Von den vorgestellten Komponenten wurde der
SQLParser 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) [
        <xref ref-type="bibr" rid="ref17">16</xref>
        ].
      </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
SQLDialekten oder zu ganz anderen Anfrageparadigmen sein.
Diese stehen nicht im direkten Fokus der Arbeit, sollen aber
definitiv evaluiert werden.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>5. LITERATUR</mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>R.</given-names>
            <surname>Acker</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Pieringer</surname>
          </string-name>
          , and
          <string-name>
            <given-names>R.</given-names>
            <surname>Bayer</surname>
          </string-name>
          .
          <article-title>Towards Truly Extensible Database Systems</article-title>
          . In K. Andersen,
          <string-name>
            <given-names>J.</given-names>
            <surname>Debenham</surname>
          </string-name>
          , and R. Wagner, editors,
          <source>DEXA 2005</source>
          , pages
          <fpage>596</fpage>
          -
          <lpage>605</lpage>
          . Springer-Verlag Berlin Heidelberg,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>D. W.</given-names>
            <surname>Adler</surname>
          </string-name>
          .
          <article-title>DB2 Spatial Extender - Spatial data within the RDBMS</article-title>
          .
          <source>In VLDB '01: Proceedings of the 27th International Conference on Very Large Data Bases</source>
          , pages
          <fpage>687</fpage>
          -
          <lpage>690</lpage>
          , San Francisco, CA, USA,
          <year>2001</year>
          . Morgan Kaufmann Publishers Inc.
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>R.</given-names>
            <surname>Ahuja</surname>
          </string-name>
          .
          <article-title>DB2 9 Unveiled: Overview and New Enhancements</article-title>
          . IBM Software Group,
          <year>July 2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [4]
          <string-name>
            <surname>M. M. Astrahan</surname>
            ,
            <given-names>M. W.</given-names>
          </string-name>
          <string-name>
            <surname>Blasgen</surname>
            ,
            <given-names>D. D.</given-names>
          </string-name>
          <string-name>
            <surname>Chamberlin</surname>
            ,
            <given-names>K. P.</given-names>
          </string-name>
          <string-name>
            <surname>Eswaran</surname>
            ,
            <given-names>J. N.</given-names>
          </string-name>
          <string-name>
            <surname>Gray</surname>
            ,
            <given-names>P. P.</given-names>
          </string-name>
          <string-name>
            <surname>Griffiths</surname>
            ,
            <given-names>W. F.</given-names>
          </string-name>
          <string-name>
            <surname>King</surname>
            ,
            <given-names>R. A.</given-names>
          </string-name>
          <string-name>
            <surname>Lorie</surname>
            ,
            <given-names>P. R.</given-names>
          </string-name>
          <string-name>
            <surname>McJones</surname>
            ,
            <given-names>J. W.</given-names>
          </string-name>
          <string-name>
            <surname>Mehl</surname>
            ,
            <given-names>G. R.</given-names>
          </string-name>
          <string-name>
            <surname>Putzolu</surname>
            ,
            <given-names>I. L.</given-names>
          </string-name>
          <string-name>
            <surname>Traiger</surname>
            ,
            <given-names>B. W.</given-names>
          </string-name>
          <string-name>
            <surname>Wade</surname>
            , and
            <given-names>V.</given-names>
          </string-name>
          <string-name>
            <surname>Watson. System R</surname>
          </string-name>
          <article-title>: relational approach to database management</article-title>
          .
          <source>ACM Trans. Database Syst</source>
          .,
          <volume>1</volume>
          (
          <issue>2</issue>
          ):
          <fpage>97</fpage>
          -
          <lpage>137</lpage>
          ,
          <year>1976</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>E.</given-names>
            <surname>Belden</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Chorma</surname>
          </string-name>
          ,
          <string-name>
            <surname>D. Das</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          <string-name>
            <surname>Hu</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          <string-name>
            <surname>Kotsovolos</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          <string-name>
            <surname>Lee</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          <string-name>
            <surname>Leyderman</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          <string-name>
            <surname>Mavris</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          <string-name>
            <surname>Moore</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Morsi</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          <string-name>
            <surname>Murray</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          <string-name>
            <surname>Raphaely</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          <string-name>
            <surname>Slattery</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          <string-name>
            <surname>Sundara</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Yoaz</surname>
          </string-name>
          .
          <source>Oracle Database Data Cartridge Developers Guide, 11g Release</source>
          <volume>2</volume>
          (
          <issue>11</issue>
          .2). Oracle,
          <year>July 2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>D. D.</given-names>
            <surname>Chamberlin</surname>
          </string-name>
          and
          <string-name>
            <given-names>R. F.</given-names>
            <surname>Boyce</surname>
          </string-name>
          . SEQUEL:
          <article-title>A structured English query language</article-title>
          .
          <source>In SIGFIDET '74: Proceedings of the 1974 ACM SIGFIDET (now SIGMOD) workshop on Data description, access and control</source>
          , pages
          <fpage>249</fpage>
          -
          <lpage>264</lpage>
          , New York, NY, USA,
          <year>1974</year>
          . ACM.
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>K. B.</given-names>
            <surname>Egevang</surname>
          </string-name>
          and
          <string-name>
            <given-names>P.</given-names>
            <surname>Francis</surname>
          </string-name>
          .
          <article-title>RFC 1631 - The IP Network Address Translator (NAT)</article-title>
          .
          <source>Cray Communications</source>
          , NTT Software Lab, May
          <year>1994</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>R. L.</given-names>
            <surname>Gilliam</surname>
          </string-name>
          .
          <source>The State of IMS. IBM Corporation</source>
          ,
          <string-name>
            <surname>Department</surname>
            <given-names>DQZA</given-names>
          </string-name>
          , Route
          <volume>100</volume>
          Box 100,
          <string-name>
            <surname>Sommers</surname>
            <given-names>NY</given-names>
          </string-name>
          , USA,
          <volume>06877</volume>
          ,
          <string-name>
            <surname>Apr</surname>
          </string-name>
          .
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>A.</given-names>
            <surname>Guttman.</surname>
          </string-name>
          R-trees:
          <article-title>a dynamic index structure for spatial searching</article-title>
          .
          <source>In SIGMOD '84: Proceedings of the 1984 ACM SIGMOD international conference on Management of data</source>
          , pages
          <fpage>47</fpage>
          -
          <lpage>57</lpage>
          , New York, NY, USA,
          <year>1984</year>
          . ACM.
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [10]
          <string-name>
            <surname>J. M. Hellerstein</surname>
            ,
            <given-names>J. F.</given-names>
          </string-name>
          <string-name>
            <surname>Naughton</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Pfeffer</surname>
          </string-name>
          .
          <article-title>Generalized Search Trees for Database Systems</article-title>
          .
          <source>In VLDB '95: Proceedings of the 21th International Conference on Very Large Data Bases</source>
          , pages
          <fpage>562</fpage>
          -
          <lpage>573</lpage>
          , San Francisco, CA, USA,
          <year>1995</year>
          . Morgan Kaufmann Publishers Inc.
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          <source>[11] IBM. SQL Reference</source>
          , Volume
          <volume>1</volume>
          .
          <string-name>
            <given-names>IBM</given-names>
            <surname>Corporation</surname>
          </string-name>
          ,
          <year>Nov</year>
          .
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>IBM</given-names>
            <surname>Deutschland GmbH. DB2 Spatial Extender und Geodetic Data Management Feature - Benutzer- und Referenzhandbuch</surname>
          </string-name>
          ,
          <year>July 2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>H.-P.</given-names>
            <surname>Kriegel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Pfeifle</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Pötke</surname>
          </string-name>
          , and
          <string-name>
            <given-names>T.</given-names>
            <surname>Seidl</surname>
          </string-name>
          .
          <article-title>The Paradigm of Relational Indexing: A Survey</article-title>
          .
          <source>In Proceedings of the 10th Conference on Database Systems for Business, Technology, and the Web (BTW'03)</source>
          ,
          <source>GI-Edition Lecture Notes in Informatics</source>
          , pages
          <fpage>285</fpage>
          -
          <lpage>304</lpage>
          , Leipzig, Deutschland,
          <year>2003</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>K.</given-names>
            <surname>Loney</surname>
          </string-name>
          .
          <article-title>Oracle Database 11g The Complete Reference</article-title>
          .
          <string-name>
            <surname>McGraw-Hill</surname>
          </string-name>
          , Inc., New York, NY, USA,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>D.</given-names>
            <surname>Lorentz</surname>
          </string-name>
          and
          <string-name>
            <given-names>M. B.</given-names>
            <surname>Roeser</surname>
          </string-name>
          .
          <source>Oracle Database SQL Language Reference, 11g Release</source>
          <volume>2</volume>
          (
          <issue>11</issue>
          .2). Oracle, Oct.
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>J.</given-names>
            <surname>Melnick</surname>
          </string-name>
          .
          <source>Oracle Call Interface Programmer's Guide, 11g Release</source>
          <volume>2</volume>
          (
          <issue>11</issue>
          .2). Oracle, Oct.
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>C.</given-names>
            <surname>Murray</surname>
          </string-name>
          .
          <source>Oracle Spatial Developers Guide, 11g Release</source>
          <volume>2</volume>
          (
          <issue>11</issue>
          .2). Oracle, Dec.
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          <source>[18] The PostgresSQL Global Development Group. PostgreSQL 8.4.3 Documentation</source>
          ,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>K.</given-names>
            <surname>Stolze</surname>
          </string-name>
          and
          <string-name>
            <given-names>T.</given-names>
            <surname>Steinbach</surname>
          </string-name>
          .
          <article-title>DB2 Index Extensions by example and in detail, IBM Developer works DB2 library</article-title>
          .
          <source>Dec</source>
          .
          <year>2003</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>M.</given-names>
            <surname>Ubell</surname>
          </string-name>
          .
          <article-title>The Montage extensible DataBlade architecture</article-title>
          .
          <source>SIGMOD Rec</source>
          .,
          <volume>23</volume>
          (
          <issue>2</issue>
          ):
          <fpage>482</fpage>
          ,
          <year>1994</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>