-
Die
Erfindung betrifft die Verwaltung eines mehrdimensionalen Datenbestands,
speziell das Suchen darin, insbesondere mit direkter oder indirekter Durchführung einer
mehrdimensionalen Bereichsanfrage.
-
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.
-
Diese
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
Speiche rung (insbesondere Festplatten). Beliebt sind Suchbäume, weil
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 Beisiel 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
(groessergleich) als der Wert selbst. 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; 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
8+ -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
Wirt 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 [Ral], 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 Vermeidung dieser beiden Nachteile: bei baumartiger.
Datenstrukturen, insbesondere solchen mit mehreren Datensätzen je
Speicherseite, wie Bäumen
vom B-Typ, sollen möglichst
selten Knoten ohne Treffer inspiziert werden müssen. Nebenaufgabe ist es,
möglichst
wenige BIGMIN-Berechnungen durchführen zu müssen. Eine weitere Aufgabe
ist es, Hilfsmechanismen wie Hilfszeiger 9 zum Überspringen
von Datenbereichen verzichtbar zu machen.
-
Bei
hochdimensionalen Daten kann sogar die Anzahl der Wertevergleiche,
die angestellt werden müssen,
von Bedeutung sein; eine weitere Aufgabe ist es daher, die Anzahl
der durchzuführenden Wertevergleiche
zu minimieren.
-
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- Sä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 werden jedoch sowohl BIGMIN- als auch
LITMAX-Werte herangezogen. Dies steht im Gegensatz zu bekannten
Verfahren, die entweder nur mit BIGMIN [Ba1, Ra1, La1] oder fallweise,
abhängig
von der Position in der Datenstruktur, mit BIGMIN bzw. LITMAX arbeiten
[Tr1, Tr2].
-
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/LITMRX 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.
-
Die
für zumindest
einen Teil der Dateneinheiten herangezogenen BIGMIN- und LITMAX-Werte können also
entweder für
die betreffende Dateneinheit selbst oder eine andre, vorzugsweise
benachbarte Dateneinheit berechnet worden sein.
-
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 Nächster-Nachbar-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 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.
-
Nach
[Ba1] (Z-codierte Daten) wird ein mehrdimensionaler Datenwürfel wiederholt
iterativ in allen Dimensionen in Subwürfel unterteilt, bis aufeinanderfolgende
Subwürfel
zu Regionen zusammenfassbar sind, die jeweils eine Menge von Datenobjekten
beinhalten, die auf einer Speicherseite gegebener Kapazität abspeicherbar
sind.
-
Bei
dem hier vorgeschlagenen Verfahren ist weder eine Unterteilung in
Subwürfel
erforderlich (die Dateneinhei ten können beliebige mehrdimensionale Formen
haben oder aus solchen Formelementen zusammengesetzt sein). Die
Dateneinheiten müssen allgemein
lediglich Datenpunkte zwischen zwei Randindizes umfassen, entsprechend
der gerade gewählten
Indizierung. Es ist sogar grundsätzlich
möglich,
daß die
Indexbereiche von Dateneinheiten überlappen. Diese letztere Methode
kann unter Gesichtspunkten der Datenclusterung sinnvoll sein.
-
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 H-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
- [Ral] 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.