DE69831246T2 - Verfahren zur einrichtung eines assoziativen speichers mit digitaler trie struktur - Google Patents

Verfahren zur einrichtung eines assoziativen speichers mit digitaler trie struktur Download PDF

Info

Publication number
DE69831246T2
DE69831246T2 DE69831246T DE69831246T DE69831246T2 DE 69831246 T2 DE69831246 T2 DE 69831246T2 DE 69831246 T DE69831246 T DE 69831246T DE 69831246 T DE69831246 T DE 69831246T DE 69831246 T2 DE69831246 T2 DE 69831246T2
Authority
DE
Germany
Prior art keywords
node
bits
nodes
address
trie
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 - Lifetime
Application number
DE69831246T
Other languages
English (en)
Other versions
DE69831246D1 (de
Inventor
Matti Tikkanen
Jukka-Pekka Iivonen
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.)
Nokia Oyj
Original Assignee
Nokia Oyj
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 Nokia Oyj filed Critical Nokia Oyj
Application granted granted Critical
Publication of DE69831246D1 publication Critical patent/DE69831246D1/de
Publication of DE69831246T2 publication Critical patent/DE69831246T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime 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/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9027Trees
    • 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/953Organization of data
    • Y10S707/956Hierarchical
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Memory System (AREA)

