DE69926305T2 - Rechnerlesbarer Speicher zum Speichern einer Datenbank und Indizes - Google Patents

Rechnerlesbarer Speicher zum Speichern einer Datenbank und Indizes Download PDF

Info

Publication number
DE69926305T2
DE69926305T2 DE69926305T DE69926305T DE69926305T2 DE 69926305 T2 DE69926305 T2 DE 69926305T2 DE 69926305 T DE69926305 T DE 69926305T DE 69926305 T DE69926305 T DE 69926305T DE 69926305 T2 DE69926305 T2 DE 69926305T2
Authority
DE
Germany
Prior art keywords
records
fine
data
key
coarse
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.)
Expired - Fee Related
Application number
DE69926305T
Other languages
English (en)
Other versions
DE69926305D1 (de
Inventor
Paul P. Vagnozzi
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
INFORMATION SYSTEMS CORP ROCHESTER
Information Systems Corp
Original Assignee
INFORMATION SYSTEMS CORP ROCHESTER
Information Systems Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by INFORMATION SYSTEMS CORP ROCHESTER, Information Systems Corp filed Critical INFORMATION SYSTEMS CORP ROCHESTER
Publication of DE69926305D1 publication Critical patent/DE69926305D1/de
Application granted granted Critical
Publication of DE69926305T2 publication Critical patent/DE69926305T2/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2246Trees, e.g. B+trees
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2237Vectors, bitmaps or matrices
    • YGENERAL 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
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • YGENERAL 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
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99932Access augmentation or optimizing
    • YGENERAL 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
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99933Query processing, i.e. searching
    • Y10S707/99936Pattern matching access
    • YGENERAL 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
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99942Manipulating data structure, e.g. compression, compaction, compilation
    • YGENERAL 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
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99944Object-oriented database structure
    • Y10S707/99945Object-oriented database structure processing

Description

  • Technisches Gebiet
  • Diese Erfindung betrifft im Allgemeinen Techniken zum Speichern und Abrufen von Daten auf Digitalcomputern und insbesondere ein verbessertes Verfahren und Gerät zum schnellen Speichern und Abrufen von Daten aus sehr großen Datenbanken unter Verwendung von mehrfachen Abrufschlüsseln und komplexen Abrufkriterien.
  • Erfindungshintergrund
  • So wie die Verarbeitungsgeschwindigkeit und die Speicherkapazität von Digitalcomputern weiterhin steigen, steigt ihre Eignung zur Handhabung von sehr großen Datenbanken. Um brauchbar zu sein, muss eine Datenbank typischerweise durchsuchbar sein, so dass ein Anwender eine Schlüsselwortsuche der Datenbank ausführen und Informationen abrufen kann, die mit dem Schlüsselwort in Zusammenhang stehen. Für große Datenbanken ist lineares Durchsuchen der Daten nach Schlüsselwörtern typischerweise zu zeitraubend um brauchbar zu sein. Folglich sind große Datenbanken häufig indiziert, um eine schnelle Abfrageabwicklung und schnellen Abruf von Daten bereitzustellen.
  • Wie bekannt ist, werden in den meisten Datenbanken Daten logisch und häufig physikalisch in einzelne Felder innerhalb eines Datensatzes organisiert, wobei jeder Datensatz eine Sammlung von Daten über ein Objekt, wie etwa einen Patienten, ein Fahrzeug oder ein Dokument repräsentiert und jedes Feld innerhalb des Datensatzes ein unterschiedliches Datenelement über ein Objekt enthält, wie etwa den Nachnamen, den Vornamen, das Alter, das Geschlecht etc. des Patienten. Um Flexibilität zu bieten, muss das Programm zur Handhabung der Datenbank nicht nur die Suche einzelner Schlüsselwörter der Datenfelder erlauben, sondern muss komplexere Abfragen unterstützen, einschließlich boolesche Ausdrücke (beispielsweise UND, ODER, NICHT) von Schlüsselwörtern.
  • Häufig wird eine Datenbank sowohl Daten hoher als auch niedriger Mächtigkeit enthalten; das heißt, die Datenbank wird Datentypen enthalten, die viele verschiedene Werte aufweisen können, sowie Datentypen, die sehr wenig verschiedene Werte aufweisen werden. Beispiele von Daten niedriger Mächtigkeit beinhalten das Geschlecht einer Person (männlich oder weiblich), Zugehörigkeit zu politischen Parteien oder das Fabrikat eines Fahrzeugs. Beispiele von Daten hoher Mächtigkeit beinhalten solche Dinge wie Nachnamen, Geburtdaten, Fahrzeugidentifikationsnummern (VIN) und Sozialversicherungsnummern (SSN), von denen die letzten beiden in jedem Datensatz in der Datenbank wahrscheinlich einen einzigartigen Wert aufweisen werden. Für ein Optimum an Flexibilität muss ein Datenbankindex eine effiziente Suche nach Daten sowohl hoher als auch niedriger Mächtigkeit ermöglichen. Typische Speicherverfahren sind jedoch lediglich für die Abfrage von Daten mit hoher Mächtigkeit entworfen und optimiert, unter Verwendung einzelner oder zusammengesetzter Schlüsselindizes.
  • Ein Weg zum Indizieren einer Datenbank erfolgt über die Verwendung von Schlüsseln, die einen schnellen Weg bieten, um spezifische Datenelemente innerhalb der Datenbank zu lokalisieren. Diese Schlüssel werden von einem Programm zur Handhabung der Datenbank verwendet, um Datensätze aus der Datenbank zu lokalisieren und abzurufen, die die Daten enthalten, die mit den Schlüsseln in Verbindung stehen. Bitmaps oder Bitvektoren werden manchmal zusammen mit Schlüsseln verwendet, um zu identifizieren, welche Datensätze ein bestimmtes Datenelement innerhalb eines einzelnen Datenfeldes enthalten. Diese Bitvektoren umfassen eine Kette von Bits, wobei jedes Bit einen einzelnen Datensatz in der Datenbank repräsentiert. Ein bestimmter Bitvektor wird ein bestimmtes Datenelement repräsentieren, das in einem bestimmten Feld in wenigstens einem der Datensätze der Datenbank gefunden wird. Die Anwesenheit eines Einstellbits (d. h. eines Bits, das logisch gesetzt ist) im Bitvektor indiziert, dass der Datensatz, der mit diesem Bit in Verbindung steht, das bestimmte Datenelement enthält. Auf diese Weise wird beispielsweise, wo eine Datenbank Patientendatensätze enthält, die ein Feld „Vornamen" beinhalten, ein Bitvektor von „0010100000", der mit dem Namen „Elisabeth" für das Feld „Vornamen" in Verbindung steht, indizieren, dass der dritte und der fünfte Datensatz für Patienten steht, die Elisabeth genannt werden.
  • Manchmal wird zusätzlich zum Indizieren einer Datenbank eher die Datenbank selbst zusammen mit dem Index gespeichert, als die Datenbank als eine separat gespeicherte Struktur gespeichert wird. Beispielsweise wird im US-Patent Nr. 4,606,002 von A. Waisman et al. ein B-Baum verwendet, um die Datenbankdaten zusammen mit einem invertierten B-Baumindex zu speichern, der Schlüssel und zugehörige Sparse-Array-Bitmaps verwendet, um zu identifizieren, welche Datensätze bestimmte Datenelemente enthalten. Ein Datensatzindex wird verwendet, um verschiedene Datensatztabellen zu identifizieren (beispielsweise eine Tabelle von Patientendaten versus eine Tabelle von Ärztedatensätzen) und zwischen den Datensatzdaten und den Indizes zu unterscheiden. Die Daten werden unter Verwendung von ungeradzahligen Datensatzkennungen gespeichert und die zugehörigen Indizes werden unter Verwendung der nächsten geradzahligen Datensatzkennung gespeichert. Jeder Schlüssel und zugehöriges Sparse-Array-Bitmap stehen mit einem Bereich von Datensätzen in Verbindung und werden zusammen im B-Baum bespeichert. Der Schlüssel selbst umfasst eine Datensatzkennung, eine Feldkennung, einen Datenwert und einen Bereichswert in dieser Reihenfolge. Die Datensatzkennung gibt an, auf welche Datentabelle sich der Schlüssel bezieht. Die Feldkennung ist eine numerische Kennung des Felds innerhalb des Datensatzes, auf den sich der Schlüssel bezieht. Der Datenwert ist das aktuelle Datenelement, das in wenigstens einem der Datensätze enthalten ist, auf die sich Schlüssel bezieht. Und der Bereichswert identifiziert den Bereich der Datensätze, auf die sich der Schlüssel bezieht. Der Sparse-Array-Bitmap beinhaltet drei Niveaus von Bitvektoren. Das untere Niveau umfasst eine Zahl von Bitvektoren mit einem Byte, wobei die einzelnen Bits eines jeden Bitvektors angeben, welche Datensätze innerhalb des zugehörigen Bereichs von Datensätzen den zugehörigen Datenwert in dem Feld enthalten, das durch die Feldkennung spezifiziert wird. Das mittlere Niveau enthält Bitvektoren mit einem Byte, wobei jedes Bit einen der Bitvektoren mit einem Byte des unteren Niveaus repräsentiert. Ein Bit in den Bitvektoren des mittleren Niveaus wird (logisch) gesetzt, wenn irgendeines der Bits im Bitvektor des unteren Niveaus, den es repräsentiert, gesetzt ist; andernfalls wird es auf Null gesetzt. Die gleiche Struktur wird auf das obere Niveau übertragen, das ein einzelnes Byte beinhaltet, das alle Bitvektoren des mittleren Niveaus repräsentiert. Wo ein Bitvektor keine Bits beinhaltet, wird der Bitvektor nicht zugewiesen und seine Abwesenheit wird dadurch gekennzeichnet, dass sein zugehöriges Bit aus dem nächst höherem Niveau auf Null gesetzt wird.
  • Wie von Waisman et al. angemerkt wurde, vereinfacht die Verwendung von Bitvektoren die Verarbeitung der booleschen Ausdrücke, da zwei Bitvektoren gemäß dem spezifizierten booleschen Operator kombiniert werden können, und der resultierende Bitvektor repräsentiert die Datensätze, die den booleschen Ausdruck erfüllt. Ein Problem beim Kombinieren von Bitvektoren des oberen Niveaus, bei dem die Bits nicht einzelne Datensätze repräsentieren, liegt in der Verarbeitung von NICHT-Ausdrücken. Da ein gesetztes Bit lediglich anzeigt, dass wenigstens ein Datensatz (aber nicht notwendigerweise alle) im zugehörigen Bereich von Datensätzen den Datenwert enthält, kann die NICHT-Operation nicht einfach durch Invertieren des Bits ausgeführt werden. Stattdessen müssen, wie es in Waisman et al. diskutiert wird, die Bits des unteren Niveaus, die einzelne Datensätze repräsentieren, invertiert und verwendet werden.
  • Da bei Waisman et al. die Daten auf dem unteren Niveau eines B-Baums gespeichert werden, müssen konsekutiv nummerierte Datensätze nicht physikalisch zusammen gespeichert werden. Dies erlaubt die Verwendung von Feldern variabler Länge und ermöglicht, dass der Datenbank Felder zugefügt werden können, ohne dass die Datenbank reorganisiert werden muss oder Veränderungen am Programm zur Handhabung der Datenbank vorgenommen werden müssen, das verwendet wird, um auf die Daten zuzugreifen. Dieser Typ von Datenbankstruktur kann jedoch die Abfrage von Datensätzen komplizieren, da die Felder irgendeines Datensatzes nicht alle physikalisch zusammen müssen und da zur Abfrage auch einer kleinen Gruppe von konsekutiven Datensätzen häufig separater I/O-Zugriff erforderlich sein kann. Bei gegebener relativer Langsamkeit eines I/O-Zugriffs kann die Datenspeicherstruktur, die von Waisman et al. genutzt wird, zu einer unerwünscht langsamen Abfrage von Datensätzen führen.
  • Ming-Chuan Wu, „Encoded Bitmap Indexing for Data Warehouses, Proceedings, 14th International conference on Data Engeneering, IEEE 1998, offenbart ein Bitmapindexieren.
  • Demgemäß ist es eine Aufgabe der Erfindung, ein Verfahren und ein Gerät zur Handhabung von großen Datenmengen in einer Art und Weise bereitzustellen, das die folgenden Vorteile bietet:
    • 1. Sehr schnelle Suchantwort;
    • 2. Schnelle Aktualisierungsantwort;
    • 3. Unterstützung von komplexen Abfrageoperationen, einschließlich der Kombination von mehrfachen Schlüsseln, die boolesche Logik verwenden, mit gleich schneller Abfrage für alle boolesche Operatoren;
    • 4. Minimieren der Zahl von erforderlichen Schlüsselindizes;
    • 5. Minimieren des Speicherplatzes, der für den Datenbankindex erforderlich ist;
    • 6. Eine Suchantwortzeit, die proportional zur Zahl der abgefragten Datenelemente ist, anstelle der Zahl der Datenelemente, die in der Datenbank gespeichert sind;
    • 7. Eine äußerst schnelle Zähloperation zur Vorschau von Abfragesuchen und Feinabstimmung von Abfragekriterien; und
    • 8. Eine Möglichkeit, sowohl Daten hoher als auch niedriger Mächtigkeit gut in einer einzigen vereinten Schlüsselindexstruktur zu handhaben.
  • Zusammenfassung der Erfindung
  • Erfindungsgemäß wird ein Datenbanksystem bereitgestellt, das die oben erwähnten Probleme der Handhabung von großen Datenmengen überwindet. Die Daten umfassen eine Vielzahl von Datensätzen, die in dem Datenspeicherbauelement in einem rechnerlesbaren Format gespeichert sind. Jeder Datensatz beinhaltet eine Zahl von Datenfeldern, wobei wenigstens einige der Datenfelder einen Datenwert darin gespeichert aufweisen. Die Datensätze sind logisch in Gruppen oder Feinintervallen von Datensätzen getrennt, wobei jedes Feinintervall eine vorgewählte Maximalzahl n von Datensätzen aufweist. Die Feinintervalle sind logisch in zwei oder mehr Sätzen oder Grobintervallen organisiert, wobei jedes Grobintervall eine vorgewählte Maximalzahl m von Feinintervallen beinhaltet, wobei jeder Satz maximal n·m Datensätze beinhaltet. Das Datenbanksystem beinhaltet eine Vielzahl von Indizes, von denen jeder mit einem unterschiedlichen Datenfeld in Verbindung steht und wobei jeder eine Zahl von Schlüsseln umfasst. Jeder Datenwert, der innerhalb eines indizierten Datenfeldes gespeichert ist, weist einen oder mehrere Feinschlüssel und einen oder mehrere Grobschlüssel auf, die damit in Verbindung stehen. Die Feinschlüssel stehen mit einem der Feinintervalle in Verbindung und wenigstens einige der Feischlüssel stehen mit einem Feinbitvektor in Verbindung, der identifiziert, welcher der Datensätze, die innerhalb dem Feinintervall enthalten sind, den Datenwert enthält, der mit dem Schlüssel in Verbindung steht. Die Grobschlüssel stehen mit einem der Grobintervalle in Verbindung und wenigstens einige der Grobschlüssel stehen mit einem Grobbitvektor in Verbindung, der identifiziert, welche der Feinintervalle wenigstens einen Datensatz enthält, der darin gespeichert den Datenwert enthält, der mit dem Schlüssel in Verbindung steht.
  • Kurze Beschreibung der Zeichnung
  • Ein bevorzugtes exemplarisches Ausführungsbeispiel der vorliegenden Erfindung wird im Folgenden in Verbindung mit der beigefügten Zeichnung beschrieben werden, wobei gleiche Bezeichnungen gleiche Elemente kennzeichnen und
  • 1 die Struktur eines exemplarischen Ausführungsbeispiels einer Datenbank darstellt, die bei der vorliegenden Erfindung verwendet wird;
  • 2 eine Übersicht der Suchverarbeitung unter Verwendung eines auf Schüsseln basierenden Index der vorliegenden Erfindung ist;
  • 3 die logische Trennung der Datensätze in Grob- und Feinintervalle zur erfindungsgemäßen Verwendung beim Erzeugen von Datenbankindizes darstellt;
  • 4 eine schematische Darstellung von Probefahrzeugfarbdaten für jeden der Zahl von Datensätzen aus der Datenbank von 1 ist;
  • 5 die allgemeine Form der Struktur eines Ausführungsbeispiels eines Index darstellt, der erfindungsgemäß konstruiert wurde;
  • 6 die Indexstruktur für die Probedaten von 4 darstellt;
  • 7 den Aufbau von Schlüsseln zeigt, die beim Index von 5 und 6 verwendet werden;
  • 8 den Aufbau der Feinverknüpfungen zeigt, die beim Index von 5 und 6 verwendet werden;
  • 9 den Aufbau der Grobverknüpfungen zeigt, die beim Index von 5 und 6 verwendet werden;
  • 10 den Aufbau des Grobbitvektors zeigt, die beim Index von 5 und 6 verwendet werden;
  • 11 die B-Baumstruktur darstellt, die verwendet wird, um die Schlüssel und Verknüpfungen des Index von 6 zu speichern;
  • 12 ein Blockdiagramm eines Computersystems zur Verwendung bei der Implementierung der vorliegenden Erfindung ist;
  • 13 ein Ablaufdiagramm ist, das einen erfindungsgemäßen Prozess zum Zählen der zahl von Datensätzen darstellt, die eine gegebene Suche zufrieden stellen; und
  • 14 ein Ablaufdiagramm ist, das einen erfindungsgemäßen Prozess zum Abrufen der Datensätze darstellt, die eine gegebene Suche zufrieden stellen.
  • Beschreibung des bevorzugten Ausführungsbeispiels
  • Datenspeicherung innerhalb der Datenbank
  • Unter Bezugnahme auf 1 ist eine Datenbank 20 gezeigt, die eine Aufstellung von Datensätzen 22 umfasst. Jeder der Datensätze weist eine feste Länge auf und ist einer eindeutigen Datensatznummer zugeordnet, beginnend mit Null. Dies ermöglicht, dass die Datensätze der Reihe nach in einer einzigen Datei gespeichert werden, wobei die Stelle innerhalb der Datei irgendeines bestimmten Datensatzes einfach durch Multiplizieren der Datensatzlänge (in Bytes) mit der diesem Datensatz zugeordneten Datensatznummer und Verwenden des sich ergebenden Werts als Versatz vom Beginn der Datei bestimmt wird. Diese Anordnung bietet eine sehr einfache und schnelle Zuordnung, Freigabe und Wiederverwendung des Datenspeicherplatzes innerhalb der Datei. Durch Speichern aller Datensätze innerhalb einer einzelnen Datei können zudem ganze Datenbanken leicht erzeugt oder gelöscht werden. Das Erzeugen erfordert einfach das Erzeugen einer neuen, leeren Datei. Das Löschen erfordert einfach das Löschen einer bestehenden Datei. Der ganze Nutzerzugriff auf die Datenbank erfolgt mittels eines Programms zur Handhabung der Datenbank, die es dem Anwender ermöglicht, Daten hinzuzufügen, zu ändern und aus der Datenbank zu löschen. Wie unten erläutert werden wird, unterstützt das Programm zur Handhabung der Datenbank boolesche und andere Abfrageverarbeitung unter Verwendung von Indizes auf der Grundlage von Schlüsseln, die schnellen Zugriff auf die Daten innerhalb der Datenbank bieten.
  • Wie es in 1 gezeigt ist, beinhaltet das dargestellte Ausführungsbeispiel der Erfindung eine Datenbank 20 von Fahrzeuginformationen. Jeder Datensatz 22 besitzt ein identisches Format, das eine Zahl von Programmdatenfeldern 24 und eine Zahl von Nutzerdatenfeldern 26 beinhaltet. Die Programmdatenfelder beinhalten Gültigkeits-, Selbst-ID-, Nächst-Frei-, und Prüfsummenfelder. Diese Felder sind dem Anwender nicht zugänglich, werden aber vom Programm zur Handhabung der Datenbank als ein Teil der Handhabung der Datenbank verwendet, wie unten beschrieben werden wird. Die Nutzerdatenfelder 26 beinhalten die tatsächlichen Datenfelder, die verwendet werden, um die Datenbankdaten zu speichern. Beim dargestellten Ausführungsbeispiel enthalten diese Felder Fahrzeugfabrikat, Modell, Jahr, VIN, Motor, Getriebe, Farbe und eine Zahl von Optionsfelder zum Speichern von Information über verschiedene Optionen, die ein Fahrzeug aufweisen kann; beispielsweise ein Schiebedach, Aluminiumräder, Seitenairbags etc. Wie man einsehen wird, können die Nutzerdatenfelder vom Anwender als ein Teil der anfänglichen Einstellung der Datenbank spezifiziert werden, wobei der Anwender die Größe und den Datentyp (beispielsweise Zeichenkette, Datum, ganze Zahl) eines jeden Nutzerdatenfeldes angibt, das in der Datenbank enthalten sein soll. Alle Felder, sowohl Programmdatenfelder als auch Nutzerdatenfelder, sind Felder mit fester Länge, so dass alle Datensätze eine feste Länge aufweisen und leicht unter Verwendung eines berechneten Versatzes zugänglich sind, wie es oben beschrieben wurde.
  • Das Gültigkeitsdatenfeld wird verwendet, um den Datensatz entweder als in Gebrauch (gültig) oder als gelöscht (ungültig) zu markieren. Dies wird dort verwendet, wo ein Datensatz vom Anwender verwendet und dann gelöscht worden ist, in welchem Fall das Gültigkeitsfeld verwendet wird, um anzugeben, dass der Datensatz keine gültigen Daten enthält und wieder verwendet werden kann. Das Gültigkeitsfeld kann ein einzelnes Bit sein, obwohl vorzugsweise ein Bitmuster verwendet werden kann, um einen Datenverlust infolge einer Verfälschung eines einzelnen Bits zu verhindern. Das Gültigkeitsfeld kann während Rückgewinnungsoperationen verwendet werden, um die Gültigkeit von Daten zu bestimmen, die den Feldern des Datensatzes enthalten sind. Dieses Feld kann zusammen mit den Nutzerdatenfeldern indiziert sein, wie unten beschrieben werden wird. Das Selbst-ID-Datenfeld enthält eine eindeutige Identifikation des Datensatzes. Die Selbst-ID umfasst die Dateikennung (beispielsweise Dateiname der Datenbasis) Datensatznummer des Datensatzes. Dieses Feld wird vom Programm zur Handhabung der Datenbank verwendet, um zu verifizieren, dass der Datensatz tatsächlich ist, wofür er gehalten wird. Das Nächste-Frei-Feld deutet auf den nächsten freien (d. h. gelöschten) Datensatz hin, unter Verwendung des Versatzes des Datensatzes, auf den er hinweist. Dieses Feld wird verwendet, um einen Stapel gelöschter Datensätze zu bilden, die wieder verwendet werden können, wenn zur Datenbank neue Datensätze hinzugefügt werden. Schließlich enthält das Prüfsummenfeld einen Prüfsummenwert, der aus den gesamten Inhalten des Datensatzes, mit Ausnahme der Prüfsumme selbst, errechnet wird. Die Prüfsumme bietet eine Gültigkeitsüberprüfung, um Datenbankkonsistenz und -richtigkeit sicherzustellen.
  • Indexieren der Datenbank
  • Um die Schlüsselwortsuche von Nutzerdatenfeldern innerhalb der Datenbank 20 zu ermöglichen, werden alle durchsuchbaren Nutzerdatenfelder 26 mit Schlüsseln indiziert, die verwendet werden, um zu identifizieren, welche Datensätze ein bestimmtes Datenelement (beispielsweise Datenwert) innerhalb eines bestimmten Feldes enthalten. Typische Abfragen könnten beispielsweise folgende sein:
    VIN = XYZ123
    FABRIKAT = Chevrolet
    MODELL = Corvette UND JAHR = 1975
    MOTOR = V6A ODER MOTOR = V8G
    MODELL = Scout UND (Trans = T3 ODER Trans = T4) UND NICHT
    (FARBE = Grau ODER JAHR < 1969)
  • 2 stellt einen Überblick bereit, wie die Abfrageverarbeitung unter Verwendung dieser Indizes ausgeführt wird. Für jedes indizierte Datenfeld 24 und 26 ist ein Zeiger 28 vorgesehen, der auf einen Index 30 für dieses bestimmte Datenfeld weist. Diese Zeiger sind in einer Tabelle 32 gespeichert, die von der tatsächlichen Datenbank selbst getrennt ist. Unter Verwendung des Index 30 erhält das Programm zur Handhabung der Datenbank eine Liste 34 (repräsentiert durch einen oder mehrere Bitvektoren) von Datensätzen 22, die das Schlüsselwort enthalten, das in der Suche verwendet wird. Für boolesche und Bereichssuchen (d. h. für mehrfache Schlüsselwortsuchen) werden die Listen von einem Suchprozessormodul 36 verarbeitet, das die Listen 34 miteinander in Übereinstimmung mit der passenden booleschen Logik vergleicht, was zu einer Liste 38 von Datensätzen führt, die die Suche zufrieden stellen. Die Datensätze werden dann abgerufen und, falls gewünscht, durch eine wahlfreie Sortierung 40 verarbeitet, die zu einer letzten, sortierten Datensatzliste 42 des Suchergebnisses führt.
  • Die Indizes 30 sind tatsächlich Sammlungen von Schlüsseln, die in einem B-Baum gespeichert sind. Beim Erzeugen der Indizes werden nicht nur für jedes Nutzerdatenfeld separate Schlüssel generiert, sondern auch für jeden Datenwert, der innerhalb dieses Datenfeldes in wenigstens einem der Datensätze gespeichert wird. Mit jedem Schlüssel steht eine Verknüpfung in Zusammenhang, die verwendet wird, um zu bestimmen, welche Datensätze den Datenwert enthalten, der mit dem Schlüssel in Verbindung steht. Um das Abrufen von Datensätzen auf der Grundlage der Suchverarbeitung zu optimieren, wird eine hierarchische Struktur von Schlüsseln und Bitvektoren verwendet, wobei jeder Schlüssel und Bitvektor nicht mehr als eine bestimmte Zahl von Datensätzen in der Datenbank repräsentiert. Auf diese Weise werden, wenn der Index erzeugt wird, für jeden Datenwert eines jeden Datenfeldes mehrere Schlüssel und Bitvektoren erzeugt und die Zahl der erzeugten Schlüssel und Bitvektoren wird von der Gesamtzahl von Datensätzen in der Datenbank und der Verteilung der Daten unter diesen Datensätzen abhängen. Es werden zwei Typen von Schlüsseln und Bitvektoren verwendet: Grobe und feine, wobei die Feinschlüssel und -bitvektoren jeweils eine Gruppe von aufeinander folgenden Datensätzen repräsentieren und die Grobschlüssel und -bitvektoren jeweils einen Satz von aufeinander folgenden Feinbitvektoren repräsentieren.
  • Das Indexieren der Datenbank 20 unter Verwendung dieser Schlüssel und Bitvektoren wird nun in Detail in Verbindung mit den 3 bis 11 beschrieben werden. 3 stellt die logische Trennung der Datensätze in Gruppen von was als Feinintervalle bezeichnet wird, wobei die Feinintervalle logisch in Sätzen von was als Grobintervalle bezeichnet werden organisiert sind. Wie es im oberen Teil von 3 gezeigt ist, umfasst jedes Feinintervall 8.000 aufeinander folgende Datensätze und jedes Grobintervall umfasst 4.000 aufeinander folgende Feinintervalle. Demgemäß repräsentiert ein einzelnes Grobintervall 32 Millionen aufeinander folgende Datensätze in der Datenbank. Jedes Feinintervall weist eine eindeutige, absolute Feinintervallnummer auf, die für einen gegebenen Datensatz k und eine gegebene Feinintervalllänge fsl gleich k DIV fsl ist, wobei DIV eine ganzzahlige Division angibt, die den ganzzahligen Quotienten zurückgibt. Auf diese Weise wird für die (absolute) Datensatznummer 40.420.973 und eine Feinintervalllänge von 8.000 die absolute Feinintervallnummer 5.052 sein (40.420.973 DIV 8.000). Gleicherweise weist jedes Grobintervall eine eindeutige, absolute Grobintervallnummer auf, die für einen gegebenen Datensatz k, eine gegebene Grobintervalllänge csl und eine gegebene Feinintervalllänge fsl gleich k DIV (csl × fsl)ist. Auf diese Weise wird für die Datensatznummer 40.420.973 mit einer Grobintervalllänge von 4.000 und einer Feinintervalllänge von 8.000 die absolute Grobintervallnummer 1 sein (40.420.973 DIV 32.000.000).
  • Innerhalb eines jeden Feinintervalls kann jeder Datensatz 22 durch eine relative Datensatznummer identifiziert werden, die die Position des Datensatzes innerhalb des jeweiligen Feinintervalls angibt. Für einen gegebenen Datensatz k ist die relative Datensatznummer gleich k MOD fsl,wobei MOD die Modulusdivision angibt, die den ganzzahligen Rest zurückgibt. Auf diese Weise besitzt die (absolute) Datensatznummer 40.420.973 für eine Feinintervalllänge von 8.000 eine relative Datensatznummer von 4.973 auf (40.420.973 MOD 8.000). Gleicherweise kann innerhalb irgendeines bestimmten Grobintervalls jedes Feinintervall durch eine relative Feinintervallnummer identifiziert werden, die die Position des Feinintervalls innerhalb des jeweiligen Grobintervalls angibt. Für einen gegebenen Datensatz k ist die relative Datensatznummer gleich (k MOD (csl × fsl) DIV fsl.
  • Auf diese Weise würde für die oben angegebenen Intervalllängen für die Datensatznummer 40.420.973 die relative Feinintervallnummer 1052 sein ((40.420.973 MOD 32.000.000) DIV 8.000). Wie unten weiter erläutert werden wird, werden die relativen Datensatznummern und die relativen Feinintervallnummern in Verbindung mit den Verknüpfungen verwendet, die mit den Fein- bzw. Grobschlüsseln in Verbindung stehen.
  • Für Illustrationszwecke bietet 4 Probedaten aus der Datenbank 20 von 1, die verschiedene Datenwerte zeigt, die im Feld 26 „Fahrzeugfarbe" einer Zahl von Datensätzen 22 innerhalb der Datenbank gespeichert sind. Um beim Verständnis der Indexstruktur zu helfen, beinhaltet 4 auch Spalten, die die absoluten Grob- und Feinintervallnummern für die Datensätze 22, die relativen Feinintervallnummern der Datensätze innerhalb eines jeweiligen Grobintervalls und die relativen Datensatznummern der Datensätze innerhalb eines jeweiligen Feinintervalls auflisten. Man wird einsehen, dass die Tabelle von 4 einfach eine logische Ansicht der Daten und der zugehörigen Intervallnummern ist und nicht irgendeine tatsächliche Datenstruktur repräsentiert, die vom Programm zur Handhabung der Datenbank verwendet wird. Während die in 4 bereitgestellten Probedaten in Verbindung mit der folgenden Beschreibung und der beigefügten Zeichnung verwendet werden wird, wird man auch einsehen, dass die Spärlichkeit der Fahrzeugfarbendaten nur für den Zweck der Vereinfachung der Veranschaulichung der Datenbank vorgesehen ist und dass es für Daten mit geringer Mächtigkeit, wie etwa die Fahrzeugfarbe, wahrscheinlich ist, dass die meisten, wenn nicht alle, Feinintervalle eine große Zahl von Datensätzen enthalten, die einen bestimmten Datenwert, wie etwa blau, enthalten.
  • Für jeden Datenwert eines indizierten Datenfeldes wird für jedes Feinintervall und Grobintervall, das wenigstens einen Datensatz enthält, die den Datenwert innerhalb des Datenfelds aufweist, ein Schlüssel erzeugt werden. Unter der Annahme, dass die Datenbank 160.5 Millionen Datensätze enthält, wird beispielsweise ein Minimum von 1 Grobschlüssel und 1 Feinschlüssel und ein Maximum von 6 Grobschlüsseln und 20.063 Feinschlüsseln für jedes Datenelement erzeugt wird, wobei die tatsächliche Zahl von Grob- und Feinschlüsseln von der Zahl und der Verteilung der Datenwerte unter den Datensätzen in der Datenbank abhängt. Bei den Probedaten von 4 enthalten beispielsweise nur die Datensätze 32.128.000, 32.128.001 und 60.800.000 im Feld für die Fahrzeugfarbe den Datenwert = „weiß". Demgemäß wird es für diesen Datenwert eine Gesamtzahl von drei Schlüsseln geben: einen Grobschlüssel (da sich alle drei Datensätze im selben Grobintervall befinden) und zwei Feinschlüssel – einen für das Feinintervall 4016, das die beiden Datensätze 32.128.000 und 32.128.001 enthält, und einen für das Feinintervall 7.600, das den Datensatz mit der Nummer 60.800.000 enthält. Diese drei Schlüssel sind im Probenindex von 6 gezeigt, der im Folgenden erläutert werden wird.
  • Unter Bezugnahme auf 5 ist die allgemeine Form eines Index 30 für eines der Datenfelder gezeigt. Wie es oben erwähnt wurde, besteht der Index aus Schlüsseln 44 und zugehörigen Verknüpfungen 46, wobei der Schlüssel, der das jeweilige Intervall und den Datenwert angibt, mit dem er in Verbindung steht, und die Verknüpfung verwendet werden, um zu bestimmen, welche Datensätze, die im Intervall enthalten sind, den Datenwert im zugehörigen Datenfeld enthalten. Für jeden Datenwert, der im Datenfeld 26 in wenigstens einem Datensatz 22 der Datenbank enthalten ist, wird es wenigstens einen Grobschlüssel 44 und einen Feinschlüssel 44 geben. Daten mit sehr hoher Mächtigkeit, wie etwa die VIN-Nummer, können lediglich einen einzelnen Grob- und Feinschlüssel aufweisen, wohingegen Daten mit niedriger Mächtigkeit, wie etwa das Geschlecht, wahrscheinlich in jedem Feinintervall in der Datenbank gefunden werden und deshalb für jedes Fein- und Grobintervall, das in der Datenbank enthalten ist, einen Schlüssel erfordern. Auf diese Weise wird der Index für irgendein bestimmtes Datenfeld, das Daten der Mächtigkeit 1 mit einer Zahl m von Grobintervallen und einer Zahl n von Feinintervallen aufweist, logischerweise die Form von 5 annehmen, wobei es potentiell bis zu (n + m) × l einzelne Schlüssel und Verknüpfungen gibt.
  • Als spezielles Beispiel stellt 6 den tatsächlichen Inhalt des Fahrzeugfarbenindex 30 für die Probendaten aus 4 dar. Der Probenindex beinhaltet eine Vielzahl von Schlüsseln 44 und eine Verknüpfung 46, die mit jedem der Schlüssel in Verbindung steht. Wie es oben angegeben wurde, wird für jeden Datenwert (beispielsweise schwarz, blau, gold, grün etc.), der irgendwo in der Datenbank im Datenfeld „Farbe" gefunden wird, ein Grobschlüssel für jedes Grobintervall und ein Feinschlüssel für jedes Feinintervall bereitgestellt, das wenigstens einen Datensatz enthält, der diesen Datenwert innerhalb des Felds „Farbe" aufweist. Demgemäß würde es für die Farbe weiß, wie es oben erläutert wurde, einen Grobschlüssel und zwei Feinschlüssel für die gleiche Datenbank geben. Obwohl der Index in verschiedenen Formaten gespeichert werden kann, wie etwa im Tabellenformat, das in den 5 und 6 gezeigt ist, wird er bevorzugt in einem B-Baum gespeichert, wie es in Verbindung mit 11 beschrieben werden wird. In welcher Form auch immer der Index gespeichert wird, die Schlüssel werden in der Reihenfolge des aufsteigenden Schlüsselwerts beibehalten, wie es nun in Verbindung mit 7 beschrieben werden wird.
  • 7 stellt das Format des Schlüssels 44 dar, egal ob grob oder fein. Jeder Schlüssel beinhaltet drei Abschnitte 44a bis c, die zusammen in einem einzelnen Element zum Ordnen der Schlüssel innerhalb des Index verkettet sind. Der erste Abschnitt 44a ist ein einzelnes Bit, das den Schlüsseltyp angibt, wobei eine Null angibt, dass es ein Grobschlüssel ist, und eine Eins angibt, dass es ein Feinschlüssel ist. Der zweite Abschnitt 44b gibt die absolute Intervallnummer für den Schlüssel an, wobei das erste Intervall null ist. Auf diese Weise würde für einen Feinschlüssel und eine Feinintervalllänge von 8.000 das Feinintervall 2 den Datensätzen 16.000 bis einschließlich 23.999 entsprechen. Für einen Grobschlüssel würde das Grobintervall 2 den Feinintervallen 8.000 bis einschließlich 11.999 (und deshalb den Datensätzen 64.000.000 bis einschließlich 95.999.999) entsprechen. Der dritte und letzte Abschnitt 44c eines Schlüssels ist der Datenwert des Schlüssels, der einfach der Datenwert ist (beispielsweise schwarz, blau, gold, grün etc.), auf den sich dieser Schlüssel bezieht.
  • Da es sowohl für das Fein- als auch das Grobintervall nur einen Schlüssel pro Datenwert gibt, werden keine zwei Schlüssel die gleichen sein und folglich bieten die drei Teile des Schlüssels, die miteinander verkettet sind, einen eindeutigen Schlüsselwert, der verwendet wird, um die Reihenfolge der Schlüssel innerhalb des B-Baumindex aufrechtzuerhalten. Die Schlüssel werden in der Reihenfolge der aufsteigenden Schlüsselwerte gespeichert. Auf diese Weise werden, wie es in 6 gezeigt ist, im Index alle Grobschlüssel (die mit einem freien Bit beginnen) vor irgendeinem der Feinschlüssel (die mit einem gesetzten Bit beginnen) gelistet. Für zwei oder mehr Grobschlüssel, die die gleiche Intervallnummer aufweisen, werden die Schlüssel in der Reihenfolge der Datenwerte der Schlüssel (beispielsweise schwarz, blau, gold, grün etc.) gelistet, die bei Buchstaben und Zeichenketten alphabetisch geordnet und bei ganzen Zahlen und Dezimalzahlen numerisch geordnet werden können. Gleichermaßen werden die Feinschlüssel durch die Intervallnummern geordnet und unter Feinschlüsseln, die die gleiche Intervallnummer aufweisen, durch den Schlüsseldatenwert geordnet.
  • Wie es oben erwähnt wurde, wird die Verknüpfung 46, die mit jedem Feinschlüssel in Verbindung steht, verwendet, um anzugeben, welche Datensätze innerhalb des zugehörigen Feinintervalls den Datenwert enthalten, der mit dem Feinschlüssel in Verbindung steht. Nun ist unter Bezugnahme auf 8 der Aufbau der Feinverknüpfung 46 gezeigt. Die Feinverknüpfung kann einen von zwei Formen annehmen – einen Zeiger auf einen Bitvektor oder eine relative Datensatznummer (RRN). Der erste Teil der Verknüpfung umfasst ein einzelnes Bit, das angibt, welcher Verknüpfungstyp vorliegt. Eine Null (d. h. freies Bit) gibt an, dass die Verknüpfung ein Zeiger auf einen Bitvektor ist, und eine Eins (d. h. ein gesetztes Bit) gibt an, dass die Verknüpfung eine relative Datensatznummer ist. Der erste Verknüpfungstyp (Zeiger auf einen Bitvektor) wird verwendet, wann immer das Feinintervall wenigstens zwei Datensätze einschließt, die den Datenwert enthalten. Der Zeiger kann entweder ein Versatz sein, im Fall, dass der Bitvektor in der gleichen Datei wie der Index gespeichert wird, oder kann ein Dateiname oder eine andere Datei zusammen mit einem Versatz sein, wenn nötig. In jedem Fall wird der Bitvektor ein Bit für jeden Datensatz innerhalb des Feinintervalls enthalten, würden beim dargestellten Ausführungsbeispiel 8.000 Bits sein, wobei das erste Bit angibt, ob der erste Datensatz im Feinintervall den Datenwert enthält oder nicht, das zweite Bit angibt, ob der zweite Datensatz den Datenwert enthält oder nicht und so weiter für jeden der verbleibenden Datensätze im Feinintervall. Der zweite Verknüpfungstyp wird verwendet, wann immer es nur einen Datensatz innerhalb des Feinintervalls gibt, der den zugehörigen Datenwert enthält. In diesem Fall stellt die Grobverknüpfung die relative Datensatznummer dieses einen Datensatzes bereit.
  • Die zwei Feinschlüssel für das Intervall 1, hier wird zurück auf 6 Bezug genommen, stellen ein Beispiel dieser zwei Verknüpfungstypen bereit. Der erste Feinschlüssel, der mit dem Intervall 1 in Verbindung steht, weist einen Wert von blau auf und kann als f:1:blau repräsentiert werden, wobei „f" angibt, dass es ein Feinschlüssel ist, die „1" die absolute Intervallnummer ist und „blau" der Datenwert ist, auf den sich der Schlüssel bezieht. Wie es in 6 angegeben ist, ist die Verknüpfung, die mit dem Schlüssel f:1:blau in Verbindung steht, vom Typ 0, was bedeutet, dass die Verknüpfung einen Zeiger auf einen Bitvektor 48 enthält. In diesem Fall enthält der Bitvektor 48 ein gesetztes Bit (logisch eins) in den Bitpositionen 0 und 2. Alle anderen Bitpositionen werden auf Null gelöscht. Dies gibt an, dass die relativen Datensatznummern 0 und 2 des Feinintervalls 1 im Feld für die Fahrzeugfarbe blau enthalten. Zurück auf die Probedatenbank von 4 Bezug nehmend, wird offensichtlich werden, dass dies richtig ist – die Datensätze 8.000 und 8.002 (die die relativen Datensätze 0 und 2 des Feinintervalls 1 sind) enthalten den Wert „blau" im Feld für die Fahrzeugfarbe.
  • Der zweite Schlüssel für das Feinintervall 1, hier wird zu 6 zurückgekehrt, nämlich f:1:rot, weist eine Verknüpfung vom Typ 1 auf, was bedeutet, dass die Verknüpfung keinen Zeiger enthält, sondern anstelle dessen die relative Datensatznummer (RRN = 1) des einzigen Datensatzes innerhalb des Feinintervalls 1 bereitstellt, der im Feld für die Fahrzeugfarbe „rot" enthält. Wieder Bezug nehmend auf 4 wird ersichtlich werden, dass die relative Datensatznummer 1 (welche die absolute Datensatznummer 8001 ist) in der Tat der einzige Datensatz innerhalb des Feinintervalls 1 ist, der im Feld für die Fahrzeugfarbe den Wert „rot" enthält. Für Daten hoher Mächtigkeit, wie etwa eine VIN, wird eine größere Zahl von Schlüsseln erzeugt werden (da die Zahl l von potentiellen Datenwerten hoch sein wird), aber sehr wenig Datensätze (häufig nur ein Datensatz) mit dem Datenwert. Wo ein Intervall nur einen einzelnen Datensatz aufweist, der den Datenwert enthält, kann auf diese Weise die Speicherung einer Datensatznummer innerhalb der Verknüpfung eher als sowohl eines Zeigers als auch eines Bitvektors mit fast 1 KB zu einer Einsparung von großen Speichermengen führen.
  • Unter Bezugnahme auf 9 wird der Aufbau für die Grobverknüpfungen gezeigt, die mit den Grobschlüsseln in Verbindung stehen. Wie bei den Feinverknüpfungen können die Grobverknüpfungen einer von zwei Typen sein, die am Beginn der Verknüpfung unter Verwendung eines einzelnen Bits identifiziert werden. Der erste Typ wird durch ein Nullbit angegeben und enthält einen Zeiger auf einen Bitvektor, der jeden der Feinintervalle innerhalb der zugehörigen Grobintervalle repräsentiert. Der zweite Typ wird durch ein Einsbit angegeben und wird verwendet, wann immer das Grobintervall nur ein Feinintervall enthält, das irgendeinen Datensatz aufweist, der den Datenwert enthält. In diesem Fall enthält die Verknüpfung die relative Feinintervallnummer (RFSN) dieses einen Feinintervalls. Man beachte, dass der zweite Verknüpfungstyp zusätzlich zur relativen Feinintervallnummer auch ein einzelnes „ALL"-Bit enthält, das, wie unten detaillierter beschrieben werden wird, verwendet wird, um anzugeben, ob alle Datensätze innerhalb des Feinintervalls den Datenwert einschließen oder nicht.
  • Beispiele dieser zwei Typen von Grobverknüpfungen können in 4 gesehen werden. Wie es darin gezeigt ist, wird der Wert „orange" in de Datensätzen gefunden, die innerhalb der Feinintervalle 8, 20 und 3.000 enthalten sind, wobei alle davon innerhalb dem Grobintervall 0 enthalten sind. Auf diese Weise steht in 6 der Schlüssel c:0:orange (Grobintervall 0, orange) mit einer Verknüpfung in Verbindung, die einen Zeiger auf einen Bitvektor 48 enthält, wobei die Bitpositionen 8, 20 und 3.000 auf Eins gesetzt und die anderen auf Null gelöscht werden. Während der Wert „grün", als anderes Beispiel, in mehr als einem Datensatz von 4 gefunden wird, ist er nur in einem Datensatz innerhalb des Grobintervalls 0 lokalisiert. Demgemäß beinhaltet der Schlüssel c:0:grün von 6 eine Verknüpfung, die kein Zeiger auf einen Bitvektor ist, sondern eher die relative Feinintervallnummer (RFSN = 0) des Feinintervalls ist, die den Datensatz enthält, der im Feld für die Fahrzeugfarbe „grün" aufweist.
  • Unter Bezugnahme auf 10 wird ersichtlich, dass anders als die Feinbitvektoren 48 die Grobbitvektoren 48 tatsächlich zwei verschiedene sind, die miteinander verkettet sind. Der erste dieser zwei Bitvektoren beinhaltet, was als „ANY"-Bits bezeichnet wird, wobei der ANY-Bitvektor 48a ein einzelnes ANY-Bit für jedes der 4.000 Feinintervalle enthält, das innerhalb des Grobintervalls enthalten ist. Ein ANY-Bit wird verwendet, um anzugeben, ob irgendeiner der Datensätze, die innerhalb ihres zugehörigen Feinintervalls enthalten sind, in seinem zugehörigen Datenfeld den Datenwert aufweist. Wenn dem so ist, wird das ANY-Bit auf Eins gesetzt. Auf diese Weise wird ein ANY-Bit nur dann Null sein, wenn keiner der Datensätze innerhalb seines zugehörigen Feinintervalls den Datenwert enthält. Der zweite dieser zwei Bitvektoren beinhaltet, was als „ALL"-Bits bezeichnet wird, wobei der ALL-Bitvektor 48b auch ein einzelnes ALL-Bit für jedes der 4.000 Feinintervalle beinhaltet. Ein ALL-Bit wird verwendet, um anzugeben, dass alle Datensätze, die innerhalb ihres zugehörigen Feinintervalls enthalten sind, den Datenwert aufweisen. Wenn dem so ist, wird das ALL-Bit auf Null gelöscht. Wie unten erläutert werden wird, ist das ALL-Bit beim Verarbeiten von Abfragen sinnvol, die den NICHT-Operator umfassen.
  • Wie es oben erläutert wurde, wird kein Feinschlüssel erzeugt, wo ein bestimmter Datenwert nicht in irgendeinem der Datensätze existiert, die in einem bestimmten Feinintervall enthalten sind. Auf diese Weise wird, wo ein ANY-Bit in einem Grobschlüssel Null ist, kein Feinschlüssel für das Feinintervall erzeugt, das mit dem ANY-Bit in Verbindung steht. Gleicherweise werden, wo ein bestimmter Datenwert nicht innerhalb irgendeines der Datensätze existiert, der in einem bestimmten Grobintervall enthalten ist, für dieses Grobintervall kein Grobschlüssel oder Feinschlüssel erzeugt. Demgemäß gibt es in 6 keinen Grobschlüssel 0 für „silbern", weil keiner der ersten 32 Millionen Datensätze im Feld für die Fahrzeugfarbe silbern enthält. Eher sind die einzigen Schlüssel für silbern ein Schlüssel für Grobintervall 1, der eine Verknüpfung zu ihrer relativen Datensatznummer 0 aufweist (die die absolute Datensatznummer 32.184.000 ist), der, wie es in 4 gezeigt ist, der einzige Datensatz ist, der silbern als die Fahrzeugfarbe auflistet.
  • Bezug nehmend auf 11 ist die tatsächliche Struktur eines Index 30 gezeigt; insbesondere des Index für das Feld „Farbe". Der Index wird als B-Baum mit Schlüsseln 44 gespeichert, die nicht nur an den Blättern des Baums gespeichert werden, sondern auch an der Wurzel und den dazwischen liegenden Knoten. Dies bietet ein durchschnittlich schnelleres Durchsuchen des B-Baums, da die Suche nicht alle Niveaus des Baums durchlaufen muss, wenn nach einem Schlüssel gesucht wird, der zufällig entweder an der Wurzel oder an einem dazwischen liegenden Knoten lokalisiert ist. Zudem nehmen die Niveaus im B-Baum infolge der Löschungen von Schlüsseln schneller ab, als bei traditionellen B-Baumstrukturen, da ein einzelner Schlüssel nie an einem Endknoten gelassen wird, sondern anstelle dessen hoch zum Knoten des nächsten Niveaus bewegt wird. Darüber hinaus werden die Schlüssel an der Wurzel und den dazwischen liegenden Knoten verwendet, um den Suchpfad durch den Baum zu bestimmen. Dies spart Speicherplatz, weil die an der Wurzel und den dazwischen liegenden Knoten gespeicherten Daten, die verwendet werden, um den Suchpfad durch den Baum zu bestimmen, nicht Verdoppelungen von Daten sind, die an den Blättern des Baums gespeichert sind, wie bei traditionellen B-Bäumen.
  • Abfrageverarbeitung unter Verwendung des Index
  • Unter Bezugnahme auf 12 ist ein Computersystem 50 zur Verwendung bei der Implementierung der Datenbank, der Indexstruktur und der Abfrageverarbeitung der vorliegenden Erfindung gezeigt. Das Computersystem 50 beinhaltet einen Computer 52, der einen Mikroprozessor 54, ein RAM 56, eine Festplatte 58, eine Tastatur 60 und ein Monitor 62. Der Computer 52 kann irgendeiner einer Zahl von kommerziell erhältlichen Personalcomputern sein, auf denen ein Betriebssystem wie etwa Windows NT® läuft, mit einem Mikroprozessor 54, der einen Intel® Pentium® II oder einen äquivalenten Prozessor umfasst. Die Datenbank 20 ist als eine einzelne Datei auf einem computerlesbaren Speicher gespeichert, wie etwa eine Festplatte 58. Gleicherweise ist jeder der Indizes auf der Festplatte 58 als eine separate Datei gespeichert. Die Festplatte 58 kann eine feste magnetische Platte oder ein anderes nichtflüchtiges Datenspeichergerät umfassen. In Abhängigkeit von der Größe der Datenbank 20 kann das nichtflüchtige Datenspeichergerät eine Zahl von Festplatten 58a bis n umfassen, wie etwa in einer RAID-Anordnung, wobei die Datenbank zwei oder mehr dieser Festplatten umfasst. Wie es oben erwähnt wurde, wird das Programm 64 zur Handhabung der Datenbank verwendet, um die Datenbank 20 und ihre Indizes einzurichten und zu warten, sowie eine Abfrageverarbeitung und den zugehörigen Abruf von Datensätzen unter Verwendung der Indizes auszuführen. Wie mit der Datenbank 20 wird auch das Programm 64 zur Handhabung der Datenbank in computerlesbarem Format auf der Festplatte 58 gespeichert. Wie man erkennen wird, kann der Computer 52 ein Server sein, der über eine (nicht gezeigte) Netzwerkschnittstellenkarte an ein Netzwerk angeschlossen sein, ob es ein lokales Netzwerk oder ein globales Computernetzwerk ist, wie etwa das Internet.
  • Die Abfrageverarbeitung wird vom Computer 52 mittels des Mikroprozessors 54 implementiert, der Anweisungen aus dem Programm 64 zur Handhabung der Datenbank ausführt. Das Programm 64 lokalisiert den einen oder die mehreren Datensätze, die eine bestimmte Nutzerabfrage zufrieden stellt, durch Erzeugen eines Zielschlüssels (beispielsweise c:0:blau) für jedes Grob- und Feinintervall, und sucht dann den passenden Index für diese Zielschlüssel, beginnend mit dem Schlüssel mit dem niedrigsten Schlüsselwert (d. h. Grobintervall 0). Wenn kein Schlüssel gefunden wird, wird ein Bitvektor mit sämtlichen Nullen zurückgegeben. Wenn im Index ein übereinstimmender Schlüssel gefunden wird, dann wird die zugehörige Verknüpfung verwendet, um einen Bitvektor für diesen Schlüssel zu erhalten. Wenn die Verknüpfung vom Typ 0 ist, wie es in den 8 und 9 gezeigt ist, dann wird der Bitvektor, der durch die Verknüpfung identifiziert wird, zurückgegeben. Wo einer oder beide Verknüpfungen der Schlüssel vom Typ 1 sind, d. h. sie enthalten eine relative Feinintervallnummer (im Fall eines Grobschlüssels) oder eine relative Datensatznummer (im Fall eines Feinschlüssels), eher als einen Zeiger auf einen Bitvektor, dann wird ein Bitvektor erzeugt und für einen Feinbitvektor wird das Bit, das dem Datensatz entspricht, der durch die Verknüpfung identifiziert wird, auf Eins gesetzt und die verbleibenden Bits des Vektors werden auf Null gelöscht. Wenn ein Grobbitvektor erzeugt wird (der sowohl ANY- als auch ALL-Bits einschließt), wird das ANY-Bit, das der Feinintervallnummer entspricht, die durch die Verknüpfung identifiziert wird, auf Eins gesetzt, wobei die verbleibenden ANY-Bits auf Null gelöscht werden, und das ALL-Bit, das der Feinintervallnummer entspricht, die durch die Verknüpfung identifiziert wird, auf den gleichen Wert (0 oder 1) gesetzt wird, wie das ALL-Bit, das in der Verknüpfung enthalten ist, wobei die anderen ALL-Bits auf Null gelöscht werden. Auf diese Weise kann die Abfrageverarbeitung immer unter Verwendung von Bitvektoren ausgeführt werden, ungeachtet davon, welcher Verknüpfungstyp im Index gespeichert wird.
  • Im Fall von einfachen Abfragen, wie etwa FABRIKAT = Chevrolet, wenn einmal ein Grobbitvektor erhalten worden ist, kann er verwendet werden, um zu bestimmen, welche Feinintervalle Datensätze enthalten, die diese Abfrage zufrieden stellen. Auf die Schlüssel für diese Feinintervalle (beispielsweise f:0:Chevrolet) kann dann in der Reihenfolge ihrer Schlüsselwerte zugegriffen werden, und ihre zugehörigen Bitvektoren erhalten. Wenn Datensätze, die die Datenwerte enthalten, identifiziert werden, werden sie zur Verarbeitung abgerufen.
  • Für boolesche Operationen, wie sie etwa für eine Abfrage MODELL = Corvette und YAHR = 1975 erforderlich ist, werden auf die oben beschriebene Art und Weise entsprechende Bitvektoren für jeden der Schlüsselwortsuchbegriffe erhalten und dann logisch entsprechend der boolesche Logik (UND) kombiniert, die in der Abfrage des Nutzers spezifiziert wird. Die folgenden Operatoren werden verwendet, um boolesche Operationen an den Bitvektoren auszuführen:
  • UND_BV
  • Dies ist ein binärer Operator, der zwei Bitvektorparameter aufgreift und ein einzelnes Bitvektorergebnis zurückgibt. Alle Bits der zwei Bitvektoren werden logisch miteinander UND-verknüpft, was einen einzelnen Ergebnisbitvektor ergibt. Die Operation ist für Grob- und Feinbitvektoren identisch.
  • ODER_BV
  • Dies ist ein binärer Operator, der zwei Bitvektorparameter aufgreift und ein einzelnes Bitvektorergebnis zurückgibt. Alle Bits der zwei Bitvektoren werden logisch miteinander ODER-verknüpft, was einen einzelnen Ergebnisbitvektor ergibt. Die Operation ist für Grob- und Feinbitvektoren identisch.
  • NICHT_BV
  • Dies ist ein monadischer Operator, der einen Bitvektorparameter aufgreift und ein einzelnes Bitvektorergebnis zurückgibt. Alle Bits eines Bitvektors werden logisch NICHT-verknüpft (komplimentiert), was einen einzelnen Ergebnisbitvektor ergibt. Die Operation ist für Grob- und Feinbitvektoren unterschiedlich. Für Feinbitvektoren werden alle Bits einfach an Ort und Stelle NICHT-verknüpft. Für Grobbitvektoren werden die ANY- und ALL-Bits NICHT-verknüpft und dann werden die ANY- und ALL-Bits ausgetauscht, d. h. der ALL-Bitvektor wird an den linken Abschnitt des Grobbitvektors bewegt, wie es in Fig. gezeigt ist, und wird dadurch der ANY-Bitvektor für den NICHT-verknüpften Grobbitvektor. Gleicherweise wird der ANY-Bitvektor an den rechten Abschnitt des Grobbitvektors bewegt, so dass er der ALL-Bitvektor des NICHT-verknüpften Grobbitvektors wird.
  • Die folgenden sind grundlegende „Such"-Operatoren, die bei der Suche durch einen Index verwendet werden, um einen Bitvektor für angegebene Zielschlüssel oder Schlüsselbereiche zu erhalten.
  • FINDE_GLEICHEN_BV
  • Dieser Operator durchsucht einen Index, um den Schlüssel zu finden, der mit dem angegebenen Zielschlüssel übereinstimmt, der ein Parameter zu diesem Operator ist. Es wird höchstens einen Eintrag im B-Baum geben, der mit dem Zielschlüssel übereinstimmt. Wenn der Zielschlüssel nicht existiert, wird ein Bitvektor von sämtlichen Nullbits erzeugt und zurückgegeben. Am Ende dieses Operators wird eine aktuelle Pfadstruktur erzeugt, die auf die Stelle im B-Baum zeigt, wo der Zieleintrag gefunden wurde, oder wo gefunden worden wäre, wenn er existiert hätte, und der Zielschlüssel wird zur Verwendung durch den Operator FINDE_NÄCHSTEN_BV gespeichert, der im Folgenden erläutert wird.
  • FINDE_NÄCHSTEN_BV
  • Dieser Operator durchsucht einen Index, um den nächsten Schlüssel zu finden, dessen Feldintervalltyp und absolute Intervallnummerwerte (siehe 7) mit dem Feldintervalltyp und den absoluten Intervallnummerwerten des Zielschlüssels übereinstimmen. Auf diese Weise wird der Schlüsseldatenwertabschnitt des Schlüssels ignoriert. Der Zielschlüssel ist der Zielschlüssel, der durch den letzten vorhergehenden Operator FINDE_GLEICHEN_BV gespeichert wurde. Es kann irgendeine Zahl von Einträgen im B-Baum bestehen, die mit dem Zielschlüssel übereinstimmen. Wenn der nächste Zielschlüssel nicht existiert, wird ein speziell vervollständigter Ergebniswert zurückgegeben, um anzugeben, dass keine weiteren Einträge existieren, die mit dem Zielschlüssel übereinstimmen. Die Suche beginnt vom aktuellen Pfad, der durch den letzten vorhergehenden Operator FINDE_GLEICHEN_BV erzeugt oder durch den letzten vorherigen Operator FINDE_NÄCHSTEN_BV aktualisiert wurde. Am Ende dieses Operators wird die aktuelle Pfadstruktur aktualisiert, um auf die Stelle im B-Baum zu zeigen, wo der nächste Zielschlüssel gefunden wurde.
  • Die folgenden sind relationale „Such"-Operatoren, die verwendet werden, um einen Index zu durchsuchen. Jede Ausführung eines dieser Operatoren findet einen oder mehrere Zielschlüssel in einem Index und gibt den Bitvektor zurück, entweder grob oder fein, zugehörig zu den Zielschlüsseln. Wenn mehrere Schlüssel gefunden werden, wird ihre zugehörigen Bitvektoren logisch miteinander ODER-verknüpft, um einen einzelnen Ergebnisbitvektor zu bilden. Dieser einzelne Ergebnisbitvektor ist eine Ansammlung aller Schlüssel, die bei der Suche gefunden werden. Jeder Operator wird an einem einzelnen Intervalltypwert und absoluten Intervallnummernwert ausgeführt. In Abhängigkeit vom Operator bearbeitet er einen oder mehrere Schlüsseldatenwerte. Diese Operatoren werden mehrere male ausgeführt, um an mehr als einem Intervalltypen oder einer absoluten Intervallnummer zu bearbeiten.
  • FINDE_LSS_INTERVALL
  • Dieser Operator durchsucht einen Index, um alle Einträge zu finden, deren Schlüsseldatenwert (siehe 7) kleiner ist als der angegebene Zielschlüssel, der ein Parameter für diesen Operator ist. Er arbeitet wie folgt. Am Zielschlüssel wird ein Operator FINDE_GLEICHEN_BV ausgeführt, der einen anfänglichen Ergebnisbitvektor FINDE_LSS_INTERVALL erzeugt. Der Operator FINDE_NÄCHSTEN_BV wird fortwährend ausgeführt, bis er ein vollständiges Ergebnis zurückgibt. Jeder Ergebnisbitvektor der Ausführung wird mit dem Operator ODER_BV im Ergebnisbitvektor FINDE_LSS_INTERVALL logisch ODER-verknüpft. Der Ergebnisbitvektor FINDE_LSS_INTERVALL wird mit dem Operator NICHT_BV logisch NICHT-verknüpft. Als das Operatorergebnis wird der Ergebnisbitvektor FINDE_LSS_INTERVALL zurückgegeben.
  • FINDE_LEQ_INTERVALL
  • Dieser Operator durchsucht einen Index, um alle Einträge zu finden, deren Schlüsseldatenwert kleiner oder gleich dem angegebenen Zielschlüssel ist, der ein Parameter für diesen Operator ist. Er arbeitet wie folgt. Am Zielschlüssel wird ein Operator FINDE_GLEICHEN_BV ausgeführt. Der anfängliche Ergebnisbitvektor FINDE_LEQ_INTERVALL wird auf sämtliche Bits Null gesetzt. Der Operator FINDE_NÄCHSTEN_BV wird fortwährend ausgeführt, bis er ein vollständiges Ergebnis zurückgibt. Jeder Ergebnisbitvektor der Ausführung wird mit dem Operator ODER BV im Ergebnisbitvektor FINDE_LEQ_INTERVALL logisch ODER-verknüpft. Der Ergebnisbitvektor FINDE_LEQ_INTERVALL wird mit dem Operator NICHT_BV logisch NICHT-verknüpft. Als das Operatorergebnis wird der Ergebnisbitvektor FINDE_LEQ_INTERVALL zurückgegeben.
  • FINDE_EQL_INTERVALL
  • Dieser Operator durchsucht einen Index, um alle Einträge zu finden, deren Schlüsseldatenwert gleich dem angegebenen Zielschlüssel ist, der ein Parameter für diesen Operator ist. Er arbeitet wie folgt. Am Zielschlüssel wird ein Operator FINDE_GLEICHEN_BV ausgeführt, was einen Ergebnisbitvektor FINDE_EQL_INTERVALL erzeugt. Als das Operatorergebnis wird der Ergebnisbitvektor FINDE_EQL_INTERVALL zurückgegeben.
  • FINDE_PEQL_INTERVALL
  • Dieser Operator durchsucht einen Index, um alle Einträge zu finden, deren Schlüsseldatenwert teilweise gleich dem angegebenen Zielschlüssel ist, der ein Parameter für diesen Operator ist. Teilweise gleich bedeutet, dass der Eintragschlüsseldatenwert mit dem angegebenen Zielschlüssel für die Länge des Schlüsseldatenwerts des Zielschlüssels übereinstimmt (der Zielschlüssel ist ein teilweiser Schlüsseldatenwert). Er arbeitet wie folgt. Am Zielschlüssel wird ein Operator FINDE_GLEICHEN_BV ausgeführt, was einen anfänglichen Ergebnisbitvektor FINDE_PEQL_INTERVALL erzeugt. Der Operator FINDE_NÄCHSTEN_BV wird fortwährend ausgeführt, bis er ein vollständiges Ergebnis zurückgibt oder der Schlüsseldatenwert des nächsten Schlüssels größer als der Zielschlüsseldatenwert ist. Jeder Ergebnisbitvektor der Ausführung wird mit dem Operator ODER_BV im Ergebnisbitvektor FINDE_PEQL_INTERVALL logisch ODER-verknüpft. Als das Operatorergebnis wird der Ergebnisbitvektor FINDE_PEQL_INTERVALL zurückgegeben.
  • FINDE_NEQ_INTERVALL
  • Dieser Operator durchsucht einen Index, um alle Einträge zu finden, deren Schlüsseldatenwert nicht gleich dem angegebenen Zielschlüssel ist, der ein Parameter für diesen Operator ist. Er arbeitet wie folgt. Am Zielschlüssel wird ein Operator FINDE_GLEICHEN_BV ausgeführt, was einen anfänglichen Ergebnisbitvektor FINDE_NEQ_INTERVALL erzeugt. Der Ergebnisbitvektor FINDE_NEQ_INTERVALL wird mit dem Operator NICHT_BV logisch NICHT-verknüpft. Als das Operatorergebnis wird der Ergebnisbitvektor FINDE_NEQ_INTERVALL zurückgegeben.
  • FINDE_GEQ_INTERVALL
  • Dieser Operator durchsucht einen Index, um alle Einträge zu finden, deren Schlüsseldatenwert größer oder gleich dem angegebenen Zielschlüssel ist, der ein Parameter für diesen Operator ist. Er arbeitet wie folgt. Am Zielschlüssel wird ein Operator FINDE_GLEICHEN_BV ausgeführt, was einen anfänglichen Ergebnisbitvektor FINDE_GEQ_INTERVALL erzeugt. Der Operator FINDE_NÄCHSTEN_BV wird fortwährend ausgeführt, bis er ein vollständiges Ergebnis zurückgibt. Jeder Ergebnisbitvektor der Ausführung wird mit dem Operator ODER_BV im Ergebnisbitvektor FINDE_GEQ_INTERVALL logisch ODER-verknüpft. Als das Operatorergebnis wird der Ergebnisbitvektor FINDE_GEQ_INTERVALL zurückgegeben.
  • FINDE_GTR_INTERVALL
  • Dieser Operator durchsucht einen Index, um alle Einträge zu finden, deren Schlüsseldatenwert größer als der angegebene Zielschlüssel ist, der ein Parameter für diesen Operator ist. Er arbeitet wie folgt. Am Zielschlüssel wird ein Operator FINDE_GLEICHEN_BV ausgeführt. Der anfängliche Ergebnisbitvektor FINDE_GTR_INTERVALL wird auf sämtliche Bits Null gesetzt. Der Operator FINDE_NÄCHSTEN_BV wird fortwährend ausgeführt, bis er ein vollständiges Ergebnis zurückgibt. Jeder Ergebnisbitvektor der Ausführung wird mit dem Operator ODER BV im Ergebnisbitvektor FINDE_GTR_INTERVALL logisch ODER-verknüpft. Als das Operatorergebnis wird der Ergebnisbitvektor FINDE_GTR_INTERVALL zurückgegeben.
  • FINDE_BEREICHSINTERVALL
  • Dieser Operator durchsucht einen Index, um alle Einträge zu finden, deren Schlüsseldatenwert größer oder gleich dem angegebenen minimalen Zielschlüssel ist und der kleiner oder gleich dem angegebenen maximalen Zielschlüssel ist, die Parameter für diesen Operator sind. Er arbeitet wie folgt. Am minimalen Zielschlüssel wird ein Operator FINDE_GLEICHEN_BV ausgeführt, was einen anfänglichen Ergebnisbitvektor FINDE_BEREICHSINTERVALL erzeugt. Der Operator FINDE_NÄCHSTEN_BV wird fortwährend ausgeführt, bis er ein vollständiges Ergebnis zurückgibt oder der Datenwert des nächsten Schlüssels größer als der Schlüsseldatenwert des maximalen Zielschlüssels ist. Jeder Ergebnisbitvektor der Ausführung wird mit dem Operator ODER_BV im Ergebnisbitvektor FINDE_BEREICHSINTERVALL logisch ODER-verknüpft. Als das Operatorergebnis wird der Ergebnisbitvektor FINDE_BEREICHSINTERVALL zurückgegeben.
  • Abrufen der Datensätze
  • Als Ergebnis des Suchprozesses wird eine Liste von absoluten Datensatznummern erzeugt, wobei die Liste eine Teilmenge aller Datensätze ist, die in der Datenbank enthalten sind. Die Datensätze werden als ein inhärentes Ergebnis der Indexstruktur und der Abfrageverarbeitung, die oben beschrieben wurden, in der Reihenfolge der Datensatznummern aufgelistet. Die Abrufoperation wird verwendet, um aus der Datenbank 20 die Liste von Datensätzen auszuwählen und abzurufen, die als ein Ergebnis der Abfrageverarbeitung erzeugt werden. Die beschriebene Abrufoperation ist so entworfen, dass sie sehr schnelle Abrufantworten liefert.
  • Beim bevorzugten Ausführungsbeispiel gibt es zwei Typen von Abfrageoperationen: ZÄHLE und FINDE. Eine ZÄHLE-Abfrage zählt einfach die ausgewählte Teilmenge von Datensätzen. Da die Datensätze selbst nicht abgerufen werden müssen, ist diese Operation außerordentlich schnell. Die Abrufoperation zum Auswählen und Zählen einer Teilmenge von Datensätzen ist in 13 gezeigt. Ein FINDE-Abruf ruft jeden der Datensätze in der Teilmenge ab. Die Abrufoperation, um eine Teilmenge von Datensätzen aus einer Datenbank auszuwählen und zu finden ist in 14 gezeigt. Da die Auswahloperation schnell die ausgewählten Datensätze identifiziert, ist die Abrufzeit im Allgemeinen proportional zur Zahl der ausgesuchten Datensätze, nicht zur Zahl der Datensätze in der Datensatztabelle.
  • Ein einzigartiger Gesichtspunkt der Abrufoperation ist, dass sie durch Untersuchung des Index zuerst in der Reihenfolge der Datensatznummer und dann in der Reihenfolge der Feldwerte arbeitet, anstelle zuerst in der Reihenfolge der Feldwerte und dann in der Reihenfolge der Datensatznummer. Ein Grund, warum das möglich ist, ist der, wie es in 11 gezeigt ist, dass der indizierte B-Baum für effiziente index-sequentielle Operation in dieser Suchreihenfolge organisiert und geordnet ist. Eine gegebene Intervall- und Datenwertkombination kann im B-Baum effektiv lokalisiert werden. Dies wird unter Verwendung normaler B-Baum-Suchverfahren ausgeführt, beginnend an der Spitze des Baums und unter Nutzung einer binären Suche in jedem Baumknoten, bis der Zielindex gefunden wird. Da alle Feldwerte für das gegebene Intervall in sequentiellen Einträgen im B-Baum gespeichert sind, die dem Zielschlüssel unmittelbar vorausgehen oder folgen, können sie leicht und außerordentlich schnell abgerufen werden. Ein zweiter Grund warum dies möglich ist, ist die Kombination von Grob- und Feinbitvektoren. Im Ergebnis dieser Kombination repräsentiert ein einzelner Grobbitvektor 32.000.000 Datensätze. Dies bedeutet, dass durch Verarbeitung eines einzelnen Grobintervalls für das Abrufkriterium 32.000.000 Datensätze verarbeitet worden sind und die interessierenden Feinintervalle im aktuellen Grobintervall identifiziert worden sind. Von dort wird nur auf die interessierenden Feinintervalle direkt zugegriffen und werden jeweils 8.000 Datensätze verarbeitet. Dann werden nur die einzelnen interessierenden Datensätze gezählt oder abgerufen. Ein dritter Grund warum dies möglich ist, ist die Möglichkeit, einen Bitvektor schnell logisch zu NICHT-verknüpfen. Beispielsweise wird das Kriterium NICHT_GLEICH durch Finden des Bitvektors, der GLEICH dem Kriterium ist, und NICHT-Verknüpfen dieses Bitvektors implementiert. Dies ist wesentlich schneller als das Finden aller Bitvektoren, die NICHT GLEICH dem Kriterium sind. Die spezielle Fähigkeit eines Grobbitvektors, sowohl „ANY"- als auch „ALL"-Bitvektoren zu enthalten, ermöglicht es, dass die NICHT-Operation so effektiv an Grobbitvektoren wie an Feinbitvektoren arbeitet. Noch ein vierter Grund, warum dies möglich ist, ist die Fähigkeit, schnell ein Kriterium KLEINER ALS, KLEINER ALS ODER GLEICH, GRÖSSER ALS, GRÖSSER ALS ODER GLEICH oder BEREICH durch einfaches miteinander ODER-Verknüpfen von Bitvektoren zu evaluieren, die sequentiell im Index gespeichert sind. Da jeder Grobbitvektor 32.000.000 Datensätze repräsentiert, ist es wesentlich schneller, die Schlüsseldatenwerte innerhalb eines Intervalls auf diese Weise einzeln zu benennen, und dann die Datensatznummern einzeln zu benennen. Auf diese Weise wird das Abrufkriterium schnell in der Reihenfolge der Datensatznummern an jeweils 32.000.000 Datensätzen verarbeitet. Auch mit einer Datensatzzahl von 1 Milliarde Datensätzen würden nur 32 Grobintervalle untersucht werden müssen.
  • Während der Ausführung des Kriterienkodes kann durch die Abrufoperation der Gültigkeitsindex (siehe 2) verwendet werden. Der Gültigkeitsindex ist ein Standardindex, mit einem Einsbit für jeden Datensatz, der in Gebrauch ist, und einem Nullbit für jeden gelöschten Datensatz. Wenn jederzeit im Kriterienkode ein Operator NICHT_BV ausgeführt wird, wird ein Bitschalter gesetzt, der angibt, dass der Gültigkeitsindex benötigt wird. Dieser Bitschalter wird benötigt, weil ein Nullbit in einem Bitvektor gelöschte Datensätze sowie Datensätze repräsentiert, die nicht mit dem aktuellen Kriterium übereinstimmen. Wenn dieser Bitschalter am Ende der Ausführung des Abfrageverarbeitung gesetzt wird, wird der Bitvektor des Gültigkeitsindex für das aktuelle Grob- und Feinintervall mit dem Operator UND_BV im aktuellen Ergebnisbitvektor UND-verknüpft. Dies beseitigt gelöschte Datensätze, die vom Operator NICHT_BV eingeführt wurden, aus dem endgültigen Ergebnisbitvektor.
  • Die Datenbank muss gegen die Aktualisierung während bestimmten Teilen der Abrufoperation gesperrt werden. Die Abrufoperation ist optimiert, um die Häufigkeit und die Dauer dieser Sperrung zu verringern. Die Datenbank wird lediglich während der Ausführung des Abfragevorgangs mit einer gemeinsamer. Sperre (Lesersperre) gesperrt. Dies ermöglicht es, dass gleichzeitig irgendeine Zahl von anderen Abrufoperationen an der Tabelle ausgeführt wird, während vorübergehend Aktualisierungsoperationen ausgeschaltet werden. Die Datenbank wird am Beginn der Abfrageverarbeitung gesperrt und am Ende der Abfrageverarbeitung entsperrt. Da die Abfrage (über den Bitvektormechanismus) Intevallweise ausgeführt wird, deckt ein Sperr-Entsperr-Zyklus Abfragverarbeitungen für 32.000.000 Datensätze für Grobintervalle und 8.000 Datensätze für Feinintervalle ab. Der Entwurf des Index macht die Ausführung des Kriterienkodes sehr einfach und schnell. Auf diese Weise wird die Zahl der Sperr-Entsperr-Zyklen minimiert und die Zeitdauer, die die Datenbank gegen Aktualisierung gesperrt ist, wird minimiert.
  • Die Datenbank wird während des Ladens und der Verarbeitung der abgerufenen Datensätze gesperrt. Dies schafft die Möglichkeit, dass Datensätze zwischen der Zeit, wo die Suche ausgeführt wird, und der Zeit, wo der Datensatz geladen wird, modifiziert werden. Die bedeutet, dass der aktuelle geladene Datensatz nicht länger mit dem Abrufkriterium übereinstimmt. Dieses Problem wird dadurch vermieden, dass jeder Datensatzaktualisierung eine eindeutige Aktualisierungs- Transaktionsnummer zugewiesen wird. Diese Aktualisierungs-Transaktionsnummer wird im Datensatz selbst gespeichert. Die dann aktuelle Aktualisierungs-Transaktionsnummer wird während der Ausführung der Abfrage durch die Abrufoperation erfasst und gespeichert. Wenn während einer Abrufoperation ein Datensatz geladen wird, wird seine Aktualisierungs-Transaktionsnummer mit der Aktualisierungs-Transaktionsnummer der Abfrage verglichen. Wenn die Aktualisierungs-Transaktionsnummer des Datensatzes höher ist, bedeutet dies, dass der Datensatz während der Ausführung der Abfrage aktualisiert worden ist und nicht mehr länger mit dem Abrufkriterium übereinstimmt.
  • Wenn dieser Zustand erfasst wird, wird der aktualisierte Datensatz nicht verarbeitet. Anstelle dessen wird die Abrufoperation unterbrochen und an den aktuellen Grob- und Feinintervallen erneut begonnen. Die Abfrage wird für das aktuelle Grobintervall und dann für das aktuelle Feinintervall wieder ausgeführt. Die Verarbeitung des aktuellen Feinintervalls wird dann an dem Bit neu begonnen, das durch die Datensatznummer repräsentiert wird, der zur Zeit der Unterbrechung geladen und verarbeitet worden ist. Dies stellt sicher, dass der Datensatz mit der neuerlich ausgeführten Abfrage konsistent ist, und die Verarbeitung wieder aufgenommen wird (sofern der Datensatz nicht wieder aktualisiert worden ist, wobei in diesem Fall die Unterbrechung/der Neustart wiederholt wird). Auf diese Weise kann die Abrufoperation Abrufkriterien für jeweils eine große Zahl von Datensätzen mit minimaler Sperrung evaluieren, während die Konsistenz der Ergebnisse bereitgestellt wird. Das Verfahren der Abrufoperationsverarbeitung in der Reihenfolge der Datensatznummer bietet einfach und effektiv die Möglichkeit der Unterbrechung und des Neustarts des Abrufs an irgendeiner Datensatznummernstelle.
  • Es wird auf diese Weise ersichtlich, dass erfidungsgemäß ein Datenbankverfahren und -gerät bereitgestellt wird, das die hierin angegeben Ziele und Vorteile erreicht. Es wird sich natürlich von selbst verstehen, dass die vorhin genannte Beschreibung eine eines bevorzugten Ausführungsbeispiels der Erfindung ist und dass die Erfindung nicht auf das spezielle gezeigte Ausführungsbeispiel beschränkt ist. Dem Fachmann werden verschiedene Veränderungen und Modifikationen ersichtlich werden. Beispielsweise kann, um Speicherplatz zu sparen, die Größe der Datenwertteile der Schlüssel variabel gemacht werden, anstelle dass sie auf eine ausgesuchte Größe festgelegt werden, um die größeren Datenwerte unterzubringen. Der Umfang der Erfindung wird nur durch die beigefügten Ansprüche eingeschränkt.

Claims (19)

  1. Rechnerlesbarer Speicher zum Speichern einer Datenbank und Indizes, die verwendet werden, um Daten innerhalb der Datenbank zu lokalisieren, umfassend ein nichtflüchtiges Datenspeicherbauelement; eine Datenbank, die eine Vielzahl von Datensätzen (22) umfasst, die in dem Datenspeicherbauelement in einem rechnerlesbaren Format gespeichert sind, wobei jeder Datensatz eine Zahl von Datenfeldern (24, 26) aufweist, wobei wenigstens einige der Datenfelder einen Datenwert darin gespeichert aufweisen; wobei die Datensätze logisch in Gruppen von Datensätzen getrennt sind, wobei jede Gruppe eine vorgewählte Maximalzahl n von Datensätzen aufweist, und wobei die Gruppen von Datensätzen logisch in zwei oder mehr Sätzen organisiert sind, wobei jeder Satz eine vorgewählte Maximalzahl m von Gruppen beinhaltet, wobei jeder Satz maximal n·m Datensätze beinhaltet; eine Vielzahl von Indizes (30), von denen jeder mit einem unterschiedlichen Datenfeld in Verbindung steht und wobei jeder eine Zahl von Schlüsseln (44) umfasst, die mit dem einen Datenfeld in Verbindung stehen, wobei wenigstens einige der Datenfelder indiziert sind; wobei jeder Datenwert, der innerhalb eines indizierten Datenfeldes gespeichert ist, einen oder mehrere Feinschlüssel und einen oder mehrere Grobschlüssel aufweist, die damit in Verbindung stehen, wobei die Feinschlüssel mit einer der Gruppen in Verbindung stehen und wenigstens einige der Feischlüssel mit einem Feinbitvektor in Verbindung stehen, der identifiziert, welcher der Datensätze, die innerhalb der Gruppe enthalten sind, den Datenwert enthält, der mit dem Schlüssel in Verbindung steht, und wobei die Grobschlüssel mit einem der Sätze in Verbindung stehen und wenigstens einige der Grobschlüssel mit einem Grobbitvektor in Verbindung stehen, der identifiziert, welche der Gruppen wenigstens einen Datensatz enthält, der darin gespeichert den Datenwert enthält, der mit dem Schlüssel in Verbindung steht.
  2. Rechnerlesbarer Speicher nach Anspruch 1, wobei die Datenbank eine bestimmte Zahl k von Datensätzen einschließt, wobei k > n und wobei alle der k Datensätze physikalisch in dem Datenspeicherbauelement als eine einzelne Datei bewahrt werden, wobei mehr als eine Gruppe von Datensätzen zusammen als eine einzelne Datei gespeichert werden.
  3. Rechnerlesbarer Speicher nach Anspruch 2, wobei alle Datensätze der Datenbank in einer einzelnen Datei gespeichert sind.
  4. Rechnerlesbarer Speicher nach Anspruch 1, wobei die Indizes eine Verknüpfung für jeden Schlüssel im Index beinhalten, wobei jede der Verknüpfungen mit einem Datenwert in Verbindung steht und wobei wenigstens einige der Verknüpfungen den Ort eines der Bitvektoren indizieren.
  5. Rechnerlesbarer Speicher nach Anspruch 4, wobei die Schlüssel einen ersten Teil enthalten, der identifiziert, ob es ein Gruppenschlüssel oder ein Satzschlüssel ist, ferner einen zweiten Teil, der die Gruppe oder den Satz identifizier, auf den er sich bezieht, und einen dritten Teil, der den Datenwert indiziert, auf den er sich bezieht.
  6. Rechnerlesbarer Speicher nach Anspruch 5, wobei die Schlüssel auf der Grundlage der lnhalte des ersten, zweiten und dritten Teils geordnet gespeichert werden.
  7. Rechnerlesbarer Speicher nach Anspruch 5, wobei der erste Teil dem am weitesten links befindlichen Teil eines jeden Schlüssels umfasst, der zweite Teil den Mittelteil eines jeden Schlüssels umfasst und der dritte Teil den am weitesten rechts befindlichen Teil eines jeden Schlüssels umfasst.
  8. Rechnerlesbarer Speicher nach Anspruch 7, wobei der erste Teil ein einzelnes Bit umfasst.
  9. Rechnerlesbarer Speicher nach Anspruch 4, wobei jeder der Feinschlüssel mit einer Feinverknüpfung in Verbindung steht und wobei wenigstens einige der Feinverknüpfungen jeweils einen Zeiger auf einen entsprechenden Feinbitvektor darstellen.
  10. Rechnerlesbarer Speicher nach Anspruch 9, wobei wenigstens eine andere der Feinverknüpfungen einen einzelnen Datensatz innerhalb der Gruppe von Datensätzen identifiziert, die mit der Feinverknüpfung in Verbindung stehen.
  11. Rechnerlesbarer Speicher nach Anspruch 10, wobei jede der Feinverknüpfungen wenigstens ein Bit beinhaltet, das indiziert, ob die Verknüpfung einen Zeiger auf einen Bitvektor oder eine Kennung des einzelnen Datensatzes beinhaltet.
  12. Rechnerlesbarer Speicher nach Anspruch 4, wobei jeder der Grobschlüssel mit einer Grobverknüpfung in Verbindung steht und wobei wenigstens einige der Grobverknüpfungen jeweils einen Zeiger auf einen entsprechenden Grobbitvektor darstellen.
  13. Rechnerlesbarer Speicher nach Anspruch 12, wobei wenigstens eine andere der Grobverknüpfungen eine einzelne Gruppe innerhalb des Satzes von Gruppen identifiziert, die mit der Grobverknüpfung in Verbindung stehen.
  14. Rechnerlesbarer Speicher nach Anspruch 13, wobei jede der Grobverknüpfungen wenigstens ein Bit beinhaltet, das indiziert, ob die Verknüpfung einen Zeiger auf einen Bitvektor oder eine Kennung der einzelnen Gruppe beinhaltet.
  15. Rechnerlesbarer Speicher nach Anspruch 13, wobei jede der Grobverknüpfungen, die eine einzelne Gruppe identifiziert, wenigstens ein Bit beinhaltet, das identifiziert, ob alle Datensätze innerhalb der einzelnen Gruppe den Datenwert beinhalten, der mit der Grobverknüpfung in Verbindung steht, oder nicht.
  16. Rechnerlesbarer Speicher nach Anspruch 1, wobei jeder der Indizes als ein B-Baum gespeichert wird.
  17. Rechnerlesbarer Speicher nach Anspruch 16, wobei der B-Baum einen Wurzelknoten, eine Vielzahl von Zwischenknoten und eine Vielzahl von Blättern beinhaltet und wobei einige der Schlüssel auf dem Blatt gespeichert werden und andere der Schlüssel an der Wurzel und den Zwischenknoten gespeichert werden.
  18. Rechnerlesbarer Speicher nach Anspruch 1, wobei das nichtflüchtige Datenspeicherbauelement eine Vielzahl von festen magnetischen Plattenlaufwerken umfasst, wobei die Datenbank als eine einzige Datei gespeichert wird, die sich wenigstens über zwei der festen magnetischen Plattenlaufwerke erstreckt.
  19. Rechnerlesbarer Speicher nach Anspruch 1, wobei die Indizes jeweils in einer separaten Datei in dem nichtflüchtigen Datenspeicherbauelement gespeichert werden.
DE69926305T 1998-05-09 1999-05-04 Rechnerlesbarer Speicher zum Speichern einer Datenbank und Indizes Expired - Fee Related DE69926305T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/075,241 US6070164A (en) 1998-05-09 1998-05-09 Database method and apparatus using hierarchical bit vector index structure
US75241 1998-05-09

Publications (2)

Publication Number Publication Date
DE69926305D1 DE69926305D1 (de) 2005-09-01
DE69926305T2 true DE69926305T2 (de) 2006-06-01

Family

ID=22124441

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69926305T Expired - Fee Related DE69926305T2 (de) 1998-05-09 1999-05-04 Rechnerlesbarer Speicher zum Speichern einer Datenbank und Indizes

Country Status (4)

Country Link
US (2) US6070164A (de)
EP (1) EP0961211B1 (de)
AT (1) ATE300767T1 (de)
DE (1) DE69926305T2 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019197882A1 (en) * 2018-04-13 2019-10-17 Pratik Sharma Bit vector based key-value store

Families Citing this family (80)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6260044B1 (en) 1998-02-04 2001-07-10 Nugenesis Technologies Corporation Information storage and retrieval system for storing and retrieving the visual form of information from an application in a database
US6185552B1 (en) * 1998-03-19 2001-02-06 3Com Corporation Method and apparatus using a binary search engine for searching and maintaining a distributed data structure
US6418429B1 (en) * 1998-10-21 2002-07-09 Apple Computer, Inc. Portable browsing interface for information retrieval
US6535869B1 (en) * 1999-03-23 2003-03-18 International Business Machines Corporation Increasing efficiency of indexing random-access files composed of fixed-length data blocks by embedding a file index therein
US6381605B1 (en) * 1999-05-29 2002-04-30 Oracle Corporation Heirarchical indexing of multi-attribute data by sorting, dividing and storing subsets
US6496830B1 (en) 1999-06-11 2002-12-17 Oracle Corp. Implementing descending indexes with a descend function
US6405187B1 (en) * 1999-06-18 2002-06-11 International Business Machines Corporation Utilizing encoded vector indexes for statistics in database processing
US7020647B1 (en) 1999-06-18 2006-03-28 International Business Machines Corporation Utilize encoded vector indexing for database grouping
US6513028B1 (en) * 1999-06-25 2003-01-28 International Business Machines Corporation Method, system, and program for searching a list of entries when search criteria is provided for less than all of the fields in an entry
US6424969B1 (en) * 1999-07-20 2002-07-23 Inmentia, Inc. System and method for organizing data
US6879976B1 (en) * 1999-08-19 2005-04-12 Azi, Inc. Data indexing using bit vectors
US7805423B1 (en) * 1999-11-15 2010-09-28 Quest Software, Inc. System and method for quiescing select data modification operations against an object of a database during one or more structural operations
US7082436B1 (en) 2000-01-05 2006-07-25 Nugenesis Technologies Corporation Storing and retrieving the visual form of data
SE517340C2 (sv) 2000-02-29 2002-05-28 Resource Man Tech Svenor Ab Metod och system för att lagra data i strukturelement
AU2001240061A1 (en) * 2000-03-09 2001-09-17 The Web Access, Inc. Method and apparatus for organizing data by overlaying a searchable database with a directory tree structure
JP2002140218A (ja) * 2000-10-31 2002-05-17 Toshiba Corp データ処理方法、コンピュータ読み取り可能な記録媒体及びデータ処理装置
US20020062303A1 (en) * 2000-10-31 2002-05-23 Kabushiki Kaisha Toshiba Data management method and storage medium storing data management program
US6735595B2 (en) * 2000-11-29 2004-05-11 Hewlett-Packard Development Company, L.P. Data structure and storage and retrieval method supporting ordinality based searching and data retrieval
DE60132243T2 (de) * 2000-12-15 2008-12-11 British Telecommunications P.L.C. Verfahren zum indizieren von entitäten
US6754564B2 (en) 2001-01-30 2004-06-22 Archie L. Newport Integrated vehicle information system
US6944619B2 (en) * 2001-04-12 2005-09-13 Primentia, Inc. System and method for organizing data
US6816856B2 (en) * 2001-06-04 2004-11-09 Hewlett-Packard Development Company, L.P. System for and method of data compression in a valueless digital tree representing a bitset
AU2002318380A1 (en) * 2001-06-21 2003-01-08 Isc, Inc. Database indexing method and apparatus
US6944615B2 (en) * 2001-06-28 2005-09-13 International Business Machines Corporation System and method for avoiding deadlock situations due to pseudo-deleted entries
US7072879B2 (en) * 2001-10-22 2006-07-04 Siemens Building Technologies, Inc. Partially embedded database and an embedded database manager for a control system
US7085787B2 (en) * 2002-07-19 2006-08-01 International Business Machines Corporation Capturing data changes utilizing data-space tracking
US7146373B2 (en) * 2002-07-19 2006-12-05 International Business Machines Corporation Data-space tracking with index data-spaces and data data-spaces
US8335779B2 (en) * 2002-08-16 2012-12-18 Gamroe Applications, Llc Method and apparatus for gathering, categorizing and parameterizing data
US8311980B2 (en) * 2002-12-09 2012-11-13 Hewlett-Packard Development Company, L.P. Namespace consistency for a wide-area file system
JP4175998B2 (ja) * 2002-12-10 2008-11-05 株式会社東芝 口座管理・決済システム及びロット管理システム
US20040158561A1 (en) * 2003-02-04 2004-08-12 Gruenwald Bjorn J. System and method for translating languages using an intermediate content space
US7092937B2 (en) * 2003-04-07 2006-08-15 General Motors Corporation Vehicle diagnostic knowledge delivery
US20050086234A1 (en) * 2003-10-15 2005-04-21 Sierra Wireless, Inc., A Canadian Corporation Incremental search of keyword strings
US20050131855A1 (en) * 2003-12-11 2005-06-16 Forman George H. Data cleaning
US7627619B1 (en) * 2003-12-29 2009-12-01 Emc Corporation Data verification following database write
US8886617B2 (en) 2004-02-20 2014-11-11 Informatica Corporation Query-based searching using a virtual table
US7243110B2 (en) * 2004-02-20 2007-07-10 Sand Technology Inc. Searchable archive
US20050216518A1 (en) * 2004-03-26 2005-09-29 Oracle International Corporation Database management system with persistent, user-accessible bitmap values
US7734581B2 (en) * 2004-05-18 2010-06-08 Oracle International Corporation Vector reads for array updates
US7620632B2 (en) * 2004-06-30 2009-11-17 Skyler Technology, Inc. Method and/or system for performing tree matching
WO2006042019A2 (en) * 2004-10-06 2006-04-20 Permabit, Inc. A storage system for randomly named blocks of data
US20070161214A1 (en) * 2006-01-06 2007-07-12 International Business Machines Corporation High k gate stack on III-V compound semiconductors
US8266152B2 (en) * 2006-03-03 2012-09-11 Perfect Search Corporation Hashed indexing
US8176052B2 (en) * 2006-03-03 2012-05-08 Perfect Search Corporation Hyperspace index
US8055544B2 (en) * 2006-06-02 2011-11-08 Cobalt Group, Inc. Source- and venue-specific inventory data processing and identification system
US7761485B2 (en) * 2006-10-25 2010-07-20 Zeugma Systems Inc. Distributed database
US7620526B2 (en) * 2006-10-25 2009-11-17 Zeugma Systems Inc. Technique for accessing a database of serializable objects using field values corresponding to fields of an object marked with the same index value
US7912840B2 (en) * 2007-08-30 2011-03-22 Perfect Search Corporation Indexing and filtering using composite data stores
US8131729B2 (en) * 2008-06-12 2012-03-06 International Business Machines Corporation System and method for best-fit lookup of multi-field key
US20100299367A1 (en) * 2009-05-20 2010-11-25 Microsoft Corporation Keyword Searching On Database Views
US9002859B1 (en) 2010-12-17 2015-04-07 Moonshadow Mobile, Inc. Systems and methods for high-speed searching and filtering of large datasets
WO2012097009A2 (en) 2011-01-10 2012-07-19 Ward Roy W Systems and methods for high-speed searching and filtering of large datasets
US10482475B2 (en) 2011-02-10 2019-11-19 Adp Dealer Services, Inc. Systems and methods for providing targeted advertising
US9069707B1 (en) 2011-11-03 2015-06-30 Permabit Technology Corp. Indexing deduplicated data
US9092478B2 (en) 2011-12-27 2015-07-28 Sap Se Managing business objects data sources
US8938475B2 (en) * 2011-12-27 2015-01-20 Sap Se Managing business objects data sources
US9171054B1 (en) 2012-01-04 2015-10-27 Moonshadow Mobile, Inc. Systems and methods for high-speed searching and filtering of large datasets
US8990204B1 (en) 2012-01-17 2015-03-24 Roy W. Ward Processing and storage of spatial data
US9747363B1 (en) 2012-03-01 2017-08-29 Attivio, Inc. Efficient storage and retrieval of sparse arrays of identifier-value pairs
EP2831772A1 (de) * 2012-03-29 2015-02-04 The Echo Nest Corporation Echtzeitzuordnung von benutzermodellen zur einem invertierten datenindex zum abrufen, filtern und empfehlen
US9953042B1 (en) 2013-03-01 2018-04-24 Red Hat, Inc. Managing a deduplicated data index
US11080734B2 (en) 2013-03-15 2021-08-03 Cdk Global, Llc Pricing system for identifying prices for vehicles offered by vehicle dealerships and other entities
US9390162B2 (en) 2013-04-25 2016-07-12 International Business Machines Corporation Management of a database system
US9521189B2 (en) * 2013-08-21 2016-12-13 Google Inc. Providing contextual data for selected link units
US10332068B2 (en) 2016-04-21 2019-06-25 Cdk Global, Llc Systems and methods for stocking an automobile
US10867285B2 (en) 2016-04-21 2020-12-15 Cdk Global, Llc Automatic automobile repair service scheduling based on diagnostic trouble codes and service center attributes
US10853769B2 (en) 2016-04-21 2020-12-01 Cdk Global Llc Scheduling an automobile service appointment in a dealer service bay based on diagnostic trouble codes and service bay attributes
US11200217B2 (en) 2016-05-26 2021-12-14 Perfect Search Corporation Structured document indexing and searching
US10521411B2 (en) 2016-08-10 2019-12-31 Moonshadow Mobile, Inc. Systems, methods, and data structures for high-speed searching or filtering of large datasets
US10216515B2 (en) 2016-10-18 2019-02-26 Oracle International Corporation Processor load using a bit vector to calculate effective address
US10326858B2 (en) 2017-05-23 2019-06-18 Cdk Global, Llc System and method for dynamically generating personalized websites
US11190608B2 (en) 2018-03-21 2021-11-30 Cdk Global Llc Systems and methods for an automotive commerce exchange
US11501351B2 (en) 2018-03-21 2022-11-15 Cdk Global, Llc Servers, systems, and methods for single sign-on of an automotive commerce exchange
SG11202012876SA (en) * 2018-07-25 2021-01-28 Ab Initio Technology Llc Structured record retrieval
CN111291035B (zh) * 2020-03-23 2023-05-16 东软睿驰汽车技术(沈阳)有限公司 一种对数据进行切片的方法、装置及相关产品
US11080105B1 (en) 2020-11-18 2021-08-03 Cdk Global, Llc Systems, methods, and apparatuses for routing API calls
US11514021B2 (en) 2021-01-22 2022-11-29 Cdk Global, Llc Systems, methods, and apparatuses for scanning a legacy database
US11803535B2 (en) 2021-05-24 2023-10-31 Cdk Global, Llc Systems, methods, and apparatuses for simultaneously running parallel databases
US11637685B2 (en) 2021-08-31 2023-04-25 Samsung Display Co., Ltd. System and method for transition encoding with flexible word-size
CN116701386A (zh) * 2022-02-28 2023-09-05 华为技术有限公司 键值对检索方法、装置及存储介质

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4606002A (en) * 1983-05-02 1986-08-12 Wang Laboratories, Inc. B-tree structured data base using sparse array bit maps to store inverted lists
US5010478A (en) 1986-04-11 1991-04-23 Deran Roger L Entity-attribute value database system with inverse attribute for selectively relating two different entities
US4774657A (en) 1986-06-06 1988-09-27 International Business Machines Corporation Index key range estimator
US4945475A (en) 1986-10-30 1990-07-31 Apple Computer, Inc. Hierarchical file system to provide cataloging and retrieval of data
CA2000006C (en) 1989-01-23 1994-07-12 Walter W. Chang Combinatorial signatures for data encoding and searching
CA2093341C (en) * 1990-10-05 2002-09-24 David L. Fulton System and method for information retrieval
US5537574A (en) * 1990-12-14 1996-07-16 International Business Machines Corporation Sysplex shared data coherency method
US5493668A (en) * 1990-12-14 1996-02-20 International Business Machines Corporation Multiple processor system having software for selecting shared cache entries of an associated castout class for transfer to a DASD with one I/O operation
US5293616A (en) 1991-10-22 1994-03-08 Flint Orin O Method and apparatus for representing and interrogating an index in a digital memory
US5418947A (en) * 1992-12-23 1995-05-23 At&T Corp. Locating information in an unsorted database utilizing a B-tree
US5649181A (en) * 1993-04-16 1997-07-15 Sybase, Inc. Method and apparatus for indexing database columns with bit vectors
JP2522154B2 (ja) * 1993-06-03 1996-08-07 日本電気株式会社 音声認識システム
CA2117846C (en) 1993-10-20 2001-02-20 Allen Reiter Computer method and storage structure for storing and accessing multidimensional data
US5465359A (en) * 1993-11-01 1995-11-07 International Business Machines Corporation Method and system for managing data and users of data in a data processing system
US5634072A (en) * 1993-11-01 1997-05-27 International Business Machines Corporation Method of managing resources in one or more coupling facilities coupled to one or more operating systems in one or more central programming complexes using a policy
US5544345A (en) * 1993-11-08 1996-08-06 International Business Machines Corporation Coherence controls for store-multiple shared data coordinated by cache directory entries in a shared electronic storage
US5557786A (en) 1994-01-24 1996-09-17 Advanced Computer Applications, Inc. Threaded, height-balanced binary tree data structure
US5671406A (en) * 1995-10-18 1997-09-23 Digital Equipment Corporation Data structure enhancements for in-place sorting of a singly linked list
US5758353A (en) * 1995-12-01 1998-05-26 Sand Technology Systems International, Inc. Storage and retrieval of ordered sets of keys in a compact 0-complete tree
US5815669A (en) * 1996-05-17 1998-09-29 Nko, Inc. Method of routing a data transmission
US5870747A (en) * 1996-07-09 1999-02-09 Informix Software, Inc. Generalized key indexes
US6141655A (en) * 1997-09-23 2000-10-31 At&T Corp Method and apparatus for optimizing and structuring data by designing a cube forest data structure for hierarchically split cube forest template

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019197882A1 (en) * 2018-04-13 2019-10-17 Pratik Sharma Bit vector based key-value store

Also Published As

Publication number Publication date
DE69926305D1 (de) 2005-09-01
EP0961211A3 (de) 2002-04-03
EP0961211B1 (de) 2005-07-27
US6070164A (en) 2000-05-30
ATE300767T1 (de) 2005-08-15
US6499033B1 (en) 2002-12-24
EP0961211A2 (de) 1999-12-01

Similar Documents

Publication Publication Date Title
DE69926305T2 (de) Rechnerlesbarer Speicher zum Speichern einer Datenbank und Indizes
DE69912410T2 (de) Schnelles zeichenkettensuchen und -indizieren
DE10028688B4 (de) Methode, System und Programm für eine Verbindungsoperation in einer mehrspaltigen Tabelle sowie in Satellitentabellen mit doppelten Werten
DE60118973T2 (de) Verfahren zum abfragen einer struktur komprimierter daten
DE69433165T2 (de) Assoziatives textsuch- und wiederauffindungssystem
DE69727421T2 (de) Hypertext-Dokumentwiederauffindungssystem zum Wiederauffinden zusammengehöriger Hypertextdokumente
DE69631457T2 (de) Vorrichtung und verfahren zum übertragbaren indexieren von dokumenten gemäss einer n-gram-wortzerlegung
DE60121231T2 (de) Datenverarbeitungsverfahren
DE69333422T2 (de) Auffindung von Zeichenketten in einer Datenbank von Zeichenketten
DE69533193T2 (de) Paralleles verarbeitungssystem zum durchlaufen einer datenbank
DE60025778T2 (de) Verfahren zum Speichern und Verwalten von Daten
DE102007037646B4 (de) Computerspeichersystem und Verfahren zum Indizieren, Durchsuchen und zur Datenwiedergewinnung von Datenbanken
DE10255128A1 (de) Computer-implementierte PDF-Dokumentenverwaltung
EP1975821A2 (de) Verfahren zur digitalen Speicherung von Daten auf einem Datenspeicher mit beschränktem verfügbarem Speicherplatz
DE69935657T2 (de) Verfahren und gerät zum optimieren der querygenerierung durch selektives verwenden von zusätzen oder schlüsselwerten
EP1300776A1 (de) Kontextsensitives Verfahren zur Ermittlung von Daten aus Datenbanken
DE19959765A1 (de) Datei-Editor für mehrere Datenuntermengen
DE10018993B4 (de) Datenbank-Verwaltungsvorrichtung und Datenbank-Datensatzabfragevorrichtung sowie Verfahren zum Verwalten einer Datenbank und zum Abfragen eines Datenbank-Datensatzes
DE60300984T2 (de) Methode und Computersystem für die Optimierung eines Boolschen Ausdrucks für Anfragebearbeitung
EP1276056B1 (de) Verfahren zum Verwalten einer Datenbank
EP3563261B1 (de) Bitsequenzbasiertes datenklassifikationssystem
DE112010002620T5 (de) Ontologie-nutzung zum ordnen von datensätzen nachrelevanz
DE3736455A1 (de) Hierarchisches ablagesystem
DE10048478C2 (de) Verfahren zum Zugriff auf eine Speichereinheit bei der Suche nach Teilzeichenfolgen
DE10057634C2 (de) Verfahren zur Verarbeitung von Text in einer Rechnereinheit und Rechnereinheit

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8339 Ceased/non-payment of the annual fee