-
HINTERGRUND DER ERFINDUNG
-
Gebiet der Erfindung
-
Die vorliegende Erfindung betrifft allgemein Computer und konkret eine skalierbare Deduplizierung, bei der eine differenzierte (fine-grained) Auflösung benötigt wird, um Zugriff auf kleine Datenblöcke in einer Datenverarbeitungsspeicherumgebung zu ermöglichen.
-
Beschreibung des verwandten Fachgebiets
-
In der heutigen Gesellschaft sind Computersysteme alltäglich. Computersysteme findet man beispielsweise am Arbeitsplatz, zu Hause oder in der Schule. Zu Computersystemen können Datenspeichersysteme bzw. Plattenspeichersysteme zum Verarbeiten und Speichern von Daten gehören. Täglich müssen große Datenmengen verarbeitet werden, und die aktuelle Tendenz deutet darauf hin, dass diese Mengen in absehbarer Zukunft weiter ansteigen werden. Eine wirksame Weise zum Lösen des Problems besteht in der Verwendung von Deduplizierung. Der einem Deduplizierungssystem zu Grunde liegende Gedanke besteht darin, die Tatsache auszunutzen, dass große Teile der verfügbaren Daten immer wieder kopiert und ohne irgendwelche Änderungen weitergeleitet werden, indem wiederholte Daten ausfindig gemacht und lediglich beim ersten Vorkommen gespeichert werden. Nachfolgende Kopien werden mit Verweisen auf das gespeicherte Vorkommen ersetzt, wodurch die Speicheranforderungen erheblich verringert werden, wenn sich die Daten tatsächlich wiederholen.
-
ZUSAMMENFASSUNG DER BESCHRIEBENEN AUSFÜHRUNGSFORMEN
-
Datendeduplizierung bezieht sich auf das Verringern und/oder Beseitigen von redundanten Daten. Bei der Datendeduplizierung wird ein Datenobjekt, bei dem es sich um eine Datei, einen Datenstrom oder eine andere Datenform handeln kann, es sich um eine Datei, einen Datenstrom oder eine andere Datenform handeln kann, unter Verwendung eines Chunking-Verfahrens in einen oder mehrere Chunks genannte Teile aufgeteilt. Bei einem Datendeduplizierungsprozess werden doppelte Datenkopien verringert oder beseitigt, wodurch eine minimale Menge von redundanten Kopien bzw. eine einzelne Kopie der Daten übrigbleiben. Die Verwendung von Deduplizierungsprozessen stellt eine Vielfalt von Vorteilen wie zum Beispiel eine Verringerung der benötigten Speicherkapazität und eine höhere Netzwerkbandbreite bereit. Aufgrund dieser und anderer Vorteile ging die Deduplizierung in den letzten Jahren als äußerst wichtiges Technologiefeld in Datenverarbeitungsspeichersystemen hervor. Es wurden mehrere Ansätze zur Deduplizierung vorgeschlagen, von denen viele Hashing-Techniken verwenden.
-
Eine der größten Herausforderungen bei der Verwendung von Hashing-Techniken besteht darin, das richtige Gleichgewicht zwischen Einheitlichkeit auf der einen Seite, wobei eine Funktion eine Verteilung von Werten ergeben sollte, die so einheitlich wie möglich ist, um die Anzahl von Kollisionen (falschen Übereinstimmungen) zu minimieren, und Empfindlichkeit auf der anderen Seite zu finden, wobei geringfügige Änderungen in dem Chunk den entsprechenden Hash-Wert gar nicht oder lediglich geringfügig beeinflussen sollten.
-
Entsprechend, und angesichts des Vorangehenden, werden verschiedene beispielhafte Ausführungsformen von Verfahren, Systemen und Computerprogrammprodukten für eine skalierbare Datendeduplizierung bereitgestellt, die mit kleinen Daten-Chunks in einer Datenverarbeitungsumgebung arbeitet. In einer Ausführungsform wird lediglich beispielhaft für jeden der kleinen Daten-Chunks beruhend auf einer Verknüpfung einer Darstellung von in dem kleinen Daten-Chunk vorkommenden Zeichen mit einer Darstellung von Häufigkeiten des kleinen Daten-Chunks eine Signatur erzeugt. Eine Signatur wird beruhend auf einer Verknüpfung einer Darstellung von auftauchenden Zeichen erzeugt. Die Signatur wird dazu verwendet, beim Auswählen der zu deduplizierenden Daten zu helfen.
-
Zusätzlich zu der vorangegangenen beispielhaften Ausführungsform eines Verfahrens werden andere beispielhafte Ausführungsformen von Systemen und Computerprodukten bereitgestellt, die ähnliche Vorteile bereitstellen. Die vorangegangene Zusammenfassung wurde bereitgestellt, um eine Auswahl von Konzepten in vereinfachter Form vorzustellen, die nachfolgend in der ausführlichen Beschreibung näher beschrieben werden. Weder soll diese Zusammenfassung Schlüsselmerkmale oder wesentliche Merkmale des beanspruchten Gegenstands bestimmen, noch soll sie als Hilfe beim Ermitteln des Umfangs des beanspruchten Gegenstands verwendet werden. Der beanspruchte Gegenstand ist nicht auf Ausführungen beschränkt, die eine beliebige oder alle im Abschnitt Hintergrund genannten Nachteile lösen.
-
KURZBESCHREIBUNG DER ZEICHNUNGEN
-
Damit die Vorteile der Erfindung ohne Weiteres verstanden werden, wird eine ausführlichere Beschreibung der oben kurz beschriebenen Erfindung unter Bezugnahme auf spezifische Ausführungsformen angeführt, die in den beigefügten Zeichnungen veranschaulicht werden. Unter dem Verständnis, dass diese Zeichnungen Ausführungsformen der Erfindung abbilden und deshalb nicht als deren Umfang einschränkend anzusehen sind, wird die Erfindung durch die Verwendung der beigefügten Zeichnungen mit zusätzlicher Genauigkeit und Ausführlichkeit erläutert, in denen:
-
1 eine Datenverarbeitungssystemumgebung mit einer beispielhaften Speichereinheit veranschaulicht, in der Aspekte der vorliegenden Erfindung umgesetzt werden können;
-
2 ein Ablaufplan ist, der ein beispielhaftes Verfahren für eine skalierbare Datendeduplizierung mit kleinen Blöcken veranschaulicht;
-
3 ein beispielhaftes Schaubild veranschaulicht, das eine schematische Darstellung einer Aufteilung in Blöcke von Zeichenhäufigkeiten in einer Datenverarbeitungsumgebung zeigt, in der Aspekte der vorliegenden Erfindung umgesetzt werden können;
-
4 ein beispielhaftes Schaubild veranschaulicht, das eine Anordnung verschiedener Bestandteile der approximativen Hash-Funktion zeigt, in der Aspekte der vorliegenden Erfindung umgesetzt werden können;
-
5 ein Graph ist, der die Wahrscheinlichkeit zeigt, mit der man mit einer Prüfdatenbank mit einer Größe von 32 GB ein 1-Bit an jeder der 32 Bitstellen der definierten Signatur erhält;
-
6 ein Ablaufplan ist, der ein beispielhaftes Verfahren zum Definieren von Daten-Chunks veranschaulicht;
-
7a ein Ablaufplan ist, der ein beispielhaftes Verfahren zum Definieren des Zeichenteils der Signaturdefinition veranschaulicht;
-
7b ein Ablaufplan ist, der ein beispielhaftes Verfahren zum Definieren des Häufigkeitsteils der Signaturdefinition veranschaulicht;
-
7c ein Ablaufplan ist, der ein beispielhaftes Verfahren zum Definieren des Zeichenpaarteils der Signaturdefinition veranschaulicht; und
-
8 die in den Ablaufplänen aus den 7a, 7b und 7c verwendeten Verschiebungskonstanten definiert.
-
AUSFÜHRLICHE BESCHREIBUNG DER ZEICHNUNGEN
-
Wie vorher erwähnt, bezieht sich Datendeduplizierung auf das Verringern und/oder Beseitigen von redundanten Daten. Bei einem Datendeduplizierungsprozess werden doppelte Datenkopien verringert oder beseitigt, wodurch eine minimale Menge von redundanten Kopien bzw. eine einzelne Kopie der Daten übrigbleiben. Die Verwendung von Deduplizierungsprozessen stellt eine Vielfalt von Vorteilen wie zum Beispiel eine Verringerung der benötigten Speicherkapazität und eine höhere Netzwerkbandbreite bereit.
-
Ein Ansatz zur Deduplizierung beruhend auf Hashing kann schematisch wie folgt beschrieben werden. Die verfügbaren Daten werden in Chunks genannte Teile aufgeteilt (z. B. Ci und Cj). Diese Chunks können eine feste oder variable Größe aufweisen, und die (durchschnittliche) Größe eines Chunk kann klein wie zum Beispiel 4 bis 8 Kilobyte (KB) bis hin zu ziemlich groß wie zum Beispiel 16 Megabyte (MB) sein. Auf diese Chunks wird eine kryptografisch sichere Hash-Funktion (h) angewendet, was bedeutet, dass bei h(Ci) = h(Cj) mit einer äußerst geringen Fehlerwahrscheinlichkeit angenommen werden kann, dass die Chunks Ci und Cj identisch sind. Der Satz (S) verschiedener Hash-Werte wird gemeinsam mit Verweisen auf die entsprechenden Chunks in einer einen schnellen Zugriff und eine einfache Aktualisierung gestattenden Datenstruktur (D) gespeichert, üblicherweise in einer Hash-Tabelle oder einem B-Baum. Für jeden neuen zu behandelnden Chunk wird dessen Hash-Wert in D gesucht, und falls er dort auftaucht, kann man annehmen, dass es sich bei diesem bestimmten Chunk um ein Duplikat handelt und dieser somit nicht erneut gespeichert wird, sondern stattdessen durch einen Verweis auf sein früheres Vorkommen ersetzt wird. Wenn sich der Hash-Wert nicht in D befindet, wird dieser bestimmte Chunk als neu erachtet und somit gespeichert, und sein Hash-Wert wird zu dem Satz S hinzugefügt.
-
Beruhend darauf, wie die Chunk-Grenzen definiert sind, und aufgrund der vorgeschlagenen Größe der Chunks können jedoch Unterschiede auftreten. Die Chunk-Größe hat einen wesentlichen Einfluss auf die Leistungsfähigkeit, und die Anzahl verschiedener Chunks kann im Falle von zu kleinen Chunk-Größen so groß sein, dass sie den Deduplizierungsansatz gefährdet, da die Datenstruktur D möglicherweise nicht in den RAM passt und das System somit möglicherweise nicht skalierbar ist. Andererseits nimmt die Wahrscheinlichkeit, identische Chunks zu erhalten, ab, wenn die Chunk-Größe zu groß gewählt wird, und in vielen Fällen gibt es zahlreiche Chunks, die dedupliziert hätten werden können, wenn die Chunk-Größe kleiner gewesen wäre, aber wenn die Chunk-Größe größer ist, müssen viele dieser Chunks beibehalten werden.
-
Der Deduplizierungsprozess kann auch nach gleichartigen und nicht nur nach identischen Chunks suchen. Wenn ein gleichartiger Chunk gefunden wird, wird lediglich der Unterschied aufgezeichnet, der allgemein viel kleiner als ein vollständiger Chunk ist. Dies ermöglicht die Verwendung viel größerer Chunks als in auf Identität beruhenden Systemen. Trotzdem sind die Daten für viele Anwendungen differenzierter, und es kann ein wirksamerer Deduplizierungsprozess mit wesentlich kleineren Chunks durchgeführt werden. Eine einfache Verallgemeinerung eines Systems, in dem die Chunk-Größe zum Beispiel um den Faktor 2000 von 16 MB auf 8 K verringert werden könnte, ohne irgendetwas anderes in der Ausführung zu ändern, könnte zum Beispiel eine 2000-fache Erhöhung der Größe des Index von 4 GB auf etwa 8 TB mit sich bringen. Von diesem kann man jedoch annehmen, dass er nicht in den RAM passt. Außerdem führt das Beibehalten der Definition der Idee von Gleichartigkeit und das Verringern der Größe der Chunks zu einer erhöhten Anzahl von Kollisionen, die den Ansatz insgesamt unwirksam machen könnten.
-
Im Gegensatz dazu und zum Angehen der vorher beschriebenen Ineffizienzen dienen die Mechanismen der veranschaulichten Ausführungsformen dazu, die benötigte Gleichartigkeit durch etwas umzusetzen, das als approximatives Hash-Schema bezeichnet werden soll. Der Grundgedanke besteht darin, dass eine derartige approximative Hash-Funktion nicht anfällig für „kleine” Änderungen innerhalb des Chunk ist, sondern sich wie andere Hash-Funktionen verhält, was die nahezu einheitliche Verteilung seiner Werte angeht. Folglich können die Mechanismen den Satz approximativer Hash-Werte so handhaben, wie es normalerweise in Hash-Anwendungen durchgeführt wird (unter Verwendung einer Hash-Tabelle oder durch Speichern der Werte in einem B-Baum), aber sowohl gleichartige als auch identische Blöcke erkennen. Wenn ein bestimmter Chunk eine erweiterte, aber noch immer geringfügige Aktualisierung erfährt, kann sein neuer Hash-Wert nahe an dem ursprünglichen Wert liegen, was darauf schließen lässt, dass die in der Nähe des bestimmten Elements in der Hash-Tabelle gespeicherten Werte im Falle eines Fehltreffers überprüft werden sollten. Derartige Suchen in der Nähe sind in einem normalen Hash-Ansatz nutzlos.
-
Ein allgemeiner Algorithmus zum Speichern des Repository kann das Verwenden einer Hash-Tabelle H mit beispielsweise 232 Einträgen als grundlegende Datenstruktur beinhalten. Während des Aufbauprozesses wird jedem Chunk C sein approximativer Hash-Wert ah(C) zugewiesen, und der Index oder die Adresse des Chunk werden in H[ah(C)] gespeichert, wobei der Eintrag in H durch den Hash-Wert des Chunk indexiert ist. Wenn die Position in der Tabelle nicht frei ist, kann sie überschrieben werden. Dies kann geschehen, wenn der neue Chunk identisch oder äußerst ähnlich wie ein Chunk ist, auf den man früher bereits gestoßen ist; wobei es in diesem Fall bevorzugt sein kann, die Adresse des jüngeren Chunk, falls benötigt, für eine spätere Bezugnahme zu speichern. Eine Kollision kann jedoch auch die Folge von zwei vollständig unterschiedlichen Chunks sein, die denselben Hash-Wert aufweisen, wobei dann der Verweis auf den älteren Chunk, der überschrieben wurde, verloren geht.
-
In einer Ausführungsform wenden die Mechanismen der vorliegenden Erfindung spezifische Umwandlungen auf Daten an und ermitteln eine Signatur, mit deren Hilfe es möglich ist, die zu deduplizierenden Daten auszuwählen. Die Mechanismen teilen die Daten in relativ kleine Chunks (C) mit fester oder variabler Länge, mit einer (durchschnittlichen) Größe von etwa 8 bis 16 K auf. Jeder Chunk kann im Hinblick auf die Verteilung der Zeichen, durch die er gebildet wird, und deren entsprechenden Häufigkeiten des Vorkommens analysiert werden. Die Folge verschiedener Zeichen, angeordnet nach deren Häufigkeit des Vorkommens in dem Chunk, wird als c-Spektrum von C definiert, und die entsprechende Folge von Häufigkeiten wird als f-Spektrum von C definiert. Außerdem berücksichtigen die Mechanismen der vorliegenden Erfindung die Folge verschiedener Zeichenpaare, angeordnet nach deren Häufigkeit des Vorkommens in dem Chunk, und diese Folge von Paaren wird als p-Spektrum von C definiert. Die vorgeschlagene approximative Hash-Funktion (als ah(C) bezeichnet) ist eine Verknüpfung bestimmter Elemente dieser Spektren. In einer Ausführungsform kann die Größe der Hash-Werte lediglich beispielhaft im Voraus festgesetzt werden, um den Raum der zugeordneten Hash-Tabelle auszunutzen. Es kann zum Beispiel entschieden werden, dass die Tabelle etwa 4 Milliarden Einträge haben wird, was einem Hash-Wert von 32 Bits entspricht. Die gewählten Elemente der Spektren und genauer lediglich ein Teil der Bits der gewählten Elemente der Spektren können entsprechend angeordnet werden, indem sie an die gewünschten Positionen verschoben werden und dann eine logische XOR-Operation an den Bit-Folgen durchgeführt wird. In einer Ausführungsform wird eine approximative Hash-Funktion beruhend auf einer Verknüpfung von Zeichen und deren Häufigkeiten erzeugt. Die approximative Hash-Funktion wird dazu verwendet, die zu deduplizierenden Daten auszuwählen.
-
In 1 ist eine beispielhafte Architektur 10 einer Datenverarbeitungssystem-Umgebung abgebildet. Das Computersystem 10 beinhaltet eine zentrale Verarbeitungseinheit (CPU) 12, die mit einem Datenübertragungsanschluss 18 und einer Hauptspeichereinheit 16 verbunden ist. Der Datenübertragungsanschluss 18 tauscht mit einem Datenübertragungsnetzwerk 20 Daten aus. Das Datenübertragungsnetzwerk 20 und das Speichernetzwerk können so konfiguriert sein, dass sie mit einem Server (Hosts) 24 und Speichersystemen, zu denen die Speichereinheiten 14 gehören können, Daten austauschen. Zu den Speichersystemen können Festplattenlaufwerks-(HDD-, Hard-Disk-Drive-)Einheiten, Halbleitereinheiten (SSD, Solid-State Devices) usw. gehören, die in einer redundanten Anordnung unabhängiger Festplatten (RAID, Redundant Array of Independent Disks) konfiguriert sein können. Die unten beschriebenen Operationen können auf der/den Speichereinheit(en) 14 ausgeführt werden, die sich in dem System 10 oder andernorts befindet/befinden und mehrere Hauptspeichereinheiten 16 aufweisen kann/können, die unabhängig und/oder in Verbindung mit anderen CPU-Einheiten 12 arbeiten. Zu der Hauptspeichereinheit 16 kann Hauptspeicher wie zum Beispiel elektrisch löschbarer programmierbarer Nur-Lese-Speicher (EEPROM, Electrically Erasable Programmable Read Only Memory) oder ein Host verwandter Einheiten gehören. Die Hauptspeichereinheit 16 und die Speichereinheiten 14 sind über ein signalführendes Medium mit der CPU 12 verbunden. Außerdem ist die CPU 12 über den Datenübertragungsanschluss 18 mit einem Datenübertragungsnetzwerk 20 verbunden, das eine angeschlossene Vielzahl zusätzlicher Computer-Host-Systeme 24 aufweist. Außerdem können die Hauptspeichereinheit 16 und die CPU 12 in jeder Komponente des Datenverarbeitungssystems 10 eingebettet und darin enthalten sein. Jedes Speichersystem kann ebenfalls separate und/oder verschiedene Hauptspeichereinheiten 16 und die CPU 12 beinhalten, die gemeinsam oder als separate Hauptspeichereinheit 16 und/oder CPU 12 arbeiten.
-
2 ist ein Ablaufplan, der ein beispielhaftes Verfahren 200 für eine skalierbare Datendeduplizierung mit kleinen Blöcken veranschaulicht. Das Verfahren 200 beginnt (Schritt 202) mit dem Erzeugen einer Signatur, die das Ergebnis aus dem Anwenden einer approximativen Hash-Funktion auf einen kleinen Datenblock darstellt, beruhend auf einer Verknüpfung von Zeichen, Häufigkeiten und Zeichenpaarverteilungen (Schritt 204). Die approximative Hash-Funktion wird dazu verwendet, für einen bestimmten Datenblock zu entscheiden, ob der Datenblock dedupliziert werden kann (Schritt 206). Das Verfahren 200 endet (Schritt 208).
-
Um die Mechanismen aus 2 näher zu veranschaulichen, wird in einer Ausführungsform ein Satz von Zeichen wie zum Beispiel a1, a2, ..., an als Folge von verschiedenen Zeichen in dem Chunk bzw. genauer als ASCII-Darstellung dieser Zeichen definiert, angeordnet nach nichtansteigender Häufigkeit in dem Chunk. Die Beziehungen in den Häufigkeiten dieser Zeichen können aufgelöst werden, indem die Zeichen mit identischer Häufigkeit nach ihren ASCII-Werten sortiert werden. Die Mechanismen verwenden f1 ≥ f2 ≥ ... ≥ fn als entsprechende Häufigkeiten. Die Anzahl n verschiedener Zeichen in dem Chunk kann zwischen 1 (für Chunks mit identischen Zeichen wie lauter Nullen oder Leerzeichen) und k, der Größe des Chunk, schwanken. Da diese Größe meistens viel größer als das ASCII-Alphabet ist, kann man annehmen, dass 1 ≤ n ≤ 256.
-
Die Elemente ai können in Blöcke aufgeteilt werden. Die Mechanismen können mehrere Zeichen gemeinsam ansammeln und diese symmetrisch behandeln, da es häufig vorkommen kann, dass Häufigkeiten bestimmter Zeichen gleich oder ziemlich nahe beieinander sein können. In einem derartigen Fall kann eine geringfügige Störung die Reihenfolge der Zeichen ändern und einen vollständig anderen Hash-Wert ergeben, was dem Ziel widerspricht, dass die approximative Hash-Funktion gegen geringfügige Änderungen immun ist. Die ASCII-Darstellung sämtlicher Elemente in einem Block kann mit derselben Verschiebung ausgerichtet werden, und für die Elemente kann eine XOR-Operation durchgeführt werden, so dass die interne Reihenfolge innerhalb der Blöcke willkürlich sein kann.
-
In einer Ausführungsform untersuchen die Mechanismen zum Definieren der Blöcke die Größen di der Lücken zwischen benachbarten Häufigkeiten, di = fi – fi+1 für i = 1, ..., n – 1. Das Sortieren der Lücken ausschließlich gemäß di kann jedoch die Definition der Lücken stark dahingehend verzerren, dass Blöcke mit einzelnen Elementen hervorgerufen werden, da die größten Lücken möglicherweise tendenziell zwischen den größten Werten vorkommen. Die Größen der Lücken werden durch Teilung durch eine entsprechende Gewichtung und Anwendung harmonischer Gewichtungen 1 / i für i ≥ 1 gemäß dem Zipfschen Gesetz normalisiert.
-
Die Lücken werden folglich in Bezug auf i × di = i(fi – fi+1) sortiert, was den Vorteil hat, dass lediglich ganzzahliges Rechnen benötigt wird. Die l – 1 (l stellt die Anzahl von Blöcken dar) Lücken mit den größten Gewichtungen werden ausgewählt (zum Beispiel durch Setzen von l = 10), und die l Sätze von aufeinanderfolgenden Elementen, die durch den Anfang der Folge, diese l – 1 Lücken, und das Ende der Folge begrenzt sind, werden als Blöcke definiert.
-
3 veranschaulicht ein beispielhaftes Blockschaubild, das eine schematische Darstellung einer Aufteilung in Blöcke in einer Datenverarbeitungsumgebung zeigt, in der Aspekte der vorliegenden Erfindung umgesetzt werden können. Lediglich beispielhaft ist in 3 l = 8. Die Quadrate stellen Elemente q dar, die Pfeile stellen die gewichteten Lücken i(fi – fi+1) dar, und bei den Zahlen unter den Pfeilen handelt es sich um die gewichteten Lücken in nichtansteigender Reihenfolge. In 3 bestünden die hervorgerufenen Blöcke lediglich beispielhaft aus 3, 1, 3, 2, 4, 1, 4 bzw. 5 Elementen.
-
4 veranschaulicht ein beispielhaftes Blockschaubild, das eine Anordnung verschiedener Bestandteile der approximativen Hash-Funktion zeigt, in der Aspekte der vorliegenden Erfindung umgesetzt werden können. In einer Ausführungsform veranschaulichen die verschiedenen Bausteine der vorgeschlagenen approximativen Hash-Funktion 32 Spalten, welche die 32 Bits der Signatur darstellen, wie gezeigt von rechts (0) nach links (31) durchnummeriert. Die Blöcke mit der von oben rechts nach unten links laufenden Schraffur stellen Blöcke der Zeichen q dar und geben an, dass die ASCII-Darstellung der Zeichen in ihrer ursprünglichen Form verwendet wird. Die Blöcke mit der von oben links nach unten rechts laufenden Schraffur geben an, dass die ASCII-Darstellung der Zeichen in umgekehrter Reihenfolge verwendet wird, z. B. 11101010 an Stelle von 01010111 für den Buchstaben W in ASCII. Der Block mit Kreuzschraffur stellt einen Block von Zeichenpaaren dar. Die kleineren Balken im rechten unteren Teil der Figur stellen die Häufigkeiten dar (d. h. die Elemente des f-Spektrums.)
-
In einer Ausführungsform beträgt die Anzahl von Blöcken l = 10, und die Größe des letzten Blocks wird bei Bedarf abgeschnitten, damit er höchstens 10 Zeichen beinhaltet. Es kann auch kleinere Grenzen bezüglich der Anzahl des Vorkommens eines zu betrachtenden Zeichens wie zum Beispiel (15) und bezüglich der Größe di einer Lücke (5) geben. Wenn die Anzahl von Blöcken in einem bestimmten Chunk nach diesen Anpassungen kleiner als 10 ist, kann eine andere Anordnung gewählt werden, die an die gegebene Anzahl von Blöcken angepasst ist. Die Anordnung in 4 geht davon aus, dass l = 10 Blöcke gegeben sind. Eine vollständige Beschreibung, die alle möglichen Werte von l behandelt, kann in dem Ablaufdiagramm aus 7 gefunden werden.
-
Außerdem kann jeder aus dem c-Spektrum entnommene Datenblock eine Größe von 8 Bits aufweisen und die volle ASCII-Darstellung verwenden, mit Ausnahme des ersten Blocks der häufigsten Zeichen, für welche die ersten 2 Bits (ganz links) gelöscht werden können. Jeder dieser Blöcke kann verschoben werden, und konkret kann der erste Block um 26 Bits nach links verschoben werden (z. B. linksbündig in der 32-Bit-Anordnung), und der nächste Block kann um 24 Bits verschoben werden, danach 18, 16, 13, 11, 9, 7, 5 und 3 Bits. Die direkten und die umgekehrten Darstellungen der Zeichen können sich abwechseln.
-
Die Elemente des f-Spektrums können wie nachfolgend beschrieben in die Signatur aufgenommen werden. Für jeden Häufigkeitswert, der eine ganze Zahl zwischen 1 und 8192 betragen darf, betrachten die Mechanismen zuerst den Häufigkeitswert als eine Standard-Binärdarstellung (z. B. in 16 Bits) und erweitern diese Zeichenfolge um 8 zusätzliche Nullen nach rechts. Somit weisen die Mechanismen jeder Häufigkeit fi eine 24-Bit-Zeichenfolge Fi zu, wenn zum Beispiel fi = 5 ist, dann ist Fi = 00000000 00000101 00000000. Die Mechanismen legen Di als Unterzeichenfolge von Fi mit einer Länge von 3 Bits fest, angefangen an der direkt auf das höchstwertige 1-Bit folgende Stelle, also 00000000 00000101 00000000 für das oben genannte Beispiel, wobei die Di bildenden Bits hervorgehoben sind. Zur Veranschaulichung wird ein anderes Beispiel mit einem Wert von mehr als 8 Bits angeführt, indem fi = 759 betrachtet wird, wobei 00000010 11110111 00000000 dann sowohl Fi als auch Di zeigt. (mit hinzugefügter Hervorhebung). In einer Ausführungsform wird die Größe sämtlicher Elemente als 3 Bits gewählt, mit Ausnahme des ersten, das lediglich eine Länge von 2 Bits aufweist, und zusätzlich zu der unteren Grenze der Werte in dem f-Spektrum von 15 bedeutet dies, dass das Auffüllen nach rechts mit Nullen niemals benötigt wird. Andere Ausführungsformen können jedoch die Grenze herabsetzen und die Bit-Größe der Werte erhöhen. Die Verschiebungen in Bits dieser Elemente werden angezeigt als: 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6 und 6., wobei die erste (größte) Häufigkeit als niedrigstes Element in der Figur abgebildet ist.
-
Der Block des p-Spektrums von C kann 12 Bits lang sein und in der Anordnung linksbündig platziert werden. In einer Ausführungsform kann das p-Spektrum von C definiert werden, indem die Paare nach nichtansteigenden Häufigkeiten angeordnet und diejenigen als 5, 6, 7, 8 und 9 indexierten (d. h. der 5. bis 9. Block) in dieser Reihenfolge betrachtet werden. Der Grund dafür, nicht die häufigsten Paare aus der Durchführung als Zeichen zu wählen, besteht darin, dass deren Verteilung wesentlich mehr verzerrt ist, wobei die Paare (0, 0) und (255, 255) in einer überwältigenden Mehrheit der von uns geprüften Fälle am häufigsten auftreten.
-
Für jedes der 5 Paare kann die folgende Bitfolge aufgebaut werden. Mit den 2 Bytes A = a7a6a5a4a3a2a1a0 und B = b7b6b5b4b3b2b1b0 können die Mechanismen A zyklisch um 3 Bits nach links und B zyklisch um 3 Bits nach rechts rotieren. Die Bytes können so ausgerichtet werden, dass die am weitesten rechts liegenden 4 Bits von A die am weitesten links liegenden 4 Bits von B überlappen, und dann kann eine logische XOR-Operation auf die Bit-Folgen angewendet werden. Folglich können die 12 sich ergebenden Bits nun als a4,a3,a2,a1,a0^b2,a7^b1,a6^b0,a5^b7,b6,b5,b4,b3 veranschaulicht werden, wobei die Schreibweise a^b für a XOR b verwendet wird. Die höchst- und niedrigstwertigen Bits sowohl von A als auch von B befinden sich in dem sich überlappenden Teil, und so haben sie eine zusätzliche Möglichkeit, wenn ihre Verteilung verzerrt ist, die Verzerrung durch die zusätzliche logische XOR-Operation zu korrigieren. Schließlich kann eine logische XOR-Operation auf alle Elemente der Anordnung angewendet werden, was eine 32-Bitfolge ergibt, die eine Zahl zwischen 0 und 232 – 1 darstellt, die als Hash-Wert des gegebenen Chunk C dienen kann.
-
Lediglich beispielhaft und zur Veranschaulichung der Leistungsfähigkeit der Signatur, die Einheitlichkeit der Verteilung zu zeigen, wurden eine Exchange-Datenbank mit etwa 27 GB und eine Datei mit etwa 5 GB gewählt. In der gewählten Ausführungsform hatte der Chunk eine Größe mit variabler Länge. Die Grenze eines Chunk wurde definiert, indem auf die d am weitesten rechts liegenden Bytes des betrachteten Chunk ein einfacher Rabin-Karp-Rolling-Hash-Algorithmus angewendet wurde. Wenn dieser Hash-Wert gleich ist wie eine gewisse vorher definierte Konstante c, wurde der Chunk nach diesen d Bytes abgeschnitten; andernfalls wurden ein Byte hinzugefügt und die Prüfung mit dem Rolling-Hash-Algorithmus wiederholt. In der gewählten Ausführungsform waren d = 25, c = 2718 und die Hash-Funktion lautete RK(x) = x mod P, wobei RK der Rabin-Karp-Rolling-Hash-Wert ist, x eine Variable ist, P = 248 – 257 eine Primzahl ist und mod für die Modulo-Funktion steht, definiert durch A mod B ist der Rest aus der Teilung von A durch B, wobei sowohl A als auch B ganze Zahlen sind, bzw. in einer mathematischen Schreibweise: A mod B = A – B × [A/B]
-
Zur Vermeidung von Extremwerten für die Chunk-Länge werden als Beispiel eine Untergrenze von 2 K und eine Obergrenze von 64 K auferlegt. Die durchschnittliche Größe eines Chunk betrug dann für die Prüfdatenbanken etwa 12 K.
-
5 veranschaulicht einen Graphen, der die Wahrscheinlichkeit zeigt, mit der man mit einer beispielhaften Prüfdatenbank ein 1-Bit an jeder der 32 Bitstellen der Signaturen erhält. Die senkrechte Achse zeigt die Wahrscheinlichkeitswerte von 0 bis 1 an, und die waagrechte Achse zeigt die 32 Bitstellen, indexiert von 0 bis 31, an. Wie in 5 ersichtlich ist, liegen die Wahrscheinlichkeiten für sämtliche Bitstellen bei einer zufälligen Verteilung sehr nahe an dem erwarteten Wert von 0,5.
-
6 ist ein Ablaufplan, der ein beispielhaftes Verfahren 600 zum Definieren von Daten-Chunks veranschaulicht. Das Verfahren 600 beginnt (Schritt 602) mit dem Lesen der Parameter Kmin, Kmax, P, s, Const, wobei Kmin und Kmax die kleinsten und größten Größen darstellen, die wir für einen Chunk zulassen (Schritt 604), P die in dem Rabin-Karp-Hash-Algorithmus verwendete Primzahl ist, s die Anzahl von Bytes darstellt, auf welche der Rabin-Karp-Hash-Algorithmus angewendet wird, und Const eine feste ganzzahlige Konstante ist 0 ≤ Const < P·Kmin Bytes werden in den Puffer gelesen (Schritt 606). S soll den Wert der letzten s gelesenen Bytes angeben, wenn sie als eine ganze Zahl darstellend betrachtet werden (Schritt 608). Das Verfahren 600 ermittelt dann, ob (Schritt 610). Falls dem so ist, legt das Verfahren 600 den aktuellen Puffer als Chunk fest (Schritt 616). Falls dem nicht so ist, liest das Verfahren 600 ein weiteres Byte (Schritt 612). Das Verfahren 600 ermittelt dann, ob die Puffergröße gleich dem Parameter Kmax ist (Schritt 614). Falls dem nicht so ist, kehrt das Verfahren 600 zu Schritt 608 zurück. Falls dem so ist, legt das Verfahren 600 den aktuellen Puffer als Chunk fest (Schritt 616), und das Verfahren 600 endet (Schritt 618).
-
Die
7a,
7b und
7c veranschaulichen ein Verfahren
700 zum Definieren von Signaturen. Aus technischen Gründen ist der Ablaufplan des Verfahrens
700 in drei Teile aufgeteilt, in
7a,
7b und
7c, die sich jeweils mit Zeichen, Häufigkeiten bzw. Zeichenpaaren befassen, wobei die
7a,
7b und
7c trotzdem alle Teil des Verfahrens
700 sind.
7a ist ein Ablaufplan, der ein beispielhaftes Verfahren zum Definieren des Zeichenteils der Signaturdefinition veranschaulicht. In
7a, die sich mit den Zeichen befasst, beginnt das Verfahren
700 in Schritt
702 und initialisiert dann die Parameter durch Lesen eines Chunk, Definieren des Satzes von Zeichen a
1, a
2, ..., a
n, bei denen es sich um die Folge von verschiedenen Zeichen in dem Chunk handelt, die nach nichtansteigender Reihenfolge deren Häufigkeiten innerhalb des Chunk indexiert sind, Definieren von f
2 ≥ f
2 ≥ ... ≥ f
n als entsprechende Häufigkeiten, Definieren der Größen d
i der Lücken zwischen den Häufigkeiten als d
i = f
i – f
i+1 für i = 1, ..., n – 1, Löschen von Elementen a
i für die f
i < 15 oder d
i < 5 ist, Definieren der Anzahl von Blöcken K durch K ← 1 + min(9, number of elements in sequence d
i), Sortieren der Folge i d
i und Verwenden von n
K = n
K-1 + 10 als Indizes der K – 1 größten Elemente in der Folge i d
i, Definieren von n
0 = 0, und n
K = n
K-1 + 10 und Definieren von K Häufigkeitsblöcken als f
n₀+1, ... f
n (erster Block), f
n₁+1 ... f
n₂ (zweiter Block), ...,
(K-ter Block) (Schritt
704). Die aufzubauende Signatur, sig, wird als 32-Bit lange ganze Zahl initialisiert, die lediglich aus Nullen besteht. Weiter zu Schritt
708, wo, nachdem das Verfahren
700 einen Parameter] festgelegt hat, der den Index des Blocks als Null darstellt, und einen Parameter is, der den Index des aktuellen Zeichens als n
j + 1 darstellt (Schritt
708), das Verfahren
700 ermittelt, ob j = 0 ist (Schritt
724). Falls dem so ist, schneidet das Verfahren
700 die 2 am weitesten links liegenden Bits von a
i ab (Schritt
726) und fährt dann mit Schritt
728 fort. In jedem Fall ermittelt das Verfahren
700 dann, ob j ungerade ist (Schritt
728). Falls dem so ist, wird die ASCII-Darstellung von a
i umgekehrt (Schritt
730). In jedem Fall führt das Verfahren
700 dann die Funktion sig ← sig XOR shift(a
i, cshift[K, j]) aus (Schritt
732), die eine logische XOR-Operation des aktuellen in sig gespeicherten Werts mit der ASCII-Darstellung des Zeichens a
i durchführt, das an eine Stelle verschoben wurde, die durch den Index j des Blocks und die Gesamtanzahl von Blöcken K bestimmt ist. Die genauen Umfänge dieser Verschiebungen sind in der Tabelle cshift[K, j] angegeben, bei der es sich um einen externen Parameter des Signaturschemas handelt (unabhängig von einem konkreten Chunk), und sind in
8 angegeben. Das Verfahren
700 inkrementiert dann i um 1 (Schritt
734). Das Verfahren
700 ermittelt dann, ob es in dem aktuellen als j indexierten Block noch zu verarbeitende Elemente gibt, indem es überprüft, ob i ≤ n
j+1 ist (Schritt
736). Falls dem so ist, kehrt das Verfahren
700 zu Schritt
724 zurück. Falls dem nicht so ist, versucht das Verfahren
700 zum nächsten Block überzugehen, indem es j um 1 inkrementiert (Schritt
738). Das Verfahren
700 ermittelt dann, ob es noch zu verarbeitende Blöcke gibt, indem es überprüft, ob j < K ist (Schritt
740). Falls dem so ist, kehrt das Verfahren
700 zu Schritt
724 zurück und führt eine zusätzliche Wiederholung der Schleife durch. Falls dem nicht so ist, geht das Verfahren
700 zum Verbindungspunkt A über (Schritt
742), bei dem es sich um den Eingangspunkt zu dem nächsten Teil des Ablaufplans handelt, der sich mit den Häufigkeiten befasst und in
7b gezeigt ist.
-
7B ist ein Ablaufplan, der ein beispielhaftes Verfahren 700 zum Definieren des Häufigkeitsteils der Signaturdefinition veranschaulicht. In 7b, die sich mit den Häufigkeiten befasst, beginnt das Verfahren 700 bei Eingangspunkt A (Schritt 742) und wählt die Anzahl von Häufigkeiten, die mit der Definition der Signatur einhergeht, gemäß der Anzahl K von verfügbaren Blöcken aus. Wenn K > 6 ist (Schritt 750), wird die Anzahl lim von Häufigkeiten auf 16 festgesetzt (Schritt 754); andernfalls wird, wenn K > 2 ist (Schritt 752), die Anzahl lim von Häufigkeiten auf 20 festgesetzt (Schritt 756); in noch einem anderen Fall, das heißt, wenn K = 2 oder K = 1 oder K = 0 ist, wird die Anzahl lim von Häufigkeiten auf 23 festgesetzt (Schritt 758). In allen Fällen geht das Verfahren 700 zu Schritt 760 über und initialisiert den Parameter i, der den Index der Häufigkeit fi darstellt, wobei es ihn auf 1 setzt. In Schritt 762 wird aus der binären Darstellung der Häufigkeit fi eine Unterfolge mit 3 Bits Länge entnommen, wie oben in 4 erläutert wird. Konkret ist F das Ergebnis des Auffüllens von fi mit 8 Nullen auf ihrer rechten Seite, was dem Multiplizieren von fi mit 256 entspricht. Man beachte, dass fi und somit auch F nicht Null sein können. Das Verfahren 700 setzt dann den Parameter h auf ⌊log2F⌋ fest, wobei es sich um den Index des am weitesten links liegenden 1-Bit in der binären Darstellung von F handelt, wobei das Zählen ab dem am weitesten rechts liegenden Bits beginnt, das als 0 indexiert ist. Schließlich erhält man die 3 Bits nach dem führenden 1-Bit von F in e durch Subtrahieren von 2h von F, wodurch das führende 1-Bit aufgehoben wird, und durch Teilen durch 2h-3, wodurch die h – 3 am weitesten rechts liegenden Bits gelöscht werden und wie gewünscht lediglich 3 Bits übrig bleiben. Das Verfahren 700 prüft dann in Schritt 764, ob man es mit der ersten Häufigkeit zu tun hat, indem es überprüft, ob i = 1 ist, und falls dem so ist, wird der Wert von e in Schritt 766 halbiert, was gleichbedeutend mit dem Löschen seiner am weitesten rechts liegenden 3 Bits ist. In jedem Fall führt das Verfahren 700 dann die Funktion sig ← sig XOR shift(e, fshift[K, i]) aus (Schritt 768), die eine logische XOR-Operation des aktuellen in sig gespeicherten Werts mit den 2 oder 3 Bits des Werts e durchführt, der an eine Stelle verschoben wurde, die durch den Index i des Elements und die Gesamtanzahl von Blöcken K bestimmt ist. Die genauen Umfänge dieser Verschiebungen sind in der Tabelle fshift[K, i] angegeben, bei der es sich um einen externen Parameter des Signaturschemas handelt (unabhängig von einem konkreten Chunk), und sind in 8 angegeben. Das Verfahren 700 inkrementiert dann i um 1 (Schritt 770) und ermittelt, ob es weitere zu verarbeitende Häufigkeiten gibt, indem es ermittelt, ob i ≤ lim ist (Schritt 772). Falls dem so ist, kehrt das Verfahren 700 zu Schritt 762 zurück und führt eine zusätzliche Wiederholung der Schleife durch. Falls dem nicht so ist, geht das Verfahren 700 zum Verbindungspunkt B über (Schritt 774), bei dem es sich um den Eingangspunkt zu dem nächsten Teil des Ablaufplans handelt, der sich mit den Zeichenpaaren befasst und in 7c gezeigt ist.
-
7c ist ein Ablaufplan, der ein beispielhaftes Verfahren 700 zum Definieren des Zeichenpaarteils der Signaturdefinition veranschaulicht. In 7c, die sich mit den Zeichenpaaren befasst, beginnt das Verfahren 700 an Eingangspunkt B (Schritt 774). In Schritt 776 werden die Zeichenpaare zuerst in einer nichtansteigenden Reihenfolge gemäß ihrer Häufigkeit des Auftretens innerhalb des Chunk sortiert. Die durch das Verfahren 700 zu betrachtenden Paare sind die in der durch die Sortierung erhaltenen Reihenfolge als 5 oder höher indexierten. Die Paare werden in Clustern von mehreren Paaren verarbeitet. Die Anzahl von Clustern pnum und welche Paare jedem Cluster zugehören, wird gemäß der Anzahl K von verfügbaren Blöcken ermittelt. Die Aufteilung der Paare in Cluster wird mit Hilfe einer Anordnung plim[j] umgesetzt, wobei 1 ≤ j ≤ pnum ist, wobei plim[j] den Index des letzten Paars in Cluster j ergibt. Wenn K ≥ 8 ist (Schritt 778), wird die Anzahl pnum von Clustern auf 1 gesetzt, und plim[1] wird auf 9 gesetzt, damit der einzige Cluster in diesem Fall aus den 5 Paaren besteht, die mit 5, 6, 7, 8 und 9 indexiert sind (Schritt 781); andernfalls, wenn K > 1 ist (Schritt 780), wird die Anzahl pnum von Clustern auf 2 gesetzt, plim[1] wird auf 8 gesetzt, und plim[2] wird auf 12 gesetzt, damit der erste der beiden Cluster in diesem Fall aus den 4 Paaren besteht, die mit 5, 6, 7 und 8 indexiert sind, und der zweite Cluster aus den 4 Paaren besteht, die mit 9, 10, 11 und 12 indexiert sind (Schritt 782); in noch einem anderen Fall, das heißt, wenn K = 1 oder K = 0 ist, wird die Anzahl pnum von Clustern auf 3 gesetzt, plim[1] wird auf 8 gesetzt, plim[2] wird auf 12 gesetzt, und plim[3] wird auf 16 gesetzt, damit der erste der drei Cluster in diesem Fall aus den 4 Paaren besteht, die mit 5, 6, 7 und 8 indexiert sind, der zweite Cluster aus den 4 Paaren besteht, die mit 9, 10, 11 und 12 indexiert sind, und der dritte Cluster aus den 4 Paaren besteht, die mit 13, 14, 15 und 16 indexiert sind (Schritt 783). In allen Fällen geht das Verfahren 700 dann zu Schritt 784 über und initialisiert den Parameter i, der den Index des Paars darstellt, und setzt diesen auf 5, sowie den Parameter], der den Index des Clusters darstellt, und setzt diesen auf 1.
-
In Schritt 785 beginnt das Verfahren 700 dann eine Schleife, wobei es in jeder Wiederholung ein einzelnes Paar pi verarbeitet. u und v sind als Zeichen definiert, die das Paar pi bilden. In Schritt 786 wird eine Zeichenfolge w mit einer Länge von 12 Bits als Funktion der ASCII-Darstellung von u und v gebildet. Konkret wird u zyklisch um 3 Bits nach links rotiert, v wird zyklisch um 3 Bits nach rechts rotiert, und das Ergebnis w erhält man durch Anwenden einer logischen XOR-Operation auf die rotierten Zeichenfolgen, nachdem u um 4 Bits nach links verschoben wurde. Das Verfahren 700 führt dann die Funktion sig ← sig XOR shift(w, pshift [K, j] aus (Schritt 787), die eine logische XOR-Operation des aktuellen in sig gespeicherten Werts mit den 12 Bits des Werts w durchführt, die an eine Stelle verschoben wurden, die durch den Index j des Clusters und die Gesamtanzahl von Blöcken K bestimmt ist. Die genauen Umfänge dieser Verschiebungen sind in der Tabelle pshift[K, j] angegeben, bei der es sich um einen externen Parameter des Signaturschemas handelt (unabhängig von einem konkreten Chunk), und diese sind in 8 angegeben. Das Verfahren 700 inkrementiert dann i um 1 (Schritt 788) und ermittelt, ob es weitere zu verarbeitende Paare innerhalb dieses Clusters gibt, indem es ermittelt, ob i ≤ plim[j] ist (Schritt 789). Falls dem so ist, kehrt das Verfahren 700 zu Schritt 785 zurück und führt eine zusätzliche Wiederholung der Schleife mit einem anderen Paar desselben Clusters durch. Falls dem nicht so ist, inkrementiert das Verfahren 700 j um 1 (Schritt 790) und ermittelt, ob es noch weitere zu verarbeitende Cluster gibt, indem es überprüft, ob j ≤ pnum ist (Schritt 791). Falls dem so ist, kehrt das Verfahren 700 zu Schritt 785 zurück und führt eine zusätzliche Wiederholung der Schleife mit einem anderen Cluster durch. Falls dem nicht so ist, gibt das Verfahren 700 die ausgewertete Signatur sig aus (Schritt 792) und endet (Schritt 799).
-
8 definiert die in den Ablaufplänen aus den 7a, 7b und 7c verwendeten Verschiebungskonstanten. Die Tabellen sind in C-Stil aufgeführt, wobei Indizes mit 0 anfangen, so dass die erste Zeile und die erste Spalte nicht verwendet werden. Der erste Parameter stellt die gegebene Anzahl von Blöcken K dar. Der zweite Parameter lautet:
- a) Für cshift: Index j des Zeichenblocks;
- b) für fshift: Index i der Häufigkeit;
- c) für pshift: Index pnum der Anzahl von verwendeten Paaren (1 bis 3)
Für K ≥ 8 wird nur ein Paar verwendet, mit Elementen als 5-6-7-8-9 indexiert
Für 2 ≤ K ≤ 7 werden 2 Paare verwendet: 5-6-7-8 und 9-10-11-12
Für K = i werden 3 Paare verwendet: 5-6-7-8, 9-10-11-12 und 13-14-15-16
Der letzte Index dieser Elementblöcke ist in plim[j] gegeben.
-
Der Fachmann wird verstehen, dass Aspekte der vorliegenden Erfindung als System, Verfahren oder Computerprogrammprodukt ausgeführt werden können. Entsprechend können Aspekte der vorliegenden Erfindung die Form einer vollständigen Hardware-Ausführungsform, einer vollständigen Software-Ausführungsform (darunter Firmware, im Speicher befindliche Software, Mikrocode, usw.) oder einer Software- und Hardware-Aspekte kombinierenden Ausführungsform annehmen, die hierin alle allgemein als „Schaltkreis”, „Modul” oder „System” bezeichnet sein können. Des Weiteren können Aspekte der Ausführungsformen die Form eines auf einem oder mehreren durch einen Computer lesbaren Medien enthaltenen Computerprogrammprodukts annehmen, die durch einen Computer lesbaren Programmcode enthalten.
-
Es kann jede Kombination aus einem oder mehreren durch einen Computer lesbaren Medien verwendet werden. Bei dem durch einen Computer lesbaren Medium kann es sich um ein durch einen Computer lesbares Signalmedium oder ein durch einen Computer lesbares Speichermedium handeln. Bei einem durch einen Computer lesbaren Speichermedium kann es sich zum Beispiel um ein elektronisches, magnetisches, optisches, elektromagnetisches, Infrarot- oder Halbleitersystem, eine derartige Vorrichtung oder Einheit oder jede geeignete Kombination daraus handeln, ohne auf diese beschränkt zu sein. Zu konkreteren Beispielen (eine nicht erschöpfende Liste) des durch einen Computer lesbaren Speichermediums gehören die folgenden: eine elektrische Verbindung mit einer oder mehreren Leitungen, eine mobile Computerdiskette, eine Festplatte, ein Direktzugriffsspeicher (RAM), ein Nur-Lese-Speicher (ROM), ein löschbarer programmierbarer Nur-Lese-Speicher (EPROM bzw. Flash-Speicher), ein Lichtwellenleiter, ein mobiler Kompaktspeicherplatte-Nur-Lese-Speicher (CD-ROM), eine optische Speichereinheit, eine magnetische Speichereinheit oder jede geeignete Kombination daraus. In dem Kontext dieses Dokuments kann es sich bei einem durch einen Computer lesbaren Speichermedium um jedes beliebige physische Medium handeln, das ein Programm enthalten bzw. speichern kann, das von oder in Verbindung mit einem System, einer Vorrichtung oder einer Einheit zur Ausführung von Anweisungen verwendet wird.
-
Auf einem durch einen Computer lesbaren Medium enthaltener Programmcode kann unter Verwendung eines beliebigen geeigneten Mediums übertragen werden, darunter drahtlos, drahtgebunden, Lichtwellenleiter-Kabel, HF usw. oder jede geeignete Kombination daraus, jedoch nicht auf diese beschränkt. Computerprogrammcode für das Ausführen von Vorgängen für Aspekte der vorliegenden Erfindung kann in einer beliebigen Kombination aus einer oder mehreren Programmiersprachen geschrieben werden, darunter objektorientierte Programmiersprachen wie Java, Smalltalk, C++ o. ä. sowie herkömmliche prozedurale Programmiersprachen wie die Programmiersprache „C” oder ähnliche Programmiersprachen. Der Programmcode kann vollständig auf dem Computer des Benutzers, teilweise auf dem Computer des Benutzers, als eigenständiges Software-Paket, teilweise auf dem Computer des Benutzers und teilweise auf einem fernen Computer oder vollständig auf dem fernen Computer oder Server ausgeführt werden. In letzterem Fall kann der entfernt angeordnete Computer mit dem Computer des Benutzers durch eine beliebige Art Netzwerk verbunden sein, darunter ein lokales Netzwerk (LAN) oder ein Weitverkehrsnetz (WAN), oder die Verbindung kann mit einem externen Computer hergestellt werden (zum Beispiel über das Internet unter Verwendung eines Internet-Dienstanbieters).
-
Aspekte der vorliegenden Erfindung wurden oben unter Bezugnahme auf Ablaufpläne und/oder Schaubilder von Verfahren, Vorrichtungen (Systemen) und Computerprogrammprodukten gemäß Ausführungsformen der Erfindung beschrieben. Es wird darauf hingewiesen, dass jeder Block der Ablaufpläne und/oder der Blockschaltbilder bzw. Schaubilder sowie Kombinationen von Blöcken in den Ablaufplänen und/oder den Blockschaltbildern bzw. Schaubildern durch Computerprogrammanweisungen ausgeführt werden können. Diese Computerprogrammanweisungen können einem Prozessor eines Universalcomputers, eines Spezialcomputers oder einer anderen programmierbaren Datenverarbeitungsvorrichtung bereitgestellt werden, um eine Maschine zu erzeugen, so dass die über den Prozessor des Computers bzw. der anderen programmierbaren Datenverarbeitungsvorrichtung ausgeführten Anweisungen ein Mittel zur Umsetzung der in dem Block bzw. den Blöcken der Ablaufpläne und/oder der Blockschaltbilder bzw. Schaubilder festgelegten Funktionen/Schritte erzeugen.
-
Diese Computerprogrammanweisungen können auch auf einem durch einen Computer lesbaren Medium gespeichert sein, das einen Computer oder eine andere programmierbare Datenverarbeitungsvorrichtung bzw. andere Einheiten so steuern kann, dass sie auf eine bestimmte Art funktionieren, so dass die auf dem durch einen Computer lesbaren Medium gespeicherten Anweisungen ein Herstellungsprodukt herstellen, darunter Anweisungen, welche die/den in dem Block bzw. den Blöcken des Ablaufplans und/oder der Blockschaltbilder bzw. Schaubilder angegebene(n) Funktion/Schritt umsetzen. Die Computerprogrammanweisungen können auch auf einen Computer oder eine andere programmierbare Datenverarbeitungsvorrichtung bzw. andere Einheiten geladen werden, um das Ausführen einer Folge von Prozessschritten auf dem Computer, der anderen programmierbaren Vorrichtung bzw. den anderen Einheiten zu veranlassen, um einen auf einem Computer ausgeführten Prozess zu erzeugen, so dass die auf dem Computer oder einer anderen programmierbaren Vorrichtung ausgeführten Anweisungen Verfahren zur Umsetzung der in dem Block bzw. den Blöcken der Ablaufpläne und/oder der Blockschaltbilder bzw. Schaubilder angegebenen Funktionen/Schritte erzeugen.
-
Die Ablaufpläne und die Blockschaltbilder bzw. Schaubilder in den obigen Figuren veranschaulichen die Architektur, die Funktionalität und den Betrieb möglicher Ausführungen von Systemen, Verfahren und Computerprogrammprodukten gemäß verschiedenen Ausführungsformen der vorliegenden Erfindung. In diesem Zusammenhang kann jeder Block in den Ablaufplänen oder Blockschaltbildern bzw. Schaubildern ein Modul, ein Segment oder einen Teil eines Codes darstellen, die eine oder mehrere ausführbare Anweisungen zur Ausführung der bestimmten logischen Funktion(en) aufweisen. Es sei auch angemerkt, dass in einigen alternativen Ausführungen die in dem Block angegebenen Funktionen in einer anderen Reihenfolge als in den Figuren gezeigt stattfinden können. Zwei nacheinander gezeigte Blöcke können zum Beispiel in Wirklichkeit im Wesentlichen gleichzeitig ausgeführt werden, oder die Blöcke können manchmal je nach entsprechender Funktionalität in umgekehrter Reihenfolge ausgeführt werden. Es ist ferner anzumerken, dass jeder Block der Blockschaltbilder bzw. Schaubilder und/oder der Ablaufpläne sowie Kombinationen aus Blöcken in den Blockschaltbildern bzw. Schaubildern und/oder den Ablaufplänen durch spezielle auf Hardware beruhende Systeme umgesetzt werden können, welche die festgelegten Funktionen oder Schritte durchführen, oder durch Kombinationen aus Spezial-Hardware und Computeranweisungen.
-
Obgleich eine oder mehrere Ausführungsformen der vorliegenden Erfindung ausführlich beschrieben wurden, wird ein Fachmann verstehen, dass Abänderungen und Anpassungen dieser Ausführungsformen durchgeführt werden können, ohne von dem in den folgenden Ansprüchen festgelegten Umfang der vorliegenden Erfindung abzuweichen. Konkret kann durch Änderung einer der Konstanten Kmin, Kmax, P, s, Const, die in Schritt 604 aus 6 auftauchen, oder der Konstanten, die in den Ablaufplänen aus den 7a, 7b oder 7c in den Schritten 704, 726, 750, 752, 754, 756, 758, 762, 766, 776, 778, 780, 781, 782, 783, 784, 786 auftreten, oder eines beliebigen Werts in den Tabellen cshift, fshift und pshift in 8 zu einer vollkommen anderen Signatur sig führen, die ebenfalls die Ziele der vorliegenden Erfindung erreichen könnte. Die oben verwendeten konkreten Konstanten werden somit lediglich als Beispiel für eine mögliche Umsetzung angeführt und sollten nicht als Beschränkung des Umfangs der Erfindung auf lediglich diese Werte verstanden werden.