Description

  • Gebiet der Erfindung
  • Die vorliegende Erfindung bezieht sich im allgemeinen auf eine Implementierung eines assoziativen Speichers, und insbesondere auf eine Implementierung eines assoziativen Speichers auf der Grundlage einer digitalen Trie-Struktur. Die Lösung gemäß der Erfindung ist zur Verwendung vorrangig in Verbindung mit Zentralspeicherdatenbanken vorgesehen. Passende Anwendungen beinhalten im besonderen Datenbanken, in denen zwar eine große Anzahl von Suchvorgängen durchgeführt wird, aber in denen es lediglich eine kleine Anzahl von Einfügungen oder Löschungen verglichen mit den Suchvorgängen gibt. Derartige Anwendungen beinhalten Heimatregistern (HLR, "Home Location Registers") in mobilen Kommunikationsnetzwerken und geographische Informationssysteme (GIS), die in Kartenanwendungen verwendet werden.
  • Hintergrund der Erfindung
  • Die eindimensionale Verzeichnisstruktur gemäß dem Stand der Technik, die als digitales Trie bezeichnet wird (das Wort "Trie" ist vom englischen Wort "retrieval" hergeleitet), ist die zugrunde liegende Basis des Prinzips der Erfindung. Digitale Tries können in zwei Typen implementiert werden: Eimer-Tries und keine Eimer aufweisende Tries.
  • Eine digitale Eimer-Trie-Struktur ist eine baumförmige, zusammengesetzte Struktur aus zwei Typen von Knoten: Eimer und Trie-Knoten. Ein Eimer ist eine Datenstruktur, die eine Anzahl von Dateneinheiten oder eine Anzahl von Zeigern auf Dateneinheiten oder eine Anzahl von Suchschlüsseln/Zeigerpaaren enthält (die Anzahl kann lediglich eine Dateneinheit, einen Zeiger oder ein Paar von Schlüsseln/Zeigern enthalten). Ein Trie-Knoten ist andererseits ein die Suche führendes Array, das eine Größe von 2 hoch k (2k) Elementen aufweist. Wird ein Element in einem Trie-Knoten verwendet, dann bezieht es sich entweder auf einen Trie-Knoten auf der nächsten Ebene im Verzeichnisbaum oder auf einen Eimer. Andernfalls ist das Element frei (leer).
  • Eine Suche in der Datenbank schreitet durch Untersuchung des Suchschlüssels (der beispielsweise im Fall einer Teilnehmerdatenbank in einem Mobilfunktelefonnetzwerk oder einem Telefonaustausch typischerweise diejenige Binärzahl darstellt, die der Telefonnummer des Teilnehmers entspricht) k Bits auf einmal voran. Die zu suchenden Bits werden derart gewählt, dass auf der Ursprungsebene der Struktur (im ersten Trie-Knoten) die k am weitesten links gelegenen Bits gesucht werden, auf der zweiten Ebene der Struktur die den am weitesten links gelegenen Bits nächsten k Bits gesucht werden, usw. Die zu suchenden Bits werden als eine vorzeichenlose binäre Ganzzahl interpretiert, die direkt zur Indexierung des Elementen-Arrays verwendet wird, das in dem Trie-Knoten enthalten ist, wobei der Index ein gegebenes Element in dem Array anzeigt. Ist das durch den Index angezeigte Element frei, wird die Suche als nicht erfolgreich beendet. Bezieht sich das Element auf einen Trie-Knoten auf der nächsten Ebene, werden k nächste, aus dem Suchschlüssel extrahierte Bits auf dieser Ebene auf die vorstehend beschriebene Weise durchsucht. Als Ergebnis des Vergleichs verzweigt sich in dem Trie-Knoten die Routine entweder zu einem Trie-Knoten auf der nächsten Ebene oder zu einem Eimer.
  • Bezieht sich das Element auf einen einen Schlüssel enthaltenden Eimer, wird der darin enthaltene Schüssel mit dem Suchschlüssel verglichen. Der gesamte Suchschlüssel wird somit lediglich dann verglichen, wenn die Suche auf einen Eimer trifft. Dort, wo die Schlüssel gleich sind, ist die Suche erfolgreich, und die gewünschte Dateneinheit wird bei der durch den Zeiger des Eimers angezeigten Speicheradresse gewonnen. Dort, wo die Schlüssel voneinander abweichen, wird die Suche als nicht erfolgreich beendet.
  • Eine eimerlose Trie-Struktur weist keine Eimer auf, aber es wird eine Referenz auf eine Dateneinheit von einem Trie-Knoten auf der tiefstgelegenen Ebene einer baumförmigen Hierarchie durchgeführt, der als Blattknoten bezeichnet wird. Im Gegensatz zu Eimern können Blattknoten in einer eimerlosen Struktur keine Dateneinheiten, sondern lediglich Zeiger auf Dateneinheiten enthalten. Auch eine Eimerstruktur weist Blattknoten auf, und dadurch sind Trie-Knoten, die zumindest einen Zeiger auf einen Eimer (Eimerstruktur) oder auf eine Dateneinheit (eimerlose Struktur) enthalten, Blattknoten. Die anderen Knoten in dem Trie sind interne Knoten. Trie-Knoten können dadurch entweder interne Knoten oder Blattknoten sein. Mittels Eimern kann das Erfordernis der Reorganisation der Verzeichnisstruktur aufgeschoben werden, da eine große Anzahl von Zeigern/Dateneinheiten in den Eimern untergebracht werden kann, bis zu einem Zeitpunkt, an dem das Erfordernis der Reorganisation auftritt.
  • Die Lösung gemäß der Erfindung kann sowohl auf eine Eimerstruktur als auch auf eine eimerlose Struktur angewendet werden. Nachstehend sind dennoch Eimerstrukturen als Beispiele verwendet.
  • 1 zeigt ein Beispiel einer digitalen Trie-Struktur, bei der der Schlüssel eine Länge von 4 Bits und k = 2 aufweist, und dadurch jeder Trie-Knoten 22 = 4 Elemente aufweist, und 2 aus dem Schlüssel extrahierte Bits auf jeder Ebene gesucht werden. Eimer sind mit den Bezugszeichen A, b, C, D ... H ... M, N O und P bezeichnet. Dadurch ist ein Eimer ein Knoten, der nicht auf eine tiefergelegene Ebene im Baum zeigt. Trie-Knoten sind mit Bezugszeichen IN1 ... IN5 bezeichnet und Elemente in dem Trie-Knoten mit Bezugszeichen NE gemäß 1.
  • In dem beispielhaften Fall gemäß 1 werden die Suchschlüssel für die Eimer wie folgt gezeigt: A = 0000, B = 0001, C = 0010, ..., H = 0111, ... und P = 1111. In diesem Fall wird ein Zeiger auf denjenigen Speicherort in der Datenbank SD in jedem Eimer gespeichert, bei dem die tatsächlichen Daten gefunden werden sollen, beispielsweise die Telefonnummer des passenden Teilnehmers und weitere Informationen, die sich auf diesen Teilnehmer beziehen. Die tatsächlichen Teilnehmerdaten können in der Datenbank beispielsweise als eine sequenzielle Datei vom gemäß der Figur gezeigten Typ gespeichert werden. Die Suche wird auf der Grundlage des Suchschlüssels des Eintrags H beispielsweise durch Extraktion der beiden am weitesten links gelegenen Bits (01) aus dem Suchschlüssel und durch Interpretation derer durchgeführt, was das zweite Element des Knotens IN1 liefert, das einen Zeiger auf Knoten IN3 auf der nächsten Ebene enthält. Auf dieser Ebene werden die beiden nächsten Bits (11) aus dem Suchschlüssel extrahiert, und ergeben dadurch das vierte Element dieses Knotens, wobei sie auf den Eintrag H zeigen.
  • Anstelle eines Zeigers kann ein Eimer (neben einem Suchschlüssel) eine tatsächliche Datendatei enthalten (auch mit dem allgemeineren Ausdruck Dateneinheit bezeichnet). Dadurch können beispielsweise die sich auf Teilnehmer A (1) beziehenden Daten in Eimer A lokalisiert sein, die sich auf Teilnehmer B beziehenden Daten im Eimer B usw. Dadurch wird in dem ersten Ausführungsbeispiel eines assoziativen Speichers ein Schlüssel/Zeiger-Paar in dem Eimer gespeichert, und im zweiten Ausführungsbeispiel werden ein Schlüssel und tatsächliche Daten gespeichert, wenn auch der Schlüssel nicht unerlässlich ist.
  • Der Suchschlüssel kann auch multidimensional sein. Mit anderen Worten kann er eine Anzahl von Attributen umfassen (beispielsweise den Familiennamen und einen oder mehrere der Vornamen des Teilnehmers). Eine derartige multidimensionale Trie-Struktur ist in der internationalen Anmeldung Nr. PCT/FI95/00319 offenbart (veröffentlicht unter der Nummer WO 95/34155). In der Struktur wird eine Adressberechnung derart durchgeführt, dass eine gegebene, vorbestimmte Anzahl von Bits auf einmal von jeder Dimension unabhängig von den anderen Dimensionen ausgewählt wird. Dadurch wird eine feste Grenze, die unabhängig von den anderen Dimensionen ist, für jede Dimension in jedem individuellen Knoten der Trie-Struktur durch Vorbestimmung der in jeder Dimension zur durchsuchenden Anzahl von Schlüsselbits gesetzt. Mit einer derartigen Struktur kann das Erfordernis an Speicherschaltungsbedarf herabgesetzt werden, wenn die Verteilung der Suchschlüsselwerte zuvor bekannt ist, in welchem Fall die Struktur in einer statischen Form implementiert werden kann.
  • Oft ist die Situation jedoch dergestalt, dass die Verteilung der Suchschlüsselwerte nicht zuvor bekannt ist. In einem solchen Fall ergibt die in vorstehender Patentanmeldung offenbarte Struktur im Hinblick auf die Speicherplatzbelegung kein optimales Ergebnis, da die Anzahl in jeder Dimension zu durchsuchender Bits eine vorbestimmte Konstante ist.
  • Wird gewünscht, dass die Möglichkeit der Reorganisation der Struktur gemäß der momentanen Schlüsselverteilung im Hinblick auf Effizienz und Speicherplatzbelegung optimal sein soll, muss sich die Größe der Knoten dynamisch ändern, wenn sich die Schlüsselverteilung ändert. Ist die Schlüsselverteilung einheitlich, kann die Knotengröße zur Verflachung der Struktur erhöht werden. Andererseits kann bei nichteinheitlichen Schlüsselverteilungen in Verbindung derer eine Speicherplatzbelegung in eine dynamische Knotengröße verwendenden Speicherstrukturen ein Problem darstellt, die Knotengröße klein gehalten werden, was lokal eine einheitlichere Schlüsselverteilung und dadurch eine kleinere Speicherplatzbelegung zulässt.
  • Bei dynamischer Veränderung der Knotengröße stellt sich jedoch ein Problem durch den Umstand dar, wie die Speicherstruktur zur Optimierung der Speichereffizienz (Geschwindigkeit) und des Speicherplatzbedarfs gemäß der momentanen Schlüsselverteilung verwaltet werden soll.
  • Kurzfassung der Erfindung
  • Eine Aufgabe der Erfindung ist die Bereitstellung einer Lösung für vorstehendes Problem und die Bereitstellung eines Verfahrens, mit dem der erforderliche Speicherplatz so klein wie möglich gehalten werden kann, wenn die Verteilung der Suchschlüsselwerte nicht zuvor bekannt ist, und mit dem der Speicherbetrieb und die Speicherverwaltung gleichzeitig so effizient wie möglich verwaltet werden können.
  • Diese Aufgabe ist mit den in den unabhängigen Ansprüchen definierten Lösungen gelöst. Die erste von ihnen offenbart eine Struktur, die Eimer verwendet, und die zweite eine Struktur, die keine Eimer verwendet.
  • Die Idee der Erfindung ist zuallererst die Verwendung des vorstehenden Prinzips bei einer Adressberechnung, gemäß dem die Anzahl in den Knoten (Knotengröße) durchsuchter Bits dynamisch verändert wird, und dadurch die baumförmige Struktur gemäß der momentanen Schlüsselverteilung verändert wird. Eine zusätzliche Idee ist die Einbringung einer Verwaltung der Trie-Knoten-Größe in eine derartige Struktur (oder der internen Knotengröße im eimerlosen Fall), die auf der Grundlage von bestimmten logischen Bedingungen zu implementieren ist, und dies wird hauptsächlich durch Beibehaltung der Füllraten der Trie-Knoten (internen Knoten) und der Anzahl von Zeigern, die auf andere Trie-Knoten (interne Knoten) zeigen, auf einem optimalen Niveau erreicht. Auf Grund der Beibehaltung wird die Speicherstruktur der Erfindung automatisch an die momentane Schlüsselverteilung angepasst, so dass die vorstehenden Aufgaben erfüllt sind.
  • Die Lösung gemäß der Erfindung sichert auch die effektive Durchführung von Einstellungsoperationen, da die Struktur ein reihenfolgenerhaltendes digitales Trie darstellt.
  • Kurzbeschreibung der Zeichnungen
  • Nachstehend sind die Erfindung und ihre bevorzugten Ausführungsbeispiele ausführlicher unter Bezugnahme auf Beispiele gemäß den beigefügten Zeichnungen beschrieben. Es zeigen:
  • 1 die Verwendung einer eindimensionalen digitalen Trie-Struktur bei der Verwaltung von Teilnehmerdaten bei einem Telefonaustausch bzw. einer Telefonvermittlungsstelle,
  • 2 eine multidimensionale Trie-Struktur,
  • 3 eine erfindungsgemäße Speicherstruktur,
  • 4 die Implementierung einer Adressberechnung im Speicher gemäß der Erfindung,
  • 5 die Struktur eines Trie-Knotens des Speichers,
  • 6a und 6b die Halbierung eines Trie-Knotens,
  • 7a bis 7c die Verdopplung eines Trie-Knotens, die als Ergebnis der Einfügung durchgeführt wird,
  • 8a bis 8c ein weiteres Beispiel der Verdopplung eines Trie-Knotens,
  • 9a und 9b die Platzierung von Elementen bei der Verdopplung eines Knotens,
  • 10a und 10b das Prinzip der Bildung eines komprimierten Knotens,
  • 11a und 11b ein Beispiel der Speicherstrukturverwaltung,
  • 12 die Struktur eines komprimierten Knotens, der in dem Speicher verwendet wird,
  • 13a die Einschränkung, die durch die bei der Kombination der Knoten verwendete Wortlänge entsteht,
  • 13b die Struktur eines Sammelknotens, der aus der Knotenkette gemäß 13a gebildet werden soll, und
  • 14b die erfindungsgemäße Speicherandordnung auf Blockdarstellungsebene.
  • Ausführliche Beschreibung der Erfindung
  • Wie vorstehend beschrieben, weist in der Erfindung die Trie-Struktur eine multidimensionale (im allgemeinen n-dimensionale) Implementierung auf. Eine derartige multidimensionale Struktur ist ansonsten der am Anfang beschriebenen eindimensionalen Struktur höchst ähnlich, das in den Trie-Knoten enthaltene Elementen-Array ist aber multidimensional. 2 erläutert eine zweidimensionale 22·21-Struktur, bei der eine Dimension im Elementen-Array 4 Elemente und die andere Dimension 2 Elemente umfasst. Eimer, auf die von den Elementen in dem Trie-Knoten gezeigt wird, sind durch Kreise in der Figur angezeigt.
  • Eine Adressberechnung im multidimensionalen Fall wird auf dem gleichen Prinzip wie im eindimensionalen Fall durchgeführt. Der grundlegende Unterschied liegt jedoch darin, dass anstelle eines einzelnen Elementen-Array-Indexes ein Index für jede Dimension in dem Elementen-Array (n Indizes) berechnet wird. Jede Dimension weist dadurch einen eigenen Suchschlüsselraum auf {0, 1, ..., 2Vi – 1} (vi ist die Länge des Suchschlüssels in Bits in jeder Dimension und i ∊ {1, ..., n}).
  • Die Größe des Trie-Knotens in der Richtung jeder Dimension beträgt 2ki Elemente, und die Gesamtanzahl an Elementen S im Trie-Knoten ist ebenfalls eine Zweierpotenz: S = ΠSki = 2k1·2k2·2k3· ... = 2N (1)
  • Auf alle Elemente in einem n Dimensionen aufweisenden Trie-Knoten kann dadurch durch n Ganzzahlen (n ≥ 2) gezeigt werden, von denen jede einen Wert im Bereich {0, 1, ..., 2ki – 1} annehmen kann. Dadurch ist die Gesamtlänge des Suchschlüssels der vorbestimmte, feste Parameter in jeder Dimension. Weist beispielsweise eine Dimension des Suchschlüssels höchstens 256 Attribute (wie Vornamen) auf, beträgt die Gesamtlänge des Suchschlüssels 8 Bits.
  • 3 zeigt ein Beispiel eines Knotens N10, der in der Verzeichnisstruktur des erfindungsgemäßen Speichers verwendet wird, der einen dreidimensionalen Suchschlüssel verwendet. In der Richtung der ersten Dimension (x) weist der Trie-Knoten 22 = 4 Elemente auf, in der Richtung der zweiten Dimension (y) 21 = 2 Elemente, und der Richtung der dritten Dimension (z) 23 = 8 Elemente, was eine Gesamtzahl von 26 = 64 Elementen in dem Trie-Knoten ergibt, die mit 0–63 durchnummeriert sind.
  • Da der Speicherbereich in Hardwareimplementierungen der Praxis (zum Beispiel eine Computereinrichtung) eindimensional ist, wird das multidimensionale Array im Adressberechnungsbetrieb (d.h. im Voranschreiten in dem Verzeichnisbaum) linearisiert, d.h. umgewandelt, um unidirektional zu sein. Die Linearisierung ist ein arithmetischer Vorgang, der bei Arrays jeder Größe durchgeführt werden kann. Daher ist es irrelevant, ob die Trie-Knoten oder ihre Elementen-Arrays als eindimensional oder mehrdimensional angesehen werden müssen, da multidimensionale Arrays in jedem Fall linearisiert werden, um eindimensional zu sein.
  • Bei der Linearisierung werden die Elemente in dem Array bei 0 (wie gemäß 3 gezeigt) beginnend nummeriert, wobei die Zahl des letzten Elements um 1 kleiner ist als das Produkt der Größen aller Dimensionen. Die Nummer eines Elements ist die Summe der Produkte einer jeden Koordinate (beispielsweise im dreidimensionalen Fall der x, y und z-Koordinaten) und der Größen der ihr vorangehenden Dimensionen. Die derart berechnete Nummer wird direkt zur Indexierung des eindimensionalen Arrays eingesetzt.
  • Im Fall des gemäß 3 gezeigten Trie-Knotens wird die Elementnummer VAn gemäß Vorstehendem mit der Formel berechnet: VAn = x + y·4 + z·4·2 (2)wobei x ∊ {0, 1, 2, 3}, y ∊ {0, 1} und z ∊ 0, 1, 2, 3, 4, 5, 6, 7}. Dadurch erhält man beispielsweise für Element 54 aus dessen Koordinaten (2, 1, 6):
    2 + 1·4 + 6·4·2 = 2 + 4 + 48 = 54.
  • Wird das (n-dimensionierte) Elementen-Array eines Trie-Knotens einer n-dimensionalen Trie-Struktur linearisiert, dann beträgt gemäß Vorstehendem die Größe jeder Dimension 2ki, wobei ki die Anzahl der auf einmal in jeder betroffenen Dimension zu durchsuchenden Bits darstellt. Wird eine Koordinate gemäß der Dimension durch Referenz aj (j ∊ {0, 1, 2, ... n}) bezeichnet, dann kann die Linearisierung ausgeschrieben werden als:
  • Figure 00130001
  • Die Linearisierung kann durch Durchführen einer Multiplikation gemäß Formel (3) ausgeführt werden, es ist aber angebracht, die Linearisierung durch Bildung einer Bitkette aus den Suchschlüsselbits mit bekannten Verfahren durchzuführen, wobei das entsprechende Bezugszeichen das Element anzeigt, dessen Inhalt die Grundlage für ein Voranschreiten im Verzeichnisbaum bereitstellt. Ein derartiges Linearisierungsverfahren wird Bitverschachtelung genannt. Eine Bitverschachtelung ist ein effizienteres (schnelleres) Verfahren als die Multiplikation gemäß Formel (3), da bei Verwendung von Bitverschachtelung Multiplikationen in Additionen und Bitverschiebungen umgewandelt werden, die schneller durchzuführen sind.
  • Der gebräuchlichste Weg zur Implementierung einer Bitverschachtelung ist die "z-Reihung". Ein weiteres mögliches Bitverschachtelungsverfahren ist die Zeilenreihung. Bei der Erfindung ist die Anwendung der Zeilenreihung vorteilhaft, da sie die effizienteste Adressberechnung bei Speichersuchvorgängen leistet, es kann aber jegliches bekannte Bitverschachtelungsverfahren verwendet werden, solange das gleiche Verfahren in allen Knoten der Struktur verwendet wird.
  • 4 zeigt ein Beispiel einer Adressberechnung, die in der erfindungsgemäßen Trie-Struktur durchgeführt wird. Gemäß der Figur wurde weiterhin angenommen, dass der Raum dreidimensional ist. (Dimensionen x, y und z). Es wurde ferner angenommen, dass ein Suchschlüssel ax in der Richtung der Dimension x ax = 011011 ist, ein Suchschlüssel ay in der Richtung der Dimension y ay = 110100 ist, und ein Suchschlüssel az der Richtung der Dimension z az = 101010 ist. Die Suchschlüssel gemäß der Figur sind untereinander aufgelistet.
  • Bei den Knoten der Trie-Struktur sind die indexierenden Bits des eindimensionalen Elementen-Arrays in Rahmen gezeigt, die durch durchgezogene Linien bezeichnet sind. Diese Rahmen zeigen, wie ein globaler Suchschlüssel in lokale Suchschlüssel geteilt wird (Elementen-Array-Indizes), von denen jeder in einem Knoten der Trie-Struktur verwendet wird. Alle durch durchgezogene Linien angezeigten Rahmen beziehen sich auf das erste Bitverschachtelungsverfahren, d.h. die z-Reihung. Die Knoten in der Struktur sind durch Bezugszeichen N1 ... N7 in der Reihenfolge des Voranschreitens bezeichnet. Bei dem ersten Knoten (N1) (auf der höchstgelegenen Ebene) wird lediglich ein einzelnes Bit verwendet, dass das linksgelegenste Bit im Suchschlüssel der Dimension x darstellt (das eine logische Null ist). Danach schreitet die Routine in Pfeilrichtung zum nächsten Knoten (N2) voran, bei dem die Anzahl den lokalen Suchschlüssel bildender Bits zwei ist. Diese sind die am weitesten links gelegenen Bits im Suchschlüssel ay und das am weitesten links gelegene Bit im Suchschlüssel az. Bei der z-Reihung ist die Reihenfolge der Bits immer die gegenwärtig gezeigte, mit anderen Worten wird das erste Bit der ersten Dimension zuerst extrahiert, danach das erste Bit der zweiten Dimension, danach das erste Bit der dritten Dimension, usw. Nach dem ersten Bit der letzten Dimension werden die zweiten Bits der verschiedenen Dimensionen beginnend bei der ersten Dimension extrahiert. Auf diese Weise werden die folgenden knotenspezifischen Element-Array-Indizes gewonnen: 0 (Knoten N1), 11 (Knoten N2), 110 (Knoten N3), 10 (Knoten N4), 1010 (Knoten N5), 10 (Knoten N6) und 1100 (Knoten N7).
  • Alternativ kann ein anderes Bitverschachtelungsverfahren, wie Zeilenreihung, in dem Speicher verwendet werden. Gemäß 4 zeigen die mit gestrichelten Linien bezeichneten Rahmen und die ihnen zugehörigen Pfeile die Bildung eines Elementen-Array-Indexes im Knoten N5, wobei der Speicher eine Bitverschachtelung mit Zeilenreihung einsetzt. Im Beispiel der Figur wurde ferner angenommen, dass das Voranschreiten in Knoten N1 bis N4 so weit durchgeführt wurde, dass das erste im Knoten N5 gesuchte Bit das dritte von links in dem Suchschlüssel in der Dimension z ist. Bei der Zeilenreihung werden alle Bits jeder Dimension gleichzeitig extrahiert.
  • Wird Zeilenreihung eingesetzt, dann wird die minimale Anzahl von Bits, die aus den Suchschlüsseln der verschiedenen Dimensionen extrahiert werden sollen, zuerst in dem Knoten berechnet. Dies wird durch Division der Anzahl der in dem Knoten zu suchenden Bits durch die Anzahl der Dimensionen, und durch Abschneiden des erhaltenen Ergebnisses auf die nächste Ganzzahl erhalten. In diesem beispielhaften Fall beträgt die Anzahl der in Knoten N5 zu suchenden Bits 4 und die Anzahl der Dimensionen 3, was eine minimale Anzahl von 1 ergibt (das heißt, zumindest ein Bit muss aus dem Suchschlüssel einer jeden Dimension extrahiert werden). Danach muss noch berechnet werden, wie viele zusätzliche Bits aus den Suchschlüsseln der verschiedenen Dimensionen extrahiert werden müssen. Die Anzahl zusätzlicher Bits A wird aus der Formel A = k mod n erhalten, wobei k die Anzahl der in dem Knoten zu suchenden Bits und n die Anzahl der Dimensionen ist. In diesem beispielhaften Fall ist das Ergebnis A = 4 mod 3 = 1. Dadurch bedeutet das Ergebnis 1, dass ein zusätzliches Bit extrahiert werden muss. Eine Extraktion zusätzlicher Bits wird immer von der ersten durchsuchten Dimension begonnen. In diesem beispielhaften Fall wurde dadurch ein zusätzliches Bit aus dem Suchschlüssel der Dimension z extrahiert. Wäre das Ergebnis 2 gewesen, wären ein zusätzliches Bit vom Suchschlüssel der Dimension z und ein zusätzliches Bit vom Suchschlüssel der Dimension x extrahiert worden.
  • Daher wird in diesem beispielhaften Fall ein Bit aus dem Suchschlüssels einer jeden Dimension und zusätzlich ein Bit aus dem Suchschlüssel der Dimension z extrahiert. Da bei der Anwendung der Zeilenreihung alle Bits einer Dimension zugleich extrahiert werden, werden alle der Dimension z zu entnehmenden Bits (10) zuerst extrahiert, und danach alle dem Suchschlüssel der Dimension x zu entnehmenden Bits (0), und zuletzt alle aus dem Suchschlüssel der Dimension y zu extrahierenden Bits (1). Daher wird bei Anwendung der Zeilenreihung die Bitkette 1001 als ein Elementen-Array-Index von Knoten N5 erhalten. Diese Bitkette ist im unteren Teil von 4 gezeigt.
  • Da die Adressberechnung unter Verwendung einer zuvor bekannten Bitverschachtelung durchgeführt wird, ist die Adressberechnung nicht ausführlicher beschrieben.
  • Da die Reihenfolge der Bits im lokalen Suchschlüssel (Elementen-Array-Index), der in jedem Knoten gebildet werden muss, konstant ist, muss lediglich die Anzahl der zu verwendenden Bits bei der Bitkettenbildung bekannt sein, die in jedem Knoten durchgeführt wird. Dieser Datenwert wird in jedem Knoten gespeichert. Zusätzlich muss lediglich ein Elementen-Array in jedem normalen Trie-Knoten vorhanden sein. 5 zeigt die Struktur eines normalen Trie-Knotens. Bei seiner Minimalkonfiguration umfasst der Knoten dadurch lediglich zwei Teile: Ein Feld, das die Anzahl an Bits anzeigt, die in dem Knoten gesucht werden sollen (Bezugszeichen 51) und ein Elementen-Array (Bezugszeichen 52), wobei die Anzahl der Elemente in dem Array einer Zweierpotenz entspricht. Zum Voranschreiten im Verzeichnisbaum muss zusätzlich zur Anzahl zu durchsuchender Bits der Typ eines jeden Knotens bekannt sein. Diese Daten können in der Verzeichnisstruktur beispielsweise in jedem Knoten oder in dem Zeiger des Elternknotens gespeichert sein. Mittels zweier "Zusatz"-Bits des Zeigers (a und b 5) können in dem Zeiger Informationen darüber codiert werden, ob ein Nullzeiger (ein leeres Element) betroffen ist, oder ob der Zeiger auf einen normalen Trie-Knoten, einen Eimer oder einen komprimierten Trie-Knoten zeigt (was nachstehend beschrieben ist). Die Codierung kann beispielsweise vom gemäß der Figur gezeigten Typ sein.
  • Im Fall einer eimerlosen Struktur werden Informationen darüber gespeichert, ob der Zeiger auf einen unkomprimierten Knoten, einen komprimierten Knoten oder eine Dateneinheit zeigt.
  • Die Anzahl an in jedem Knoten zu verwendenden Suchschlüsselbits bleibt konstant, wenn es keine Änderungen in den Suchschlüsseln gibt. Durchzuführende Einfügungen und Löschungen in der Datenbank können dennoch die Schlüsselverteilung ändern, so dass die Anzahl der in dem Knoten zu suchenden Bits verändert werden muss, und dadurch die Speichereffizienz und Speicherplatzbelegung so gut wie möglich verwaltet werden können. Bei einheitlichen Schlüsselverteilungen kann die Anzahl in den Knoten zu suchende Bits erhöht werden, und dadurch ist eine kleinere Anzahl an Hash-Array-Indexierungen für ein mittleres Auffinden erforderlich als zuvor (das Elementen-Array im Trie-Knoten dient als ein Hash-Array). Dadurch wird die Effizienz von Speichersuchvorgängen gesteigert, da die Tiefe der bauförmigen Struktur im gleichen Maße verringert wird, wie sich die Knotengröße erhöht. Bei nicht-einheitlichen Schlüsselverteilungen andererseits, in Verbindung mit denen Speicherplatzbelegungen ein Problem in Speicherstrukturen darstellen werden, die eine dynamische Knotengröße verwenden, kann die Anzahl an in den Knoten zu suchenden Bits zur Bereitstellung einer lokal einheitlicheren Schlüsselverteilung und dadurch einer kleineren Speicherplatzbelegung klein gehalten werden.
  • Wie vorstehend beschrieben, wird das Problem mit einer derartigen sich dynamisch verändernden Datenstruktur sein, wie die Speicherstruktur zur Bereitstellung optimaler Effizienz und Speicherplatzbelegung verwaltet werden muss. Aus diesem Grund werden die Knoten in der Struktur mit bestimmten logischen Bedingungen belegt. Es wird versucht, diese Bedingungen durch Abändern der Knotengröße immer beizubehalten. Diese Bedingungen sind nachstehend näher beschrieben unter fortwährender Verwendung einer Eimer verwendenden Struktur als ein Beispiel. Die Verwaltung der Struktur ist ähnlich, wenn keine Eimer existieren. In einem derartigen Fall ist das Äquivalent eines Eimers eine Dateneinheit (auf die der Blattknoten in der eimerlosen Struktur zeigt).
  • Die erste Bedingung bezieht sich auf die Halbierung der Knoten. Gemäß dieser Halbierungsbedingung muss die Anzahl leerer Elemente in dem Trie-Knoten kleiner oder gleich der halben Anzahl von Elementen in dem Knoten sein ODER die Anzahl der Elemente, die auf Trie-Knoten zeigen, muss größer als ein Viertel der Anzahl der Elemente in dem Knoten sein (die logische ODER-Bedingung zwischen den Sätzen wurde in vorstehendem Fall angezeigt). Ändert sich die Situation als Ergebnis von in der Datenbank durchgeführten Löschungen (Unterlauf von Knoten), so dass weder die Anzahl leerer Elemente in dem Trie-Knoten kleiner oder gleich der Hälfte der Anzahl der Elemente in dem Knoten, noch die Anzahl der Elemente, die auf Trie-Knoten zeigen, größer als ein Viertel der Anzahl der Elemente in dem Knoten ist, wird die Knotengröße verringert, so dass die Bedingung wieder erfüllt ist. Die Verringerung wird als Halbierung des Knotens ausgeführt.
  • Die vorstehend beschriebene Halbierungsbedingung hilft bei der Datenspeicherung im Falle von Löschungen, so dass die Speicherplatzbelegung nicht als Ergebnis von Löschungen ansteigen kann.
  • Damit die Speicherung von Daten auch im Hinblick auf Einfügungen so effizient wie möglich verwaltet werden kann, wird im Speicher ebenso eine Verdopplung von Trie-Knoten gemäß einer Verdopplungsbedingung ausgeführt. Gemäß der Verdopplungsbedingung muss die Anzahl der Zeiger, die von dem Trie-Knoten auf andere Trie-Knoten zeigen, kleiner oder gleich der halben Anzahl der Elemente in dem Knoten sein. Ändert sich die Situation als Ergebnis in der Datenbank durchgeführter Einfügungen, so dass diese Bedingung nicht länger erfüllt ist, wird die Größe der Knoten verdoppelt.
  • Daher wird gemäß der Erfindung in der Struktur eine Halbierung und eine Verdopplung von Trie-Knoten kontinuierlich ausgeführt, wenn die Struktur die vorstehend erwähnten Bedingungen nicht erfüllt. Für ein Array von 16 Elementen beispielsweise bedeuten diese Bedingungen, dass die Anzahl leerer Elemente höchstens 8 betragen darf. Ist dies nicht der Fall, muss der Trie-Knoten mehr als vier Zeiger auf andere Trie-Knoten aufweisen, um eine Halbierung des Knotens zu vermeiden. Existieren jedoch mehr als 8 Zeiger auf andere Trie-Knoten, wird die Größe des Knotens verdoppelt. Nachstehend ist die Verwaltung der Struktur unter Bezugnahme auf Beispiele beschrieben, die sich auf eine Bitverschachtelung mit Zeilenreihung beziehen.
  • Wie vorstehend erwähnt, wird die Halbierung des Trie-Knotens zur Absicherung verwendet, dass sich der durch die Struktur erforderte Speicherplatz unter keinen Umständen erhöht. 6a zeigt eine Situation, bei der ein Array der Größe 8 drei Zeiger auf Trie-Knoten (durch durchgehende Pfeile bezeichnet) und einen Zeiger auf einen Eimer enthält (durch einen gestrichelten Pfeil bezeichnet). Wird der Eimerzeiger entfernt und der Knoten als Ergebnis halbiert, dann stellt sich die Situation dar, wie am unteren Ende von 6a gezeigt, es hat sich mit anderen Worten der erforderliche Speicherplatz um zwei Elemente erhöht. Gemäß der Erfindung wird jedoch in der Situation gemäß 6a noch keine Halbierung durchgeführt, da die Anzahl von Trie-Knoten-Zeigern größer als ein Viertel der Größe des Knotens ist. Stattdessen wird eine Halbierung nur in der auf der Oberseite gemäß 6b gezeigten Situation durchgeführt, bei der die Anzahl der Trie-Knoten-Zeiger nicht länger größer als ein Viertel der Knotengröße ist. Wird eine Halbierung durchgeführt, dann wird die auf der Unterseite gemäß 6b gezeigte Situation erreicht, bei der der erforderliche Speicherplatz der gleiche wie vor der Halbierung ist.
  • Der höchstgelegene, sich aus der Halbierung ergebende Knoten weist immer eine Größe von der Hälfte des Originalknotens auf. Zweielementige Knoten werden immer unterhalb dieses Knotens erzeugt werden, wobei ihre Anzahl höchstens ein Viertel der Größe des Originalknotens beträgt. Die Anzahl der auf der tiefergelegenen Ebene erzeugten Knoten ist abhängig davon, wie die in dem Originalknoten enthaltenen Zeiger innerhalb des Knotens verteilt waren. Eine Halbierung wird zusätzlich eine neue Ebene lokal in der Struktur erzeugen.
  • Die Verwaltung der Verdopplungsbedingung eines Trie-Knotens ist in den 7a bis 7c gezeigt.
  • Bei dem Beispiel gemäß der Figur wird angenommen, dass jeder Eimer lediglich einen Eintrag oder einen Zeiger auf einen Eintrag enthält. 7a zeigt eine (globale oder lokale) Initialsituation, in der die Struktur Eimer L1–L3 umfasst. Wird ein/e Schlüssel/Dateneinheit (Eimer L4) zu der Struktur hinzugefügt, dann ist das Ergebnis die Situation gemäß 7b. Diese Situation wird erreicht, da die Verzeichnisstruktur in der Tiefe (durch bekannte Verfahren) erweitert werden muss, bis ein Trie-Knoten erzeugt wird, der Schlüssel/Dateneinheiten in verschiedene Eimer trennt. In einer derartigen Situation ist die Anzahl der Trie-Knoten-Zeiger in Knoten N72 gleich der Anzahl der Elemente in dem Knoten. Gemäß vorstehender Verdopplungsregel muss Knoten N72 deshalb verdoppelt werden. Wird die Verdopplung ausgeführt, dann wird ein neuer Knoten N75 mit vier Elementen erzeugt, in dem die Zeiger und Eimer auf die gemäß 7c gezeigte Weise platziert werden. Wie gemäß der Figuren offensichtlich, wurde der für die neue Struktur erforderliche Speicherplatz um 2 Elemente gegenüber dem durch die Originalstruktur erforderten Speicherplatz verringert.
  • Eine Verdopplung kann nicht durchgeführt werden, bis die Trie-Knoten, auf die von dem zu verdoppelnden Trie-Knoten gezeigt wird, alle eine Größe von zwei Elementen aufweisen. Daher müssen vor Verdopplung eines Trie- Knotens alle seine Kindknoten zum Aufweisen einer Größe von zwei Elementen umgewandelt werden. Ein derartiger Vorgang ist gemäß 8a bis 8c gezeigt. 8a zeigt eine Initialsituation, in der der höchstgelegene Knoten N80 der Größe 2 zwei Zeiger auf Trie-Knoten aufweist, und dadurch muss der Knoten unter vorstehender Regel verdoppelt werden. Alle Kindknoten des zu verdoppelnden Knotens werden zuerst zu zweielementigen Kindknoten gemacht, und nach der Verdopplung werden die zweielementigen Kindknoten auf korrekte Weise in dem verdoppelten Knoten platziert. Dies ergibt zuerst den Zwischenzustand gemäß 8b, in der die Kindknoten auf der höchstgelegenen Ebene eine Größe von zwei Elementen aufweisen. Nach der Verdopplung werden die Elemente in dem verdoppelten Knoten platziert, und führen so zu der Situation gemäß 8c, in der die Größe des höchstgelegenen Knotens verdoppelt ist.
  • 9a und 9b zeigen die Platzierung von Elementen bei einer Verdopplung eines Knotens, das heißt die Operation, die bei dem Kind des zu verdoppelnden Knotens durchgeführt wird, um aus ihm einen zweielementigen Knoten zu machen. Vorstehend wurde diese Operation bei Knoten N81 gemäß 8a ausgeführt. Die Figur zeigt Bits, die jedem Element in der Richtung beider Dimensionen (x und y) entsprechen, und zusätzlich ist die Dezimalzahl, die den Bits entspricht, innerhalb des Knotens gezeigt. Wird der gemäß 9a gezeigte Knoten N91 geteilt, dann wird die Teilung durch Halbierung des Array unter Berücksichtigung der Dimension durchgeführt, die zuletzt verdoppelt wurde, die in diesem beispielhaften Fall die x-Achse darstellt. Dadurch wird die Teilung entlang der gemäß 9a gezeigten vertikalen Linie durchgeführt. Bei der aus dem Knoten-Array gemäß 9a erzeugten Trie-Struktur ist das erste zu suchende Bit ein x-Bit, und daher wird der neue lokale Wurzelknoten Knoten N92 sein, der eine Größe von zwei Elementen aufweist (9b). Da das nächste zu suchende Bit ein y-Bit ist, werden zwei Knoten von 16 Elementen unterhalb von Knoten N92 gewonnen, bei denen die Elementnummern des Originalarray verwendet sind, um zu zeigen, wie die Elemente des Original-Array in der neuen Struktur platziert sind. Jedes Element ist auf dem durch die entsprechende Bitkombination angezeigten Platz lokalisiert.
  • Mittels der vorstehenden Verdoppelung von Trie-Knoten kann die Anzahl der Verzeichnisebenen minimiert werden, so dass der durch die Struktur erforderliche Gesamtspeicherplatz nicht anwächst.
  • Die Verdopplungsbedingung ist als solche aus dem Artikel „Analyti & Pramanik: Fast Search in Main Memory Databases", ACM SIGMOD Record, 21(2): 215–224, 1992 bekannt. Das im vorstehenden Artikel offenbarte Verfahren ist jedoch nicht reihenfolgenerhaltend, im Gegensatz zu dem in dem Speicher verwendeten Adressberechnungsverfahren gemäß der Erfindung.
  • Zur weiteren Minimierung der Speicherplatzbelegung ist es in bestimmten Fällen vorteilhaft, auf vorstehende Weise komprimierte Knoten aus den halbierten und verdoppelten Knoten zu bilden. Weist ein normaler Trie-Knoten lediglich ein Kind auf, dann bedeutet das, dass lediglich ein "nach unten gerichteter" Pfad in dem Baum durch den Trie-Knoten verläuft. Zur Optimierung der Speicherplatzbelegung sollte ein lediglich einen einzelnen (pfad-abwärtsweisenden) Zeiger enthaltender Trie-Knoten vorzugsweise durch einen komprimierten Knoten ersetzt werden, bei dem die Anzahl der in dem Pfad gesuchten Bits und der berechnete Array-Indexwert offenbart werden. Da es von dem Standpunkt der Speicherplatzbelegung vorteilhaft ist, komprimierte Knoten aus Ein-Kind-Trie-Knoten durch die gesamte Speicherstruktur hindurch zu bilden, bedeutet Komprimierung auch, dass zumindest zwei Kindknoten immer für normale (unkomprimierte) Trie-Knoten in der Speicherstruktur erhalten werden, das heißt ein individueller (normaler) Trie-Knoten weist Zeiger auf zumindest zwei verschiedene Knoten einer tiefergelegenen Ebene (Kindknoten) auf. Ein komprimierter Knoten ersetzt einen oder mehrere aufeinanderfolgende interne Knoten, von denen jeder ein Kind aufweist, und daher kann das vorstehend beschriebene eine Kind kein Eimer sein (oder ein Blatt in einer keine Eimer aufweisenden Struktur). Daher muss ein Kindknoten ein normaler Trie-Knoten sein, um die Komprimierung zu ermöglichen. Von dem Standpunkt der Speicherplatzoptimierung ist es daher vorteilhaft, immer zumindest zwei Kindknoten für einem Eimer vorausgehende Trie-Knoten zu erhalten (das heißt, geht dem Eimer ein eine Größe von zwei Elementen aufweisender Trie-Knoten voraus, dann weist der Trie-Knoten immer zwei Kindknoten auf).
  • Der erfindungsgemäße Speicher umfasst somit zwei Typen von Trie-Knoten: Normale Trie-Knoten, die ein Elementen-Array gemäß 5 enthalten, und komprimierte Knoten, die nachstehend beschrieben sind.
  • 10a und 10b zeigen das Prinzip der Bildung eines komprimierten Knotens. 10a zeigt eine sechs Knoten umfassende Trie-Struktur, die lediglich einen Pfad für die fünf höchstgelegenen Knoten aufweist. Diese Trie-Struktur von fünf Knoten kann durch ein gemäß 10b gezeigtes Elementen-Array ersetzt werden. Da die Struktur einen einzelnen Pfad für diese Knoten aufweist, wird lediglich ein Element des Arrays verwendet, das in diesem beispielhaften Fall das gemäß der Figur eingekreiste Element 18 ist (18 = 01010, wenn die Bits in Zeilenreihenfolge genommen werden, d.h. zuerst die x-Bits und danach die y-Bits). Dadurch können die fünf höchstgelegenen Knoten in der Trie-Struktur durch einen komprimierten Knoten ersetzt werden, in dem die Anzahl zu suchender Bits (5) und der Wert des Array-Indexes (18) gespeichert werden.
  • 11a und 11b zeigen ein lokales Verwaltungsbeispiel, wenn Dateneinheiten und assoziierte Schlüssel aus einer Datenbank gelöscht werden. 11a zeigt eine Initialsituation, in der die Speicherstruktur Trie-Knoten N111 ... N113 und Eimer L2 ... L4 umfasst. Danach wird Eimer L2 und der darin enthaltene Zeiger/Eintrag aus dem Speicher gelöscht, als Ergebnis dessen Knoten N111 und N112 durch einen komprimierten Knoten CN ersetzt werden können, in dem der Index des in dem Knoten enthaltenen Zeigers und die Anzahl der Bits offenbart sind, die in dem durch den komprimierten Knoten ersetzten Pfad gesucht werden. Daher ist der komprimierte Knoten prinzipiell einem normalen Trie-Knoten ähnlich, aber anstelle des gesamten, großformatigen Element-Arrays mit lediglich einem gespeicherten Zeiger, werden der Index des betroffenen Zeigers und die Anzahl der in dem Pfad gesuchten Bits gespeichert. Dies erzeugt den komprimierten Knoten CN gemäß 11b, in dem die Anzahl der in dem Pfad gesuchten Bits (3) und der dem Zeiger entsprechende Index (101 = 5, bei Verwendung der Bitverschachtelung mit Zeilenreihung) offenbart sind. Ein komprimierter Knoten weist dadurch ein virtuelles Array auf, das die Information ersetzt, die in dem einen oder den mehreren in dem Pfad existierenden Knoten-Arrays enthalten sind. Ersetzt der komprimierte Knoten mehrere normale Trie-Knoten, dann ist die Anzahl gesuchter, in dem komprimierten Knoten angezeigter Bits gleich der Summe der Anzahlen der in den ersetzten Knoten gesuchten Bits.
  • 12 zeigt die Struktur eines komprimierten Knotens. Die Minimalkonfiguration des Knotens umfasst drei Teile: Feld 120, das die Anzahl gesuchter Bits angibt, Feld 121, das den Wert des Array-Index speichert, und Feld 122, das einen Zeiger auf einen Kindknoten speichert. Für den komprimierten Knoten sind ebenso diese Daten zum Voranschreiten der Suche mit dem korrekten Wert bei dem komprimierten Knoten, und zur Ermöglichung der Restrukturierung des Knotens in Verbindung mit Änderungen in der Speicherstruktur erforderlich. (Ohne Information über die Anzahl gesuchter Bits kann der Array-Index-Wert nicht aus dem Suchschlüssel berechnet werden, und andererseits könnte der berechnete Wert nicht ohne den Array-Index-Wert mit dem in dem Knoten gespeicherten Wert verglichen werden).
  • Tritt in dem komprimierten Knoten ein Zusammenstoß in Verbindung mit einer Einfügung auf, d.h. der komprimierte Knoten wird einen neuen Zeiger aufweisen, dann wird untersucht, welches Bit in der Reihenfolge den Index des Initialzeigers und den Index des neuen Zeigers voneinander unterscheidet. Entsprechend wird eine den initial komprimierten Knoten ersetzende Struktur erzeugt, in der der neue komprimierte Knoten die Anzahl der Indexbits umfasst, soweit sie gemeinsame Bits sind. Zusätzlich werden ein oder mehrere Trie-Knoten in der Struktur an Punkten erzeugt, die denjenigen Bits entsprechen, bei denen die Indizes voneinander abweichen.
  • Gehen dem komprimierten Knoten einer oder mehrere komprimierte Knoten oder eine Kette von lediglich einen einzelnen Pfad bereitstellenden Trie-Knoten voraus, dann ist es im Hinblick auf den Speicherplatzbedarf und die Speichereffizienz vorteilhaft, die Knoten weiter zu kombinieren. Außerdem ist es im Hinblick auf die Speichereffizienz vorteilhaft, die Kombination von Knoten derart auszuführen, dass lediglich in demjenigen komprimierten Knoten, der der letzte (tiefstgelegene) in der Kette ist, die Anzahl gesuchter Bits kleiner als die Wortlänge in dem verwendeten Computer ist. Mit anderen Worten werden Knoten derart kombiniert, dass die Anzahl gesuchter Bits in jedem komprimierten Knoten so groß wie möglich ist. Es können beispielsweise drei aufeinanderfolgende komprimierte Knoten, in denen die Anzahlen gesuchter Bits 5, 10 und 15 betragen, in einen komprimierten Knoten kombiniert werden, in dem die Anzahl gesuchter Bits 30 beträgt. Entsprechend können beispielsweise 3 aufeinanderfolgende komprimierte Knoten (oder die aufeinanderfolgenden normalen Trie-Knoten, die lediglich einen Pfad bereitstellen), in denen die Anzahlen gesuchter Bits 10, 10 und 15 betragen, in zwei komprimierte Knoten kombiniert werden, in denen die Anzahlen gesuchter Bits 32 und 3 betragen, wobei die verwendete Wortlänge 32 beträgt. Daher wird versucht, in so vielen komprimierten Knoten wie möglich eine Anzahl gesuchter Bits zu erhalten, die der Wortlänge des Computers entspricht, und die möglichen "überschüssigen" Bits werden dem in der Hierarchie tiefstliegenden Knoten überlassen.
  • Komprimierte Knoten können jedoch nicht kombiniert werden, um die Anzahl gesuchter Bits in einem Knoten größer als die Wortlänge in dem verwendeten Computer zu machen. Besonders in multidimensionalen Fällen (N > 3) ist es üblich, dass es so viele nachfolgende, 1 Kind enthaltende Knoten gibt, dass der Pfad nicht durch einen einzigen komprimierten Knoten dargestellt werden kann. Deshalb wird der Suchpfad oder ein Teil dessen durch eine Kette ersetzt, die durch mehrere aufeinanderfolgende komprimierte Knoten gebildet ist, in denen die Anzahl gesuchter Bits die gleiche wie die Wortbitanzahl ist, beispielsweise 32 in der Intel-Architektur, außer für den letzten Knoten, bei dem die Bitanzahl kleiner oder gleich der Wortbitanzahl ist.
  • Eine derartige Situation ist gemäß 13a dargestellt, die drei aufeinanderfolgende komprimierte Knoten CN1 ... CN3 zeigt. Die Nummern der gesuchten Bits in den Knoten sind durch Bezugszeichen b, b' bzw. b'', und die Werte der in den Knoten enthaltenen Array-Indizes mit i, i' bzw. i'' bezeichnet. In den beiden höchstgelegenen Knoten weist die Anzahl gesuchter Bits einen Maximalwert auf (darauf gefasst, dass eine 32-Bit-Computerarchitektur verwendet wird).
  • Es ist vorteilhaft, aus einer Kette mehrerer aufeinanderfolgender komprimierter Knoten, die sich aus einer begrenzten Wortlänge ergeben, einen einzelnen, derartige komprimierte Knoten sammelnden Knoten zu bilden. Dieser Sammelknoten ist derart gebildet, dass der Zeiger des Sammelknotens zum Zeigen auf das Kind desjenigen komprimierten Knotens, der der letzte in der Kette ist, eingestellt ist, dass die Summe der Anzahlen gesuchter Bits in den komprimierten Knoten in der Kette als die Anzahl im Sammelknoten gesuchter Bits B eingestellt ist, und dass die durch die Bitverschachtelung erzeugten Array-Indizes (d.h. Suchworte) in die Liste oder Tabelle T des Knotens in der Reihenfolge eingefügt werden, in der sie in den aufeinanderfolgenden komprimierten Knoten erscheinen. Dadurch ist der Sammelknoten ein wie gemäß 13b gezeigter Knoten CN4 (Sammelknoten, „collecting node"), der drei Teile umfasst: Feld 130, das einen Zeiger auf den Knoten tiefergelegener Ebene enthält, Feld 131, das die Anzahl gesuchter Bits B (die vorstehende Summe), und die Liste oder Tabelle T enthält, die in Abfolge die durch die Bitverschachtelung erzeugten Array-Indizes enthält. Dadurch weist dieser dritte Teil eine variierende Größe auf. Bei dem Beispiel gemäß der Figur beträgt die Anzahl der Indizes 3, da das Beispiel gemäß 13a drei aufeinanderfolgende Knoten umfasst.
  • Die Anzahl an Elementen (d.h. Indizes) NE in Tabelle T wird aus der Anzahl gesuchter Bits b wie folgt erhalten:
    Figure 00320001
    wobei ⌊⌋ eine Nächst-Untere-Ganzzahlfunktion darstellt, die Dezimalstellen von der Zahl abschneidet, W die verwendete Wortlänge darstellt, z.B. 32, und sich MOD auf die Modulo-Arithmetik bezieht. Dadurch muss die Anzahl der Indizes nicht in dem Sammelknoten als separates Datum gespeichert werden, sondern sie kann auf der Grundlage der Anzahl gesuchter Bits gefunden werden.
  • Die Anzahl an Bits B', die zur Berechnung des letzten Indexes in der Tabelle erforderlich ist (bezeichnet durch Bezugszeichen b'' gemäß der Figur), die nicht notwendigerweise gleich der Wortlänge ist, wird wie folgt erhalten:
    Figure 00330001
  • Durch Bildung eines Sammelknotens aus mehreren aufeinanderfolgenden komprimierten Knoten kann die Anzahl an Speicherreferenzen (Zeigern) weiter verringert werden. Bei modernen Computerarchitekturen, die Cash-Speicher verschiedener Ebenen umfassen, erfordern Speicherreferenzen erhebliche Rechenzeit, und dadurch wird die Rechenzeit verringert. Zugleich wird das Erfordernis des Speicherplatzes für Zeiger beseitigt.
  • Mittels komprimierter Knoten kann der Speicherbedarf effektiv minimiert werden, besonders in Verbindung mit nicht-einheitlichen Schlüsselverteilungen, da mittels einer Komprimierung die Strukturtiefe auf lokaler Basis beliebig ohne erhöhten Speicherplatzbedarf erhöht werden kann.
  • Es sei ferner darauf hingewiesen, dass jedes der vorstehenden Beispiele lediglich die relevanten Operationen in jedem Fall zeigt. Die die Verdoppelung zeigenden 7a und 7b beispielsweise vertiefen noch nicht die Knotenkomprimierung (auch wenn auf der Grundlage von Vorstehendem der höchstgelegene Knoten gemäß 7a ein komprimierter Knoten werden würde).
  • Wie bereits indirekt vorstehend beschrieben, kann einem Eimer in dem erfindungsgemäßen Speicher kein komprimierter Knoten vorausgehen, aber der Elternknoten eines Eimers ist immer entweder ein normaler Trie-Knoten oder ein leeres Element. Daher kann ein komprimierter Knoten nicht auf einen Eimer zeigen, sondern er zeigt immer entweder auf einen weiteren komprimierten Knoten oder auf einen normalen Trie-Knoten. Ein leeres Element bedeutet, dass wenn die Gesamtanzahl von Einträgen kleiner als die Anzahl von Zeigern/Einträgen ist, die der Eimer aufnehmen kann, dann ist noch keine baumförmige Struktur erforderlich, sondern es genügt 1 Eimer in der Struktur (in welchem Fall dem Knoten begreiflicherweise ein leeres Element vorausgeht). Das Fortschreiten auf diese Weise bei der Initialphase des Speicherhochfahrens ist vorteilhaft. Dadurch lohnt sich der Beginn des Aufbaus einer baumförmigen Struktur nur dann, wenn dies erforderlich ist.
  • Die vorstehend beschriebenen Bedingungen können entweder gleichförmig durch die gesamte Struktur hindurch (global) oder lediglich lokal, gemäß an welchem Punkt der Struktur Einfügungen oder Löschungen gegenwärtig durchgeführt werden, verwaltet werden.
  • Ohne Rücksicht auf den Umstand, dass Einfügungen Knotenverdopplungen oder Löschungen Halbierungen und Komprimierung auslösen können, werden die Auffindungen, Einfügungen und Löschungen auf eine zuvor bekannte Weise durchgeführt. Im Hinblick darauf wird beispielsweise auf die Internationale Anmeldung Bezug genommen, die zu Beginn beschrieben ist, die eine ausführlichere Beschreibung von Zusammenstoßsituationen beispielsweise in Verbindung mit Einfügungen bereitstellt. Anstelle einer üblichen Löschungsaktualisierung kann der Speicher auch funktionelle Aktualisierung verwenden, die durch bekannte Verfahren durch Kopieren des Pfads von der Wurzel bis zu den Eimern implementiert ist.
  • 14 zeigt einen erfindungsgemäßen Speicher auf Blockdarstellungsebene. Jede Dimension weist ein zugeordnetes Eingaberegister auf, und daher gibt es insgesamt n Eingaberegister. Der Suchschlüssel einer jeden Dimension wird in diesen Eingaberegistern gespeichert, die durch Bezugszeichnen R1 ... Rn bezeichnet sind, jeder Schlüssel in seinem eigenen Register. Die Eingaberegister sind mit einem Register TR verbunden, in dem das vorstehend beschriebene Suchwort gemäß dem verwendeten Bitverschachtelungsverfahren gebildet wird. Das Register TR ist über einen Addierer S mit dem Adresseingang des Speichers MEM verbunden. Der Ausgang des Speichers ist im Gegenzug mit einem Adressregister AR verbunden, dessen Ausgang im Gegenzug mit dem Addierer S verbunden ist. Zu Beginn werden die aus jedem Register ausgewählten Bits in das gemeinsame Register TR in der korrekten Reihenfolge eingelesen. Die Startadresse des ersten Trie-Knotens wird zunächst in dem Adressregister AR gespeichert, und die als eine Adressabstandsadresse aus dem Register TR gewonnene Adresse wird zur Startadresse in dem Addierer S addiert. Die sich ergebende Adresse wird der Adresseingabe des Speichers MEM zugeführt, und der Datenausgang des Speichers stellt die Startadresse dem nächsten Trie-Knoten bereit, wobei die Adresse in das Adressregister AR über die zuvor dort gespeicherte Adresse geschrieben wird. Danach werden die nächsten ausgewählten Bits wieder von den Eingaberegistern in das gemeinsame Register TR in der korrekten Reihenfolge geladen, und die derart gewonnene Array-Adresse wird zur Startadresse des relevanten Arrays (d.h. Trie-Knotens) addiert, die aus dem Adressregister AR gewonnen ist. Diese Adresse wird wiederum an den Adresseingang des Speichers MEM zugeführt, wobei der Datenausgang des Speichers danach die Startadresse des nächsten Knotens bereitstellt. Der vorstehend beschriebene Vorgang wird wiederholt, bis auf den gewünschten Punkt zugegriffen wurde, und eine Eintragung durchgeführt oder der gewünschte Eintrag gelesen werden kann.
  • Eine Steuerlogik SL widmet sich der Verwaltung der Speicherstruktur und der Extraktion der korrekten Anzahl von Bits aus den Registern in jedem Knoten.
  • Die Geschwindigkeit der Adressberechnung kann durch den Typ der gewählten Hardwarekonfiguration beeinflusst werden. Da das Voranschreiten mittels vorstehend beschriebener Bitmanipulationen erfolgt, kann die Adressberechnung durch Wechsel von der Verwendung eines Prozessors auf eine Multiprozessorumgebung beschleunigt werden, in der Parallelverarbeitung ausgeführt wird. Eine alternative Implementierung zur Multiprozessorumgebung stellt eine Schaltung aus anwenderspezifischen integrierten Schaltungen (ASIC, "Application Specific Integrated Circuits") dar.
  • Wenngleich die Erfindung vorstehend unter Bezugnahme auf Beispiele gemäß der beigefügten Zeichnungen beschrieben ist, ist es offensichtlich, dass die Erfindung nicht auf diese Weise eingeschränkt werden soll, sondern sie kann innerhalb des Schutzbereichs der in den beigefügten Ansprüchen offenbarten Erfinderidee modifiziert werden. Die Struktur kann auch für Schlüssel variabler Länge implementiert werden. Ebenso kann sich die Adressberechnung im Eimer fortsetzen, darauf gefasst, dass ungesuchte Bits übrigbleiben. Die zu Beginn eingeführte Definition eines Eimers ist daher leserisch derart zu erweitern, dass ein Eimer eine Datenstruktur darstellt, die auch eine weitere Trie-Struktur enthalten kann. Daher können mehrere erfindungsgemäße Verzeichnisstrukturen derart in Abfolge verbunden sein, dass eine weitere Verzeichnisstruktur (d.h, eine weitere Trie-Struktur) in einem Eimer gespeichert wird, daher können mehrere erfindungsgemäße Verzeichnisstrukturen derart in Abfolge verbunden sein, dass eine weitere Verzeichnisstruktur, d.h. eine weitere Trie-Struktur in einem Eimer, oder einem in einem Eimer enthaltenen Zeiger oder in Blattpunkten auf weiterer Verzeichnisstrukturen gespeichert werden kann. Ein Bezug wird von einem Eimer oder einem Blatt direkt auf den Wurzelknoten der nächsten Verzeichnisstruktur genommen. Im allgemeinen lässt sich sagen, dass ein Eimer zumindest ein Element enthält, so dass der Typ eines individuellen Elements aus einer Gruppe gewählt wird, die eine Dateneinheit, einen Zeiger auf eine gespeicherte Dateneinheit, einen Zeiger auf eine weitere Verzeichnisstruktur und eine weitere Verzeichnisstruktur umfasst. Die genaue Implementierung ist von der Anwendung abhängig. In vielen Fällen können alle Elemente in Eimern vom gleichen Typ sein, wobei sie entweder eine Dateneinheit oder ein Zeiger auf eine Dateneinheit sind. Andererseits kann beispielsweise bei einer Anwendung, in der Zeichenketten in dem Speicher gespeichert sind, der Eimer Elementpaare derart enthalten, dass alle Paare in dem Eimer entweder Paare von Zeigern auf Dateneinheiten/Zeigern auf Verzeichnisstrukturen oder Paare von Dateneinheiten/Zeigern auf eine Verzeichnisstruktur oder Paare von Dateneinheiten/Verzeichnisstrukturen sind. In einem derartigen Fall kann beispielsweise das Präfix der Zeichenkette in der Dateneinheit gespeichert werden, und die Suche kann von derjenigen Verzeichnisstruktur fortgesetzt werden, die das Paar der Dateneinheit darstellt.

Claims (20)

  1. Verfahren zur Implementierung eines Speichers, in dem Daten als Dateneinheiten, von denen jeder ein zugeordneter Speicherplatz im Speicher zugewiesen wird, gespeichert werden, wobei der Speicher als eine Verzeichnisstruktur implementiert wird, die eine baumförmige, Knoten auf mehreren verschiedenen Ebenen aufweisende Rangordnung umfasst, wobei ein einzelner Knoten i) ein Trie-Knoten, der ein Array umfasst, worin ein einzelnes Element die Adresse eines tieferliegenden Knotens in der baumförmigen Rangordnung enthalten kann und worin ein einzelnes Element auch leer sein kann, wobei die Anzahl der Elemente in dem Array einer Zweierpotenz entspricht, oder ii) ein Eimer sein kann, der zumindest ein Element derart enthält, dass der Typ eines einzelnen Elements in dem Eimer aus einer Gruppe ausgewählt ist, die eine Dateneinheit, einen Zeiger auf eine gespeicherte Dateneinheit, einen Zeiger auf eine andere Verzeichnisstruktur und eine andere Verzeichnisstruktur beinhaltet, eine in der Verzeichnisstruktur durchgeführte Adressberechnung die Schritte enthält: (a) Auswählen einer knotenspezifischen Anzahl an Bits aus der durch die angewendeten Suchschlüssel gebildeten Bitfolge in dem Knoten auf der obersten Ebene der baumförmigen Rangordnung, Bilden eines Suchworts aus den ausgewählten Bits, mit dem die Adresse des nächsten Knotens in dem Knoten gesucht wird und Fortschreiten zu dem Knoten, (b) Auswählen einer knotenspezifischen Anzahl an Bits aus den nicht ausgewählten Bits in der durch die angewendeten Suchschlüssel gebildeten Bitfolge und Bilden eines Suchworts aus den ausgewählten Bits, mit dem die Adresse eines weiteren neuen Knotens auf einer tieferliegenden Ebene aus dem Array des Knotens, auf den zugegriffen wurde, gesucht wird, Wiederholen von Schritt (b), bis ein leeres Element angetroffen wird oder bis die Adresse des neuen Knotens auf einer tieferliegenden Ebene die Adresse eines Eimers ist, dadurch gekennzeichnet, dass Trie-Knoten in der Verzeichnisstruktur derart geführt werden, dass (c) in einem Trie-Knoten die Anzahl leerer Elemente kleiner oder gleich der halben Anzahl der Elemente in dem Knoten ist oder alternativ die Anzahl der auf andere Trie-Knoten zeigenden Elemente größer als ein Viertel der Anzahl der Elemente in dem Knoten ist, und (d) die Anzahl von auf andere Trie-Knoten zeigenden Adressen in dem Trie-Knoten kleiner oder gleich der halben Anzahl der Elemente in dem Knoten ist, wobei der Knoten halbiert wird, wenn Bedingung (c) falsch ist, und der Knoten verdoppelt wird, wenn Bedingung (d) falsch ist.
  2. Verfahren gemäß Patentanspruch 1, dadurch gekennzeichnet, dass zumindest in einem Teil der Verzeichnisstruktur Gruppen aufeinanderfolgender Trie-Knoten durch komprimierte Knoten derart ersetzt werden, dass eine einzelne Gruppe, die aus aufeinanderfolgenden Trie-Knoten, von denen es jeweils lediglich eine Adresse zu einem Trie-Knoten auf einer tieferliegenden Ebene gibt, besteht, durch einen komprimierten Knoten (CN, „compressed node") ersetzt ist, der eine Adresse zu dem Knoten speichert, auf den der unterste Knoten in der zu ersetzenden Gruppe zeigt, der Information über den Wert des Suchworts, mittels dessen die Adresse gefunden wird, speichert, und der Information über die Gesamtanzahl an Bits speichert, aus denen Suchworte in der zu ersetzenden Gruppe gebildet werden.
  3. Verfahren gemäß Patentanspruch 2, dadurch gekennzeichnet, dass die Ersetzung in der gesamten Verzeichnisstruktur ausgeführt wird, so dass alle Gruppen durch komprimierte Knoten ersetzt werden.
  4. Verfahren gemäß Patentanspruch 2, dadurch gekennzeichnet, dass die Ersetzung auch bei einer lediglich einen Trie-Knoten aufweisenden Gruppe ausgeführt wird, wobei die Gesamtzahl der zu speichernden Bits der Anzahl an Bits entspricht, aus denen ein Suchwort in dem Trie-Knoten gebildet wird.
  5. Verfahren gemäß Patentanspruch 2, dadurch gekennzeichnet, dass mehrere aufeinanderfolgende komprimierte Knoten in der Verzeichnisstruktur derart gebildet sind, dass zumindest in dem komprimierten Knoten auf der obersten Ebene eine der angewendeten Wortlänge entsprechende Anzahl zu suchender Suchschlüssel-Bits zusammengestellt wird.
  6. Verfahren gemäß Patentanspruch 1, dadurch gekennzeichnet, dass mehrere aufeinanderfolgende komprimierte Knoten in einen neuen komprimierten Knoten kombiniert werden, wobei die Anzahl der in dem neuen Knoten gespeicherten Bits der Summe der aus den zu kombinierenden Knoten erhaltenen Anzahlen entspricht.
  7. Verfahren gemäß Patentanspruch 5, dadurch gekennzeichnet, dass eine Kette, die durch aufeinanderfolgende komprimierte Knoten gebildet ist, bei denen die Anzahl durchsuchter Bits in zumindest zwei obersten Knoten der angewendeten Wortlänge entspricht, durch einen Sammelknoten (CN4, „collecting node") ersetzt wird, der umfasst: eine Adresse zu dem Knoten, zu dem der in der Kette tiefstliegende Knoten eine Adresse enthält, die Summe der Anzahlen durchsuchter aus den Knoten in der Kette erhaltener Bits, und die in den Kettenknoten enthaltenen Suchwortwerte in Sequenz.
  8. Verfahren gemäß Patentanspruch 3, dadurch gekennzeichnet, dass in allen unkomprimierten Trie-Knoten des Speichers zumindest zwei Adressen zu einem Knoten tieferer Ebene geführt werden.
  9. Verfahren gemäß Patentanspruch 2, dadurch gekennzeichnet, dass die Verzeichnisstruktur für jeden Knoten Information über den Umstand speichert, ob ein umkomprimierter Trie-Knoten, ein komprimierter Trie-Knoten oder ein Eimer betroffen ist.
  10. Verfahren zur Implementierung eines Speichers, in dem Daten als Dateneinheiten, von denen jeder ein zugeordneter Speicherplatz im Speicher zugewiesen wird, gespeichert werden, wobei der Speicher als eine Verzeichnisstruktur implementiert wird, die eine baumförmige Knoten auf mehreren verschiedenen Ebenen aufweisende Rangordnung umfasst, wobei ein einzelner Knoten i) einen internen Knoten, der ein Array umfasst, worin ein einzelnes Element die Adresse eines tieferliegenden Knotens in der baumförmigen Rangordnung enthalten kann und worin ein einzelnes Element auch leer sein kann, wobei die Anzahl der Elemente in dem Array einer Zweierpotenz entspricht, oder ii) ein Blatt sein kann, das zumindest ein Element enthält, dessen Typ einer aus einer Gruppe ist, die einen Zeiger auf eine gespeicherte Dateneinheit und einen Zeiger auf eine andere Verzeichnisstruktur beinhaltet, eine Adressberechnung in der Verzeichnisstruktur durchgeführt wird, mit den Schritten: (a) Auswählen einer knotenspezifischen Anzahl an Bits aus der durch die angewendeten Suchschlüssel gebildeten Bitfolge in dem Knoten auf der obersten Ebene der baumförmigen Rangordnung, Bilden eines Suchworts aus den ausgewählten Bits, mit dem die Adresse des nächsten Knotens in dem Knoten gesucht wird, und Fortschreiten zu dem Knoten, (b) Auswählen einer knotenspezifischen Anzahl an Bits aus den nicht ausgewählten Bits in der durch die angewendeten Suchschlüssel gebildeten Bitfolge und Bilden eines Suchworts aus den ausgewählten Bits, mit dem die Adresse eines weiteren neuen Knotens auf einer tieferliegenden Ebene aus dem Array des Knotens, auf den zugegriffen wurde, ausgesucht wird, Wiederholen von Schritt (b), bis ein leeres Element angetroffen wird oder bis die Adresse des neuen Knotens auf einer tieferliegenden Ebene die Adresse eines Blatts ist, dadurch gekennzeichnet, dass interne Knoten in der Verzeichnisstruktur derart geführt werden, dass (c) in einem internen Knoten die Anzahl leerer Elemente kleiner oder gleich der halben Anzahl der Elemente in dem Knoten ist oder alternativ die Anzahl der auf andere interne Knoten zeigenden Elemente größer als ein Viertel der Anzahl der Elemente in dem Knoten ist, und (d) die Anzahl von auf andere interne Knoten zeigenden Adressen in dem internen Knoten kleiner oder gleich der halben Anzahl der Elemente in dem Knoten ist, wobei der Knoten halbiert wird, wenn Bedingung (c) falsch ist, und der Knoten verdoppelt wird, wenn Bedingung (d) falsch ist.
  11. Verfahren gemäß Patentanspruch 10, dadurch gekennzeichnet, dass zumindest in einem Teil der Verzeichnisstruktur Gruppen aufeinanderfolgender interner Knoten durch komprimierte Knoten derart ersetzt werden, dass eine einzelne Gruppe, die durch aufeinanderfolgende interne Knoten, von denen es von jeder Adresse zu einem internen Knoten auf einer tieferliegenden Ebene lediglich eine gibt, entstanden ist, durch einen komprimierten Knoten (CN, „compressed node"), der eine Adresse zu dem Knoten speichert, auf den der unterste Knoten in der zu ersetzenden Gruppe zeigt, der Information über den Wert des Suchworts mittels der gefundenen Adresse speichert, und der Information über die Gesamtanzahl an Bits speichert, aus denen Suchworte in der zu ersetzenden Gruppe ausgebildet werden, ersetzt wird.
  12. Verfahren gemäß Patentanspruch 11, dadurch gekennzeichnet, dass die Ersetzung in der gesamten Verzeichnisstruktur derart ausgeführt wird, dass alle Gruppen durch komprimierte Knoten ersetzt werden.
  13. Verfahren gemäß Patentanspruch 11, dadurch gekennzeichnet, dass die Ersetzung auch bei einer lediglich einen internen Knoten umfassenden Gruppe ausgeführt wird, wobei die Gesamtzahl der zu speichernden Bits der Anzahl an Bits entspricht, aus denen ein Suchwort in dem internen Knoten ausgebildet wird.
  14. Verfahren gemäß Patentanspruch 11, dadurch gekennzeichnet, dass mehrere aufeinanderfolgende komprimierte Knoten in der Verzeichnisstruktur derart ausgebildet sind, dass zumindest in dem komprimierten Knoten auf der obersten Ebene eine der angewendeten Wortlänge entsprechende Anzahl zu durchsuchender Suchschlüssel-Bits zusammengestellt wird.
  15. Verfahren gemäß Patentanspruch 10, dadurch gekennzeichnet, dass mehrere aufeinanderfolgende komprimierte Knoten in einen neuen komprimierten Knoten kombiniert werden, wobei die Anzahl der in dem neuen Knoten gespeicherten Bits die Summe der aus den kombinierten Knoten erhaltenen Anzahlen darstellt.
  16. Verfahren gemäß Patentanspruch 14, dadurch gekennzeichnet, dass eine durch aufeinanderfolgende komprimierte Knoten gebildete Kette, wobei die Anzahl durchsuchter Bits in zumindest zwei obersten Knoten der angewendeten Wortlänge entspricht, durch einen Sammelknoten (CN4, „collecting node") ersetzt wird, der umfasst: eine Adresse zu dem Knoten, zu dem der in der Kette tiefstliegende Knoten eine Adresse enthält, die Summe der Anzahlen durchsuchter aus den Knoten in der Kette erhaltener Bits, und die in den Kettenknoten enthaltenen Suchwortwerte in Sequenz.
  17. Verfahren gemäß Patentanspruch 12, dadurch gekennzeichnet, dass in allen unkomprimierten internen Knoten des Speichers zumindest zwei Adressen zu einem Knoten tieferer Ebene geführt werden.
  18. Verfahren gemäß Patentanspruch 11, dadurch gekennzeichnet, dass der Speicher Information über den Umstand speichert, ob die Adresse auf einen umkomprimierten Knoten, einen komprimierten Knoten oder eine Dateneinheit zeigt.
  19. Speicheranordnung, wobei Daten als Dateneinheiten, von denen jeder ein zugeordneter Speicherplatz in der Speicheranordnung zugewiesen ist, gespeichert sind, die Speicheranordnung als eine Verzeichnisstruktur implementiert ist, die eine baumförmige Knoten auf mehreren verschiedenen Ebenen aufweisende Rangordnung umfasst, wobei ein einzelner Knoten i) ein Trie-Knoten, der ein Array umfasst, worin ein einzelnes Element die Adresse eines tieferliegenden Knotens in der baumförmigen Rangordnung enthalten kann und worin ein einzelnes Element auch leer sein kann, wobei die Anzahl der Elemente in dem Array einer Zweierpotenz entspricht, oder ii) ein Eimer sein kann, der zumindest ein Element derart enthält, dass der Typ eines einzelnen Elements in dem Eimer aus einer Gruppe ausgewählt ist, die eine Dateneinheit, einen Zeiger auf eine gespeicherte Dateneinheit, einen Zeiger auf eine andere Verzeichnisstruktur und eine andere Verzeichnisstruktur beinhaltet, und eine in der Verzeichnisstruktur durchgeführte Adressberechnung eingerichtet ist zur: (a) Auswahl einer knotenspezifischen Anzahl an Bits aus der durch die angewendeten Suchschlüssel gebildeten Bitfolge in dem Knoten auf der obersten Ebene der baumförmigen Rangordnung, zur Bildung eines Suchworts aus den ausgewählten Bits, mit dem die Adresse des nächsten Knotens in dem Knoten gesucht wird, und zum Fortschreiten zu dem Knoten, (b) zur Auswahl einer knotenspezifischen Anzahl an Bits aus den nicht ausgewählten Bits in der durch die angewendeten Suchschlüssel gebildeten Bitfolge und Bilden eines Suchworts aus den ausgewählten Bits, mit dem die Adresse eines weiteren neuen Knotens auf einer tieferliegenden Ebene aus dem Vektor des Knotens, auf den zugegriffen wurde, gesucht wird, und zur Wiederholung von Schritt (b), bis ein leeres Element angetroffen wird oder bis die Adresse des neuen Knotens auf einer tieferliegenden Ebene die Adresse eines Eimers ist, dadurch gekennzeichnet, dass Trie-Knoten in der Verzeichnisstruktur derart geführt sind, dass (c) in einem Trie-Knoten die Anzahl leerer Elemente kleiner oder gleich der halben Anzahl der Elemente in dem Knoten ist oder wahlweise die Anzahl auf andere Trie-Knoten zeigender Elemente größer als ein Viertel der Anzahl der Elemente in dem Knoten ist, und (d) die Anzahl auf andere Trie-Knoten zeigender Adressen in dem Trie-Knoten kleiner oder gleich der halben Anzahl der Elemente in dem Knoten ist, wobei der Knoten halbiert wird, wenn Bedingung (c) falsch ist, und der Knoten verdoppelt wird, wenn Bedingung (d) falsch ist.
  20. Speicheranordnung, wobei Daten als Dateneinheiten, von denen jeder ein zugeordneter Speicherplatz in der Speicheranordnung zugewiesen ist, gespeichert sind, die Speicheranordnung als eine Verzeichnisstruktur implementiert ist, die eine baumförmige Knoten auf mehreren verschiedenen Ebenen aufweisende Rangordnung umfasst, wobei ein einzelner Knoten i) ein interner Knoten, der ein Array umfasst, worin ein einzelnes Element die Adresse eines tieferliegenden Knotens in der baumförmigen Rangordnung enthalten kann und worin ein einzelnes Element auch leer sein kann, wobei die Anzahl der Elemente in dem Vektor einer Zweierpotenz entspricht, oder ii) ein Blatt sein kann, das zumindest ein Element enthält, dessen Typ einen aus einer Gruppe ist, die einen Zeiger auf eine gespeicherte Dateneinheit und einen Zeiger auf eine andere Verzeichnisstruktur beinhaltet, und eine in der Verzeichnisstruktur durchgeführte Adressberechnung eingerichtet ist zur: (a) Auswahl einer knotenspezifischen Anzahl an Bits aus der durch die angewendeten Suchschlüssel gebildeten Bitfolge in dem Knoten auf der obersten Ebene der baumförmigen Rangordnung, zur Bildung eines Suchworts aus den ausgewählten Bits, mit dem die Adresse des nächsten Knotens in dem Knoten gesucht wird und zum Fortschreiten zu dem Knoten, (b) zur Auswahl einer knotenspezifischen Anzahl an Bits aus den nicht ausgewählten Bits in der durch die angewendeten Suchschlüssel gebildeten Bitfolge und Bilden eines Suchworts aus den ausgewählten Bits, mit dem die Adresse eines weiteren neuen Knotens auf einer tieferliegenden Ebene aus dem Vektor des Knotens, auf den zugegriffen wurde, gesucht wird, und zur Wiederholung von Schritt (b), bis ein leeres Element angetroffen wird oder bis die Adresse des neuen Knotens auf einer tieferliegenden Ebene die Adresse eines Blatts ist, dadurch gekennzeichnet, dass interne Knoten in der Verzeichnisstruktur derart geführt sind, dass (c) in einem internen Knoten die Anzahl leerer Elemente kleiner oder gleich der halben Anzahl der Elemente in dem Knoten ist oder wahlweise die Anzahl auf andere interne Knoten zeigender Elemente größer als ein Viertel der Anzahl der Elemente in dem Knoten ist, und (d) die Anzahl auf andere interne Knoten zeigender Adressen in dem internen Knoten kleiner oder gleich der halben Anzahl der Elemente in dem Knoten ist, wobei der Knoten halbiert wird, wenn Bedingung (c) falsch ist, und der Knoten verdoppelt wird, wenn Bedingung (d) falsch ist.
