DE10104831A1 - Datenstruktur für Informationssysteme - Google Patents
Datenstruktur für InformationssystemeInfo
- Publication number
- DE10104831A1 DE10104831A1 DE10104831A DE10104831A DE10104831A1 DE 10104831 A1 DE10104831 A1 DE 10104831A1 DE 10104831 A DE10104831 A DE 10104831A DE 10104831 A DE10104831 A DE 10104831A DE 10104831 A1 DE10104831 A1 DE 10104831A1
- Authority
- DE
- Germany
- Prior art keywords
- data
- ring
- node
- infocell
- tree
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
- G06F16/24542—Plan optimisation
- G06F16/24545—Selectivity estimation or determination
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99931—Database or file accessing
- Y10S707/99933—Query processing, i.e. searching
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99941—Database schema or data structure
- Y10S707/99942—Manipulating data structure, e.g. compression, compaction, compilation
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99941—Database schema or data structure
- Y10S707/99943—Generating database or data structure, e.g. via user interface
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Operations Research (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Hardware Redundancy (AREA)
- Circuits Of Receivers In General (AREA)
Abstract
Beschrieben wird eine mehrdimensionale Datenstruktur mit optimierenden Algorithmen für einen schnellen Zugriff für Datenbankanwendungen. Die Datenstruktur eignet sich für Speichermedien mit wahlfreiem Zugriff (z. B. RAM) und beseitigt die Beschränkungen von Indexverwaltungen und Datenmodellen. Indizes gibt es nicht, denn die Daten selbst liefern in ihrer Organisationsform die benötigten Eigenschaften.
Description
Die Erfindung bezieht sich auf das Speichern und Abfragen von
Information in wahlfreien Speichermedien, insbesondere für
Datenbanken.
Insbesondere durch den Einsatz des Internets ergeben sich an
kommerziell genutzte Softwarekomponenten erweiterte
Anforderungen. Datenverarbeitung findet in zunehmendem Maße über
die Grenzen eines einzelnen Unternehmens statt. Damit befinden
sich zwangsläufig heterogene Systemlandschaften in einem
Kommunikationsverbund. Verschiedene Anwendungen eines
Herstellers haben in der Regel bei dem Zusammenwirken weniger
Probleme, weil funktionale Schnittstellen aufeinander abgestimmt
sind oder die selben Datenformate auf Speichermedien verwendet
werden. Die Verbindung von Produkten verschiedener
Softwarehersteller ist nur dann möglich, wenn die
Partnerprogramme entweder über gleich definierte funktionale
Schnittstellen oder über eine gleich strukturierte Datenbasis
verfügen, die dann als Kommunikationsschnittstelle dient. Große
integrierte Softwarepakete benutzen meistens auch intern eine
solche Datenbasis, um die Integration aller beteiligten Module
zu erreichen. Relationale Datenbanken sind momentan der Stand
der Technik, um in der Regel diese Anforderungen abzudecken.
Der Nachteil dieser Datenbanken, ist die Beschränkung das
relationalen Modells, das diesen Anwendungen zu Grunde liegt. Es
ist abgestimmt auf die Semantik der beabsichtigten Programme.
Neue Funktionen mit anderer Modellsicht können nur schwer in ein
vorhandenes Modell eingebunden werden. Der Grund dafür ist, daß
ein Modell in der Umsetzung in eine konkrete Implementation mit
Indizes arbeitet, die ein schnelles Auffinden von gespeicherter
Information ermöglichen. Diese Indizierung ist abgestimmt auf
die vorhandenen Funktionen und paßt oft nicht mit den neuen
Anforderungen zusammen, so daß Einbußen bei der Performance
eines Systems die Folgen sind.
Ein relationales Datenmodell abstrahiert einen Ausschnitt der
realen Welt zur Lösung definierter Aufgabenstellungen in der
Informationstechnologie. Dabei müssen alle Anforderungen an das
Modell, die durch die anschließende Programmierung von
Anwendungen genau bestimmt werden, bereits zum Zeitpunkt der
Modellbildung bekannt sein, um ein zeitlich effizientes
Verhalten des Gesamtsystems zu gewährleisten.
Wenn Programm und Datenmodell nicht zusammenpassen sind aus
Sicht der Performance ungünstige Datenbankanfragen die
Konsequenz. In der Praxis gibt es zwei Gründe dafür. Zum einen
konnten bei der Modellbildung noch nicht alle zukünftigen
Anforderungen formuliert werden, so daß eine spätere Ausweitung
von Problemstellungen und deren Lösung durch Programme (z. B.
SQL) sich im Datenmodell nur unzureichend widerspiegelt. Das
Datenmodell ist damit veraltet und paßt nicht mehr richtig zur
Aufgabenstellung. Zum anderen liegt die Ursache in dem zu
oberflächlichen Wissen der Programmierer, deren Kenntnis sich
auf das formale Beherrschen der Syntax einer Programmiersprache
beschränkt ohne die Auswirkungen von ungünstig formulierten SQL-
Statements abschätzen zu können. Erfahrungen aus der Praxis
haben gezeigt, daß Anwendungsprogrammierer syntaktisch korrekte
Programme erstellen, die funktional das richtige Ergebnis
liefern. Aber aus dem Blickwinkel der Performance sind solche
Programme häufig unzureichend, weil das vorhandene Datenmodell
beim Programmentwurf unberücksichtigt geblieben ist.
Dieses Problem läßt sich durch eine Anpassung des Datenmodells
lösen, was aber insbesondere bei großen Installationen nur einen
theoretischen Charakter hat oder man versucht die Programme
durch eine geschickte "Umformulierung teurer Datenbankanfragen"
zu ändern. Eine weitere Möglichkeit ist das Anlegen von
Sekundärindizes, um das Datenmodell auf diese Weise an die neuen
Anforderungen anzupassen. Letzteres ist in der Praxis die
bevorzugte Methode, da ein Neudesign des Datenmodells auch
umfangreiche Änderungen an bestehenden Programmen zur Folge
hätte und dieser Aufwand normalerweise schon aus Kosten- und
Zeitgründen nicht vertretbar ist.
Sekundärindizes sind nachträglich definierte Kombinationen von
Tabellenfeldern als Schlüssel, die immer dann zum Einsatz
gelangen, wenn Anwendungsprogramme eine Sicht auf den
Datenbestand erforderlich machen, die nicht durch den
Primärindex (oder ein Teil davon) abgedeckt ist. Ein
Sekundärindex ist streng genommen immer ein Hinweis auf einen
Entwurfsfehler bei dem zugrundeliegenden relationalen Modell
oder die Folge von neuen, bislang unberücksichtigten
Anforderungen durch Programme an das Datenmodell.
Sekundärindizes können allerdings nur begrenzt zur Behebung der
eben genannten Problematik beitragen, da jeder zusätzlich
definierte Sekundärindex die Leistungsfähigkeit (Performance)
aller Zugriffe auf eine betroffene Tabelle negativ beeinflußt.
Dies liegt an dem erhöhten Pflegeaufwand zusätzlicher
Verwaltungsstrukturen durch das System, insbesondere beim
Einfügen und Löschen von Daten in die betroffene Tabelle.
Ein optimaler Zugriff auf den Datenbestand ist unter zeitlichen
Aspekten immer dann gegeben, wenn in einer Anfrage der
Primärindex (oder ein Teil davon) verwendet werden kann, der in
der Regel einen Datensatz identifiziert. Da
Magnetplattenspeicher in den meisten Fällen für eine dauerhafte
Datenhaltung sorgen und dieses Speichermedium physikalisch
gesehen ein sequentielles Speichermedium ist, wird der
Primärindex auch dafür verwendet, die Datensätze einer Tabelle
nach diesem Kriterium sortiert dort abzuspeichern.
Der zeitlich ungünstigste Fall einer Datenbankoperation liegt
dann vor, wenn kein Index benutzt wird. Dies kann beispielsweise
vorkommen, wenn ein Attribut als Schlüssel in einem Programm
verwendet wird, für das kein Index vorhanden ist. In diesem Fall
ist ein sogenannter "Full-Table-Scan" die Folge, bei dem
alle Inhalte des betreffenden Attributs der Tabelle gelesen und
mit dem Schlüsselwert verglichen werden müssen.
Als weitere Schwachstelle bei Datenbanksystemen stellt sich oft
die Bestimmung des Zugriffspfads heraus. Datensätze werden in
der Regel über formulierte Bedingungen selektiert. Dabei werden
einzelnen Attributen einschränkende logische Ausdrücke
zugeordnet. Nur die Datensätze, die diesen Bedingungen
entsprechen, sollen selektiert werden. Dabei gibt es oft mehrere
Möglichkeiten, wie das Ergebnis erzeugt werden kann. Das Ziel
eines optimierenden Zugriffssystems ist es immer, einen unter
Performancegesichtspunkten günstigen Einstieg in die
Datensammlung zu finden. Dabei spielt die Selektivität eines
Attributs eine entscheidende Rolle. Je selektiver ein Attribut
ist, um so wahrscheinlicher ist es, daß die erzeugte
Zwischenergebnismenge klein bleibt, auf die dann eine weiter
Bedingung angewendet werden kann, um die Zwischenergebnismenge
wiederum einzuschränken. Die endgültige Ergebnismenge der
selektierten Datensätze liegt vor, wenn alle Bedingungen dafür
erfüllt sind. Der Nachteil üblicher optimierender Verfahren ist
in der Tatsache begründet, daß eine exakte Treffermenge für ein
Attribut mit einer konkreten Bedingung nicht vor dem
eigentlichen Zugriff bestimmt werden kann. Es werden auf Regeln
oder Wahrscheinlichkeitsrechnung gestützte Verfahren eingesetzt,
die für eine konkrete Konstellation einer Anfrage oft gar nicht
einen optimalen Zugriffspfad ermitteln.
Mit den im folgenden beschrieben Ringstrukturen im Zusammenspiel
mit den Zugriffsalgorithmen wird eine Implementation eines
Datenmodells erreicht, bei der die semantische Funktion des
Datenmodells erhalten bleibt und die bei Datenbanken typischen
Einschränkungen einer Indexverwaltung wegfallen. Indizes gibt es
nicht und auch die Sichtweise einer herkömmlichen relationalen
Datenbank ist nicht anwendbar. Wie später gezeigt wird, geht die
Struktur über den relationalen Ansatz hinaus. Relationale
Datenbanken sind aber stark verbreitet und diese Ringstrukturen
sind auch in der Lage ein relationales Modell (als Untermenge
weitaus komplexerer Modelle) abzubilden. Deshalb wird so oft wie
möglich die Analogie zu diesen Datenbanken hergestellt und auch
in den Beispielen verwendet.
Das Atom der Informatik ist bis heute das Bit. Aus der Sicht
einer Software-Anwendung ist ein Atom eher die kleinste
Informationseinheit, also etwa eine Variable mit einem Wert oder
ein Feld einer Tabelle. Diese Sichtweise wird für das folgende
Design gewählt. Objektorientierte Programmiersprachen, wie
beispielsweise C++, unterstützen dabei diese Sichtweise bei
einer Implementation erheblich. Für den Aufbau der Struktur wird
das Atom als InfoCell bezeichnet und ist in der implementierten
Version ein strukturierter (zusammengesetzter) Datentyp. Neben
der eigentlichen Information, den eine InfoCell aufnehmen kann
(ein Wert der möglichen Datentypen der gewählten
Programmiersprache oder ein Pointer, sozusagen als "Nutzlast"),
gibt es mehrere Zeiger (Pointer), die auf andere Elemente zeigen
können. Damit lassen sich semantische Zusammenhänge erzeugen.
Eine Person hat einen Vornamen und einen Nachnamen. Erst die
Verknüpfung beider InfoCells über Pointer erzeugt beispielsweise
die Semantik und kennzeichnet damit die betreffende Person.
Ein Datenmodell einer Datenbank würde mit einer
Tabellendefinition diese Semantik bereits implizit liefern. Dazu
wären dann auch gleich noch die Schlüssel vereinbart, mit denen
auf die Informationen zugegriffen werden soll und das ganze
ließe sich zur Laufzeit nicht mehr so leicht ändern. Nicht so in
diesem Fall. Eine Semantik läßt sich auch später noch erzeugen
(dynamisch), indem beliebige InfoCells (oder andere
Strukturelemente, die später beschrieben werden) miteinander
verbunden werden können. Bezogen auf die Datenstruktur bedeutet
das, daß Verbindungen zu beliebigen anderen InfoCells jederzeit
hergestellt werden können. Damit lassen sich im Endeffekt sogar
mehrere Datenmodelle verschiedener Anwendungen logisch
übereinander legen, die eine gleiche Teilmenge an Information
benötigen.
Damit ein initialer Zustand in einem Informationsmodell erreicht
werden kann, soll es eine Basisstruktur geben. Nach einer
definierten Vorgabe müssen die Daten beim ersten Auftreten im
Speicher mit Pointern versehen werden, die dann beliebig
erweitert werden können. Informationen liegen auch in den
wenigsten Fällen in atomarer Form ohne semantischen Zusammenhang
vor. Diese Semantik wird benutzt, um die Algorithmen anzustoßen,
die eine erste Ausprägung der Speicherstruktur vornehmen. Danach
kann die Struktur entsprechend einer weiteren Semantik beliebig
ergänzt werden. Für einen Aufbau dieser Basisstruktur eignet
sich beispielsweise auch eine Strukturinformation des Data
Dictionarys einer relationalen Datenbank. Die Beispiele zeigen
deshalb zuerst, wie die Strukturen einer relationalen Datenbank
abgebildet werden können. Anschließend werden dann die
Erweiterungen gezeigt, die über das relationale Modell
hinausgehen, um beliebige semantische Zusammenhänge abzubilden.
Die Ringstrukturen werden hier schrittweise entwickelt, um die
Arbeitsweise besser nachvollziehen zu können. Dabei werden die
Strukturen nach Möglichkeit auf die in der Informatik bekannten
Grundstrukturen reduziert, um die Verständlichkeit zu erhöhen.
Dabei haben die reduzierten Strukturen in den Abbildungen zum
Teil exemplarischen Wert, um die Herleitung der gesamten
Struktur transparenter zu gestalten. Die gewünschte
Funktionalität ist erst in dem Zusammenspiel bei der vollständig
ausgebauten Struktur vorhanden.
Nach der Herleitung der Basisstruktur wird in verschiedenen
Beispielen die Arbeitsweise der Algorithmen für primitive
Zugriffe gezeigt. Dabei spielen Kennzahlen eine entscheidende
Rolle, die für die Optimierung des Zugriffs benutzt werden. Im
Gegensatz zum Stand der Technik, kann eine exakte Berechnung der
Treffermengen für jede Bedingung erfolgen, so daß ein
Optimierungsalgorithmus alle Informationen erhält, um daraus den
günstigsten Pfad für einen Zugriff zu berechnen.
Das Kernstück der Beschreibung ist eine Datenstruktur mit den
dazugehörenden Algorithmen. Diese Datenstruktur bildet die
Grundlage für Überlegungen, die zu einfachen Zugriffsalgorithmen
führen. Es wird das Ziel verfolgt, eine Datenstruktur in einem
Speichermedium mit wahlfreiem Zugriff (z. B. RAM) zu erzeugen und
dabei die Einschränkungen zu beseitigen, die eine
Indexverwaltung mit sich bringt. Indizes gibt es nicht, sondern
die Daten selbst liefern in ihrer mehrdimensionalen
Organisationsform die benötigten Eigenschaften. Dabei wird auf
hohe Effizienz beim Zugriff Wert gelegt. Die Grundelemente sind
in der Informatik bereits bekannte Elemente. Zeiger (Pointer)
bilden hierbei die Basis bei den verwendeten Ringstrukturen. Die
Ringe lassen sich zum großen Teil so organisieren, daß implizit
binäre Baumstrukturen darin vorkommen.
In einem komplexen mehrdimensionalen Design wird eine
Eigenschaft erzeugt, die in Verbindung mit darauf abgestimmten
Zugriffsalgorithmen eine Unabhängigkeit von den heute
einschränkenden Eigenschaften eines real implementierten
Datenmodells bei Datenbanken darstellt. Beim Zugriff werden
Kennzahlen ausgewertet, die eine exakte Prüfung der Selektivität
erlauben und die Optimierung des günstigsten Zugriffspfads
unterstützen.
Es zeigen:
Abb. 1 Darstellung der statischen Hierarchie des
gesamten Systems
Abb. 2 Anker als initiales Element und für InfoType und
InfoCourse und auch Element gleichen Typs für den
Informationsträger InfoCell
Abb. 3 Teilstruktur: Anker mit einem InfoCell-Element
Abb. 4 Teilstruktur: Anker mit zwei InfoCell-Elementen
als Ringstrukturen mit einer impliziten binären
Baumstruktur
Abb. 5 InfoCluster mit drei InfoTypes in binärer
Baumdarstellung
Abb. 6 InfoCourse als binärer Baum, sortiert über die
InfoType-Identifizierungsnummer (Id) und als
Tabelle dargestellt
Abb. 7 Teilstruktur: 4-dimensionale Verkettung von
InfoCell-Elementen mit Darstellung einer
äquivalenten Tabelle
Abb. 8 Doppelt verketteter Selbst-Ring mit Kennzahl
für die Mächtigkeit des Rings
Abb. 9 Kennzahl für die Mächtigkeit einer
mehrdimensionalen Struktur
Abb. 10 Darstellung einer Tabelle als 6-dimensionale
Struktur
Abb. 11 Y-Adaper InfoBridge für beliebige Verkettung von
Informationen
Abb. 12 InfoBridge mit drei Flagleisten als Diskriminator
Abb. 13 Baumstruktur mit Ringen für die Beispiele
Abb. 14 Reduzierung der Struktur aus Abb. 13 für
eine bessere Darstellung der Beispiele
Abb. 15 Beispiel 1: Suchbedingung (key = 54)
Abb. 16 Beispiel 2: Suchbedingung (key < 20)
Abb. 17 Beispiel 3: Suchbedingung (key < 28) - Formel für
die Treffermenge (M)
Abb. 18 Fortsetzung Beispiel 3: Suchbedingung (key < 28)
- Formel für die Treffermenge (M)
Abb. 19 Fortsetzung Beispiel 3: Suchbedingung (key < 28)
- Formel für die Treffermenge (M)
Abb. 20 Fortsetzung Beispiel 3: Suchbedingung (key < 28)
- Formel für die Treffermenge (M)
Abb. 21 Beispiel 4: Suchbedingung (key < 10)
Abb. 22 Beispiel 5: Suchbedingung (key between 24 and 54)
Abb. 23 Beispiel 6: Optimierung
Ein komplettes System ist hierarchisch aufgebaut (und besteht
beispielsweise bei der Implementation eines Prototyps aus C++
Code zum Testen der Datenstruktur mit den Algorithmen) aus
Klassen-Objekten, von denen zur Laufzeit beliebig viele
Instanzen erzeugt werden können (Abb. 1). Die Begrenzung
wird dabei durch die physische Größe des Speichermediums
bestimmt (beim Prototyp beispielsweise der Hauptspeicher (RAM)
des Test-Rechners). Für die Veranschaulichung der folgenden
Abschnitte werden nur die relevanten Teile gezeigt, nicht das
ganze System. Der Einstieg in die Datenstrukturen wird bewußt
über die Abbildung einer herkömmlichen Datenbanktabelle
erfolgen, weil damit eine bekannte Analogie zu existierenden
Datenbanken verwendet werden kann. Im Anschluß wird aber sehr
bald deutlich, daß die vorgestellte Struktur weitaus mehr
leistet. Es wird gezeigt, daß sich beliebige
Informationszusammenhänge abbilden lassen. Ein kurzer
Vorgeschmack dazu erhöht aber das Verständnis der folgenden
Ausführungen.
Beispielsweise gehört dazu die Tatsache, daß eine InfoCell
sowohl einen einzelnen Wert eines einzelnen elementaren Typs
aufnehmen kann, als auch im anderen Extremfall mehrere InfoAreas
gleichzeitig adressieren kann, was einer Mehrzahl weiterer
kompletter Datenbanken entspricht (Die Kontrolle der dabei
entstehenden möglichen beabsichtigten oder ungewollten
Rekursionen sind nicht Gegenstand dieser Ausführung und wären
außerdem Aufgabe von zukünftig zu erstellenden Algorithmen,
falls so eine komplexe Funktionalität praktisch - im geistigen
Sinne gemeint - überhaupt zu beherrschen ist. Die Strukturen
leisten das aber und zwar nicht nur theoretisch).
Das Test-System ist zwar in einer objektorientierten Sprache
erstellt worden, kann aber auch in einer "normalen"
Programmiersprache implementiert werden, die
Pointerprogrammierung unterstützt. Die mit den Algorithmen
erzeugten InfoAreas (Datenbanken) sind ebenfalls nicht
objektorientiert, da als kleinste Einheit am Ende immer eine
InfoCell mit genau einem Wert eines elementaren Typs steht. Eine
beliebige Objektsicht kann aber zur Laufzeit durch eine
semantische Verknüpfung über InfoCourse erzeugt werden.
Übertragen auf relationale Datenbanken kann ein InfoCourse einer
Datensatzdefinition genau einer Tabelle entsprechen, wie in den
folgenden Beispielen zuerst gezeigt wird, als auch einer, der
sich über beliebige Felder unterschiedlicher Tabellen und sogar
unterschiedlicher Datenbanken (InfoAreas) erstreckt (mit
Verästelung, wenn gewünscht). Auf ähnliche Weise kann man auch
eine referentielle Integrität sicherstellen, indem
beispielsweise Werte einer Prüftabelle nicht in die
Anwendungstabelle kopiert werden, wie bei einer herkömmlichen
Datenbank, sondern die betreffende InfoCell besitzt als Wert
einen Pointer auf die InfoCell des entsprechenden InfoClusters,
was der Prüftabelle entsprechen würde. Damit kommt der Wert
tatsächlich nur ein einziges Mal vor, nämlich in der
"Prüftabelle" und alle anderen Werte sind Pointer, die darauf
zeigen. Mit dem eben beschriebenen, wird auch schon ein wenig
deutlicher, wie es funktioniert, wenn verschiedene Datenmodelle
logisch übereinander gelegt werden, die dieselben Informationen
beinhalten. Pointer zeigen einfach auf dieselbe InfoCell mit der
betreffenden Information. Ändert sich die Information, ändert
sie sich für alle Datenmodelle exakt zum gleichen Zeitpunkt.
Redundanz und Aktualitätsprobleme gehören damit in die
Vergangenheit!
Zunächst wird die statische Definition (Abb. 1) einer
Basisstruktur des InfoSystems gezeigt, die anschließend
dynamisch erweitert werden kann. Um die Analogie zu einer
relationalen Datenbank herzustellen, wird gleich mit gezeigt,
welche Elemente einer herkömmlichen relationalen Datenbank auf
diese Hierarchie des InfoSystems abgebildet werden kann:
InfoSystem ← Management System
InfoArea ← Datenbank
InfoCluster ← Tabelle
InfoType ← Attribut
InfoCourse ← Datensatz
InfoCell ← Feld
InfoBridge ← (kein Vergleich)
InfoSystem ← Management System
InfoArea ← Datenbank
InfoCluster ← Tabelle
InfoType ← Attribut
InfoCourse ← Datensatz
InfoCell ← Feld
InfoBridge ← (kein Vergleich)
Das InfoSystem stellt die Laufzeitumgebung mit den Algorithmen
zur Verfügung und besteht bezogen auf die diskutierte
Datenstruktur zunächst nur aus einem Anker, der (dynamisch)
beliebig viele Instanzen vom Typ InfoArea verwalten kann. Jede
InfoArea hat wiederum einen Anker mit der selben Funktionalität
bezogen auf die InfoCluster. Ein InfoCluster verwaltet mehrere
Anker. Zwei davon gehören zur Datenverwaltung im Sinne einer
herkömmlichen Datenbank. InfoType kann als Attribut einer
Tabelle angesehen werden und ein InfoCourse startet immer in
einem InfoCluster. Bleibt der InfoCourse mit seinen adressierten
InfoCell-Elementen, die einem Feld einer Tabelle entsprechen,
innerhalb eines InfoClusters, dann entspricht er einem Datensatz
einer herkömmlichen Tabelle. Dieser Fall wird bei den folgenden
Darstellungen zuerst gezeigt und mit den dazu entwickelten
Algorithmen unterstützt.
Zur weiteren Erklärung wird der eben beschriebene "Top-Down-
Ansatz" verlassen und auf eine "Bottom-Up-Sichtweise"
gewechselt. Begonnen wird deshalb mit den hierarchisch kleinsten
Elementen der Struktur, also mit InfoCell und den direkt damit
beteiligten Ankern. Bei der Erzeugung einer Instanz vom Typ
InfoType wird auch ein Anker erzeugt, der eine Instanz vom Typ
InfoCell ist. Dieser Anker hat die Funktion, die anschließend
folgende Struktur aus InfoCell-Elementen zu verwalten und ist
zunächst initial (Abb. 2). Der Anker besitzt, wie die
eigentlichen InfoCell-Informationsträger auch, sieben
Pointer, die der Reihen nach erklärt werden.
Aus Abb. 2 wird ersichtlich, das nach der Erzeugung eines
Ankers alle Pointer zurück auf den Anker zeigen. Das ist der
initiale Zustand, der zugleich die kleinste Ausprägung der
Ringstrukturen zeigt. Jeder Pointer der Struktur hat damit eine
gültige Adresse. Der Fall eines nicht definierten Pointers
(Nullpointer) wird dadurch vermieden, um bei einer Navigation
durch die Struktur immer mit gültigen Adressen arbeiten zu
können. Der Anker hat darüber hinaus die Funktion einer Marke,
die von den Algorithmen beispielsweise als Abbruchbedingung von
Schleifen genutzt wird. Die Abb. 3 zeigt wie eine InfoCell
mit einer Information an den Anker angehängt wird. Die
Ringstruktur bleibt dabei erhalten, da jetzt zwei Pointer (LVR +
RVR) von der neuen InfoCell zurück auf den Anker zeigen und
sogenannte vertikale Ringe bilden. Gleichzeitig wird durch die
Verwendung von zwei Pointern ein binärer Baum erzeugt. Neue
InfoCell-Elemente (Knoten) werden gemäß einer
Sortierreihenfolge des Typs der Information in den linken oder
rechten Ring eingefügt. Das Einfügen erfolgt bei einem kleineren
Wert links und bei einem größeren Wert rechts gemäß der
bekannten Baumlogik (Abb. 4). Das Einfügen neuer Knoten
erfolgt immer vor dem Anker. Um bei einer größeren Anzahl von
Knoten eine höhere Effizienz bei späteren Zugriffen zu
erreichen, kann zusätzlich die AVL-Baumlogik genutzt werden
(Die Ausgleichsmechanismen der AVL-Bäume sind hier nicht
Gegenstand der Betrachtungen, da sie in der Fachliteratur
bereits ausgiebig beschrieben worden sind. Sie werden in den
Algorithmen und beim Aufbau des Test-System lediglich benutzt
und tragen so zur Steigerung der Effizienz der
Zugriffsalgorithmen bei).
Abb. 5 zeigt den eben beschriebenen impliziten binären Baum
für drei InfoTypes die zu einem InfoCluster gehören. Um die
Grafik übersichtlicher zu halten, sind in der Darstellung die
Pointer, die zurück zu den Ankern führen, weggelassen worden.
Der semantische Zusammenhang von Information wird in Abb. 6
ersichtlich. Am InfoCluster hängt ein weiterer Anker, der
ebenfalls vom Typ InfoCell ist und Knoten verwaltet, die
InfoCourse genannt werden. Ein InfoCourse ist mit einem
Datensatz einer Tabelle vergleichbar, solange es sich nur um
eine einfache Form (wie in diesem Fall) handelt. Im Gegensatz zu
einem Datensatz ist der InfoCourse aber keine lineare
Aneinanderreihung von Attributen, gemäß einer definierten
Reihenfolge in einer Tabelle, sondern ebenfalls eine
Ringstruktur (im folgenden auch Ring-Baum genannt) mit einem
impliziten binären Baum (Pointer LHR + RHR), der über eine
eindeutige Identifizierungsnummer sortiert ist, die zum InfoType
gehört. Die Pointer, die zurück auf den InfoCourse (kleinerer
Anker-Pos 1 = Pfeil mit der 1 im Bauch) zeigen, sind in der
Darstellung wieder weggelassen worden. Genau genommen handelt es
sich wie oben wieder um Ringe. (Die einzelnen InfoCouse-
Elemente bilden übrigens ebenfalls die gleiche Ringstruktur mit
impliziten Bäumen nach einer InfoCourse-Id sortiert und hängen
so am darüberliegenden Anker. Es hängt also genau genommen am
obersten Anker (Pos. 2) ein "Ring-Baum" aus Ankern, deren
einzelne Anker wieder auf einen "Ring-Baum" zeigen, deren
einzelne Anker (Pos. 1) jeweils einen einzelnen Datenpfad
beschreiben. Da diese Tatsache momentan aber keine Rolle spielt,
ist die Grafik auch hier stark vereinfacht). Die Abb. 6
zeigt unten in der Grafik die tabellarische Form der
Information. In der Abb. 7 sind die Knoten gemäß der
Semantik aus der vollständigen Tabelle (unten in der Grafik)
verkettet worden. (Alle Pointer, die eher zur Verwirrung führen
sind in der Grafik wieder weggelassen worden)
Die Struktur von InfoType kann die Funktionalität einer vorher
definierten Wertemenge besitzen, deshalb könnten darin durchaus
auch Knoten vorkommen, die in keinem InfoCourse hängen (ähnlich
einer Werte-Tabelle). Der implizite Baum enthält demnach alle
Werte, die vorkommen dürfen auch nur einmal. Umgekehrt benutzt
aber ein InfoCourse diese Werte ebenfalls direkt und es kann
vorkommen, daß mehrere InfoCourse den selben Wert nutzen müssen.
Für dieses Ereignis müssen zwei Fälle unterschieden werden, je
nachdem ob eine weitere fertige Struktur bereits vorliegt auf
deren Instanzen mittels eines Pointers referenziert werden kann
oder ob eine gleiche Struktur für den InfoCourse benutzt werden
soll. Der erste Fall soll zurückgestellt werden, weil dazu die
vollständige Struktur verstanden worden sein muß.
Zusätzliche Anmerkung: Man hätte eine Referenzierung auch
konsequent - im Sinne einer logisch "saubereren" Lösung -
einführen können, dann wären alle Werte aller InfoTypes
tatsächlich nur einmal vorhanden und würden von einem InfoCourse
aus gesehen immer referenziert werden (generelle Abtrennung der
Semantik vom Wert). Da aber in der Praxis nur wenige Daten einen
Charakter aufweisen, die beispielsweise einem Prüfwert
entsprechen, wurde zu Gunsten schnellerer Zugriffe und
einfacherer Algorithmen die folgende Selbst-Ring Architektur
gewählt, die zunächst (für die Basisstruktur) das gleiche
leistet. Eine Referenzierung von jedem Knoten eines InfoCourse
aus, würde sonst auch immer eine indirekte Adressierung bei
einer konkreten Implementation bedeuten, die zusätzlich Zeit
und Speicherplatz kostet. Diese Methode wird später aber
eingesetzt, allerdings nur da, wo tatsächlich semantische
Zusammenhänge zu schon existierenden Daten bestehen. Auch für
"große Informationen", wie BLOBs (binary large objects) oder
lange Zeichenketten, wird (steuert der Datentyp) eine
Referenzierung gewählt, um Speicherplatz zu sparen. Ebenfalls
wird sich beispielsweise ein zusätzlich zu definierendes
Datenmodell, das bereits existierende Strukturen benutzen
möchte, genau dieser Vorgehensweise bedienen. Dazu würde dann
beispielsweise eine neue InfoArea ihre eigenen InfoCluster
definieren, die auf bestehende InfoTypes referenzieren, die zu
einer bereits bestehenden anderen InfoArea - oder mehreren -
gehören. Das wäre dann eine Art View über mehrere Tabellen und
ggf. verschiedene Datenbanken! Ebenso könnten auch noch eigene
InfoTypes dazu erzeugt werden, die eigene InfoCells (Wert ist
dann ein Pointer) haben, die dann auf bestehende InfoCells (mit
Werten) referenzieren. Dann hätte man eine gezielte Selektion
von Daten, weil nur eine Teilmenge der existierenden Daten in
der neuen Datenbank benötigt wird. Ein dazu gehörender neuer
InfoCourse ginge dann jeweils über eine referenzierende InfoCell
und nicht über die referenzierte. Die gehören ja zur
Basisstruktur (und einem anderen InfoCourse), die gerade
hergeleitet wird.
Werte können auch mehrfach vorkommen, weil verschiedene
InfoCourse der gleichen Struktur auch den gleichen Wert
benötigen. Die Werte, die im impliziten Baum von InfoType
enthalten sind, sollen aber nur einmal in der Baumsortierung
vorkommen. Auf eine Referenzierung soll beim Aufbau der ersten
Basisstruktur aber ebenfalls verzichtet werden (siehe auch oben:
Zusätzliche Anmerkung). Deshalb findet bei Bedarf eine
Vervielfachung eines Knotens mit einer doppelt verketteten
Ringstruktur statt (Abb. 8).
Eine einfache Verkettung erfüllt die erforderliche
Funktionalität bereits, da durch die Ringstruktur immer alle
Knoten des gleichen Werts erreichbar wären. Aber die
Rückwärtsverkettung bietet einen Performancevorteil beim Zugriff
auf die Struktur. Erfahrungsgemäß wird von den meisten
Anwendungen auf jüngere Information häufiger zugegriffen, als
auf ältere. Da beim Einfügen neuer Information der jüngste
Knoten den Master-Knoten bildet, der auch Mitglied der
InfoType-Ring-Baumstruktur wird, wandert sein Vorgänger in den
Selbst-Ring. Dadurch entsteht ein nach Alter sortierter Ring
von der Knoten gleichen Werts, die zu unterschiedlichen
InfoCourses gehören. Bei einem Zugriff, der (über InfoCourse bei
Auswertung einer komplexen logischen Bedingung) mitten in einem
solchen Ring landet, kann jetzt sofort in Rückwärtsrichtung
weiter gesucht werden, wobei die Knoten bis zum Ring-Master
immer jünger werden. Nach dem Passieren dieses Knotens kommt
dann erst die älteste Information des Rings und von dort werden
die Knoten wieder jünger. Die Anzahl der Mitglieder des Selbst-
Rings ist im Ring-Master vermerkt, um die Algorithmen bei der
Optimierung eines Zugriffs zu unterstützen, wie später in den
Beispielen gezeigt wird. Dabei zeigt nur der Ring-Master die
momentan richtige Anzahl, weil nach dem Einfügen ansonsten alle
Selbst-Ring-Knoten besucht werden müßten, um den Zähler
entsprechend anzupassen. Da aber für die Algorithmen eine
Information darüber ausreicht, ob es überhaupt weitere
Ringmitglieder gibt oder der Knoten als einziger diesen einen
Wert besitzt, reicht ein von Null verschiedener Wert für den
Zähler in diesen Fall aus. Das ist für alle Selbst-Ring-
Knoten zu jedem Zeitpunkt der Fall. Eine Null ist also immer der
Hinweis darauf, daß die Wertausprägung nur einmal vorhanden ist
und es sich dann natürlich auch um den Ring-Master handeln
muß.
Die optimierenden Algorithmen, die später zum Teil in den
Beispielen in ihrer Arbeitsweise gezeigt werden, benötigen
Informationen über die Größe der beteiligten Struktur, um einen
effizienten Zugriffspfad bestimmen zu können. Dazu wird in jeder
InfoCell die Anzahl aller benachbarten Knoten meherer Ringe bis
zum Anker, die über vier Pointer erreichbar sind als Summe
abgelegt (Abb. 9). Dazu werden die Zählerstände der Knoten,
die jeweils über die beiden Pointer der vertikalen Ringe
angesprochen werden können (enthalten ja ebenfalls einen eigenen
mehrdimensionalen Zählerstand, weil die Struktur rekursiv ist),
mit der Selbst-Ring-Ausprägung addiert, wobei eine Null im
Ring-Master für die Berechnung durch eine Eins (für den Knoten
selbst) ersetzt werden muß. Damit enthält eine InfoCell die
Anzahl aller Knoten, die sich in allen Pfaden der Struktur bis
zum Anker befinden (Nachbarschaftsbeziehungen zu InfoCourse-
Knoten und die später noch beschriebenen InfoBridge-
Beziehungen bleiben dabei außen vor). Damit können die
Algorithmen dann günstige Zugriffspfade mittels
Mengenoperationen berechnen, ohne alle betroffenen Knoten selbst
besuchen zu müssen, wie die Beispiele später zeigen.
In Abb. 10 ist die (oben links in der Grafik) gezeigte
Tabelle als 6-dimensionale Struktur aufgeführt. Dabei sind alle
Zähler und Identifizierungsnummern bei allen Knoten vollständig
eingezeichnet. Auf die Anker-Elemente und alle Pointer, die
jeweilige Ringe schließen würden, wurde der Übersichtlichkeit
halber wieder verzichtet.
Der Pointer IF (Abb. 2) spielt eine besondere Rolle in der
Struktur. Er ist in jeder Instanz jedes Objekttyps vorhanden und
ist multifunktional (entspricht einem varianten Typ, in C++
Union mit allen Pointertypen aller Klassenobjekte). Damit kann
er auf jede beliebige andere Instanz zeigen. Welchen Typs diese
Instanz ist, ergibt sich entweder aus einem konkreten logischen
Zusammenhang oder wird durch einen Diskriminator bestimmt. Das
ist entweder eine Flagleiste (Abb. 12) oder ein
entsprechend definierter Zustandsgraph (gemäß der
Automatentheorie) in jedem Knoten. Die Flagleiste eignet sich,
wenn die Anzahl der Bits entsprechend klein ist, so daß die
Maschinenwortlänge (Effizienz) nicht überschritten wird,
ansonsten eignet sich ein Zustandsgraph eigentlich sowieso
besser, weil damit auch umfangreichere semantische Zusammenhänge
und Abläufe mit verschiedenen Zuständen (und ggf. definierten
Folgezuständen) besser abgebildet werden können.
Mit Hilfe dieses Pointers können beliebige Verknüpfungen zu
anderen Instanzen hergestellt werden. Das kann direkt geschehen
oder über eine InfoBridge. Die InfoBridge ist eine Art Y-
Adapter, der auch noch kaskadierbar ist (Abb. 11). Da der
Y-Adapter darüber hinaus auch noch bidirektional sein kann, läßt
sich ein beliebiges Netzwerk über die Basisstruktur legen. Der
Y-Adaper beinhaltet ebenfalls für jeden varianten Pointer
(Ausgänge des Y-Adapters) eine eigene Flagleiste oder Variable
für den Zustandsgraphen. Damit kann ein Algorithmus mit der
Information über den Typ der folgenden Instanz versorgt werden
und entsprechende Handlungen durchführen.
Mit dieser Architektur wird der relationale Ansatz herkömmlicher
Datenbanken überschritten. Alle Anwendungsmöglichkeiten an diese
Stelle aufzuzählen würde das Thema sprengen, deshalb soll ein
Ausblick auf ein geplantes Vorhaben genügen. Da sich
individuelle Verbindungen (Links) zwischen einzelnen InfoCells
erzeugen lassen ohne auf den ganzen InfoType zurückzuwirken,
können "intelligente Algorithmen" zum Einsatz gelangen, die auf
Grund der Anforderungen einer übergeordneten Anwendung, diese
Verschaltung von Informationen ganz individuell vornehmen
können. Damit kann ein dynamisch wachsendes (lernendes) fein
granuliertes Datenmodell erzeugt werden (entspricht
individuellen Links auf Datensatzebene). Die Links können dabei
nicht nur auf unterster Ebene, wie eben beschrieben, sondern
auch auf höheren Hierarchiestufen durchgeführt werden, wobei
dann Informationsstrukturen entstehen, die einen generischen
Charakter haben (entspricht beispielsweise einem View oder Join,
der dann auch für später eingefügte Datensätze gilt).
Der Pointer IF hat aber auch noch eine ganz simple Funktion.
Transaktion verändern grob betrachtet in der Regel viele Daten
gleichzeitig. Mikroskopisch gesehen passiert das aber
sequentiell auf dem Speichermedium. Die Transaktion wird
beispielsweise bei Datenbanken mit einem Commit work oder einem
Rollback abgeschlossen, was bedeutet das entweder alle
Änderungen gültig werden oder komplett zurückgenommen werden
müssen. Für das Speichersystem bedeutet dieser Umstand, daß
beispielsweise bei einer Wertänderung beide Werte jeweils in
einer eigenen InfoCell temporär vorgehalten werden müssen, bis
die Entscheidung gefallen ist. Um die semantische Verbindung
zwischen den beiden Werten herzustellen, eignet sich die
InfoBridge. In der Abb. 12 ist dieser Fall dargestellt. Die
obere InfoBridge verbindet zwei InfoCells miteinander. Die
Verbindung hätte auch direkt zwischen den beiden InfoCells ohne
die InfoBridge stattfinden können, denn jede InfoCell besitzt ja
einen Pointer mit genau der gerade beschriebenen Funktionalität,
die in einer InfoBridge lediglich (mindestens) drei Mal
vorkommt. Dann könnten aber keine weiteren Instanzen mehr
angeschlossen werden, weil kein freier Pointer mehr zur
Verfügung wäre. Damit wäre dann diese Dimension für dazu
kommende Anforderungen erloschen. Durch das Einfügen einer
InfoBridge bleibt der Freiheitsgrad erhalten und kann durch die
Kaskade noch beliebig erweitert werden, wie die gestrichelte
InfoBridge in der Abb. 12 zeigt.
Dieser Y-Adapter kann in mehreren Varianten zum Einsatz kommen.
Mit drei Anschlüssen lassen sich in der Kaskade bereits
beliebige Mehrwege-Strukturen erzeugen. Bei entsprechendem
Bedarf sind aber auch mächtigere Adapter mit vielen Anschlüssen
denkbar.
Damit ist die Erklärung der Datenobjekte, die Gegenstand dieser
Struktur sind, abgeschlossen. Damit die Datenstruktur, die sich
zur Speicherung beliebiger Informationen eignet, betrieben
werden kann, sind eine Reihe weiterer Datenobjekte, zum Teil mit
temporären Charakter, notwendig. Diese Erweiterungen sind nicht
Gegenstand dieser Abhandlung, werden aber in den folgenden
Beispielen erwähnt, wenn sie zum Verständnis beitragen
(beispielsweise Guide-Objekte). Die Funktionsweise der
Algorithmen für den primitiven Zugriff werden zusammen mit den
Beispielen unabhängig von einer konkreten Programmiersprache
erklärt.
Auf gespeicherte Information eines Datenhaltungssystems wird in
der Regel über den Inhalt zugegriffen, deren Charakteristik
beschrieben wird. Aus diesem Grund gibt es dafür
Sprachkonstrukte, die diesen Zweck unterstützen. Standard-SQL
ist beispielsweise eine genormte Variante, die sich für
relationale Datenbanken eignet. Die folgenden Beispiele sollen
aber nicht den Befehlssatz einer Sprache behandeln, sondern
lediglich elementare Bedingungen betrachten, aus denen sich
konkrete Sprachkonstrukte erstellen lassen. Außerdem müßte der
Sprachumfang über ein Standard-SQL hinausgehen, da diese
Datenstruktur mehr leisten kann. In den folgenden Beispielen
wird deshalb exemplarisch gezeigt, wie Zugriffe auf InfoCells
erfolgen, die genau einem einen InfoType entsprechen und
verschiedenen logischen Bedingungen gehorchen sollen. Dazu wird
nur eine Teilansicht der Struktur benötigt. In der Abb. 13
ist die Teilstruktur dargestellt. Für den Zugriff werden in der
praktischen Umsetzung eines Algorithmus die vertikalen Ringe und
die Selbst-Ring-Ausprägung benötigt. Die Pointer, die zurück
zum Anker führen, sind aus Gründen der besseren Übersicht in der
Grafik wieder durch ein kleines Ankersymbol ersetzt worden. Für
die folgenden Beispiele soll die Struktur aber nochmals stark
vereinfacht werden (Abb. 14). Wenn man für die theoretische
Betrachtung die Prämisse setzt, daß jeder Wert nur einmal
vorhanden sein darf (in der Praxis ein eher selten auftretender
Fall und deswegen ist die reduzierte Struktur auch praktisch so
nicht einsetzbar), dann kann der Selbst-Ring entfallen. Da
jetzt auch die Anker und die Ringpointer in der Grafik
weggelassen wurden, bleibt die Darstellung eines binären AVL-
Baums als Gerippe übrig. An diesem reduzierten "Theorie-Baum",
der auch dem linken Baum aus der Teilstruktur mit den Pointern
LVR und RVR in der Abb. 5 entspricht, sollen die folgenden
logischen Bedingungen und der Zugriff gezeigt werden, weil damit
das Prinzip zum Finden von Ergebnismengen über Mengenoperationen
deutlich wird.
Die Suche im Baum beginnt in der Abb. 15 nach dem passieren
des Ankers (der in der Grafik weggelassen wurde) mit der Wurzel
(Pos 1 = Pfeil mit der 1 im Bauch) des Baums. Da das
Suchargument (54) größer als der Wert der InfoCell mit dem Wert
(40) ist, muß der gesuchte Knoten rechts von der Wurzel liegen.
Die Überprüfung des nächsten Knotens ist iterativ bis zu einer
Abbruchbedingung der Schleife. Beim Knoten der Pos 2 ist das
Suchargument (54) kleiner als der Wert (60) der InfoCell, so daß
links weiter gesucht wird. Bei Pos 3 (50) wird nach der Prüfung
der rechte Pfad gewählt und bei Pos 4 (55) der linke Pfad. Bei
Pos 5 (54) ist die InfoCell gefunden, bei der das Suchargument
mit dem Wert übereinstimmt. Da die InfoCell, wie in der
Abb. 6 auch mit den Pointern LHR und RHR ausgestattet ist,
kann auf semantisch benachbarte Informationen über den
InfoCourse zugegriffen werden. Da es sich bei den InfoCourse-
Pointern auch um einen Ring-Baum handelt, kann immer der Anker
des betreffenden InfoCourse gefunden werden und von dort aus ist
dann jeder Knoten der InfoCourse-Struktur erreichbar. Aus
Performancegründen kann in jeder InfoCell ein zusätzlicher
Pointer untergebracht werden, der direkt auf diesen InfoCourse-
Anker zeigt, um ein unnötiges Durchhangeln bis zum Anker zu
vermeiden. Das kann bei großen Strukturen von Vorteil sein und
wurde auch im Test-System so eingebaut.
Zusammenfassend kann man feststellen, daß von der Wurzel
ausgehend immer in Richtung des Sucharguments durch den Baum
abgestiegen wird, bis das Abbruchkriterium erreicht wird. Dieser
Fall ist gegeben, wenn der Wert gefunden wurde oder das
Ankerelement erreicht worden ist, was dann gleichbedeutend damit
ist, daß ein horizontaler Pfad einmal vollständig durchlaufen
wurde. Beim Einfügen eines Werts wird identisch verfahren.
Angenommen der Wert (53) hätte eingefügt werden sollen - Pos 6
(53) gestrichelt in der Grafik -, dann wäre genau der gleiche
Pfad im Baum beschritten worden mit dem Unterschied, daß die
neue InfoCell vor dem Anker eingefügt worden wäre, also nach dem
Knoten (54) über den LVR-Pointer. (Da der Baum dann nicht mehr
der AVL-Bedingung entsprechen würde, die besagt, daß ausgehend
von jedem Knoten die Länge eines linken und rechten Pfads sich
höchsten um die Länge "Eins" unterscheiden darf (trifft für die
Pos 4 (55) und Pos 2 (60) zu), würde der Baum jetzt einem
Umsortieralgorithmus folgen, der die Ausgeglichenheit wieder
herstellt. Dieser Algorithmus ist aber nicht Thema dieser
Ausführung und ist in der Fachliteratur ausgiebig beschrieben.)
In der Abb. 16 wird eine Teilmenge durch die Baumstruktur
ermittelt. Der Einstieg in die Struktur erfolgt wieder über die
Wurzel Pos 1 (40). Da das Suchargument kleiner ist, erfolgt der
iterative Abstieg nach links. Mit Pos 2 (20) ist die
Abbruchbedingung der Schleife erfüllt und die Suchbedingung
genau erfüllt. Da der Operator kleiner bedeutet, erfüllen alle
Knoten Pos 3 (3, 5, 7, 10, 11) des linken Pfads die Bedingung.
Ohne die einzelnen Knoten dieser Teilstruktur besuchen zu
müssen, kann ein in Beispiel 6 beschriebener
Optimierungsalgorithmus über die Mächtigkeit dieser Teilstruktur
informiert werden. Wie in der Abb. 9 ersichtlich ist, wird
in jedem Knoten die Mächtigkeit der komplexen Unterstruktur
gespeichert. In Abb. 16 ist der Selbst-Ring mit den
Pointern LSR und RSR aus Gründen einer besseren Lesbarkeit der
Grafik nicht mit eingezeichnet worden, aber diese Knoten zählen
in der praktischen Implementation des Algorithmus mit dazu. Wie
ein Optimierungsalgorithmus mit dieser Information arbeitet, die
in der InfoCell (10) gespeichert ist und innerhalb des kleinen
Quadrats mit x1 bezeichnet ist, wird im Beispiel 6 dann näher
erläutert.
In diesem Beispiel (Abb. 17) wird die Mengenlogik deutlich,
die zur Ermittlung einer Treffermenge (M) führt. Der Abstieg im
Baum erfolgt wieder in Richtung des Sucharguments (28). Da
dieser Wert nicht in der Baumstruktur vorkommt, wird die
Abbruchbedingung der Iteration der Anker sein, der in der Grafik
aus den genannten Vereinfachungsgründen nicht mit eingezeichnet
worden ist. Der Einstieg erfolgt wieder über die Wurzel Pos 1
(40) und erfüllt beim Knoten Pos 2 (20) die Bedingung. Wie aus
der Grafik zu entnehmen ist, ist mit der Angabe der Mächtigkeit
x1, die im Knoten der Pos 2 (20) vermerkt ist das Ergebnis noch
nicht gültig, da sich in der Struktur noch Knoten (30, 35)
befinden, die fälschlicherweise mitgezählt werden, weil sie
nicht der Bedingung entsprechen. Der Algorithmus schaltet jetzt
auf Subtraktion um und verfolgt den Pfad weiter in Richtung des
Sucharguments (28) bis er auf einen Knoten stößt der nicht mehr
der Suchbedingung (< 28) entspricht. Dieser Fall (Abb. 18)
ist bereits beim nächsten Knoten Pos 3 (30) erreicht. Die
Mächtigkeitsangabe y1 der InfoCell des Knotens Pos 3 (30) wird
folglich subtrahiert, wobei jetzt die Knoten (22, 25, 27) zuviel
abgezogen werden. Der Algorithmus schaltet seine
Mengenarithmetik wieder auf addieren um und setzt die Suche im
Pfad in Richtung des Sucharguments (28) fort bis er auf einen
Wert stößt der wieder der Suchbedingung entspricht. In der
Abb. 19 wird dieser Fall wieder beim nächsten Knoten Pos 4
(25) erreicht und die Mächtigkeit x2 der vollständigen
Unterstruktur (einschließlich der Selbst-Ringe, die hier nicht
eingezeichnet sind - vgl. Abb. 9 -) addiert. Der
Algorithmus schaltet wieder auf Subtraktion um und setzt seine
Suche fort. Da er bis zum Anker keinen Knoten mehr findet, der
außerhalb der Suchbedingung (< 28) liegt, stellt (M) jetzt das
Endergebnis dar (Abb. 20) und weist die Treffermenge exakt
aus.
Damit reicht ein einziger Abstieg im Baum in Richtung des
Sucharguments aus, um die jeweiligen Teilmengen zu
identifizieren und im Wechsel einer Addition und Subtraktion das
Trefferergebnis exakt zu ermitteln. Damit kann einem folgenden
Optimierungsalgorithmus (Beispiel 6) eine Information zur
weiteren Berechnung eines optimalen Zugriffspfads einer
zusammengesetzten Bedingung zur Verfügung gestellt werden.
In der Abb. 21 wird die gleiche Logik, wie im Beispiel 3
gezeigt, noch einmal mit einer anderen Suchbedingung (age <
10) gezeigt. Die Beschreibung kann deshalb verkürzt erfolgen
ohne auf die Berechnung der Mächtigkeit im Detail eingehen zu
müssen.
Der Einstieg wieder über die Wurzel Pos 1 (40) erfüllt bereits
die Bedingung. Damit gehört der Knoten selbst und der ganze
rechte Teilbaum zur Treffermenge, weil dort nur Werte vorkommen
können, die größer als die Wurzel Pos 1 (40) sein können.
Deshalb muß nur noch im linken Pfad nach Knoten gesucht werden,
die nicht der Bedingung entsprechen. Für den Knoten Pos 2 (20)
gilt das gleiche, so daß auch diese Treffermenge identifiziert
ist. Bei der Pos 3 (10) ist die Abbruchbedingung erfüllt, da das
Suchargument (< 10) getroffen wurde. Es müssen jetzt ebenfalls
alle Knoten des rechten Pfads dazu genommen werden mit Ausnahme
des Knotens Pos 3 (10) selbst. Hätte die Bedingung (< =)
gelautet, dann wäre auch dieser Knoten dabei gewesen.
Die Berechnung der Mächtigkeit der Treffermenge (M) erfolgt
analog zu Beispiel 3. Der Wurzelknoten enthält die Mächtigkeit
der ganzen Struktur (einschließlich der nicht eingezeichneten
Selbst-Ringstrukturen aller Knoten). Die erste Subtraktion
erfolgt bei Pos 3 (10), wobei dann im Anschluß nur noch die
Mächtigkeit der rechten Struktur wieder dazu gezählt werden muß,
die hier nur aus einem Knoten (11) besteht.
In der Abb. 22 wird eine Between-Logik gezeigt, die zwei
Abstiege im Baum benötigt, um die Treffermenge zu ermitteln. Ein
Between könnte auch in zwei elementare Bedingungen zerlegt
werden (key <= 24 and key <= 54), aber so geht es eleganter.
Auf eine detaillierte Erklärung der Arithmetik dazu kann
verzichtet werden, weil sie in den Beispielen zuvor schon
gezeigt wurde.
Der Einstieg in die Struktur erfolgt über die Wurzel (40). Da
der Knoten innerhalb der Suchbedingung liegt, muß sowohl der
linke Pfad mit der unteren Grenze (24) der Suchbedingung, als
auch der rechte Pfad mit der oberen Grenze (54) der
Suchbedingung durchlaufen werden. Die jeweilige Logik entspricht
dabei der elementaren Logik aus den zuvor beschriebenen
Beispielen.
Würde der Wurzelknoten außerhalb der Suchbedingung liegen, was
beispielsweise der Fall wäre, wenn die Suchbedingung
(between 54 and 56) sein würde, dann muß zuvor im Pfad des
Baums in Richtung einer Grenze (entweder 54 oder 56) abgestiegen
werden, bis ein Knoten innerhalb der Suchbedingung liegt. Das
wäre der Fall beim Knoten (55). Danach kann der Teilbaum mit
diesem Knoten als Wurzel genommen werden und mit dem in diesem
Beispiel beschriebenen Algorithmus begonnen werden.
Zum Abschluß soll am Beispiel einer komplexen Bedingung gezeigt
werden, wie ein Optimierungsalgorithmus von der vorgestellten
Datenstruktur profitiert und welche Rolle die Kennzahlen der
Mächtigkeiten dabei spielen. Als Beispiel soll eine AND-Kette
dienen:
key_1 < 28 and key_2 <= wert_2 and key_3 < wert_3
Um eine solche komplexe Bedingung effizient abarbeiten zu
können, soll ein Optimierer wissen, welche Treffermenge sich bei
jeder einzelnen Bedingung ergibt, bevor er mit der eigentlichen
Auswertung des Ausdrucks beginnt. Damit kann er sich dann für
die logische Bedingung entscheiden, die zur kleinsten
Zwischenergebnismenge führt, um darauf die nächst kleinere
Bedingung anzuwenden und so weiter.
Also ist es notwendig, zuerst alle drei Bedingungen auf ihre
jeweilige Treffermenge zu untersuchen. Das kann mit jeweils
einem einzigen Abstieg eines Pfads im betreffenden Baum erledigt
werden, wie in den Beispielen zuvor gezeigt wurde. Dabei können
aber gleichzeitig sogenannte Start-Adressen von Knoten (in
sogenannten Guides) gespeichert werden, die auf ein Kopfelement
von gültigen Teilbäumen des jeweiligen logischen Ausdrucks
zeigen. Das hat den Vorteil, daß der Optimierer nachdem er
Kenntnis über die günstigste Bedingung erlangt hat, nicht noch
einmal den Baum untersuchen muß, sondern gleich auf gültigen
Knoten operieren kann. Knoten, die nicht zur Treffermenge
gehören müssen überhaupt nicht besucht werden. Folgendes
Szenario soll das aber noch einmal in kleinen Schritten
verdeutlichen:
Dazu kann die Abb. 17 im Rückblick benutzt werden, da die erste Bedingung der AND-Kette genau diesem Fall entspricht. Bei Knoten Pos 2 (20) ist die Suchbedingung (key_1 < 28) das erste Mal erfüllt. Neben dem Beginn der Berechnung der Kennzahl für die Mächtigkeit der gesamten Treffermenge, die im Beispiel 3 zur Ermittlung der Menge (M) führt, wird eine temporäre Instanz eines Objekts vom Typ Guide erzeugt, das die Adresse dieses Knotens speichert (Guide-Objekte sollen hier nicht ausführlicher erläutert werden). Dazu kann gleich noch ein Iterationswert It erzeugt werden, der sich wie in Abb. 23 gezeigt, berechnen läßt It entspricht immer der Anzahl aller gültigen Knoten (Treffer) eines Teilbaums (einschließlich aller Knoten jedes Selbst-Rings). Dieser Iterationswert ist später die Abbruchbedingung einer Schleife für einen Algorithmus zum Traversieren des Teilbaums einschließlich der Zwischenstops bei jedem Knoten im Baum zum Abarbeiten der Selbst-Ringe. Damit kann man sich beim Traversieren den ständigen Vergleich der Suchbedingung mit dem Wert eines Knotens sparen, denn genau nach dem Besuch aller gültigen Knoten ist die Abbruchbedingung erfüllt. It ist immer vom Typ Integer und damit in der Regel schneller als der Vergleich mit einem Wert des Knotens, der beispielsweise auch eine lange Zeichenkette sein kann
Dazu kann die Abb. 17 im Rückblick benutzt werden, da die erste Bedingung der AND-Kette genau diesem Fall entspricht. Bei Knoten Pos 2 (20) ist die Suchbedingung (key_1 < 28) das erste Mal erfüllt. Neben dem Beginn der Berechnung der Kennzahl für die Mächtigkeit der gesamten Treffermenge, die im Beispiel 3 zur Ermittlung der Menge (M) führt, wird eine temporäre Instanz eines Objekts vom Typ Guide erzeugt, das die Adresse dieses Knotens speichert (Guide-Objekte sollen hier nicht ausführlicher erläutert werden). Dazu kann gleich noch ein Iterationswert It erzeugt werden, der sich wie in Abb. 23 gezeigt, berechnen läßt It entspricht immer der Anzahl aller gültigen Knoten (Treffer) eines Teilbaums (einschließlich aller Knoten jedes Selbst-Rings). Dieser Iterationswert ist später die Abbruchbedingung einer Schleife für einen Algorithmus zum Traversieren des Teilbaums einschließlich der Zwischenstops bei jedem Knoten im Baum zum Abarbeiten der Selbst-Ringe. Damit kann man sich beim Traversieren den ständigen Vergleich der Suchbedingung mit dem Wert eines Knotens sparen, denn genau nach dem Besuch aller gültigen Knoten ist die Abbruchbedingung erfüllt. It ist immer vom Typ Integer und damit in der Regel schneller als der Vergleich mit einem Wert des Knotens, der beispielsweise auch eine lange Zeichenkette sein kann
Aus der Abb. 19 Pos 4 (25) ist ersichtlich, das es noch
einen weiteren Teilbaum gibt, der traversiert werden muß, wenn
diese Bedingung (key_1 < 28) vom Optimierer später als erste
genommen wird. Dazu wird ein weiterer Guide erzeugt, der genauso
die Start-Adresse vom Knoten (25) speichert und den
Iterationswert dazu, der diesmal genau x2 entspricht.
Bei sehr mächtigen Baumstrukturen können mehrere solche
Teilbäume, die gültige Treffermengen beinhalten, während eines
Abstiegs identifiziert werden. Für jedes Kopfelement eines
solchen Teilbaums wird ein Guide erzeugt, der die entsprechende
Start-Adresse und den Iterationswert enthält. Alle Guides
bilden eine verkettete lineare Liste, die der jeweiligen
Bedingung zugeordnet wird.
Nachdem alle Bedingungen der AND-Kette auf ihre Treffermenge
(M) untersucht worden sind und der Optimierer die Bedingung mit
der kleinsten Treffermenge ausgewählt hat, kann er jetzt die
dazugehörige lineare Liste mit den Guides benutzen, um sofort
die Teilbäume mit gültigen Knoten abzuarbeiten. Die anderen
beiden linearen Listen mit den Guides wurden zwar vergebens
erzeugt und werden verworfen, aber der Geschwindigkeitsvorteil,
der sich durch die erste lineare Liste mit den Guides ergibt,
rechtfertigt diesen geringfügigen Mehraufwand zum Merken aller
Start-Adressen und der Iterationswerte auf jeden Fall.
Die Verarbeitung der nächsten Bedingung erfolgt im Anschluß
direkt auf der erzeugten Zwischenergebnismenge. Dazu gibt es
weitere Guides eines anderen Typs, die temporär jeweils auf den
entsprechenden Anker eines InfoCourse zeigen, der zum
Zwischenergebnis gehört. Dadurch ergibt sich dann eine verkürzte
Verarbeitung der restliche AND-Kette direkt mit der
Zwischenergebnismenge. Die temporären Guide-Datenstrukturen,
die von der Komplexität in etwa noch einmal der gezeigten
Struktur entsprechen, sollen aber nicht Gegenstand dieser
Ausführungen sein.
Zusammenfassend kann noch angemerkt werden, daß es sich bei
dieser Art der Optimierung immer um eine exakte Bestimmung des
besten Zugriffspfads handelt und nicht um eine
Wahrscheinlichkeit mit der ein guter Zugriff erfolgt. Damit
unterscheidet sich ein Optimierer, der nach diesem gezeigten
Prinzip arbeitet in der Qualität vom heutigen Stand der Technik,
was sich letztendlich bei der Performance des Test-Systems
auch deutlich zeigt.
Claims (5)
1. Computersystem, aufweisend eine Einrichtung zum Speichern
von Daten, wobei die Daten in einzelnen Datenfeldern
enthalten sind, welche mittels einer Datenstruktur
miteinander verknüpfbar sind, wobei die Datenstruktur eine
Ringstruktur aufweist.
2. Datenstruktur, aufweisend Datenfaktor zum Speichern und
Abfragen von Daten, wobei die Datenstruktur als Ringstruktur
ausgebildet ist.
3. Computerprogramm-Produkt, enthaltend Programmcode zur
Speicherung und Abfrage von Daten in einer Datenstruktur
nach Anspruch 2.
4. Datenträger mit gespeichertem Programmcode zur Speicherung
und Abfrage von Daten in einer Datenstruktur nach Anspruch
2.
5. Computerimplementiertes Verfahren zur Durchführung auf
einem Computersystem nach Anspruch 1, aufweisend die
Schritte:
- a) Abspeichern von Daten in Datenfeldern
- b) Abrufen von Daten aus Datenfeldern
Priority Applications (17)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
DE10104831A DE10104831A1 (de) | 2001-02-01 | 2001-02-01 | Datenstruktur für Informationssysteme |
AT02710826T ATE487186T1 (de) | 2001-02-01 | 2002-02-01 | Datenbanksystem und abfrageoptimierungseinheit |
EP02718074A EP1393206B1 (de) | 2001-02-01 | 2002-02-01 | Datenstruktur für informationssysteme |
AU2002249161A AU2002249161B2 (en) | 2001-02-01 | 2002-02-01 | Data structure for information systems |
JP2002561716A JP2004518226A (ja) | 2001-02-01 | 2002-02-01 | データベースシステムおよびクエリオプティマイザ |
PCT/EP2002/001027 WO2002061613A2 (en) | 2001-02-01 | 2002-02-01 | Database system and query optimiser |
AT02718074T ATE316266T1 (de) | 2001-02-01 | 2002-02-01 | Datenstruktur für informationssysteme |
US10/470,720 US20040088307A1 (en) | 2001-02-01 | 2002-02-01 | Data structure for information systems |
DE60238179T DE60238179D1 (de) | 2001-02-01 | 2002-02-01 | Datenbanksystem und abfrageoptimierungseinheit |
CA002434081A CA2434081C (en) | 2001-02-01 | 2002-02-01 | Data structures utilizing objects and pointers in the form of a tree structure |
JP2002561715A JP3959027B2 (ja) | 2001-02-01 | 2002-02-01 | 情報システムのためのデータ構造 |
DE60208778T DE60208778T2 (de) | 2001-02-01 | 2002-02-01 | Datenstruktur für informationssysteme |
US10/470,716 US20040093329A1 (en) | 2001-02-01 | 2002-02-01 | Database system and query optimiser |
AU2002229734A AU2002229734B2 (en) | 2001-02-01 | 2002-02-01 | Database system and query optimiser |
PCT/EP2002/001026 WO2002061612A2 (en) | 2001-02-01 | 2002-02-01 | Data structure for information systems |
EP02710826A EP1360616B1 (de) | 2001-02-01 | 2002-02-01 | Datenbanksystem und abfrageoptimierungseinheit |
US10/637,004 US7257599B2 (en) | 2001-02-01 | 2003-08-08 | Data organization in a fast query system |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
DE10104831A DE10104831A1 (de) | 2001-02-01 | 2001-02-01 | Datenstruktur für Informationssysteme |
Publications (1)
Publication Number | Publication Date |
---|---|
DE10104831A1 true DE10104831A1 (de) | 2002-08-08 |
Family
ID=7672701
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE10104831A Withdrawn DE10104831A1 (de) | 2001-02-01 | 2001-02-01 | Datenstruktur für Informationssysteme |
DE60238179T Expired - Lifetime DE60238179D1 (de) | 2001-02-01 | 2002-02-01 | Datenbanksystem und abfrageoptimierungseinheit |
DE60208778T Expired - Lifetime DE60208778T2 (de) | 2001-02-01 | 2002-02-01 | Datenstruktur für informationssysteme |
Family Applications After (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE60238179T Expired - Lifetime DE60238179D1 (de) | 2001-02-01 | 2002-02-01 | Datenbanksystem und abfrageoptimierungseinheit |
DE60208778T Expired - Lifetime DE60208778T2 (de) | 2001-02-01 | 2002-02-01 | Datenstruktur für informationssysteme |
Country Status (8)
Country | Link |
---|---|
US (3) | US20040088307A1 (de) |
EP (2) | EP1360616B1 (de) |
JP (2) | JP2004518226A (de) |
AT (2) | ATE487186T1 (de) |
AU (2) | AU2002249161B2 (de) |
CA (1) | CA2434081C (de) |
DE (3) | DE10104831A1 (de) |
WO (2) | WO2002061613A2 (de) |
Families Citing this family (37)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6785668B1 (en) * | 2000-11-28 | 2004-08-31 | Sas Institute Inc. | System and method for data flow analysis of complex data filters |
DE10104831A1 (de) | 2001-02-01 | 2002-08-08 | Sap Ag | Datenstruktur für Informationssysteme |
CN101365785A (zh) | 2002-07-01 | 2009-02-11 | 阿基昂生命科学公司,以生物技术资源部的名义经营 | 用于生产葡糖胺和n-乙酰氨基葡糖的方法和物质 |
US7590683B2 (en) | 2003-04-18 | 2009-09-15 | Sap Ag | Restarting processes in distributed applications on blade servers |
US7610582B2 (en) | 2003-04-18 | 2009-10-27 | Sap Ag | Managing a computer system with blades |
EP1852792B1 (de) | 2003-07-08 | 2013-04-17 | Sap Ag | Verfahren und System zur Abfrageverarbeitung |
ATE483205T1 (de) * | 2003-07-17 | 2010-10-15 | Sap Ag | Verfahren und computersystem zum speichern von mehrfachen attributwerten |
EP1498829B1 (de) * | 2003-07-18 | 2011-08-31 | Sap Ag | Verfahren und Computersystem für zusammengestellte Informationen |
US7337295B2 (en) | 2003-07-24 | 2008-02-26 | Sap Aktiengesellschaft | Memory management frame handler |
US7310719B2 (en) | 2003-07-24 | 2007-12-18 | Sap Aktiengesellschaft | Memory management tile optimization |
EP1503297A1 (de) * | 2003-07-30 | 2005-02-02 | Sap Ag | Computerimplementierte Methoden zum Abruf von Trefferzahlen aus einem Datenbanksystem, und ensprechendes Programmprodukt |
EP1510932A1 (de) * | 2003-08-27 | 2005-03-02 | Sap Ag | Computer implementierte Methode und zugehöriges Computer-Programm-Produkt um Datenmengen zu speichern und diese in einem Datenspeicher zu ermitteln |
DE60315291T2 (de) | 2003-08-27 | 2008-04-17 | Sap Aktiengesellschaft | Computersystem und Verfahren zum Betreiben eines Computersystems |
US20060101018A1 (en) * | 2004-11-08 | 2006-05-11 | Mazzagatti Jane C | Method for processing new sequences being recorded into an interlocking trees datastore |
US8706686B2 (en) * | 2003-12-24 | 2014-04-22 | Split-Vision Kennis B.V. | Method, computer system, computer program and computer program product for storage and retrieval of data files in a data storage means |
GB2431742A (en) * | 2005-10-27 | 2007-05-02 | Hewlett Packard Development Co | A method of retrieving data from a data repository |
US20070118510A1 (en) * | 2005-11-18 | 2007-05-24 | Microsoft Corporation | Optimization of leaf-level multi-dimensional calculation using scripts |
US8738639B1 (en) * | 2006-02-23 | 2014-05-27 | Verizon Data Services Llc | Methods and systems for an information directory providing audiovisual content |
US9367553B2 (en) * | 2006-12-30 | 2016-06-14 | Sap Se | Computer file system traversal |
US7752229B2 (en) | 2007-01-26 | 2010-07-06 | International Business Machines Corporation | Real-time identification of sub-assemblies containing nested parts |
US9092408B2 (en) * | 2007-08-03 | 2015-07-28 | Sap Se | Data listeners for type dependency processing |
JP4834054B2 (ja) * | 2008-11-19 | 2011-12-07 | 新日鉄ソリューションズ株式会社 | 情報処理装置、情報処理方法及びプログラム |
US10564944B2 (en) * | 2010-01-07 | 2020-02-18 | Microsoft Technology Licensing, Llc | Efficient immutable syntax representation with incremental change |
US9009137B2 (en) * | 2010-03-12 | 2015-04-14 | Microsoft Technology Licensing, Llc | Query model over information as a networked service |
DE102011087843B4 (de) * | 2011-12-06 | 2013-07-11 | Continental Automotive Gmbh | Verfahren und System zur Auswahl mindestens eines Datensatzes aus einer relationalen Datenbank |
US9781075B1 (en) * | 2013-07-23 | 2017-10-03 | Avi Networks | Increased port address space |
US9870417B2 (en) | 2014-04-22 | 2018-01-16 | Business Objects Software Ltd. | Merging business object hierarchies |
US9838303B2 (en) * | 2015-03-20 | 2017-12-05 | Juniper Networks, Inc. | PIM source discovery by last hop router |
EP3091449B1 (de) * | 2015-05-04 | 2018-07-25 | Deloitte Consulting GmbH | Betrieb eines datenbanksystems |
US9998292B2 (en) | 2015-09-30 | 2018-06-12 | Juniper Networks, Inc. | PIM source discovery by last hop router on shared tree |
US10671630B2 (en) | 2016-05-09 | 2020-06-02 | Sap Se | External access to database container artifacts |
US10776330B2 (en) | 2017-06-29 | 2020-09-15 | Sap Se | Optimized re-deployment of database artifacts |
US10674438B2 (en) | 2017-06-29 | 2020-06-02 | Sap Se | Restricting access to external schemas from within a database level container by whitelisting allowed schemas |
US10984021B2 (en) | 2017-06-29 | 2021-04-20 | Sap Se | Deployment of independent database artifact groups |
US11093443B2 (en) | 2017-06-29 | 2021-08-17 | Sap Se | Database-level container group management |
US10657114B2 (en) | 2017-11-28 | 2020-05-19 | Sap Se | Reserving key specifications |
US11030164B2 (en) | 2018-01-18 | 2021-06-08 | Sap Se | Artifact deployment for application managed service instances |
Family Cites Families (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4829427A (en) * | 1984-05-25 | 1989-05-09 | Data General Corporation | Database query code generation and optimization based on the cost of alternate access methods |
US4849905A (en) * | 1987-10-28 | 1989-07-18 | International Business Machines Corporation | Method for optimized RETE pattern matching in pattern-directed, rule-based artificial intelligence production systems |
US4956774A (en) * | 1988-09-02 | 1990-09-11 | International Business Machines Corporation | Data base optimizer using most frequency values statistics |
US5257365A (en) * | 1990-03-16 | 1993-10-26 | Powers Frederick A | Database system with multi-dimensional summary search tree nodes for reducing the necessity to access records |
JPH04299459A (ja) * | 1991-03-27 | 1992-10-22 | Nec Corp | データベースアクセスシステム |
US5355473A (en) * | 1991-06-20 | 1994-10-11 | Lawrence Au | Indexed record locating and counting mechanism |
FR2696853B1 (fr) * | 1992-10-12 | 1994-12-23 | Bull Sa | Procédé d'aide à l'optimisation d'une requête d'un système de gestion, de base de données relationnel et procédé d'analyse syntaxique en résultant. |
JP3526585B2 (ja) * | 1992-03-12 | 2004-05-17 | 株式会社リコー | 分散データベースの質問処理最適化方式 |
US5737732A (en) * | 1992-07-06 | 1998-04-07 | 1St Desk Systems, Inc. | Enhanced metatree data structure for storage indexing and retrieval of information |
US5548770A (en) * | 1993-02-25 | 1996-08-20 | Data Parallel Systems, Inc. | Method and apparatus for improving retrieval of data from a database |
US5560007A (en) * | 1993-06-30 | 1996-09-24 | Borland International, Inc. | B-tree key-range bit map index optimization of database queries |
US5657437A (en) * | 1993-12-10 | 1997-08-12 | Lucent Technologies Inc. | Data processing apparatus and method including proportional updating of data |
US5557786A (en) * | 1994-01-24 | 1996-09-17 | Advanced Computer Applications, Inc. | Threaded, height-balanced binary tree data structure |
US5742806A (en) * | 1994-01-31 | 1998-04-21 | Sun Microsystems, Inc. | Apparatus and method for decomposing database queries for database management system including multiprocessor digital data processing system |
CA2124094C (en) * | 1994-05-20 | 1999-07-20 | K. Bernhard Schiefer | Method and apparatus for optimizing data retrieval using index scanning |
DE19515020A1 (de) * | 1994-07-01 | 1996-01-04 | Hewlett Packard Co | Verfahren und Vorrichtung zum Optimieren von Abfragen mit Gruppieren-nach-Operatoren |
US5664172A (en) * | 1994-07-19 | 1997-09-02 | Oracle Corporation | Range-based query optimizer |
US5659728A (en) * | 1994-12-30 | 1997-08-19 | International Business Machines Corporation | System and method for generating uniqueness information for optimizing an SQL query |
US5701400A (en) * | 1995-03-08 | 1997-12-23 | Amado; Carlos Armando | Method and apparatus for applying if-then-else rules to data sets in a relational data base and generating from the results of application of said rules a database of diagnostics linked to said data sets to aid executive analysis of financial data |
US6175835B1 (en) * | 1996-07-26 | 2001-01-16 | Ori Software Development, Ltd. | Layered index with a basic unbalanced partitioned index that allows a balanced structure of blocks |
US5819255A (en) * | 1996-08-23 | 1998-10-06 | Tandem Computers, Inc. | System and method for database query optimization |
US5822747A (en) * | 1996-08-23 | 1998-10-13 | Tandem Computers, Inc. | System and method for optimizing database queries |
US6021405A (en) * | 1996-08-23 | 2000-02-01 | Tandem Computers, Inc. | System and method for optimizing database queries with improved performance enhancements |
GB2330221B (en) * | 1997-10-09 | 2002-07-03 | Ibm | Optimisation of relational database queries |
WO1999028505A1 (en) * | 1997-12-03 | 1999-06-10 | Curagen Corporation | Methods and devices for measuring differential gene expression |
US6675173B1 (en) * | 1998-01-22 | 2004-01-06 | Ori Software Development Ltd. | Database apparatus |
US7016910B2 (en) * | 1999-12-30 | 2006-03-21 | Decode Genetics Ehf. | Indexing, rewriting and efficient querying of relations referencing semistructured data |
DE10104831A1 (de) | 2001-02-01 | 2002-08-08 | Sap Ag | Datenstruktur für Informationssysteme |
-
2001
- 2001-02-01 DE DE10104831A patent/DE10104831A1/de not_active Withdrawn
-
2002
- 2002-02-01 WO PCT/EP2002/001027 patent/WO2002061613A2/en active IP Right Grant
- 2002-02-01 JP JP2002561716A patent/JP2004518226A/ja active Pending
- 2002-02-01 EP EP02710826A patent/EP1360616B1/de not_active Expired - Lifetime
- 2002-02-01 DE DE60238179T patent/DE60238179D1/de not_active Expired - Lifetime
- 2002-02-01 US US10/470,720 patent/US20040088307A1/en not_active Abandoned
- 2002-02-01 JP JP2002561715A patent/JP3959027B2/ja not_active Expired - Lifetime
- 2002-02-01 AU AU2002249161A patent/AU2002249161B2/en not_active Expired
- 2002-02-01 EP EP02718074A patent/EP1393206B1/de not_active Expired - Lifetime
- 2002-02-01 AU AU2002229734A patent/AU2002229734B2/en not_active Expired
- 2002-02-01 US US10/470,716 patent/US20040093329A1/en not_active Abandoned
- 2002-02-01 AT AT02710826T patent/ATE487186T1/de not_active IP Right Cessation
- 2002-02-01 WO PCT/EP2002/001026 patent/WO2002061612A2/en active IP Right Grant
- 2002-02-01 DE DE60208778T patent/DE60208778T2/de not_active Expired - Lifetime
- 2002-02-01 CA CA002434081A patent/CA2434081C/en not_active Expired - Lifetime
- 2002-02-01 AT AT02718074T patent/ATE316266T1/de not_active IP Right Cessation
-
2003
- 2003-08-08 US US10/637,004 patent/US7257599B2/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
EP1360616A2 (de) | 2003-11-12 |
EP1393206B1 (de) | 2006-01-18 |
EP1393206A2 (de) | 2004-03-03 |
WO2002061613A3 (en) | 2003-09-04 |
AU2002249161B2 (en) | 2005-05-19 |
US7257599B2 (en) | 2007-08-14 |
ATE316266T1 (de) | 2006-02-15 |
US20040088307A1 (en) | 2004-05-06 |
EP1360616B1 (de) | 2010-11-03 |
JP2004518225A (ja) | 2004-06-17 |
AU2002229734B2 (en) | 2005-05-05 |
JP2004518226A (ja) | 2004-06-17 |
CA2434081A1 (en) | 2002-08-08 |
WO2002061612A2 (en) | 2002-08-08 |
WO2002061613A2 (en) | 2002-08-08 |
DE60208778T2 (de) | 2006-09-07 |
DE60238179D1 (de) | 2010-12-16 |
US20040093329A1 (en) | 2004-05-13 |
ATE487186T1 (de) | 2010-11-15 |
DE60208778D1 (de) | 2006-04-06 |
US20040139046A1 (en) | 2004-07-15 |
CA2434081C (en) | 2009-06-16 |
WO2002061612A3 (en) | 2003-11-27 |
JP3959027B2 (ja) | 2007-08-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE10104831A1 (de) | Datenstruktur für Informationssysteme | |
DE69636761T2 (de) | Speichern und wiederauffinden von geordneten schlüsselmengen in einem kompakten 0-kompletten baum | |
DE3688529T2 (de) | Verfahren zur Auffrischung von Mehrspaltentabellen in einer relationellen Datenbank mit Mindestinformation. | |
DE69533786T2 (de) | Vorrichtung zum Erzeugen von objektorientierten Schnittstellen für relationale Datenbanken und von dieser Vorrichtung durchgeführtes Verfahren | |
DE60004385T2 (de) | Verfahren und systeme um olap hierarchien zusammenfassbar zu machen | |
DE60213409T2 (de) | Erstellung von strukturierten daten aus unformatiertem text | |
US5893088A (en) | System and method for performing database query using a marker table | |
EP1258812B1 (de) | Virtuelle Datenbank heterogener Datenstrukturen | |
EP1311989B1 (de) | Verfahren zur automatischen recherche | |
DE60035432T2 (de) | System zur verwaltung der rdbm fragmentierungen | |
DE10149693A1 (de) | Objekte in einem Computersystem | |
DE10103574A1 (de) | Aggregierte Prädikate und Suche in einem Datenbankverwaltungssystem | |
DE3232675A1 (de) | Verfahren zur steuerung des datenzugriffs in einem rechner und daten-kontrollsystem zur durchfuehrung des verfahrens | |
DE10056763A1 (de) | Generieren von Einschränkungsabfragen mit Hilfe von Tensordarstellungen | |
EP1276056B1 (de) | Verfahren zum Verwalten einer Datenbank | |
EP2021952A1 (de) | Verfahren zum steuern eines relationalen datenbanksystems | |
WO2007048148A1 (de) | Verfahren zur steuerung eines relationalen datenbanksystems | |
EP1502211B1 (de) | Verfahren und vorrichtung zur zugriffssteuerung in wissensnetzen | |
Griffin et al. | A framework for implementing hypothetical queries | |
DE10056765A1 (de) | Generieren von Statistiken für Datenbankabfragen mit Hilfe von Tensordarstellungen | |
Plodzien et al. | Static analysis of queries as a tool for static optimization | |
EP1064606B1 (de) | Datenverarbeitungssystem und verfahren zum automatischen erstellen von inhaltsangaben von textdokumenten | |
EP1324218A1 (de) | Kategorisierungsystem für Datenobjekte und Verfahren zum Prüfen der Konsistenz von Zuordnungen von Datenobjekten zu Kategorien | |
EP1234231B1 (de) | Verfahren zur erzeugung grafischer benutzerschnittstellen für computerprogramme | |
Mayr et al. | Objektorientierte Methoden für Informationssysteme: Fachtagung der GI-Fachgruppe EMISA, Klagenfurt, 7.–9. Juni 1993 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8130 | Withdrawal |