-
Die
Erfindung betrifft eine Datenstruktur für Informationsspeichersysteme,
wie zum Beispiel Datenbanksysteme. In computergestützten Datenspeichersystemen
werden Daten in einem bestimmten Medium, wie zum Beispiel einem
Speicher und einem Festplattenlaufwerk, gespeichert und daraus abgerufen.
Bei bekannten Systemen werden die Daten in einer Datenstruktur gespeichert,
wie zum Beispiel einer auf dem Relationalmodell basierenden Struktur. Obwohl
unter Verwendung der bekannten Datenspeichersysteme gespeicherte
Daten gespeichert, durchsucht und abgerufen werden können, kann
die für das
Abrufen erforderliche Zeit insbesondere im Fall komplexer Anfragen
beträchtlich
sein. Ferner ist das Konstruieren eines effizienten Datenmodells
kompliziert und deshalb kostspielig. Nachdem ein Datenbanklayout
oder Datenmodell definiert ist, lassen sich spätere Abänderungen nur schwierig implementieren und
führen
fast immer zu Leistungsverlust.
-
Um
die Ansprechzeit für
Anfragen an die Datenbank zu beschleunigen, wird häufig ein
Anfrageoptimierer verwendet, wie zum Beispiel ein auf Regeln basierender
Optimierer oder ein auf Kosten basierender Optimierer. Der auf Regeln
basierende Optimierer verwendet eine Menge vordefinierter Regeln.
Der auf Kosten basierende Optimierer verwendet statistische Informationen über die
Daten zur Strukturierung von Anfragen, indem die Selektivität jeder
Anfragekomponente geschätzt
und der Suchweg zuerst entlang den selektivsten Komponenten geführt wird.
Obwohl die Verwendung der bekannten Optimierer die mittlere Ansprechzeit
verkürzen
kann, werden Optimierer benötigt,
die jede spezifische Anfrage optimieren.
-
Gemäß dem Buch "Data Structures & Their Algorithms", ISBN 0-673-39736-X,
können
Fachleute einen weiteren Ansatz zum Speichern und Abrufen der Daten
durch Repräsentieren
der Daten durch eine Baumstruktur verwenden. Zu einer solchen Repräsentation
kann gehören,
die Daten in Teile zu zerlegen und einen Knoten des Baums mit einem
Teil zu identifizieren. Es ist zweckmäßig, für die Repräsentation eine Binärbaumstruktur
zu verwenden, weil die Binärbaumstruktur
ein schnelles Abrufen der Teile der Daten erlaubt. Ferner kann die
Binärbaumstruktur
so ausgeglichen werden, daß die
Anzahl der Ebenen unter dem Wurzelknoten klein ist und das Abrufen
der Teile wenige Schritte umfaßt.
-
Ein
Ziel der Erfindung ist die Bereitstellung eines Datenspeichersystems,
das leicht einzurichten und zu warten ist. Ein anderes Ziel ist
die Bereitstellung eines Datenspeichersystems, das ein schnelles Abrufen
von Daten erlaubt. Ein weiteres Ziel der Erfindung ist die Bereitstellung
eines Datenspeichersystems, bei dem eine Anfrage deterministisch
optimiert werden kann.
-
Diese
Aufgaben werden durch Bereitstellung eines Datenbanksystems nach
Anspruch 1 gelöst.
-
Durch
Verwendung der beanspruchten Struktur läßt sich eine Datenbank leicht
aufbauen, während
Abänderungen
leicht durchführbar
sind.
-
Ferner
stellt die Erfindung einen Anfrageoptimierer nach Anspruch 6 bereit.
Durch Bestimmung von in einem Anfrageteil zu findenden tatsächlichen Datenelementen
kann eine deterministische Analyse des tatsächlichen Anfragewegs für die spezifische Anfrage
durchgeführt
werden. Deshalb kann der beste Weg für jede Anfrage bestimmt werden,
so daß man
zu optimalen Anfragezeiten für
jede Anfrage gelangt.
-
Zusätzliche
Merkmale und Vorteile werden in der folgenden Beschreibung einer
Ausführungsform der
Erfindung ersichtlich. Vorteilhafte Varianten sind der Gegenstand
der abhängigen
Ansprüche.
-
Kurze Beschreibung
der Zeichnungen
-
1 zeigt
schematisch die hierarchische Struktur des Systems gemäß der Erfindung,
-
2 zeigt
einen Datentyp gemäß der Erfindung,
-
3 zeigt
eine InfoType-Struktur mit einem Anker und einer InfoCell,
-
4 zeigt
zwei InfoCells gemäß der Erfindung,
-
5 zeigt
ein InfoCluster mit drei InfoTypes in einer Binärbaumkonfiguration,
-
6 zeigt
ein InfoCourse als einen Binärbaum,
sortiert nach InfoType-Identifikationsnummer,
-
7 zeigt
eine Substruktur 4-dimensional verknüpfter InfoCell-Elemente mit
einer Tabelle des repräsentierten
Inhalts,
-
8 zeigt
einen Doppelverknüpfungs-Selbstring
mit Nummern (Elementzähler
des Rings),
-
9 zeigt
eine Nummer für
den Elementzähler
einer mehrdimensionalen Struktur,
-
10 zeigt
eine Tabelle als 6-dimensionale Struktur,
-
11 zeigt
kaskadierte InfoBridges,
-
12 zeigt
eine InfoBridge mit acht Flags,
-
13 zeigt
ein Beispiel für
eine Baumstruktur,
-
14 zeigt
eine Vereinfachung von 13,
-
15 zeigt
ein erstes Beispiel,
-
16 zeigt
ein zweites Beispiel,
-
17 zeigt
ein drittes Beispiel,
-
18 zeigt
das Beispiel von 17,
-
19 zeigt
das Beispiel von 17,
-
20 zeigt
das Beispiel von 17,
-
21 zeigt
ein viertes Beispiel,
-
22 zeigt
ein fünftes
Beispiel und
-
23 zeigt
ein sechstes Beispiel.
-
Ausführliche
Beschreibung
-
Im
folgenden wird ein Ausführungsbeispiel für ein Datenspeichersystem
gemäß der Erfindung beschrieben.
Die folgenden Ausführungsbeispiele der
Erfindung werden gemäß einem
relationalen Datenbankmodell implementiert. Das erfindungsgemäße System
ist nicht auf die Verwendung innerhalb der Beschränkungen
einer bekannten relationalen Datenbankarchitektur begrenzt. Es ist
jedoch möglich, die
Erfindung hauptsächlich
gemäß den Regeln
einer relationalen Datenbank zu implementieren. Die Elemente der
Erfindung sind grob folgendermaßen
in die bekannte Nomenklatur der Theorie der relationalen Datenbanken übersetzbar
(wobei die erfindungsgemäßen Definitionen
links erscheinen):
InfoSystem ← Management-System
InfoArea ← Datenbank
InfoCluster ← Tabelle
InfoType ← Attribut
InfoCourse ← Datensatz
InfoCell ← Feld
InfoBridge ← nicht verfügbar
-
Man
beachte, daß es
für die
erfindungsgemäße InfoBridge
(die im folgenden beschrieben wird) in dem Gebiet der relationalen
Datenbanken kein Gegenstück
gibt.
-
In 1 ist
ein Diagramm der statischen Hierarchie eines erfindungsgemäßen Datensystems
gezeigt. Die höchste
Ebene in dem Datensystem ist die InfoSystem-Ebene. Von der obersten Ebene aus nach
unten sind ein oder mehrere InfoAreas mit dem InfoSystem verbunden.
Das InfoSystem liefert dem System in Laufzeit die notwendigen Algorithmen
zum Betreiben des Systems. Das InfoSystem ist durch ein Verknüpfungselement,
das im folgenden als Anker beschrieben wird, mit einer beliebigen
Anzahl von InfoAreas verbunden. Diese InfoAreas können sich zum
Beispiel auf logische Einheiten des InfoSystems beziehen.
-
Jeder
InfoArea ist über
ein Verknüpfungselement
(wieder wie zuvor beschrieben ein Anker) mit einem InfoCluster verbunden.
Jedes InfoCluster ist seinerseits durch jeweilige Verknüpfungselemente wie
zum Beispiel Anker mit mindestens einem InfoCourse und mindestens
einem InfoType verbunden. Der InfoType kann als ein Attribut einer
Tabelle angesehen werden; ein InfoCourse beginnt immer in einem
InfoCluster. Wenn ein InfoCourse in einem InfoCluster mit seinen
adressierten InfoCell-Elementen bleibt,
die einem Feld einer Tabelle entsprechen, dann ist er einem Datensatz
einer Tabelle ähnlich.
-
Unter
dem InfoCourse und dem InfoType befindet sich die InfoCell; sie
ist das Element auf der niedrigsten Ebene in der hierarchischen
Struktur. Bei Erzeugung einer Instanz des InfoType wird ein Anker erzeugt,
der auch eine Instanz des Typs InfoCell ist. Dieser Anker hat die
Funktion des Repräsentierens der
Struktur der folgenden InfoCell-Elemente (siehe 2).
Wie der InfoCell-Informationsträger
besitzt der Anker sieben Zeiger, wie später erläutert werden wird.
-
Für die Implementierung
der Ebenen unter dem InfoArea, d.h. des InfoCluster, des InfoCourse, des
InfoType und der InfoCell, wird ein erfindungsgemäßes Datenelement
benutzt (siehe 2). Das Datenelement ist schematisch
als ein Anker gezeigt und ist mit einer Anzahl von Zeigern ausgestattet.
In diesem Beispiel besitzt das Datenelement drei Paare und einen
einzelnen Zeiger. In dem in 2 gezeigten
Anfangszustand zeigen alle Zeiger auf den Anker. Bei diesen Anfangszuständen handelt
es sich auch um die einfachsten möglichen Ringstrukturen. Jeder Zeiger
in der Struktur besitzt eine gültige
Adresse, und Fälle
eines nicht definierten Zeigers (Nil-Zeiger) werden vermieden.
-
Die
Zeiger des ersten Paars tragen die Bezeichnungen LVR und RVR (Links-Vertikalring
bzw. Rechts-Vertikalring),
die Zeiger des zweiten Paars tragen die Bezeichnungen LHR und RHR
(Links-Horizontalring bzw. Rechts-Horizontalring), die Zeiger des
dritten Paars tragen die Bezeichnungen LSR und RSR (Links-Selbstring
bzw. Rechts-Selbstring) und der einzelne Zeiger trägt die Bezeichnung
IF (InFormation-Brücke).
Man beachte, daß die
Zeiger LSR, RSR und IF im Prinzip optional sind.
-
7 zeigt
eine Tabelle A mit Daten bezüglich
Vornamen, Alter und Gewicht. Für
diese Tabelle wird ein InfoCluster erzeugt. Ferner werden zur Repräsentation
von Vornamen, Alter bzw. Gewicht drei InfoTypes erzeugt.
-
3 zeigt
die Verwendung des Datenelements für die Implementierung des InfoType.
Der InfoType umfaßt
semantische Informationen, wie zum Beispiel den Datentyp (in diesem
Beispiel "INTEGER"), Indikation (in
diesem Beispiel "Alter") usw. Der InfoType
ist ein mit dem InfoType assoziierter Anker. Der Anker zeigt mit
seinem RVR-Zeiger auf den eigentlichen Informationsträger, das
heißt,
die InfoCell. Die InfoCell wird oben als die Entität der niedrigsten
Ebene in dem Datensystem beschrieben. Die InfoCell hält die Informationen,
wie in 3 gezeigt; in diesem Beispiel "Alter ist 30 in INTEGER".
-
Die
InfoCell wird wie oben beschrieben mit einem LVR/RVR-Zeigerpaar
ausgestattet. Wie in 3 gezeigt, zeigt der RVR-Zeiger
der InfoCell auf den Anker, und auch der LVR-Zeiger zeigt auf den Anker.
Folglich wird die Ringkonfiguration des Ankers aufrechterhalten.
-
4 zeigt,
wie eine weitere InfoCell zu der Datenstruktur hinzugefügt wird.
Die InfoCell (mit dem Wert "25") wird nach der ersten
InfoCell in den LVR-Ring
eingefügt.
Die Zeiger LVR und RVR der InfoCell zeigen auf den Anker, um so
einen geschlossenen Ring aufrechtzuerhalten.
-
Die
Reihenfolge, in der die InfoCells organisiert werden, hängt von
ihrem Wert ab. Im Fall eines kleineren Werts wird die InfoCell auf
der LVR-Seite eingeordnet, andernfalls auf der RVR-Seite. Diese Praktik
ist in der Technik als Binärbaumaufbau
wohlbekannt. Vorzugsweise werden die Binärbäume als ausgeglichene oder
AVL-Bäume
organisiert, wobei diese Verfahren in der Technik wohlbekannt sind. Diese
Arten von Bäumen
minimieren die Anzahl von Ebenen in der Baumstruktur, um so die
Zugriffszeit zu minimieren. Vorzugsweise werden alle Baumstrukturen
in dem Datensystem bei der Benutzung dynamisch ausgeglichen, um
so optimale Zugriffszeiten zu garantieren.
-
5 zeigt
die Struktur, die erhalten wird, wenn alle InfoTypes der Tabelle
A in der Datenstruktur abgelegt werden. Es liegen insgesamt drei
InfoTypes vor; Alter, Vorname und Gewicht. Man beachte, daß die Endzeiger
des letzten Elements in den jeweiligen Bäumen nicht gezeigt sind. Unter
jedem Anker des InfoType werden die InfoCells in einem Binärbaum organisiert.
Das InfoCluster zeigt auf einen Anker, der seinerseits auf einen
ersten InfoType zeigt. Der erste InfoType zeigt seinerseits auf
die anderen beiden InfoTypes. Jeder InfoType zeigt auf einen Anker.
Der Anker hat die zusätzliche
Funktion einer Markierung, die von einem Zugriffs- oder Anfrageprozeß als Break-
oder Return-Zeichen
verwendet werden kann.
-
Um
die Implementierung der Tabelle zu vervollständigen, müssen die Relationen zwischen
dem InfoType hergestellt werden. Zu diesem Zweck wird ein InfoCourse
eingeführt. 6 zeigt
den InfoCourse, der die Daten für
die vierte Zeile der Tabelle enthält. Es werden LHR- und RHR-Zeiger
verwendet. Die Endzeiger zeigen wieder zurück auf den Anker des InfoCourse,
um die Ringstruktur aufrechtzuerhalten. Man beachte, daß der InfoCourse
auch einen Binärbaum
bildet, der nach den ID-Nummern der InfoTypes sortiert ist. Man
beachte, daß die
ID-Nummern der InfoTypes eindeutig sind und daß ganzzahlige Werte verwendet
werden.
-
7 zeigt
alle InfoCourse-Wege (zum Beispiel unter Verwendung von Zeigern
implementiert) für
Tabelle A. Man beachte, daß alle
InfoCells in dem oberen Teil mit ihrer jeweiligen InfoType-Id-Nummer versehen
wurden, worüber
die Binärbaumkonfiguration
des InfoCourse über
die LHR/RVR-Zeiger organisiert wird.
-
Wenn
während
des Aufbaus eines Baums für einen
InfoType die Instanz einer InfoCell mehrmals auftritt, wird der
folgende Mechanismus benutzt, um zu vermeiden, daß mehr als
einmal in der Baumstruktur ähnliche
Instanzen auftreten. In 9 ist der Fall gezeigt, daß der Vorname
Bob dreimal auftritt und der Name Alex zweimal auftritt. Mittels
des LSR/RSR-Zeigerpaars werden im Ringverfahren nachfolgende mehrfache
Einträge
hinzugefügt,
was in diesem Kontext als Selbstring bezeichnet wird, da der Ring
in der Elementebene der Datenstruktur bleibt. Das zuletzt hinzugefügte Element
wird zu dem Master-Element des Rings; das Master-Element ist Teil
der Baumstruktur. Wie gezeigt wird in dem unteren Teil jedes Elements
die tatsächliche
Gesamtzahl der Elemente in einem Ring in dem Master-Element gespeichert.
Die anderen, älteren
Elemente haben historischen Wert (d.h. niedrigeren Wert), da diese Werte
während
des Einfügens
eines neuen Elements in den Ring nicht aktualisiert werden. Dies
hat den praktischen Vorteil, daß die
Zahl anzeigt, ob das Element älter
oder jünger
in dem Ring ist. Dies ist beim Navigieren durch den Ring hilfreich,
insbesondere da in der Praxis auf jüngere Daten häufiger zugegriffen wird.
Wenn ein Element einen Ringwert von 0 besitzt, ist dies eine Anzeige,
daß um
dieses Element herum kein Selbstring gebildet wird, siehe auch 8.
Diese Informationen können
zur Beschleunigung von Suchanfragen verwendet werden.
-
Ein
weiteres Merkmal ist ferner, daß jeder
InfoCell ein Elementzähler
zugeordnet wird. Der Elementzähler
ist in 9 in der neben den Elementen angegebenen Box angezeigt.
Der Elementzähler
ist als der Gesamtwert der Anzahl der Elemente definiert, die über die
Zeiger LVR/RVR und LSR/RSR erreicht werden können, das heißt, die
Anzahl der Elemente in dem (etwaigen) Selbstring, plus die Anzahl der
Elemente in dem Baum unter dem jeweiligen Element. Die Anzahl der
Elemente in dem Selbstring ist bereits in dem Master-Element selbst
bekannt, und die unterhalb in dem Baum gelegenen Elemente folgen
einfach aus dem Elementzähler
der Elemente, auf die die Zeiger LVR und RVR zeigen. Im Prinzip
ist es nicht notwendig, tatsächlich
durch den Baum zu gehen, um die Anzahl relevanter Elemente zu bestimmen.
Die Bestimmung des Elementzählers
sowie des Selbstring-Elementzählers
erfolgt zu Anfang während
des Mountens der Datenstruktur, und auch wenn Elemente hinzugefügt oder
gelöscht
werden. Folglich repräsentiert
der Elementzähler
die potentielle Anzahl der Elemente, die in einer potentiellen Suche über dieses
Element durchsucht werden müssen,
bzw. die notwendigen Betriebsmittel für eine solche Suche. Obwohl
es im Prinzip ausreicht, nur einen einzigen gerichteten Zeigerselbstring
zu verwenden, hat es zusätzliche
Vorteile, einen bidirektionalen Zeigerring zu verwenden.
-
10 zeigt
eine Tabelle B als 6-dimensionale Struktur. Für jeden Knoten sind alle Zähler und Identifikationszahlen
gezeigt. Ankerelemente und Zeiger, die mit den Ankern assoziiert
sind (wie zum Beispiel die Zeiger, die die geschlossene Schleifenstruktur
bilden), sind nicht gezeigt.
-
Die
Struktur des InfoType kann die Funktionalität einer zuvor definierten Menge
besitzen, so daß Elemente
in dem InfoType-Baum erscheinen können, die in keinem InfoCourse
enthalten sind. Falls ein Element in einem InfoType-Baum nicht von mehr
als einem InfoCourse benötigt
wird, wird bevorzugt, für
jeden InfoCourse zusätzliche
InfoType-Strukturen zu erstellen, so daß die Struktur definit bleibt.
Der Zeiger IF des Datenelements gemäß der Erfindung kann für jede Instanz
eines beliebigen Objekttyps verwendet werden. Der Zeiger IF kann
auf eine beliebige Art von Instanz zeigen; die Art der Instanz,
auf die er zeigt, kann aus dem Kontext oder einem Indikator bestimmt
werden. Dabei kann es sich zum Beispiel um eine Liste von Flags
(siehe 12) oder zum Beispiel um einen
Konditionengraph (aus der Theorie bekannt) für jeden Knoten handeln. Der Zeiger
ist effizienter, da er nicht so viele Bit erfordert, während ein
Konditionengraph die Vorteile hat, daß er die Aufnahme semantischer
Informationen zur Erweiterung der Datenstruktur bietet.
-
Unter
Verwendung des IF-Zeigers lassen sich Verbindungen zu anderen Instanzen
herstellen; dies kann zum Beispiel über eine InfoBridge geschehen.
Eine erfindungsgemäße InfoBridge
ist ein Verbindungselement, das wie ein Y-Adapter aussieht und kaskadiert
werden kann (11). Wahlweise kann die InfoBridge
bidirektional sein, so daß jedes beliebige
Netzwerk über
die Grundstruktur repräsentiert
werden kann.
-
Der
Zeiger IF hat eine weitere Anwendung. Operationen in einer Datenstruktur ändern im
ganzen gesehen viele Datenelemente auf einmal. Auf der Mikroebene
finden jedoch alle Änderungen
sequentiell statt. Zum Beispiel wird eine Operation mit einer Commit-Arbeit
oder einem Rollback ausgeführt
(diese Operationen sind aus dem System SAP R/3 bekannt). Das heißt, daß sowohl
der ursprüngliche
(unveränderte)
Wert als auch der Zielveränderte)
Wert vorübergehend
im Speicher gehalten werden müssen,
bis die Transaktion vollständig
abgeschlossen wurde. Mit einer InfoBridge kann man beide Werte miteinander
verbinden. 12 zeigt ein Beispiel. Die obere
InfoBridge verbindet zwei InfoCells miteinander. Durch Hinzufügen einer
InfoBridge wird alle Funktionalität behalten und kann, wie durch
die schraffierte InfoBridge in 12 gezeigt,
durch eine Kaskade ergänzt
werden.
-
Obwohl
nur ein Verbinder mit einer Y-Konfiguration gezeigt ist, kann man
andere Konfigurationen verwenden, zum Beispiel mit mehr als drei
Verbindungen.
-
Obwohl
in den gezeigten Beispielen der InfoCourse eine Datensatzdefinition
betrifft, die in einer Tabelle ausgedrückt wird, ist die Verwendung
eines InfoCourse nicht darauf beschränkt. Ein InfoCourse kann sich
zum Beispiel über
unbegrenzte InfoTypes verschiedener InfoClusters oder sogar InfoAreas
erstrecken. Auf diese Weise ist es auch möglich, Referenzintegrität sicherzustellen.
Zum Beispiel ist es nicht notwendig, Werte einer Testtabelle in
die Anwendungstabelle zu kopieren (so wie es für bekannte Datenbanken üblich ist).
Stattdessen wird der jeweiligen InfoCell als Wert ein Zeiger auf
die InfoCell des InfoClusters gegeben, das als die Testtabelle verwendet
wird.
-
Zur
Bestimmung der Anfrageroute, die die kürzeste geschätzte Laufzeit
besitzt, werden Anfrageoptimierer verwendet.
-
Die
Implementierung des oben beschriebenen Systems kann unter Verwendung
beliebiger bekannter und geeigneter Verfahren und Programmiersprachen
erfolgen. Es ist hilfreich, wenn die Sprache der Implementierung
Zeiger unterstützt.
Auch ist es hilfreich, wenn die Programmiersprache objektorientiert
ist, obwohl dies nicht wesentlich ist. Für die meisten Implementierungen
wären Zusatzsteuerstrukturen
notwendig, die temporäre
Elemente umfassen. Solche Implementierungseinzelheiten sind jedoch bekannt
und liegen im Kenntnisbereich von Fachleuten. Eine experimentelle
Implementierung der Erfindung wurde in C++ programmiert, wobei diese
Sprache die zusätzlichen
Vorteile der Verfügbarkeit
von Zeigern, Objekten und Objektklassen besitzt.
-
Die
Erfindung kann insbesondere in einem Direktzugriffsspeicher (RAM)
implementiert werden, wobei direkt auf die Adressen zugegriffen
werden kann. Die Verwendung eines Direktzugriffsspeichers hat außerdem den
Vorteil, daß Änderungen
an der Datenstruktur die Effizienz auf keinerlei Weise beeinflussen.
Obwohl die Erfindung vorzugsweise in einem Direktzugriffsspeicher
implementiert wird, ist die Implementierung nicht auf diese Form
beschränkt und
es sind andere Implementierungen in Speichereinrichtungen möglich.
-
Beispiele
-
In
den folgenden Beispielen wird gezeigt, wie der Zugriff auf InfoCells
stattfindet. Für
die Beispiele werden nur InfoCells benutzt, die zu einem InfoType gehören. Eine
solche Struktur, die Teil eines größeren Datensatzes ist, ist
in 13 gezeigt.
-
Um
auf ein Datenelement in der Struktur zuzugreifen, wird die Ringzeigerstruktur
verwendet, einschließlich
der Zeiger, die zu einem Ring zurückführen (LVR/RVR) und Selbstringe.
In 13 werden die Zeiger durch kleine Ankersymbole
dargestellt. In 14 ist die Struktur von 13 gezeigt,
einschließlich
der Relationen der Binärbaumstruktur,
die der Struktur von 13 zugrundeliegt, für den Fall, daß keine
mehrfachen identischen Elemente angenommen werden. Im folgenden
werden mehrere Beispiele für
Suchanfragen gezeigt.
-
Beispiel 1: Anfrage (Schlüssel = 54)
-
Das
Ziel ist das Finden eines Datenelements mit Schlüssel 54. Die Suche beginnt
an der Position 1 (Pfeil mit 1 in 15), die
kurz nach dem in 13 gezeigten Anker kommt. Danach
ist die Suche einer Suche in einem Binärbaum ähnlich, und die InfoCells werden
der Reihe nach besucht, d.h. es wird in dem Baum abgestiegen, wobei
die aufeinanderfolgenden InfoCells durch Pfeile 1 bis 5 angezeigt
sind. Mit 5 wird das jeweilige Element gefunden.
-
Diese
InfoCell ist wie andere InfoCells mit einem Zeigerpaar LHR und RHR
ausgestattet. Von der InfoCell aus können benachbarte semantische
Informationen des InfoCourse beschafft werden. Da die InfoCourse-Zeiger
ebenfalls als ein Ringbaum organisiert sind, kann immer der Startanker
des InfoCourse erreicht werden. Von diesem Startanker aus kann jedes
Element in der InfoCourse-Struktur erreicht werden. Um die Leistung
weiter zu verbessern, kann man zusätzliche Zeiger zu jeder InfoCell
hinzufügen,
die direkt auf diesen InfoCourse-Anker zeigen. Die Verwendung dieses
Zeigers ist nicht notwendig, um vollständig den InfoCourse-Baum zu
durchlaufen, um diesen Anker zu erreichen.
-
Um
einen Wert einzufügen
(zum Beispiel 53, wie in 15 bei
6 gezeigt), wird dasselbe Verfahren wie oben beschrieben verwendet,
um Punkt 6 zu erreichen, wo die neue InfoCell hinzugefügt wird.
Nach dem Hinzufügen
der InfoCell kann der Binärbaum
gegebenenfalls neu sortiert werden, um ihn auszugleichen. Solche
Umsortierverfahren sind in der Technik wohlbekannt.
-
Beispiel 2: Anfrage (Schlüssel < 20)
-
In
diesem Beispiel besteht die Anfrage darin, die schraffierte Teilmenge
des Baums (16) zu finden, die die Bedingung
Schlüssel < 20 erfüllt. Wieder
wird die Suche an der Position 1 gestartet und es wird dem Baum
nach unten gefolgt (wie zuvor unter Verwendung bekannter Techniken),
um zu der Position 3 zu gelangen. Hier ist zu bemerken, daß aufgrund
der Struktur des Baums alle Elemente unterhalb dieses Endes des
Baums die Bedingung erfüllen.
Die Elementzahl in diesem Teil des Baums ist bekannt (ohne daß der untere
Teil des Baums durchsucht werden muß), da die InfoCell 10 mit
einer Anzeige des Elementzählers
(X1) ausgestattet ist, die genau angibt, wie viele Elemente in diesem
Teil des Baums folgen.
-
Beispiel 3: Anfrage (Schlüssel < 28)
-
In
diesem Beispiel (17) ist gezeigt, wie für eine Suche
in der Datenbankstruktur eine Anzahl von Treffern bestimmt werden
kann.
-
Die
Suche in dem Baum beginnt mit Position 1 und führt zu Position 2, an der das
Anfragekriterium erfüllt
ist. Der Elementzähler
x1 kann jedoch nicht direkt verwendet werden, da auch Zellen enthalten sind,
die das Kriterium nicht erfüllen
(d.h. 30 und 35). Es wird dem Weg von Position 2 aus zu Position
3 gefolgt (18), wo der Elementzähler y1
gefunden wird. von dieser Position aus führt der Weg weiter zu Position
4, wo der Elementzähler
x2 gefunden wird (19). Nun ist die Suche abgeschlossen
und die genaue Anzahl der Treffer für den Anfrageschlüssel (<28) kann durch jeweilige
Addition und Subtraktion der gefundenen Elementzähler x1, y1 und x2 berechnet
werden (20), um die Anzahl der Zellen
in dem schraffierten Bereich zu erhalten, der die Zielgruppe von
Zellen repräsentiert.
Man beachte, daß mit
einer relativ kleinen Anzahl von Schritten einen Weg herunter in
der Baumstruktur die Anzahl der Treffer, die die Anfrage ergibt,
deterministisch bestimmt ist, so daß sich eine exakte Anzahl von
Zellen ergibt.
-
Auf
der Basis der Informationen der Anzahl der Treffer für eine gegebene
Anfrage kann der Suchoptimierer auf der Basis von wirklichen Tatsachen einen
Suchplan erstellen.
-
Beispiel 4: Anfrage (Schlüssel > 10)
-
In 21 ist
dieselbe logische Analyse wie für
Beispiel 3 für
ein weiteres Beispiel gezeigt, mit einem Anfrageschlüssel >10. Die Suche beginnt
mit Position 1, die sofort die ersten Ergebnisse in Form des schraffierten
Bereichs ergibt. Die Suche gelangt dann zu der Position 2, wo der
zweite schraffierte Bereich bestimmt wird. Die Suche endet dann
mit Position 3. Alle Zellen in dem rechten Weg müssen berücksichtigt werden (mit Ausnahme
von Zelle 10 in Position 3 selbst). Wäre der Schlüssel >= gewesen, hätte auch diese Zelle berücksichtigt
werden müssen.
-
Die
Anzahl der Treffer wird genauso wie in den vorherigen Beispielen
bestimmt, d.h. durch Addieren und Subtrahieren von Elementzählern abhängig davon,
ob sie berücksichtigt
werden sollen oder nicht.
-
Beispiel 5: Anfrage (Schlüssel zwischen
24 und 54)
-
In 22 ist
eine Anfrage gezeigt, die zwei Suchen durch die Baumstruktur erfordert,
um die Anzahl der Treffer zu bestimmen. Es wird bei 40 in den Baum
eingetreten, so daß sowohl
linke als auch rechte Zweige durchsucht werden müssen, genauer gesagt der linke
Zweig mit dem unteren Wert 24 und der rechte Zweig mit dem oberen
Wert 54. Als Ergebnis wird die eingekreiste Menge von Zellen, die
die Kriterien der Anfrage erfüllen,
identifiziert.
-
Als
Alternative könnte
die Anfrage in zwei Elementanfragen (Schlüssel >= 24 und Schlüssel <= 54) aufgeteilt werden, das Ergebnis
bliebe aber gleich.
-
Beispiel 6: Optimierung
des Zugangswegs
-
In
diesem Beispiel ist eine komplexere Suche gezeigt, sowie ein Optimierungsverfahren,
das die gerade beschriebenen Verfahren der Bestimmung der Anzahl
der Treffer für
eine spezifische Anfrage benutzt.
-
Das
Beispiel besitzt das folgende zusammengesetzte Anfragekriterium:
Schlüssel_1 < 28 und Schlüssel_2 >= Wert_2 und Schlüssel_3 < Wert_3
-
Um
eine solche komplexe Anweisung auszuführen, bestimmt der erfindungsgemäße Optimierer, wie
viele Treffer in jedem Teil der Anfrage erhalten werden. Auf der
Basis der Anzahl der Treffer verarbeitet der Optimierer Anfrageteile
mit der kleinsten Trefferzahl zuerst und die mit höheren Trefferzahlen später.
-
Um
die Anzahl der Treffer für
jeden Teil der Anfrage zu bestimmen, muß der Baum für jeden
Teil einmal durchsucht werden, wie in dem obigen Beispiel gezeigt.
-
Als
Alternative ist es möglich,
die Startadressen von Knoten in dem Baum, die bereits gefunden wurden,
zu speichern. Auf der Basis der Informationen, die diese Startadressen
enthalten (wie zum Beispiel Elementzähler), müssen Teile des Baums nicht nach
einem untergeordneten Teil der Anfrage durchsucht werden, da er
aus bereits gespeicherten Informationen deduziert werden kann.
-
Der
erste Teil der Anfrage stimmt mit dem in 17 gezeigten
Beispiel überein.
Wenn in diesem Beispiel Position 2 erreicht wird, wird eine temporäre Instanz
eines Objekts des Typs Guide erstellt, die die Adresse von Position
2 speichert. Ferner wird ein Iterationswert It erstellt (ähnlich wie
bei 23), der die Anzahl tatsächlicher gültiger Zellen in einem Subbaum
speichert. Dieser Wert It kann später als Endekriterium für einen
Algorithmus zum Durchqueren des Subbaums verwendet werden. Dies
erspart den Vergleich des Suchkriteriums mit den Zellenwerten, da
das Endekriterium nach Besuchen aller gültigen Zellen in dem Baumteil
erreicht wird. Da It vom Integer-Typ ist, ist der Vergleich schneller
als ein Vergleich des tatsächlichen
Werts einer Zelle, wobei es sich bei dieser Zelle um eine lange
Zeichenkette handeln könnte.
-
Aus 19,
Position 4 (25), ist klar, daß ein weiterer
Subbaum existiert, der durchquert werden muß, wenn das Kriterium (Schlüssel_1 < 28) später von
dem Optimierer als das erste verwendet wird.
-
Zu
diesem Zweck wird ein weiterer Guide eingeführt, der die Startadresse der
Zelle 25 und den Iterationswert It, der in diesem Fall x2 ähnlicht
ist, speichert.
-
Bei
sehr extensiven Baumstrukturen können während einer
Durchquerung mehrere Subbäume, die
gültige
Treffer enthalten, identifiziert werden. Für jedes oberste Element eines
solchen Subbaums wird ein Guide erstellt, der die Startadresse des
It-Werts des Elements enthält.
Alle Guides bilden eine Verbund-Linearliste, die zu dem jeweiligen
Kriterium hinzugefügt
wird.
-
Nachdem
alle Teile der AND-Kette nach ihrer Trefferzahl (M) durchsucht wurden
und der Optimierer den Teil des Auswahlkriteriums gewählt hat,
der die kleinste Anzahl von Treffern aufweist, kann der Optimierer
die Linearliste der Guides zum direkten Zugriff auf die Bäume mit
gültigen
Zellen benutzen. Man beachte, daß die Linearlisten für die anderen Teile
des Kriteriums verworfen werden, dies aber nicht zu vergrößerter Verarbeitungszeit
führt.
-
Der
erfindungsgemäße Optimierer
bestimmt den Suchweg auf der Basis der exakten Bestimmung der Anzahl
der Treffer, die mit jeweiligen Teilen eines Suchkriteriums erhalten
werden. Auf diese Weise ergibt die Bestimmung des Suchweges immer
die optimalste Wahl.