DE69831246T 1997-03-14 1998-03-04 Verfahren zur einrichtung eines assoziativen speichers mit digitaler trie struktur Expired - Lifetime DE69831246T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
FI971065 1997-03-14
FI971065A FI102424B (fi) 1997-03-14 1997-03-14 Menetelmä muistin toteuttamiseksi
PCT/FI1998/000190 WO1998041931A1 (en) 1997-03-14 1998-03-04 Method for implementing an associative memory based on a digital trie structure

Publications (2)

Publication Number Publication Date
DE69831246D1 DE69831246D1 (de) 2005-09-22
DE69831246T2 true DE69831246T2 (de) 2006-02-23

Family

ID=8548387

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69831246T Expired - Lifetime DE69831246T2 (de) 1997-03-14 1998-03-04 Verfahren zur einrichtung eines assoziativen speichers mit digitaler trie struktur

Country Status (6)

Country Link
US (1) US6499032B1 (de)
EP (1) EP1008063B1 (de)
AU (1) AU6623898A (de)
DE (1) DE69831246T2 (de)
FI (1) FI102424B (de)
WO (1) WO1998041931A1 (de)

Families Citing this family (43)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FI991262A (fi) * 1999-06-02 2000-12-03 Nokia Networks Oy Digitaaliseen trie-rakenteeseen perustuva muisti
GB2367917A (en) 2000-10-12 2002-04-17 Qas Systems Ltd Retrieving data representing a postal address from a database of postal addresses using a trie structure
US6807618B1 (en) * 2001-08-08 2004-10-19 Emc Corporation Address translation
US20050097105A1 (en) * 2002-02-06 2005-05-05 Jari Ranta Distributed database for one search key
US7162481B2 (en) 2002-12-06 2007-01-09 Stmicroelectronics, Inc. Method for increasing storage capacity in a multi-bit trie-based hardware storage engine by compressing the representation of single-length prefixes
US7702882B2 (en) 2003-09-10 2010-04-20 Samsung Electronics Co., Ltd. Apparatus and method for performing high-speed lookups in a routing table
US8180802B2 (en) * 2003-09-30 2012-05-15 International Business Machines Corporation Extensible decimal identification system for ordered nodes
US20070162508A1 (en) * 2004-11-08 2007-07-12 Mazzagatti Jane C Updating information in an interlocking trees datastore
US7908242B1 (en) 2005-04-11 2011-03-15 Experian Information Solutions, Inc. Systems and methods for optimizing database queries
US8078637B1 (en) * 2006-07-28 2011-12-13 Amencan Megatrends, Inc. Memory efficient peim-to-peim interface database
US8005759B2 (en) 2006-08-17 2011-08-23 Experian Information Solutions, Inc. System and method for providing a score for a used vehicle
US7912865B2 (en) 2006-09-26 2011-03-22 Experian Marketing Solutions, Inc. System and method for linking multiple entities in a business database
US8036979B1 (en) 2006-10-05 2011-10-11 Experian Information Solutions, Inc. System and method for generating a finance attribute from tradeline data
JP4402120B2 (ja) * 2007-01-24 2010-01-20 株式会社エスグランツ ビット列検索装置、検索方法及びプログラム
US8606666B1 (en) 2007-01-31 2013-12-10 Experian Information Solutions, Inc. System and method for providing an aggregation tool
US8285656B1 (en) 2007-03-30 2012-10-09 Consumerinfo.Com, Inc. Systems and methods for data verification
US20080288527A1 (en) * 2007-05-16 2008-11-20 Yahoo! Inc. User interface for graphically representing groups of data
US8122056B2 (en) 2007-05-17 2012-02-21 Yahoo! Inc. Interactive aggregation of data on a scatter plot
US7739229B2 (en) 2007-05-22 2010-06-15 Yahoo! Inc. Exporting aggregated and un-aggregated data
US7756900B2 (en) * 2007-05-22 2010-07-13 Yahoo!, Inc. Visual interface to indicate custom binning of items
US20080294540A1 (en) 2007-05-25 2008-11-27 Celka Christopher J System and method for automated detection of never-pay data sets
US9690820B1 (en) 2007-09-27 2017-06-27 Experian Information Solutions, Inc. Database system for triggering event notifications based on updates to database records
US8312033B1 (en) 2008-06-26 2012-11-13 Experian Marketing Solutions, Inc. Systems and methods for providing an integrated identifier
US9152727B1 (en) 2010-08-23 2015-10-06 Experian Marketing Solutions, Inc. Systems and methods for processing consumer information for targeted marketing applications
US9147042B1 (en) 2010-11-22 2015-09-29 Experian Information Solutions, Inc. Systems and methods for data verification
US9483606B1 (en) 2011-07-08 2016-11-01 Consumerinfo.Com, Inc. Lifescore
KR101341507B1 (ko) * 2012-04-13 2013-12-13 연세대학교 산학협력단 수정된 b+트리 노드 검색 방법 및 장치
US9853959B1 (en) 2012-05-07 2017-12-26 Consumerinfo.Com, Inc. Storage and maintenance of personal data
KR101977575B1 (ko) 2012-09-28 2019-05-13 삼성전자 주식회사 디렉토리 엔트리 조회 장치, 그 방법 및 디렉토리 엔트리 조회 프로그램이 기록된 기록 매체
US9697263B1 (en) 2013-03-04 2017-07-04 Experian Information Solutions, Inc. Consumer data request fulfillment system
US9483479B2 (en) 2013-08-12 2016-11-01 Sap Se Main-memory based conceptual framework for file storage and fast data retrieval
US10102536B1 (en) 2013-11-15 2018-10-16 Experian Information Solutions, Inc. Micro-geographic aggregation system
US9529851B1 (en) 2013-12-02 2016-12-27 Experian Information Solutions, Inc. Server architecture for electronic data quality processing
US10262362B1 (en) 2014-02-14 2019-04-16 Experian Information Solutions, Inc. Automatic generation of code for attributes
CN103888373B (zh) * 2014-03-05 2017-05-10 北京邮电大学 一种网络节点的副本文件存储容量的调整方法和装置
US9576030B1 (en) 2014-05-07 2017-02-21 Consumerinfo.Com, Inc. Keeping up with the joneses
US10445152B1 (en) 2014-12-19 2019-10-15 Experian Information Solutions, Inc. Systems and methods for dynamic report generation based on automatic modeling of complex data structures
US10318585B2 (en) * 2015-11-30 2019-06-11 Oracle International Corporation Facilitating efficient garbage collection by dynamically coarsening an append-only lock-free trie
US10678894B2 (en) 2016-08-24 2020-06-09 Experian Information Solutions, Inc. Disambiguation and authentication of device users
CN110383319B (zh) 2017-01-31 2023-05-26 益百利信息解决方案公司 大规模异构数据摄取和用户解析
US10963434B1 (en) 2018-09-07 2021-03-30 Experian Information Solutions, Inc. Data architecture for supporting multiple search models
US11941065B1 (en) 2019-09-13 2024-03-26 Experian Information Solutions, Inc. Single identifier platform for storing entity data
US11880377B1 (en) 2021-03-26 2024-01-23 Experian Information Solutions, Inc. Systems and methods for entity resolution

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2001390C (en) 1988-12-19 1997-12-30 Ming-Chien Shan View composition in a data-base management system
AU620994B2 (en) 1989-07-12 1992-02-27 Digital Equipment Corporation Compressed prefix matching database searching
US5276868A (en) * 1990-05-23 1994-01-04 Digital Equipment Corp. Method and apparatus for pointer compression in structured databases
US5319777A (en) 1990-10-16 1994-06-07 Sinper Corporation System and method for storing and retrieving information from a multidimensional array
US5430869A (en) * 1991-05-29 1995-07-04 Hewlett-Packard Company System and method for restructuring a B-Tree
CA2117846C (en) * 1993-10-20 2001-02-20 Allen Reiter Computer method and storage structure for storing and accessing multidimensional data
WO1995034155A2 (en) * 1994-06-06 1995-12-14 Nokia Telecommunications Oy A method for storing and retrieving data and a memory arrangement
US5787430A (en) * 1994-06-30 1998-07-28 International Business Machines Corporation Variable length data sequence backtracking a trie structure
JP3152868B2 (ja) * 1994-11-16 2001-04-03 富士通株式会社 検索装置および辞書/テキスト検索方法
US6115716A (en) * 1997-03-14 2000-09-05 Nokia Telecommunications Oy Method for implementing an associative memory based on a digital trie structure

