-
Die
Erfindung betrifft ein Verfahren gemäß dem Oberbegriff des Patentanspruchs
1 sowie dessen Verwendung.
-
Mehrdimensionale
Datenbanksysteme spielen eine zunehmend wichtige Rolle, beispielsweise bei
Multimedia-Datenbanken. Eine wichtige Aufgabenstellung dabei ist
die effiziente Beantwortung der mehrdimensionale Bereichsanfrage
(multidimensional range query). Dabei wird die Datenbank nach allen
Datensätzen
durchsucht, bei denen mehrere Attribute innerhalb eines vorgegebenen
Suchbereichs liegen. Z.B. könnten
in einer Vertriebsdatenbank alle Kunden gesucht werden, deren Alter
zwischen 30 und 40 Jahren liegt, deren Postleitzahl zwischen 20000
und 29999 liegt, und deren Einkommensklasse zwischen Klasse 3 und
Klasse 5 liegt. Die mehrdimensionale Bereichsanfrage ist auch Grundlage
für die
effiziente Realisierung einer Nächste-Nachbar-Suche
in umfangreichen mehrdimensionalen Daten und für Ähnlichkeitssuchen.
-
Die
aus der Literatur bekannten Verfahren mit Bezug zu dieser Erfindung
müssen
zunächst
etwas eingehender erörtert
werden, um das Wesen der Erfindung erläutern zu können.
-
Eine
bekannte Methode zur effizienten Bearbeitung mehrdimensionaler Datenbanken
ist die Abbildung des mehrdimensionalen Datenraums auf einen eindimensio nalen
Index (mittels einer raumfüllenden
Kurve) und Sortierung nach diesem Index. Dieser Ansatz hat insbesondere
den Vorteil der leichten Integrierbarkeit in existierende, eindimensionale Datenbanken.
Als günstige
Indizierungsmethoden werden insbesondere favorisiert: der Z-Index
[Tr1, Or1, Ba1, Ra1], und der Hilbert-Index [La1].
-
Die
Beispiele in dieser Patentanmeldung basieren alle auf dem Z-Index,
die beschriebenen Verfahren können
jedoch genauso für
beliebige andere Indizierungen verwendet werden, vorausgesetzt es existiert
eine Methode zur Berechnung der weiter unten beschriebenen Werte
BIGMIN und LITMAX.
-
1 zeigt ein Zahlenfeld mit
Z-indizierten Werten, für
ein zweidimensionales System mit den Koordinaten x und y. Diese
Indizes entstehen in einfacher Weise durch bitweises Verzahnen der
Attributwerte x und y. Die raumfüllende
Kurve durchläuft
den 2D-Raum in vier Quadranten, die in der Form eines großen Z angeordnet
sind; diese werden rekursiv wiederum in Form eines kleinen Z durchlaufen,
etc.
-
Die
in der Datenbank vorhandenen Datensätze werden im folgenden auch
als Datenpunkte angesprochen (im zweidimensionalen Beispiel 1 handelt es sich um Wertepaare
mit je einem Wert für die
Attribute x und y, wahlweise auch durch ihren Index angesprochen).
Ist allgemein von Punkten die Rede, so wird keine Aussage darüber gemacht,
ob sie als reale Datensätze
in der Datenbank vorhanden sind oder nicht. Die im Suchbereich gefundenen
Datenpunkte werden Treffer genannt.
-
Die
Datenpunkte werden nun nach dem (Z-)Index sortiert abgespeichert.
Dies kann einfach in eindimensionalen Feldern geschehen. Im folgenden werden
bekannte, verbreitete Datenstrukturen für dynamische Datenmengen besprochen,
die für
die Erfindung relevant sind.
-
In
[Nok] wird ein Verfahren zum Suchen in mehrdimensionalen Daten beschrieben,
dem ein Trie als Organisationsform zugrundeliegt. Mehrdimensionale
Daten werden mit einer raumfüllenden
Kurve "linearisiert" auf Basis eines
Bitverzahnungsschemas in Paketen, deren dimensionsspezifische Anteile
unterschiedlich lang sein können
(in [Tr1] wird erwähnt, daß die dort
beschriebenen Methoden auf beliebige Verzahnungsschemata anwendbar
sind). Vergleiche werden (gemäß Trie)
paketweise auf Übereinstimmung
angestellt. Als Aufgabenstellung werden die exakte Abfrage (exact
match query) und die Abfrage nach teilweiser Übereinstimmung (partial match
query) angesprochen, die mehrdimensionale Bereichsanfrage wird nicht
diskutiert. Bei einem Trie ergibt sich die Suchbaumstruktur direkt
aus den Daten, es existieren daher keine Balanciermechanismen.
-
Die
Datenstrukturen kann man gliedern in solche, die eher günstig sind
für interne
Speicherung (im RAM-Arbeitsspeicher) und solche, die eher günstig sind
für externe
Speicherung (insbesondere Festplatten). Beliebt sind Suchbäume, bei
denen Balanciermechanismen bekannt sind, mit denen man auch in dynamischen
Datenbeständen
mit garantiert logarithmischer Anzahl von Schritten nach vorgegebenen Werten
suchen kann. Für
interne Speicherung werden binäre
Suchbäume
bevorzugt für
externe Speicherung Bäume
vom B-Typ.
-
Bei
binären
Suchbäumen
(siehe Beispiel 2) besitzt
jeder Knoten einen Datensatz und (bis zu) zwei Verweise auf einen
linken bzw. rechten Nachfolger (Sohn); in Sonderfällen kann
ein Knoten nur einen Sohn besitzen. Die Werte im linken Sohn und
dessen Unterbaum sind alle kleiner oder kleinergleich dem Wert des
Vaters (im folgenden ist ohne Beschränkung der Allgemeinheit "links" mit "kleiner" und "rechts" mit "größer" gleichzusetzen).
-
Bei
Bäumen
vom B-Typ besitzt jeder Knoten eine bestimmte Anzahl von Datensätzen und
entprechend viele Verweise auf Nachfolgerknoten, also einen hohen
Verzweigungsfaktor. Die Daten eines Knotens werden vorzugsweise
auf je einer (externen) Speicherseite abgelegt.
-
In
der Literatur werden unterschieden:
B-Bäume (siehe Beispiel 3): Innere Knoten 1 besitzen
Werte und Verweise 3 auf Nachfolgerknoten, wobei die Nachfolgerknoten
Blätter 2 oder
wiederum innere Knoten 1 sind. Die Werte in den Knoten
sind (z.B. aufsteigend) sortiert. Die Blätter besitzen nur Werte. Bei
den inneren Knoten liegen die Werte (gedanklich) zwischen je zwei
Verweisen 3 auf Nachfolgerknoten. Die Werte im Unterbaum
des linken Verweises sind alle kleiner (kleinergleich) als der Wert selbst.
Die Werte im Unterbaum des rechten Verweises sind alle groesser
Wert selbst. (groessergleich) als der Ohne Beschränkung der
Allgemeinheit und ohne Beschränkung
der Ansprüche
darauf nehmen wir im folgenden an, daß gleiche Datensätze in einem Baum
nicht erlaubt sind. Im Beispiel 3 liegen
im linken Unterbaum des Wertes 24 die Werte 3, 4, 6, 7, 8, 11, 12,
15, 17, 18; im linken Unterbaum des Wertes 7 befinden sich die Werte
3, 4, 6.
Bei B– Bäumen ist – mit Ausnahme
der Wurzel – jeder
Knoten mindestens bis zur Hälfte
mit Werten gefüllt.
B*-Bäume: B*-Bäume entprechen
prinzipiell den B-Bäumen,
haben jedoch einen anderen Mindest-Füllgrad.
B+-Bäume: (Siehe
Beispiel 4) Bei B+-Bäumen befinden
sich die eigentlichen Datensätze
alle in den Blattknoten, die internen Knoten besitzen einen Diskriminator 4 zwischen
je zwei Verweisen, anhand dessen die Grenze zwischen den darunterliegenden Knoten
erkennbar ist. Zusätzlich
existieren auf Blattebene Hilfszeiger 5 zu dem jeweils
nächsten
Knoten. Die Werte zu dem in 4 mit 3 gekennzeichneten Verweis
liegen zwischen 12 (ausschliesslich) und 18 (einschliesslich).
-
Für eine mehrdimensionale
Bereichsanfrage berechnet man den minimal möglichen Index MIN und den maximal
möglichen
Index MAX innerhalb des mehrdimensionalen Suchbereichs. In dem Beispiel 5 sei der Suchbereich 6:
x = 7..8, y = 1..5. Bei Z-Indizierung entpricht dies den beiden äußersten
Ecken MIN = 23, MAX = 98 im Suchbereich. Beim Suchen braucht man
nur solche Knoten zu inspizieren, deren Werte potentiell zwischen
MIN und MAX (jeweils einschließlich)
liegen.
-
Diese
Massnahme alleine führt
jedoch noch nicht zu einer wirklich effizienten Suche. Auf die folgende
Weise wird die Suche ganz erheblich beschleunigt: Trifft man bei
der Suche einen Wert, der zwar innerhalb des Indexintervalls MIN...MAX
liegt, aber ausserhalb des Suchbereichs, so kann man u.U, von dort
aus sehr große
Bereiche überspringen. Trifft
man in 5 z.B. den Wert
33, der ja im Suchintervall 23..98 liegt, so ist der nächsthöhere mögliche Wert
im Suchbereich der Wert 53. Von 33 aus kann man also alle Knoten
mit Werten nur zwischen 34...52 (eingekreist 5) überspringen.
Der nächstmögliche Wert
im Suchbereich wird in [Tr1] BIGMIN genannt, da er auf der "großen" Seite des Aufpunkts der
kleinstmögliche
Wert im Suchbereich ist. Umgekehrt wird auf der "kleinen" Seite der größtmögliche Wert im Suchbereich "LITMAX" genannt (in 5 gilt für den Aufpunkt 33 LITMAX =
31).
-
Es
muss also nur anfänglich
der gesamte Indexbbereich MIN..MAX angefragt werden, dieser anfängliche
Indexbereich zum Suchbereich wird dynamisch eingeschränkt; der
gerade aktive Indexbereich wird im folgenden Anfragebereich genannt.
-
Anmerkung:
Nicht Gegenstand dieser Patentanmeldung ist die Berechnung von BIGMIN
und LITMAX; sie ist schwierig, es sind aber effiziente Lösungen bekannt:
In [Tr1] ein effizientes Berechnungsverfahren angegeben, das linear
mit der Anzahl der Dimensionen ist. Das nach (Ba1) angegebene BIGMIN-Berechnungsverfahren
für Z-indizierte
Daten ist exponentiell mit der Anzahl der Dimensionen und wurde
später
nach [Ra1] durch ein Verfahren ("next intersection
point") ersetzt,
das der BIGMIN-Berechnung nach [Tr1] entpricht. Ein BIGMIN-Berechnungsverfahren
("calculate next
match") für Hilbert
indizierte Daten ist mit vollständigem
Quellcode in [La1] angegeben.
-
Die
folgenden Betrachtungen werden alleine auf Basis einer eindimensionalen
Indizierung und den Funktionen BIGMIN/LITMAX angestellt; mehrdimensionale Überlegungen
brauchen im folgenden nicht angestellt zu werden.
-
Bezüglich der
knotenweisen Abarbeitung von Suchbäumen kann man unterscheiden:
- a) Bearbeitung iterativ in den Blättern von B+-Bäumen, von
links nach rechts
- b) Bearbeitung von oben nach unten ("Top-Down"), vorzugsweise rekursiv.
-
In
[Tr1] wird, zur effizienten Realisierung der mehrdimensionalen Bereichsanfrage
mit Z-indizierten Daten, ein rekursives Top-Down-Verfahren angegeben.
Das dort angegebene Suchverfahren wurde mit Blick auf binäre Suchbäume angegeben,
also vorzugsweise für
interne Speicherung; es arbeitet fallweise mit BIGMIN oder der spiegelbildlichen
Funkion LITMAX.
-
Modifikationen
für Bäume vom
B-Typ, die knotenweise ebenfalls mit BIGMIN ODER LITMAX arbeiten,
wurden in [Tr2] angegeben.
-
Für B+-Bäume ist
ein iteratives, von links nach rechts arbeitendes Verfahren bekannt,
das nur mit BIGMIN arbeitet, wobei [Ba1, Ra1] mit Z-indizierten
B+-Bäumen
und [La1] mit Hilbert-Indizierten B+-Bäumen arbeiten. Für B–Bäume ist
dieses Verfahren nicht direkt anwendbar.
-
Die
bekannten von links nach rechts arbeitenden Verfahren arbeiten wie
folgt: von dem höchsten
in einem Knoten gefundenen Wert als Aufpunkt ausgehend, wird BIGMIN
bestimmt. Die Daten werden von links nach rechts nach dem nächsten Knoten durchsucht,
dessen höchster
Wert groessergleich BIGMIN ist. Erst dieser Knoten braucht inspiziert
zu werden, die dazwischen liegenden können übersprungen werden. Ein Beispiel
folgt weiter unten mit 6 und 7.
-
Anmerkung:
Anstelle einer direkten BIGMIN-Berechnung berechnet [Or1] die Schittmenge zwischen
den Z-werten der Punkte des Suchbereichs mit denen eines Z-Indexbereichs.
Diese Schnittmengenbildung arbeitet auf beiden Mengen parallel von links
nach rechts und versucht dabei, zusammenhängende Indexbereiche der Suchbereichs-Indexmenge effizient
zu nutzen; die Suchbereichs-Indexmenge besitzt jedoch potentiell
sehr viele kleine Löcher,
so daß dieses
Verfahren sehr ineffizient werden kann. Das Verfahren läuft letzt lich
auf eine indirekte BIGMIN-Berechnung von links nach rechts hinaus.
-
Genauere
Untersuchungen zu dem für B+-Bäume bisher
eingesetzten Verfahren haben einen gravierenden Nachteil offengelegt:
-
Beispiel:
-
Die
Datenbank habe die in 6 unterstrichenen
Werte 24, 27, 33, 35, 38, 48, 50, 51, 56, 57, 59, 60, 61, 63, 64,
66, 67, 75, 76, 78, 88, 89, 93,.. die organisiert sind in 8 Blattknoten
mit den Wertebereichen (24..27), (33..38), (48..51), (56..59), (64..67), (76..78),
(88..93). Der Suchbereich 6 ist in 6 mit einem Rechteck angedeutet. Der
einzige Datenpunkt im Suchbereich hat den Index 66. 7 zeigt eine dazugehörige Datenstruktur auf Basis
eines B+-Baums.
-
Bei
der bekannten Suchmethode von links nach rechts wird zunächst das
Blatt (24..27) aufgesucht (dies geschieht üblicherweise top down). Ausgehend
von 27 gilt BIGMIN = 29. Das nächste
zu besuchende Blatt ist damit (33..38). Ausgehend von 38 gilt BIGMIN
= 53. Damit kann das Blatt (48..51) übersprungen werden, das nächste zu
besuchende Blatt ist damit (56..59). Von dort gilt BIGMIN = 66.
Damit kann der Knoten (60..63) übersprungen
werden und der Bereich (64..67) wird aufgesucht; dort wird der Treffer
66 gefunden. Von dort gilt BIGMIN = 72. Damit muss der Bereich (76..78)
aufgesucht werden; von dort gilt BIGMIN = 96. Damit kann zumindest
der Knoten (80..83) übersprungen
werden, etc. Die Inspektionsreihenfolge 10 ist mit den
gestrichelten Pfeilen an den Blättern
angegeben. Um diese Inspektionsreihenfolge realisieren zu können, muss
der Baum auf dem mit den fett gezeichneten Pfeilen gekennzeichneten
Weg 11 traversiert werden.
-
Die
beiden Probleme sind anhand dieses Beispiels erkennbar:
- a) diverse Knoten (im Beispiel die Blattknoten (24..27), (33.38),
(56..59), (76..78) werden also besucht, ohne daß sich darin ein Treffer befindet.
- b) um z.B. von (56..59) zu (64..67) zu gelangen, muß man im
Suchbaum wieder hochsteigen, und von dort wieder hinab. Zum gezielten Überspringen
von Indexbereichen nützen
bei B+-Bäumen die
Hilfszeiger zur jeweils nächsten
Blatt recht wenig; es muß der
Innenbereich des B+-Baums durchgearbeitet werden, was insbesondere
dann störend
ist, wenn der Innenbereich (bei B+-Bäumen auch "Indexbereich" genannt) so groß ist, daß er nicht im Arbeitsspeicher
gehalten werden kann (siehe [Ra1], wonach im Innenbereich dafür spezielle
Hilfszeiger 9 angelegt werden).
-
Die
Probleme erscheinen bei diesem Miniatur-Beipiel natürlich wenig
gravierend, multiplizieren sich jedoch in der realen Anwendung einer
großen Datenbank.
-
Zudem:
Bei der iterativen Vorgehensweise von links nach rechts müssen nicht
nur überflüssigerweise
Knoten geöffnet
werden, es werden auch entprechend viele überflüssige BIGMIN-Berechnungen durchgeführt. Je
nach Indexierungsweise kann die BIGMIN-Berechnung relativ aufwendig
sein.
-
Aufgabe
der Erfindung ist die Schaffung eines Verfahrens der eingangsgewandten
Art für
die effiziente Realisierung der mehrdimensionalen Bereichsanfrage
und darauf basierender Anfragen bei baumartigen Datenstrukturen,
insbesondere solchen mit mehreren Datensätzen je Speicherseite, wie
Bäumen
vom B-Typ. Hierzu sollen möglichst
selten Knoten ohne Treffer inspiziert werden müssen, es sollen möglichst
wenige BIGMIN-Berechnungen
durchgeführt
werden müssen,
und es soll die Anzahl der durchzuführenden Wertevergleiche minimiert
werden.
-
Die
Aufgabe wird nach Anspruch 1 gelöst.
-
Um
die Lösung
genau beschreiben zu können,
werden vorab erfindungsgemäße Modifikationen
der Bäume
vom B-Typ erläutert
und der Begriff "Randindex" eingeführt.
-
8 zeigt
eine Erweiterung von B–Bäumen dergestalt,
daß jeder
Verweis, also auch die äußeren Verweise,
einen linken und rechten Diskriminator besitzt. Dazu werden am linken
und rechten Rand Hilfsdiskriminatoren 12 eingeführt. Damit
ist beim Durchgehen des Baumes von oben nach unten bekannt, daß z.B. die
Werte im Unterbaum des Verweises 3a zwischen 3 (einschließlich) und
7 (ausschließlich)
liegen, und daß die
Werte im Unterbaum des Verweises 3b zwischen 7 (ausschließlich) und
15 (ausschließlich)
liegen, und daß die
Werte im Unterbaum des Verweises 3c zwischen 3 (einschließlich) und
24 (ausschließlich)
liegen.
-
Rechter
und linker Diskriminator eines Verweises (z.B. die Werte 7 und 15
für Verweis 3b)
nach 8 werden Randindizes genannt.
-
9 zeigt
eine entprechende Erweiterung für
B+-Bäume;
ausgehend von dem Beispiel 4, wird
der Hilfs-Diskrimator mit dem Wert 3 eingeführt. Beim Durchgehen des Baumes
von oben nach unten ist z.B, bekannt, daß die Werte im Unterbaum des Verweises 3d zwischen
3 (einschließlich)
und 7 (einschließlich)
liegen.
-
Rechter
und linker Diskriminator eines Verweises nach 9 werden
Randindizes genannt.
-
In
den bisherigen Beispielen dient ein nicht am Rand liegender Diskriminator
zwei Verweisen, z.B. dient in 9 der Diskriminator
mit Wert 7 als Grenzangabe für
die Verweise 3d und 3e.
-
Bei
der zusätzlichen
Modifikation von B+-Bäumen,
die im Beispiel 10 dargestellt ist, befinden
sich in den inneren Knoten mehrere Werte nebeneinander. Dadurch
können
die Diskriminatoren die Grenzen schärfer abstecken. Beim Durchgehen des
Baumes von oben nach unten ist z.B. bekannt, daß die Werte im Unterbaum des
Verweises 3f zwischen 3 (einschließlich) und 7 (einschließlich) liegen, und
daß die
Werte im Unterbaum des Verweises 3g zwischen 8 (einschließlich) und
15 (einschließlich) liegen.
-
Rechter
und linker Diskriminator eines Verweises nach 10 werden
Randindizes genannt.
-
11 zeigt
eine entprechende Modifikation bei Bäumen mit der eigentlichen Information
auch in inneren Knoten, wie dies bei den klassischen B–Bäumen der
Fall ist. Die Werte 3, 7, 8, 16, 20, 40 repräsentieren hier direkt Datensätze. Beim
Durchgehen des Baumes von oben nach unten ist z.B. bekannt, daß die Werte
im Unterbaum des Verweises 3h zwischen 3 (ausschließlich) und
7 (ausschließlich)
liegen, und daß die
Werte im Unterbaum des Verweises 3i zwischen 8 (ausschließlich) und
16 (ausschließlich)
liegen.
-
Rechter
und linker Diskriminator eines Verweises nach 11 werden
Randindizes genannt.
-
Erfindungsgemäß kann es
durchaus sinnvoll sein, daß in
inneren Knoten sogar mehrere direkt aufeinanderfolgende Werte zugelassen
sind, ohne daß dazwischen
Verweise liegen müssen.
Dabei werden vorzugsweise größere Cluster
von nah zusammenliegenden Datenpunkten in den Knoten, auf die verwiesen
wird, gespeichert (wie die Cluster 9..13 und 28..32 in 11),
sehr kleine Cluster oder isolierte Datenpunkte als einzelne Werte
(wie die Werte 16 und 20 in 11; Clusterkriterium
ist hier direkt der Index, die Clusterung kann aber auch nach geometrischen
Gesichtspunkten erfolgen).
-
Die
in dieser Situation einem Verweis direkt benachbarten Diskriminatoren
eines Verweises werden Randindizes genannt.
-
Randindizes
sind Hinweise auf maximal/minimal mögliche Werte innerhalb von
Speicherbereichen. Randindizes können
explizit oder implizit gespeichert sein, sie können aufgrund ihrer Lage im Suchbaum
(z.B. am absolut linken/rechten Rand) und/oder aus anwendungstechnischen
Gesichtspunten auch nur schätzbar
sein im Sinne von maximal/minimal möglichen Werten.
-
Als
Dateneinheit wird im folgenden der Inhalt eines Datenbereichs, vorzugsweise
eines kompletten Unterbaums bezeichnet, für den ein linker und rechter
Randindex existieren. Eine Dateneinheit kann sich bei externer Speicherung
beziehen auf eine Speicherseite oder mehrere Speicherseiten.
-
Wir
kommen nun zur Beschreibung der Lösung.
-
Wird
im Laufe der Suche eine Dateneinheit mit den Randindizes LI (links)
und RE (rechts) angetroffen, die mit dem Anfragebereich mit den
Grenzen LO (low) und HI (high) überlappt,
so wird über
den Zugriff auf die Dateneinheit erfindungsgemäß entschieden über BIGMIN
und LITMAX, und zwar zunächst über BIGMIN
(LI) und LITMAX (RE) (über
die Möglichkeit,
die Betrachtung für
ein schon berechnetes BIGMIN bzw. LITMAX auch auf Nachbardatenbereiche
auszudehnen, siehe weiter unten).
-
Wenn
für die
so berechneten Werte gilt:
RE < BIGMIN oder LI > LITMAX,
dann braucht die betreffende
Dateineinheit nicht in spiziert zu werden.
-
Wenn
ein Teil der Bedingung (RE < BIGMIN) erfüllt ist,
braucht natürlich
der zweite Teil der Bedingung nicht mehr geprüft zu werden (d.h. LITMAX braucht
nicht mehr berechnet zu werden; und umgekehrt). Für zumindest
einen Teil der Dateneinheiten oder zumindest für eine Anfrage insgesamt werden jedoch
normalerweise sowohl BIGMIN- als auch LITMAX-Werte berechnet.
-
Bei
der erfindungsgemäßen Lösung wird vorzugsweise
rekursiv von oben nach unten durchsucht.
-
12 zeigt
die erfindungsgemäße Lösung für die Daten
nach 6 und im Gegensatz zur bekannten Abarbeitungsweise
nach 7, für
die gleiche Datenstruktur, allerdings mit je zwei Diskriminatoren
für einen
Verweis eines inneren Knotens.
Beispielsweise gilt für den Knoten
(24..27):
RE = 27 < BIGMIN
= 29,
Beispielsweise gilt für
den Knoten (33..38):
RE = 38 < BIGMIN
= 53,
Beispielsweise gilt für
den Knoten (48..51):
LI = 48 > LITMAX
= 31; diese Knoten brauchen also nicht besucht zu werden.
-
Im
Beispiel wird nur das Blatt (64..67) besucht (in dem sich der Treffer
66 befindet); hier gilt RE = 67 >=
BIGMIN = 66; LI = 64 <=
LITMAX = 66.
-
Damit
sind die o.g. Probleme gelöst:
-
Zu a):
-
Es
werden wesentlich weniger Knoten geöffnet als nach bisherigen Verfahren
bekannt; es werden keine Knoten geöffnet, die aufgrund von im Suchbaum
in inneren Knoten verfügbaren
Informationen keine Treffer enthalten können.
-
Zu b):
-
Es
sind keine Hilfszeiger erforderlich und der Baum wird mit einer
einzigen Anfrage auf natürliche Weise
nur einmal traversiert (und nur insoweit, als dies aufgrund der
Informationen in inneren Knoten unvermeidbar ist). Wie aus 12 ersichtlich, verläuft die
Traversierung 11 nur in eine Richtung, mit einem insgesamt
wesentlich kürzeren
Weg.
-
Die
dynamische Einschränkung
des Anfragebereichs ist hierarchisch und dadurch entsprechend effizient.
Aufgrund der vorzugsweise rekursiv realisierten Hierarchie werden
automatisch viele hintereinander liegende Blattknoten übersprungen, ohne
daß dafür spezielle
Maßnahmen
wie z.B. Hilfszeiger erforderlich wären.
-
Die
Effizienzssteigerung kommt im wesentlichen durch das Zusammenwirken
der beiden Massnahmen zustande:
- a) Die Index-Suchbereiche
sind durch die mehrfachen Diskriminatoren je Verweis enger gesetzt,
- b) Die Dateneinheiten werden von zwei Seiten, mit BIGMIN UND
LITMAX, gleichzeitig "angegriffen".
-
Das
Enger-Setzen durch Mehrfach-Diskriminatoren alleine bringt nicht
den gewünschten
Effekt, wie man aus 13 entnehmen kann (gleiche Datenstruktur
wie 12, jedoch mit der bekannten Abarbeitungsweise,
führt zu
keiner Verbesserung!).
-
Umgekehrt
bringt die doppelte Attacke, alleine, im wesentlichen die Möglichkeit
der Top-Down Bearbeitung und Anwendbarkeit auch auf B–Bäume anstelle
nur von B+-Bäumen.
-
14 zeigt
die Situation für
den konventionellen B+-Baum als Datenstruktur, jedoch bei Top-Down-Vorgehen
und Berechnung von sowohl LITMAX als auch BIGMIN. Aus 14 ist
zu erkennen, daß mit
der doppelten Attacke alleine und ohne Einengung der Grenzindizes
die einfacher und ohne Hilfszeiger realisierbare Top-Down-Bearbeitung
eingesetzt werden kann; die Anzahl der zu inspizierenden Knoten
ist in diesem Beispiel identisch mit der bei den bekannten, von
links nach rechts arbeitenden Verfahren.
-
Der
Blattknoten (33..38) muss auch hier inspiziert werden (LITMAX(38)
= 31 > LI = 27; BIGMIN(27)
= 29 < RE = 38).
Der Blattknoten (56..59) muss auch hier inspiziert werden (LITMAX(59)
= 55 >= LI = 51; BIGMIN(51)
= 53 < RE = 59).
-
Der
Blattknoten (60..63) braucht nicht inspiziert zu werden (LITMAX(63)
= 55 < LI = 59).
-
Der
Blattknoten (76..78) muss inspiziert werden, (LITMAX(78) = 74 >= LI = 67; BIGMIN(67)
= 72 <= RE = 78).
-
Der
Blattknoten (88..93) braucht nicht inspiziert zu werden (BIGMIN(78)
= 96 > RE = 93).
-
Wie
oben beschrieben, soll zusätzlich
auch die Anzahl der BIGMIN-Berechnungen weiter minimiert werden,
und damit ebenso natürlich
die Anzahl der LITMAX-Berechnungen:
Dies wird wie folgt erreicht:
Die
BIGMIN-und-LITMAX-Berechnung braucht nicht für jede Dateneinheit berechnet
zu werden. Ist beispielsweise bereits bekannt, daß zum Datenbereich (33..38)
BIGMIN = 53 gilt, so braucht für
(48..51) keine Berechnung angestellt zu werden.
-
Zu
Anfang der Betrachtung einer Dateneinheit werden ihre Randindizes
mit bereits berechneten BIGMIN/LITMAX-Werten von direkt oder indirekt
benachbarten Dateneinheiten verglichen. Ist der linke Randindex
der Dateneinheit größer als
der LITMAX-Index einer rechten Nachbar-Dateneinheit, so kann die
Dateneinheit komplett übersprungen
werden ohne weitere BIGMIN/LITMAX Berechnung; entprechendes gilt
umgekehrt für
BIGMIN: ist der rechte Randindex einer Dateneinheit kleiner als
der BIGMIN-Index einer linken Nachbar-Dateneinheit, so kann die
Dateneinheit komplett übersprungen
werden.
-
Um
zudem sogar die Anzahl der erforderlichen Vergleiche zu reduzieren,
kann man das Ganze mit binärer
Suche realisieren.
-
Die
erfindungsgemässe
Lösung
ist nicht beschränkt
auf externe Speicherung.
-
Das
Verfahren ist für
B+-Bäume
gleichermassen anwendbar wie für
B–Bäume. Das
Verfahren ist nicht beschränkt auf
Suchbäume,
sondern kann sinngemäß auf alle
Datenstrukturen angewandt werden mit den in Anspruch 1 angegebenen
Eigenschaften, z.B. Skiplisten.
-
Das
Verfahren ist anwendbar nicht nur für eine direkte mehrdimensionale
Bereichssuche, sondern bei allen Suchaufgaben und Suchverfahren,
die zumindest teilweisse auf eine mehrdimensionale Bereichssuche
hinauslaufen oder damit realisiert werden können, beispielsweise eine Mächster-Machbar-Suche,
die man bekanntermassen durch iteratives Realisieren von Bereichssuchen,
mit wachsendem Suchbereich, realisieren kann.
-
Die
Indexberechnung kann explizit oder implizit erfolgen. Der Erfinder
arbeitet u.a. mit impliziter Darstellung von Z-indizierten (bitverzahnten)
Daten, Realisierung der BIGMIN/LITMAX-Berechnung durch entspr. Abtasten
der unverzahnten Bits. BIGMIN/LITMAX selbst sind Hilfdatensätze in normaler, unverzahnter
Repräsentation.
Realzahlen werden durch Abarbeiten des Exponenten, gefolgt von der Mantisse,
bearbeitet. Wenn negative Werte möglich sind, wird das Vorzeichenbit
invertiert betrachtet
-
Z-Codierung
und Hilbert-Codierung sind nur Beispiele. Das Prinzip der zweiseitigen
Attacke ist für alle
denkbaren Indizierungen anwendbar, vorausgesetzt man kennt ein effizientes
Berechnungsverfahren für
BIGMIN und LITMAX.
-
Durch
die Speicherung von IndexClustern nah beisammen liegender Indizes
auf den Speicherseiten und potentiell mehr als 2 Indizes mit wenigen, nicht
clusternden Werten zwischen je zwei Verweisen von inneren B-Baum-Knoten
Knoten, können
erheblich viele Zugriffe auf Speicherseiten eingespart werden. Das
Clusterkriterium kann sich dabei sowohl auf die Indizes, als auch
auf eine räumlich
gesehene Ballung beziehen.
-
Quellen:
-
- [Tr1] H. Tropf, H. Herzog: Multidimensional Range Search
in Dynamically Balanced Trees. Agewandte Informatik 2/1981, pp.
71–77.
- [Tr2] www/vision-tools.com/h-tropf
- [Or1] J. A. Orenstein: Spatial Query Processing in an Object
Oriented Database System. ACM SIGMOD Int. Conf. on Management of
Data. 1986. pp. 326–336.
- [Ba1) R. Bayer: Datenbanksystem und Verfahren zum Verwalten
eines n-dimensionalen Datenbestands. DE
19635429 .
- [La1] US Patentanmeldung US 2003/0004938A1
- R[a1] F. Ramsak, V. Markl, R. Fenk, M. Zirkel, K. Elhardt, R.
Bayer: Integrating the UB-tree into a Database System Kernel. Proc.
of 26th Int. Conference on Very Large Databases, Sept. 2000, pp.
263–272.
- [Nok] US Patentschrift US
5 848 416