Also Published As

Publication number Publication date
EP1008063A1 (de) 2000-06-14
WO1998041931A1 (en) 1998-09-24
FI102424B1 (fi) 1998-11-30
FI971065A0 (fi) 1997-03-14
AU6623898A (en) 1998-10-12
EP1008063B1 (de) 2005-08-17
FI102424B (fi) 1998-11-30
WO1998041931A8 (en) 1999-06-10
DE69831246D1 (de) 2005-09-22
FI971065A (fi) 1998-09-15
US6499032B1 (en) 2002-12-24

Similar Documents

Publication Publication Date Title
DE69831246T2 (de) Verfahren zur einrichtung eines assoziativen speichers mit digitaler trie struktur
DE69636761T2 (de) Speichern und wiederauffinden von geordneten schlüsselmengen in einem kompakten 0-kompletten baum
DE60313371T2 (de) Verwendung von baumartigen "Bitmap" Datenstrukturen
US6505206B1 (en) Method for implementing an associative memory based on a digital trie structure
DE60035432T2 (de) System zur verwaltung der rdbm fragmentierungen
DE60026229T2 (de) Verfahren und Vorrichtung für Klassifizierung von Datenpaketen
DE69912410T2 (de) Schnelles zeichenkettensuchen und -indizieren
DE19810843B4 (de) Verfahren und Zugriffseinrichtung zum Bestimmen der Speicheradresse eines Datenwerts in einer Speichereinrichtung
DE69926305T2 (de) Rechnerlesbarer Speicher zum Speichern einer Datenbank und Indizes
DE69532775T2 (de) Verfahren zur Datenkomprimierung und -Dekomprimierung und zugehöriges Datenkomprimierungs- und Dekomprimierungsgerät
DE10085387T5 (de) Verfahren und Vorrichtung zur Adresssuche längster Übereinstimmung
DE112011104005T5 (de) Verfahren und Datenverarbeitungssystem zum Kodieren von in einer spaltenorientierten Weise gespeicherten Daten, Datenverarbeitungsprogramm und Computerprogrammprodukt
DE60118973T2 (de) Verfahren zum abfragen einer struktur komprimierter daten
DE60032674T2 (de) Verfahren zum Suchen von Adressen
DE112018004222T5 (de) Datenbankaufteilung
DE112012005533T5 (de) Unterstützende Abfrage und ein Abfragen
DE2905328A1 (de) Verfahren und vorrichtung zur assoziativen informationswiedergewinnung
EP0970430A1 (de) Verfahren zur einrichtung eines assoziativen speichers auf basis einer digitalen baumstruktur
Ladra et al. Scalable and queryable compressed storage structure for raster data
US6941314B2 (en) User selectable editing protocol for fast flexible search engine
DE112010002620T5 (de) Ontologie-nutzung zum ordnen von datensätzen nachrelevanz
KR20020017219A (ko) 대용량 데이터베이스에서의 고속에 의한 다해상도의 최적탐색방법
Subramanian A fully dynamic data structure for reachability in planar digraphs
EP1744257B1 (de) Vorrichtung und Verfahren zum Abrufen/Speichern von elektronischen Daten in einem System mit mehreren Datenverarbeitungseinheiten
DE69627391T2 (de) Verfahren und system zum durchführen einer booleschen operation auf bitketten unter benutzung einer maximalen bitscheibe

Legal Events

Date Code Title Description
8364 No opposition during term of opposition