DE102005023128B4 - System und Verfahren zum gemeinschaftlichen Verwenden von Speicherressourcen zwischen mehreren Dateien - Google Patents

System und Verfahren zum gemeinschaftlichen Verwenden von Speicherressourcen zwischen mehreren Dateien Download PDF

Info

Publication number
DE102005023128B4
DE102005023128B4 DE102005023128A DE102005023128A DE102005023128B4 DE 102005023128 B4 DE102005023128 B4 DE 102005023128B4 DE 102005023128 A DE102005023128 A DE 102005023128A DE 102005023128 A DE102005023128 A DE 102005023128A DE 102005023128 B4 DE102005023128 B4 DE 102005023128B4
Authority
DE
Germany
Prior art keywords
sequence
breakpoint
values
match
value
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.)
Active
Application number
DE102005023128A
Other languages
English (en)
Other versions
DE102005023128A1 (de
Inventor
Kave Los Altos Eshghi
Hsiu-Khuern San Jose Tang
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.)
Hewlett Packard Enterprise Development LP
Original Assignee
Hewlett Packard Development Co LP
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 Hewlett Packard Development Co LP filed Critical Hewlett Packard Development Co LP
Publication of DE102005023128A1 publication Critical patent/DE102005023128A1/de
Application granted granted Critical
Publication of DE102005023128B4 publication Critical patent/DE102005023128B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/174Redundancy elimination performed by the file system
    • G06F16/1748De-duplication implemented within the file system, e.g. based on file segments
    • G06F16/1752De-duplication implemented within the file system, e.g. based on file segments based on file chunks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/60Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
    • G06F7/72Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Quality & Reliability (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

Prozessorbasiertes Verfahren zum Erzeugen mehrerer Chunks in einem maschinenlesbaren Medium aus einer Sequenz von Werten in dem maschinenlesbaren Medium, wobei jeder Chunk einen Abschnitt der Sequenz von Werten zwischen zwei Unterbrechungspunkten darstellt, wobei das Verfahren folgende Schritte umfasst:
Erhalten eines Fingerabdruckwerts für eine Position in der Sequenz von Werten in dem maschinenlesbaren Medium;
Bestimmen von Positionen in der Sequenz von Werten als Unterbrechungspunkte, wobei jeder Unterbrechungspunkt der Anfang oder das Ende eines Chunks in dem maschinenlesbaren Medium ist und das Bestimmen einer Position als Unterbrechungspunkt folgende Schritte umfasst:
(a) falls der Abstand zwischen dem vorhergehenden Unterbrechungspunkt und einer aktuellen Position größer ist als eine minimale Chunkgröße (9) und falls eine D2-Übereinstimmung vorliegt (11), Bestimmen (13) der aktuellen Position als Backup-Unterbrechungspunkt,
(b) Bestimmen (17), ob eine D1-Übereinstimmung vorliegt,
(c) falls eine D1-Übereinstimmung vorliegt, Bestimmen (31) der aktuellen Position als Unterbrechungspunkt und Löschen des Backup-Unterbrechungspunkts,...

Description

  • Die Offenbarung bezieht sich allgemein auf das gemeinschaftliche Verwenden und anderweitige Optimieren der Verwendung von Speicherungs- und Kommunikationsressourcen, insbesondere auf ein System und Verfahren zum gemeinschaftlichen Verwenden und anderweitigen Optimieren der Verwendung von Speicher- und Kommunikationsressourcen, wenn mehrere Dateien ähnlicher Art betroffen sind.
  • Da Firmen und Einzelpersonen zunehmend Computersysteme und Netzwerke verwenden und darauf angewiesen sind, wird der Bedarf nach effizienteren Systemen und schnelleren Netzwerken immer wichtiger. Folglich haben Computersysteme nun größere Speicher zum Speichern von Informationen (z. B. Datendateien und Anwendungsprogrammen) und Computernetzwerke haben größere Bandbreiten zum Übertragen von Informationen. Da sich die Menge an Informationen, die gespeichert und übertragen werden soll, weiter erhöht, kann die Effizienz und Geschwindigkeit der Computersysteme und Netzwerke durch effizienteres und schnelleres Speichern, Wiedergewinnen und Übertragen der Informationen weiter verbessert werden. Es wurden verschiedene Systeme und Verfahren entwickelt, um das effiziente und schnelle Verarbeiten der Informationen durchzuführen. Diese Systeme und Verfahren können zustandslose Chunkingalgorithmen verwenden, um eine verbesserte Effizienz und Geschwindigkeit zu erreichen.
  • Chunkingalgorithmen unterteilen eine lange Bytesequenz S in eine Sequenz von kleinen Blöcken oder Chunks (Stücken) c1, c2, ..., cn. Dies wird vorzugsweise auf solche Weise durchgeführt, dass die Chunksequenz unter der lokalen Modifika tion von S stabil ist. Stabilität unter lokaler Modifikation bedeutet, dass, wenn an S eine kleine Modifikation durchgeführt wird, die zu S' führt, und die Chunkingalgorithmen an S' angelegt werden, sind die meisten Chunks, die für S' erzeugt werden, identisch mit den Chunks für S. Der Begriff „zustandslos" in dem Namen des Algorithmus impliziert, dass sich der Algorithmus zum Durchführen seiner Aufgabe nur auf die Bytesequenz S als Eingabe verlässt und es ihm nicht erlaubt ist, andere transiente oder zustandsabhängige Informationen zu betrachten, die verfügbar sein könnten. Mit instabilen Chunkingalgorithmen verschieben selbst winzige Einfügungen oder Löschungen in der Mitte einer Sequenz alle Chunkgrenzen, die dem Modifikationspunkt folgen. Das Verschieben von Chunkgrenzen führt tendenziell zu unterschiedlichen Hash-Werten und führt folglich typischerweise zu der Speicherung und/oder Übertragung einer großen Menge an unveränderten Daten, einfach weil dieselben einer Einfügung oder Löschung folgen.
  • Ein Chunkingmehraufwand ist ein Maß der Datenmenge, die über die Daten kommuniziert und gespeichert werden muss, die tatsächlich in einer modifizierten Teilsequenz enthalten sind. Das Reduzieren von Chunkingmehraufwand erhöht die Effizienz der Vorrichtung, die den Chunkingalgorithmus verwendet, bezüglich der Verwendung von Kommunikations- und Speicherressourcen durch die Vorrichtung.
  • Der Bedarf an Chunkingalgorithmen, die unter lokaler Modifikation stabil sind, ergibt sich in zumindest zwei Kontexten: (1) Archivdateisysteme; und (2) Netzwerkdateisysteme mit geringer Bandbreite. Leider lassen bisher bekannte Chunkingverfahren und -vorrichtungen, die solche Verfahren umfassen, sowohl bezüglich Stabilität als auch Effizienz viel zu wünschen übrig. Als solches bezieht sich die vorliegende Offenbarung auf Verfahren und Vorrichtungen, die zusätzliche Stabilität und/oder Effizienz liefern können, insbesondere wenn sie in Archivnetzwerksystemen und Netzwerksystemen mit geringer Bandbreite ausgeführt sind.
  • Lawrence L. You, et al.: „Evaluation of Efficient Archival Storage Techniques", Proceedings of the 21st IEEE/12th NASA Goddard Conference an Mass Storage Systems and Technologies, April 2004, Seiten 1–6, beschreibt das Unterteilen von Datenchunks, wobei Chunkgrenzen durch Berechnen einer digitalen Signatur über ein Gleitfenster fester Länge definiert werden. Die Grenzen werden dort eingestellt, wo der Restwert einer Division der digitalen Signatur durch eine Ganzzahl null beträgt.
  • Die US 5,990,810 A beschreibt ein Verfahren zur Partitionierung eines Datenblocks in Unterblöcke, wobei abhängig von einer erwünschten Organisation Unterblöcke unterschiedlicher Größe erzeugt werden.
  • Es ist die Aufgabe der vorliegenden Erfindung, ein Verfahren zu schaffen, das eine Mehrzahl von Chunks aus einer Sequenz von Werten erzeugt, ohne eine maximal zulässige Chunkgröße zu überschreiten.
  • Diese Aufgabe wird durch ein Verfahren gemäß Anspruch 1 gelöst.
  • Die genaue Art dieser Erfindung sowie auch die Aufgaben und Vorteile derselben werden von der Betrachtung der folgenden Beschreibung in Verbindung mit den beiliegenden Zeichnungen ohne weiteres offensichtlich, bei denen gleiche Bezugszeichen gleiche Teile in den Figuren derselben bezeichnen.
  • Bevorzugte Ausführungsbeispiele der vorliegenden Erfindung werden nachfolgend Bezug nehmend auf beiliegende Zeichnungen näher erläutert. Es zeigen:
  • 1 ein Flussdiagramm, das ein Verfahren gemäß Ausführungsbeispielen der vorliegenden Erfindung darstellt;
  • 2 ein Codeabschnitt, der ein zweites Verfahren gemäß Ausführungsbeispielen der vorliegenden Erfindung darstellt;
  • 3 ein Schema einer ersten Vorrichtung gemäß Ausführungsbeispielen der vorliegenden Erfindung; und
  • 4 ein Schema einer zweiten Vorrichtung gemäß Ausführungsbeispielen der vorliegenden Erfindung.
  • Nachfolgend wird auf beispielhafte Ausführungsbeispiele der Erfindung Bezug genommen, wovon Beispiele in den beiliegenden Zeichnungen dargestellt sind. Obwohl die Erfindung in Verbindung mit einem oder mehreren Ausführungsbeispielen beschrieben wird, ist klar, dass diese Ausführungsbeispiele die Erfindung nicht begrenzen sollen. Im Gegenteil soll die Erfindung Alternativen, Modifikationen und Äquivalente abdecken, die in der Wesensart und dem Schutzbereich der Erfindung, wie sie durch die angehängten Ansprüche definiert sind, enthalten sind. In der folgenden detaillierten Beschreibung sind zahlreiche spezifische Einzelheiten beschrieben, um ein gründliches Verständnis der vorliegenden Erfindung zu liefern. Für einen Durchschnittsfachmann auf diesem Gebiet ist jedoch klar, dass die Erfindung auch ohne diese spezifischen Einzelheiten praktiziert werden kann. In anderen Fällen wurden gut bekannte Verfahren, Prozeduren und Komponenten nicht näher beschrieben, um die wichtigen Aspekte der vorliegenden Erfindung nicht unnötig zu behindern.
  • Um eine stabilere Unterteilung einer Sequenz, wie z. B. einer Datei, in Chunks zu liefern (d. h. eine, bei der sich für eine bestimmte Einfügung oder Löschung weniger Chunks ändern), kann bewirkt werden, dass Chunkgrenzen von den lokalen Inhalten der Datei abhängen anstatt von dem Abstand vom Anfang der Datei. Ein Verfahren, um dies durchzuführen, ist das Verwenden eines Gleitfensteralgorithmus, bei dem für jede Position in einer Datei ein Fingerabdruck für die Sequenz von Daten berechnet wird, die in ein Fenster fällt, das an der Position endet, und falls der Fingerabdruck ein bestimmtes Kriterium erfüllt, wird die Position als Ende eines Chunks (d. h. ein Unterbrechungspunkt) bezeichnet. Falls eine Datei beispielsweise 1000 Zeichenpositionen enthält und eine Fenstergröße von 50 verwendet wird, ist der Fingerabdruck der Position 1000 der Fingerabdruck der Sequenz, die and der Position 951 beginnt und bei 1000 endet, der Fingerabdruck der Position 999 ist der Fingerabdruck der Sequenz, die an der Position 950 beginnt und bei 999 endet, der Fingerabdruck der Position 998 ist der Fingerabdruck der Sequenz, die an der Position 949 beginnt und bei 998 endet, und der Fingerabdruck der anderen Positionen wird auf ähnliche Weise bestimmt. Wenn er bestimmt ist, wird der Fingerabdruck jeder Position durch eine vorbestimmte Ganzzahl D dividiert und der Rest mit einem vorbestimmten Wert r verglichen. Falls der Rest gleich r ist, wird die Position als ein Unterbrechungspunkt verwendet. Falls für eine bestimmte Position der Rest gleich r ist, gibt es an dieser Position eine „Fingerabdruckübereinstimmung".
  • Eine formellere Definition einer „Fingerabdruckübereinstimmung" ist: Bei einer Sequenz S = s1, s2, ..., sn, einer Hashfunktion h und einer Fensterlänge l gibt es eine Fingerabdruckübereinstimmung an einer Position k, falls für einen vorbestimmten r < D, h(W)modD = r, wobei W = sk – l + 1, sk – l + 2, ..., sk die Teilsequenz der Länge l ist, die der Position k in S vorausgeht. Ein „Gleitfensterchunkingverfahren", wie es hierin verwendet wird, ist ein Chunkingverfahren, das an jeder Position in einer Sequenz Unterbrechungspunkte setzt, an der es eine Fingerabdruckübereinstimmung gibt. Beim Berechnen des Fingerabdruckwerts für eine Position kann ein äußerst effizienter Fingerabdruckalgorithmus, wie z. B. „Rabins" Fingerabdruckalgorithmus verwendet werden, um die Effizienz des Chunkingverfahrens zu verbessern.
  • Es sollte offensichtlich sein, dass es ein Vorteil der Verwendung eines Gleitfensteralgorithmus zum Bestimmen von Chunkgrenzen anstatt Chunks fester Größe ist, dass außer den Chunks, in denen eine Modifikation auftritt, keine anderen durch die Änderung betroffen sind. Weitere Verbesserungen können erreicht werden durch Einstellen minimaler und maximaler Werte der Chunkgrößen und (a) Löschen aller Unterbrechungspunkte, die so nahe zu einem vorhergehenden Unterbrechungspunkt sind, dass sie einen Chunk von weniger als der minimalen Größe definieren, und (b) Einfügen von zumindest einem Unterbrechungspunkt zwischen jeweils zwei Unterbrechungspunkten, die einen Chunk definieren, der größer ist als die maximale Größe, um zumindest einen Chunk maximaler Größe, und einen Chunk, der weniger oder gleich der maximalen Größe ist, zu definieren.
  • Weitere Informationsverfahren und Vorrichtungen wie diejenigen, die vorher beschrieben wurden, können durch Bezugnahme auf die folgenden Referenzen gefunden werden, von denen jede hierin durch Bezugnahme in ihrer Gesamtheit aufgenommen ist: (1) Brin, J. Davis, and H. Garcia-Molina. Copy detection mechanism for digital documents. Department of Computer Science Report, Stanford University, Oktober 1994; (2) Udi Manber, Finding Similar Files in a Large File System, DEPARTMENT OF COMPUTER SCIENCE, University of Arizona TR 93–33 Oktober 1993; (3) US-Patent Nr. 5990810 Method for partitioning a block of data into subblocks and for storing and communicating such subblocks; (4) A. Muthiatacharoen, B. Chen, and D. Mazieres. A low-bandwidth network file system. In Proceedings of the 18th ACM Symposium an Operating-Systems Principles (SOSP '01), S. 174–187, Chateau Lake Louise, Banff, Canada, Oktober 2001); und (5) M. O. Rabin. Fingerprinting by Random Polynomials. Tech. Rep. TR-15-81, Center for Research in Computing Technology, Havard Univ., Cambridge, Mass., 1981.
  • Ein besseres Verfahren zum Unterteilen einer Sequenz in Chunks, d. h. kleinere Sequenzen, umfasst das Folgende. Man kann mit vordefinierten Prozeduren D1Match(F) und D2Match(F) und drei vorbestimmten Ganzzahlen W, M1 und M2 beginnen. D1Match ist eine deterministische Prozedur, die, wenn sie in eine Ganzzahl F angelegt wird, „wahr" oder „falsch" zurückgibt. Ein mögliches Ausführungsbeispiel von D1Match ist das Berechnen des Rests des Dividierens von F durch die vordefinierte Ganzzahl D1 und Zurücksenden von wahr, falls der Rest gleich einer vorbestimmten Ganzzahl R1 ist, und ansonsten falsch. D2Match ist ebenfalls eine deterministische Prozedur, die wenn sie an die Ganzzahl F angelegt wird, „wahr" oder „falsch" zurückgibt. Ein mögliches Ausführungsbeispiel von D2Match ist das Berechnen des Rests des Dividierens von F durch die vorbestimmte Ganzzahl D2 und Zurücksenden von wahr falls der Rest gleich einer vordefinierten Ganzzahl R2 ist, und ansonsten falsch. W ist eine Fenstergröße, die die Größe der Dateisequenz bestimmt, die für jede Position mit einem Fingerabdruck versehen werden soll, wie es für einen Gleitfensterchunkingalgorithmus durchgeführt wird, wie es oben beschrieben wurde. Wenn F zufällig gewählt wird, ist vorzugsweise die Wahrscheinlichkeit dass D2Match(F) wahr zurückgibt, höher als diejenige, dass D1Match wahr zurückgibt. M1 und M2 sind jeweils maximale und minimale Chunkgrößen.
  • Wenn bm der m-te Unterbrechungspunkt ist (oder der Beginn der Sequenz, falls bm+1 der erste Unterbrechungspunkt in der Sequenz ist), wird bm+1 durch Durchführen der folgenden Schritte bestimmt. Falls bm+M2 größer oder gleich der Position am Ende der Sequenz ist, ist das Ende erreicht. Andernfalls wird das Abtasten der Sequenz an einer Position bm+M2 begonnen, und an jeder Position k wird ein Fingerabdruckwert f der Teilsequenz zwischen den Positionen k – W und k berechnet. D1Match(f) wird berechnet und falls es wahr zurückgibt, sagt man dass es eine „D1-Übereinstimmung (Match)" bei k gibt. D2Match(f) wird auch berechnet, und falls es wahr zurückgibt, sagt man, dass es eine „D2-Übereinstimmung" bei k gibt. Das Abtasten wird fortgesetzt, bis eine D1-Übereinstimmung gefunden wird oder bis die Position bm+M1 erreicht wird, je nachdem, was zuerst auftritt. Falls eine D1-Übereinstimmung gefunden wird, bevor der Schwellenwert M1 erreicht wird, dann wird diese Position als Unterbrechungspunkt bm+i bestimmt. Falls keine D1-Übereinstimmung gefunden wird, bevor der Schwellenwert M1 erreicht wird, aber zumindest eine D2-Übereinstimmung gefunden wurde, wird die Position, die zu der letzten D2-Übereinstimmung führt, als Unterbrechungspunkt bm+1 bezeichnet. Falls keine D1-Übereinstimmung oder D2-Übereinstimmung gefunden wird, wird die Position von bm+M1 als Unterbrechungspunkt bm+1 bestimmt.
  • Diese Schritte können dann wiederholt werden bis das Ende der Sequenz erreicht ist, oder bis das Ende des Intervalls erreicht ist, das aktuell dividiert wird. Es sollte angemerkt werden, dass das Verfahren vorteilhafterweise an Sequenzen von Ganzzahlen angelegt wird, aber auch an andere Sequenzen angelegt werden kann. Es sollte auch angemerkt werden, dass das Verfahren in Betracht zieht, zu bestimmen, ob der Fingerabdruckwert einen ersten Satz von Kriterien erfüllt, d. h. ob er eine D1-Übereinstimmung ist, und einen zweiten Satz von Kriterien, d. h. ob er eine D2-Übereinstimmung ist. Das Verfahren könnte modifiziert werden, um unterschiedliche Sätze von Kriterien zu verwenden, unter Verwendung der gleichen Sätze von Kriterien mit unterschiedlichen Teiler- und Rest-Werten und/oder unter Verwendung zusätzlicher Kriteriensätze zum Liefern zusätzlicher Sicherungsunterbrechungspunkte, die zu verwenden sind, falls weder eine D1-Übereinstimmung oder eine D2-Übereinstimmung auftritt.
  • Bei dem beschriebenen Verfahren wird das Erhalten eines Fingerabdruckwerts für die. Mitglieder der Sequenz, die aktuell in dem Fenster ist, vorzugsweise unter Verwendung des Rabinfingerabdruckalgorithmus durchgeführt. Da dieser Algorithmus in der Technik gut bekannt ist, wird er hierin nicht näher beschrieben. Alternativ können andere Hashing/Fingerabdruck-Algorithmen verwendet werden.
  • Ein detaillierteres Ausführungsbeispiel des bevorzugten Chunkingverfahrens ist in 1 als Verfahren 1 gezeigt. Das Verfahren wird verwendet, um ein Array B von Unterbrechungspunkten zu erzeugen, die S in Chunks unterteilen. In 1, Block 3, werden verschiedene Initialisierungen durchgeführt, und die Variable position wird auf die Größe des Fingerabdruckfensters W gesetzt, die Variable lastBreak wird gleich 0 gesetzt, was anzeigt, dass bisher kein Unterbrechungspunkt gefunden wurde, das Array von Unterbrechungspunkten B wird als ein leeres Array eingestellt, und f wird gleich dem Fingerabdruckwert der Sequenz von Ganzzahlen S gesetzt, die unterteilt wird, die am Anfang des Fensters beginnt (position – windowSize) und einem Ende des Fensters endet (position). In dem Entscheidungsfeld 7 wird eine Prüfung durchgeführt, um zu sehen, ob das Ende der Sequenz bisher erreicht wurde, und falls dies der Fall ist, ist das Chunking der Sequenz S abgeschlossen. Falls nicht, wird das Chunking der Sequenz S fortgesetzt. Die Prüfung wird durchgeführt durch Bestimmen, ob der aktuelle Wert von „position" geringer ist als die Länge von S. Falls dies der Fall ist, wurde das Ende von S noch nicht erreicht, und das Verarbeiten schreitet zu dem Entscheidungsfeld 9 fort.
  • In dem Entscheidungsfeld 9 wird eine Prüfung durchgeführt, um zu bestimmen, ob das Bestimmen der aktuellen Position als Unterbrechungspunkt zu einem Chunk führen würde, der kleiner ist als die minimale Chunkgröße. Falls dies der Fall ist, wird das Fenster bewegt und der Fingerabdruckwert wird aktualisiert, wie es in Feld 27 gezeigt ist. Falls nicht, wird der Fingerabdruckwert bewertet. Die Prüfung wird durchgeführt durch Vergleichen der Differenz zwischen position und lastBreak mit dem Wert Tmin (bei dem vorhergehenden Beispiel M2).
  • In dem Entscheidungsfeld 11 wird der Fingerabdruckwert f bewertet durch Vergleichen des Rests, der sich durch Dividieren von f durch D2 ergibt, mit r2. Wie bei der anfänglichen Erörterung des Verfahrens ist D2 ein Sicherungsdivisorwert und r2 ist ein Sicherungsrestwert. Falls der Rest gleich r2 ist, wird die aktuelle Position in Feld 13 als Sicherungsunterbrechungspunktposition bestimmt, durch Einstellen von backupBreak gleich position. Falls der Rest nicht gleich r2 ist, springt das Verfahren zu Punkt 15 und umgeht das Feld 13.
  • In dem Entscheidungsfeld 17 wird der Fingerabdruckwert f bewertet durch Vergleichen des Rests, der sich durch Dividieren von f durch D1 ergibt, mit r1. Wie bei der anfänglichen Erörterung des Verfahrens ist D1 ein Hauptdivisorwert und r1 ist ein Hauptrestwert. Falls der Rest gleich r1 ist, wird die aktuelle Position in Feld 31 als Unterbrechungspunkt bestimmt, durch Hinzufügen desselben zu dem Ende des Arrays B, die letzte Position des letzten Unterbrechungspunkts wird zu der aktuellen Position aktualisiert, durch Setzen von lastBreak gleich position und alle Sicherungsunterbrechungspositionen werden durch Setzen von backupBreak auf 0 hinausgeworfen. Danach wird das Fenster bewegt und der Fingerabdruckwert aktualisiert, wie es in Feld 27 ge zeigt ist. Falls der Rest nicht gleich r1 ist, fährt das Verfahren mit dem Entscheidungsfeld 19 fort.
  • An dem Entscheidungsfeld 19 wird eine Prüfung durchgeführt, um zu bestimmen, ob das Einstellen eines Unterbrechungspunkts in der aktuellen Position zu einem Chunk gleich der maximalen Chunkgröße führen würde. Falls nicht, wird das Fenster bewegt und der Fingerabdruckwert aktualisiert, wie es in 27 gezeigt ist. Falls dies der Fall ist, dann wird entweder ein Sicherungsunterbrechungspunkt oder die aktuelle Position als Unterbrechungspunkt bestimmt, um zu verhindern, dass die Chunkgröße größer ist als die maximal erlaubte Größe, wobei das Verfahren zu dem Entscheidungsfeld 21 fortschreitet. Die Prüfung des Felds 19 wird durchgeführt durch Vergleichen des Unterschieds zwischen position und lastBreak mit Tmax, der maximalen Chunkgröße (bei dem vorhergehenden Beispiel M1).
  • Das Feld 21 wird erreicht, falls das Gleiten des Fensters potenziell zu einer Chunkgröße führen würde, die die maximale Chunkgröße überschreitet. In dem Feld 21 wird eine Prüfung durchgeführt (durch Vergleichen von backupBreak mit 0) um zu bestimmen, ob ein Sicherungsunterbrechungspunkt gefunden wurde. Falls dies der Fall ist, wird dieser Sicherungsunterbrechungspunkt (wie es in Feld 23 gezeigt ist) als ein Unterbrechungspunkt bestimmt, durch Hinzufügen desselben an das Ende des Arrays B, die letzte Unterbrechungspunktposition wird auf die Sicherungsunterbrechungspunktposition gesetzt, durch Setzen von lastBreak gleich backupBreak, und die Sicherungsunterbrechungspunktposition wird gelöscht durch Setzen von backupBreak auf 0. Nachfolgend wird das Fenster bewegt und der Fingerabdruckwert aktualisiert, wie es in Feld 27 gezeigt ist.
  • Falls die Prüfung in Feld 21 bestimmt, dass kein Sicherungsunterbrechungspunkt gefunden wurde, wird die aktuelle Position als Unterbrechungspunkt bestimmt, wie es in Feld 29 gezeigt ist, um einen Chunk maximaler Größe zu erzeugen.
  • Dies wird durchgeführt durch Hinzufügen der aktuellen Position an das Ende des Arrays B und Setzen von lastBreak gleich position. Nachfolgend wird das Fenster bewegt und der Fingerabdruckwert aktualisiert, wie es in Feld 27 gezeigt ist.
  • In Feld 21 wird die aktuelle Position geändert zu der nächsten Position in der Sequenz, die dividiert wird, und der Fingerabdruckwert f wird aktualisiert.
  • 2 liefert ein Pseudo-C-Codeabschnitt ein weiteres Ausführungsbeispiel der vorliegenden Erfindung. Es sollte angemerkt werden, dass der Code von 2 vollständig genug ist, um als ein Beispiel zu dienen, aber in seiner aktuellen Form nicht notwendigerweise für Kompilierung geeignet ist. In 2 entsprechen eine Anzahl von Variablen denjenigen, die in Bezug auf 1 beschrieben sind. Ausnahmen sind die Verwendung von „D" und „Ddash" statt „D1" und „D2", „D-1" statt „r1" und „Ddash-1" statt „r2" und „hash" statt „f". Derselbe umfasst auch die Funktion „addBreakpoint" um den Schritt des Hinzufügens eines Unterbrechungspunkts zu dem Array von Unterbrechungspunkten darzustellen.
  • Einige Ausführungsbeispiele der vorliegenden Erfindung umfassen zusätzlich zu den vorher beschriebenen Verfahren auch zumindest Sequenzen die unter Verwendung solcher Verfahren in Chunks unterteilt werden, Vorrichtungen, die solche Verfahren speichern und/oder ausführen, und Vorrichtungen, die Sequenzen speichern und/oder übertragen, die unter Verwendung solcher Verfahren in Chunks unterteilt werden.
  • Als solches kann eine CD, DVD oder andere Speichervorrichtung verwendet werden, um einen Satz von Befehlen zu speichern, die eines oder mehrere der hierin beschriebenen Verfahren implementieren, und/oder kann verwendet werden, um eine Liste zu speichern, die unter Verwendung von einem oder mehreren der hierin beschriebenen Verfahren in Chunks unterteilt wurde. In Betracht gezogene Speichervorrichtun gen umfassen, sind aber nicht notwendigerweise beschränkt auf, einen flüchtigen Halbleiterspeicher, einen nicht-flüchtigen Halbleiterspeicher, eine optische Scheibe, eine magnetische Scheibe, eine magnetooptische Scheibe, RAM, PROM, EPROM, Magnetband, eine oder mehrere elektronische Schaltungen und/oder eine RAID-, DAS-, NAS- oder SAN-Vorrichtung. In einigen Fällen kann die Speichervorrichtung in einem größeren System enthalten sein, während sie in anderen alleine steht.
  • Als ein Beispiel ist in 3 eine Vorrichtung 31 ein Computer 32, der einen Prozessor 33, einen Speicher 34 und ein maschinenlesbares Medium 35 umfasst, das eine Sequenz 37 von Werten enthält, die dividiert werden sollen und einen Satz 39 von Befehlen, die, wenn sie durch den Prozessor ausgeführt werden, bewirken, dass der Prozessor Operationen zum Dividieren der Sequenz von Werten 37 in eine Mehrzahl von Chunks auf die vorher beschriebene Weise durchführt. 4 liefert ein weiteres Beispiel, bei dem eine Vorrichtung 41 ein maschinenlesbares Medium 45 liefert, das eine DVD-Platte ist, die einen Satz von Befehlen 47 enthält, die, wenn sie durch eine Maschine ausgeführt wird, bewirken, dass die Maschine Operationen zum Dividieren einer Sequenz von Werten in eine Mehrzahl von Chunks durchführt, wie es vorher beschrieben wurde.
  • Falls eine Vorrichtung, die die Erfindung ausführt, einen Satz von Befehlen umfasst, der eines oder mehrere der hierin beschriebenen Verfahren implementiert, kann der Satz von Befehlen jede übliche Form haben. Als solches kann der Satz zumindest als Text gespeichert sein, in der Syntax einer Computerprogrammiersprache ähnlich zu der Form, die in 2 gezeigt ist, kann als Objektcode in einem kompilierten aber nicht verbundenen Format gespeichert sein, kann in einem ausführbaren Format gespeichert sein, kann verschlüsselt und/oder kann komprimiert sein. Falls er in „Text"-Form gespeichert ist, kann dies unter anderem sein als: C, C++, C#, PASCAL, BASIC, COBOL, FORTRAN, RPG, LISP, JAVA, HTML, XML, SQL, Perl, ADA, Beta, Cecil, Eiffel, Elf, Erlang, Forth, Gentle, Haskell, Hope, lambda, Lygon, Mercury, Modula, Napier, Nestl, Obliq, Occam, Oz, Piet, Pilot, Pizza, Promethius, Python, Saser, Scheme, Sisl, Theta, Postscript, oder ein Assembliersprachen-„Programm” oder ein Satz von Programmen. Darüber hinaus kann der Befehlssatz in einer Bibliothek enthalten sein oder kann in einer oder mehreren getrennten Dateien gespeichert sein.
  • Falls eine Vorrichtung, die die vorliegende Erfindung ausführt, eine Sequenz umfasst, die unter Verwendung von einem oder mehreren der hierin beschriebenen Verfahren in Chunks unterteilt wird, kann die in Chunks unterteilte Sequenz jede übliche Form haben. Als solche können die Unterbrechungspunkte, die erzeugt werden, in einigen Fällen zu einem integralen Bestandteil der Sequenz gemacht werden, in anderen können sie getrennt gespeichert werden, möglicherweise als ein Array, eine Liste und/oder Sequenz. In einigen Fällen kann es sein, dass die Unterbrechungspunkte nicht ausdrücklich erzeugt werden, aber dass ein anderer Mechanismus verwendet wird, um die Sequenz zu teilen, wie z. B. durch Speichern der Chunks selbst in einem Array, einer Liste oder in einer anderen Form.
  • Falls die Vorrichtung angepasst ist, um die Sequenz zu speichern, kann dieselbe angepasst sein, um die Hashwerte der in Chunks unterteilten Sequenz mit Hashwerten vorher gespeicherter Chunks zu vergleichen, um zu bestimmen, welche, oder ob überhaupt einer der Chunks gespeichert werden soll. Falls die Vorrichtung angepasst ist, um die geteilte Sequenz zu übertragen, kann sie dies durchführen indem sie zunächst die Hashwerte für die Chunks zu einer Empfangsvorrichtung überträgt und nur Chunks überträgt, die nicht bereits auf der Empfangsvorrichtung gespeichert sind. Die Bestimmung, ob bestimmte Chunks auf der Empfangsvorrichtung sind, kann entweder durch das Sende- oder das Empfangssystem durchgeführt werden. Falls es durch das Empfangssystem durchgeführt wird, kann die Übertragung einer Sequenz das Übertragen der Hashwerte der Sequenz umfassen und dann das Antworten auf Anfragen von dem Empfangssystem nach einem Chunk, den es noch nicht hat.
  • Falls dieselbe Teil einer Vorrichtung ist, kann die Vorrichtung die minimalen Elemente umfassen, um den Befehlssatz und/oder die in Chunks unterteilte Sequenz zu speichern, auszuführen und/oder zu übertragen. Es wird in Betracht gezogen, dass die Vorrichtung bei vielen Ausführungsbeispielen ein Computer ist, der ein DOS-, CPM-, UNIX-, WINDOWS-, PalmOS- oder Macintoshfamilien-Betriebssystem ausführt. Bei anderen Ausführungsbeispielen können andere Betriebssysteme verwendet werden und/oder ein Spezialbetriebssystem/Anwendung kann verwendet werden, wie z. B. eine, die für Großrechner, Roboter, Herstellung und/oder als Echtzeitsteuersystem spezialisiert ist.
  • In einigen Fällen kann die Vorrichtung ein gefertigtes Produkt sein, um eine Kopie des Befehlssatzes oder eine Kopie einer in Chunks unterteilten Liste an einen Käufer zu liefern. In einigen Fällen ist das Produkt eine Datei oder ein Satz von Dateien, die elektronisch zu einer Empfangsvorrichtung übertragen werden können, während es in anderen eine CD oder DVD sein kann, wie es vorher erörtert wurde.
  • Es ist wichtig, anzumerken, dass die Verfahren von 1 und 2 nur beispielhafte Ausführungsbeispiele sind. Als solches können alternative Ausführungsbeispiele zusätzliche oder weniger Schritte umfassen und/oder Schritte in einer ähnlichen oder anderen Reihenfolge durchführen. Als ein Beispiel kann bei einigen Ausführungsbeispielen das Bewerten des Fingerabdruckwerts, um zu bestimmen, ob eine D2-Übereinstimmung aufgetreten ist, nur durchgeführt werden, falls eine vorherige Bewertung zeigt, dass keine D1-Übereinstimmung aufgetreten ist. Obwohl die beschriebenen Verfahren vom Anfang einer Sequenz (oder Teilsequenz) zu dem Ende abtasten, können als ein weiteres Beispiel alternative Verfahren von dem Ende zum Anfang abtasten oder Un terbrechungspunkte auf eine andere Weise finden. Gleichartig dazu kann die aktuelle Zuweisung von Unterbrechungspunkten in der Reihenfolge, in der sie an der Sequenz erscheinen, durchgeführt werden, kann basierend auf einem Typ (d. h. zuerst D1-Übereinstimmungen, dann D2-Übereinstimmungen, usw.) durchgeführt werden, oder auf eine andere Weise durchgeführt werden.
  • Wie er hierin verwendet wird, wird der Begriff „erhalten" breit verwendet und umfasst zumindest das Empfangen des Objekts, das von einer internen oder externen Quelle erhalten wurde, das Durchführen von Schritten, die das Objekt erzeugen und/oder falls es ein Wert ist, Durchführen von Berechnungen, die den Wert erzeugen und/oder den Wert berechnen. Der Begriff „angepasst zum" wird auch breit verwendet, um anzuzeigen, dass das angepasste Objekt zumindest eine Charakteristik aufweist, die das Durchführen der identifizierten Funktion ermöglicht. Einige beispielhafte Adaptionen sind das angemessene Abmessen und Dimensionieren eines Objekts, Programmieren eines Objekts und Versehen eines Objekts mit geeigneten Schaltungen, Sensoren und Betätigungsvorrichtungen.
  • Die hierin beschriebenen Verfahren und Vorrichtungen sind geeignet für die Verwendung in Archivdateisystemen, die verwendet werden, um Datenblöcke zu speichern und die für jeden Datenblock einen Hash als Blockidentifizierer verwenden. Um ein hashbasiertes Speicherschema zum Speichern von Dateien zu verwenden, wird jede Datei unter Verwendung der hierin beschriebenen Chunkingalgorithmen in eine Anzahl von Blöcken unterteilt, und die Blöcke werden getrennt gespeichert.
  • Die hierin beschriebenen Verfahren und Vorrichtungen sind geeignet für die Verwendung beim Implementieren von Netzwerkdateisystemen mit geringer Bandbreite zum Minimieren der Informationsmenge, die zwischen einem Server und einem Client übertragen wird, falls der Empfänger (der Server o der der Client) bereits eine ähnliche Version der Informationen (z. B. Datei) hat, die übertragen werden soll. Beispielsweise kann es sein, dass der Server eine frühere Version einer Datei, die der Client auf dem Server speichern möchte. Die neue Datei könnte durch Wiedergewinnen und Bearbeiten einer bestehenden Datei erzeugt worden sein. Auf den Empfang der bestehenden Datei hin unterteilt der Server die bestehende Datei in Chunk, unter Verwendung eines Chunkingalgorithmus, wie er hierin beschrieben ist, und erzeugt einen Hash oder Identifizierer für jeden Chunk. Der Server behält eine Tabelle oder Auflistung der Hashs für alle Chunks bei, die in seinem Speicher gespeichert sind, mit einem Zeiger zu der Stelle, wo der Chunk selbst gespeichert ist. Falls nun der Client eine neuere Version der Datei auf dem Server speichern möchte, unterteilt der Client die neue Datei unter Verwendung des gleichen Chunkingalgorithmus in Chunks, erzeugt einen Hash für jeden Chunk und sendet die Hashs an den Server. Der Server schlägt die Hashs in seiner Tabelle nach und sendet dem Client eine Anforderung für die Chunks, deren Hashs nicht in der Tabelle gefunden werden. Der Client sendet dann diese fehlenden Chunks an den Server. Aufgrund der Stabilitätseigenschaft des Chunkingalgorithmus kann der Server die meisten Chunks haben, die zu der Datei des Client gehören. Der Server rekonstruiert die Datei unter Verwendung der Chunks, ohne Mehrdeutigkeit oder Fehler. Ein ähnliches Verfahren wird verwendet, um die Dateien von dem Server zu dem Client zu übertragen.
  • Die Ausführungsbeispiele der hierin beschriebenen vorliegenden Erfindung umfassen mehrere neuartige Merkmale, wobei jedes beschriebene Ausführungsbeispiel entweder ein einziges solches Merkmal oder eine Kombination solcher Merkmale umfasst. Andere in Betracht gezogene Ausführungsbeispiele umfassen alle Kombinationen von einem oder mehreren solchen neuartigen Merkmalen, die hierin nicht explizit beschrieben sind, da solche Kombinationen ohne weiteres von den beschriebenen Ausführungsbeispielen erkennbar sind. Im Hinblick auf die verschiedenen, in Betracht gezogenen Ausfüh rungsbeispiele kann die vorliegende Erfindung auf eine Vielzahl von Arten charakterisiert werden, wobei die folgenden Absätze Beispiele einiger solcher Charakterisierungen liefern.
  • Ein sinnvolles Ausführungsbeispiel der vorliegenden Erfindung ist ein Verfahren zum Unterteilen einer Sequenz von Werten in eine Mehrzahl von Chunks, wobei jeder Chunk eine kleinere Sequenz von Werten ist, das folgende Schritte umfasst: Erhalten eines Fingerabdruckwerts für eine Position in der Sequenz; Bestimmen, ob der Fingerabdruckwert eine D1-Übereinstimmung ist und zumindest falls er dies nicht ist, Bestimmen, ob der Fingerabdruckwert eine D2-Übereinstimmung ist; wobei ein Wert eine D1-Übereinstimmung ist, falls der Wert dividiert durch einen ersten Divisor D1 zu einem Rest mit einem Wert R1 führt; ein Wert ist eine D2-Übereinstimmung, falls der Wertdivisor durch einen zweiten Divisor D2 zu einem Rest mit einem Wert R2 führt; D1 nicht gleich D2 ist; und D1, D2, R1 und R2 vorbestimmte Werte haben.
  • In einigen Fällen können sinnvolle Ausführungsbeispiele das Erhalten eines Fingerabdruckwerts für eine Position in der Sequenz umfassen, durch Erhalten eines Hashwerts für eine Sequenz von Datenwerten, die in einem Fenster enthalten sind, das die Position enthält, für die der Fingerabdruckwert erhalten werden soll. Bei einigen solchen Fallen können Ausführungsbeispiele ferner das Dividieren der Sequenz von Werten umfassen, durch Bestimmen von Positionen innerhalb der Sequenz als Unterbrechungspunkte, wobei jeder Unterbrechungspunkt der Anfang oder das Ende eines Chunks ist, und eine Position als ein Unterbrechungspunkt bestimmt wird, falls zumindest eine der folgenden Unterbrechungspunktbedingungen wahr ist: Der Fingerabdruckwert an dieser Position ist eine D1-Übereinstimmung; der Fingerabdruckwert an dieser Position ist eine D2-Übereinstimmung, und der Abstand zwischen dem vorhergehenden Unterbrechungspunkt, falls es einen gibt, und jedem nachfolgenden D1- Übereinstimmungsunterbrechungspunkt ist größer als ein vorbestimmter maximaler Wert M1; und der Abstand zwischen dem vorhergehenden Unterbrechungspunkt, falls es einen gibt, und der aktuellen Position ist gleich dem maximalen Wert M1. Bei einigen solchen Fällen kann es sein, dass Ausführungsbeispiele eine Position nicht als Unterbrechungspunkt bestimmen, selbst wenn eine Unterbrechungspunktbedingung wahr ist, falls der Abstand zwischen der Position und jedem vorhergehenden Unterbrechungspunkt geringer ist als ein vorbestimmter minimaler Wert M2. In einigen Fällen können sinnvolle Ausführungsbeispiele das Unterteilen einer Sequenz von Werten in eine Mehrzahl von Chunks umfassen, wobei die letzte Position jedes Chunks ein Unterbrechungspunkt ist und/oder die letzte Position der Sequenz, die unterteilt wird. In einigen Fällen können sinnvolle Ausführungsbeispiele das Unterteilen einer Sequenz von Werten in eine Mehrzahl von Chunks umfassen, wobei die erste Position jedes Chunks ein Unterbrechungspunkt ist und/oder die erste Position in der Sequenz, die unterteilt wird.
  • In einigen Fällen können sinnvolle Ausführungsbeispiele das Bestimmen von Unterbrechungspunkten in der Sequenz umfassen, in der dieselben auftreten, durch Bestimmen von Fingerabdruckwerten, die an oder nahe dem Ende der Sequenz von Werten beginnen, und Fortschreiten durch das andere Ende der Sequenz von Werten. In einigen Fällen ist die Sequenz von Werten eine Sequenz von Ganzzahlwerten und D1, D2, R1 und R2 sind Ganzzahlen, D1 ist gerade, und D2 ist eine Hälfte von D1, oder D1 ist ungerade und D2 ist die nächste Ganzzahl größer oder kleiner als D1 geteilt durch 2.
  • In einigen Fällen können Verfahren durch einen Computer durchgeführt werden und/oder können auch das Bestimmen umfassen, zumindest ob der Fingerabdruckwert keine D1-Übereinstimmung oder eine D2-Übereinstimmung ist, ob der Fingerabdruckwert dividiert durch zumindest einen zusätzlichen Divisor DN zu einem Rest mit einem Wert von RN führt, wobei DN und RN vorbestimmte Werte haben, DN nicht gleich D1 oder D2 ist und RN DN entspricht.
  • In einigen Fällen können sinnvolle Ausführungsbeispiele eine Vorrichtung umfassen, die eine Mehrzahl von Befehlen zum Unterteilen einer Sequenz von Werten in eine Mehrzahl von Chunks umfasst, wobei jeder Chunk eine kleinere Sequenz von Werten ist, die folgende Schritte umfassen: Erhalten eines Fingerabdruckwerts für eine Position in der Sequenz; Bestimmen, ob der Fingerabdruckwert eine D1-Übereinstimmung ist und zumindest falls er dies nicht ist, Bestimmen, ob der Fingerabdruckwert eine D2-Übereinstimmung ist; wobei ein Wert eine D1-Übereinstimmung ist, falls der Wert dividiert durch einen ersten Divisor D1 zu einem Rest mit einem Wert R1 führt; ein Wert eine D2-Übereinstimmung ist, falls der Wert dividiert durch einen zweiten Divisor D2 zu einem Rest mit einem Wert R2 führt; D1 nicht gleich D2 ist; und D1, D2, R1 und R2 vorbestimmte Werte haben. In einigen solchen Fällen können Ausführungsbeispiele Befehle umfassen, die auch die Sequenz in eine Mehrzahl von benachbarten, nicht überlappenden Chunks unterteilen, wobei jeder Chunk an einer Position beginnt oder endet, die zumindest eine der folgenden Unterbrechungspunktbedingungen erfüllt: Der Fingerabdruckwert an dieser Position ist eine D1-Übereinstimmung; der Fingerabdruckwert an dieser Position ist eine D2-Übereinstimmung und der Abstand zwischen dem vorhergehenden Unterbrechungspunkt, falls es einen gibt, und jedem nachfolgenden D1-Übereinstimmungsunterbrechungspunkt ist größer als ein vorbestimmter maximaler Wert M1; und der Abstand zwischen dem vorhergehenden Unterbrechungspunkt, falls es einen gibt, und der aktuellen Position ist gleich dem maximalen Wert M1. In einigen Fällen können Ausführungsbeispiel angepasst werden, um den Satz von Befehlen elektronisch zu einer anderen Vorrichtung zu übertragen. In einigen Fällen können Ausführungsbeispiele zumindest eines der Folgenden umfassen: flüchtigen Halbleiterspeicher, nicht-flüchtigen Halbleiterspeicher, eine optische Scheibe, eine Magnetscheibe, eine magnetooptische Scheibe, RAM, PROM, EPROM, Magnetband, eine elektronische Schaltung und/oder eine RAID-, DAS- oder NAS- oder SAN-Vorrichtung sein. In einigen Fällen kann die Vorrichtung ein Computer sein.
  • In einigen Fällen können sinnvolle Ausführungsbeispiele eine Vorrichtung umfassen, die eine Sequenz von Werten umfasst, die in eine Mehrzahl von Chunks unterteilt ist, wobei jeder Chunk an einer Position beginnt oder endet, die zumindest eine der folgenden Unterbrechungsbedingungen erfüllt: Der Fingerabdruckwert an dieser Position ist eine D1-Übereinstimmung; der Fingerabdruckwert an dieser Position ist eine D2-Übereinstimmung und der Abstand zwischen dem vorhergehenden Unterbrechungspunkt, falls es einen gibt, und jedem nachfolgenden D1-Übereinstimmungsunterbrechungspunkt ist größer als ein vorbestimmter Maximalwert M1; und der Abstand zwischen dem vorhergehenden Unterbrechungspunkt, falls es einen gibt, und der aktuellen Position ist gleich dem maximalen Wert M1; wobei ein Wert eine D1-Übereinstimmung ist, falls der Wert dividiert durch einen ersten Divisor C1 zu einem Rest mit einem Wert R1 führt; ein Wert ist eine D2-Übereinstimmung falls der Wert dividiert durch einen zweiten Divisor D2 zu einem Rest mit einem Wert R2 führt; D1 nicht gleich D2 ist; und D1, D2, R1 und R2 vorbestimmte Werte haben. In einigen Fällen kann es sein, dass Ausführungsbeispiele einen Hashwert für jeden Chunk erhalten müssen oder angepasst sind, um dies zu tun, und angepasst sind, um die Hashwerte mit den Hashwerten vorher gespeicherter Chunks zu vergleichen, um zu bestimmen, welcher, falls überhaupt einer, der Chunks gespeichert werden soll. In einigen Fällen können Ausführungsbeispiele angepasst sein, um die unterteilte Sequenz zu übertragen, indem zuerst Hashwerte für die Chunks zu einer Empfangsvorrichtung übertragen werden, und indem nur Chunks übertragen werden, die nicht bereits auf der Empfangsvorrichtung gespeichert sind. Bei einigen solchen oder anderen Fällen kann es sein, dass Ausführungsbeispiele nur Chunks übertra gen, die durch die Empfangsvorrichtung angefordert werden, nachdem die Empfangsvorrichtung Hashwerte empfängt.

Claims (14)

  1. Prozessorbasiertes Verfahren zum Erzeugen mehrerer Chunks in einem maschinenlesbaren Medium aus einer Sequenz von Werten in dem maschinenlesbaren Medium, wobei jeder Chunk einen Abschnitt der Sequenz von Werten zwischen zwei Unterbrechungspunkten darstellt, wobei das Verfahren folgende Schritte umfasst: Erhalten eines Fingerabdruckwerts für eine Position in der Sequenz von Werten in dem maschinenlesbaren Medium; Bestimmen von Positionen in der Sequenz von Werten als Unterbrechungspunkte, wobei jeder Unterbrechungspunkt der Anfang oder das Ende eines Chunks in dem maschinenlesbaren Medium ist und das Bestimmen einer Position als Unterbrechungspunkt folgende Schritte umfasst: (a) falls der Abstand zwischen dem vorhergehenden Unterbrechungspunkt und einer aktuellen Position größer ist als eine minimale Chunkgröße (9) und falls eine D2-Übereinstimmung vorliegt (11), Bestimmen (13) der aktuellen Position als Backup-Unterbrechungspunkt, (b) Bestimmen (17), ob eine D1-Übereinstimmung vorliegt, (c) falls eine D1-Übereinstimmung vorliegt, Bestimmen (31) der aktuellen Position als Unterbrechungspunkt und Löschen des Backup-Unterbrechungspunkts, (d) falls keine D1-Übereinstimmung vorliegt und falls der Abstand zwischen dem vorhergehenden Unterbrechungspunkt und einer aktuellen Position größer ist als eine maximale Chunkgröße, (d.1) falls ein Backup-Unterbrechungspunkt vorliegt, Bestimmen (23) der dem Backup-Unterbrechungspunkt zugeordneten Position als Unterbrechungspunkt und Löschen des Backup-Unterbrechungspunkts, und (d.2) falls kein Backup-Unterbrechungspunkt vorliegt, Bestimmen (29) der aktuellen Position als Unterbrechungspunkt, wobei eine D1-Übereinstimmung vorliegt, falls eine Funktion D1Match „wahr" zurückgibt, wenn dieselbe an den Fingerabdruckwert angelegt wird; wobei eine D2-Übereinstimmung vorliegt, falls eine Funktion D2Match „wahr" zurückgibt, wenn dieselbe an den Fingerabdruckwert angelegt wird; wobei die Funktion D1Match „wahr" zurückgibt, falls der Fingerabdruckwert dividiert durch einen ersten Divisor D1 zu einem Rest mit einem Wert R1 führt; wobei die Funktion D2Match „wahr" zurückgibt, falls der Fingerabdruckwert dividiert durch einen zweiten Divisor D2 zu einem Rest mit einem Wert R2 führt; D1 nicht gleich D2 ist; D1, D2, R1 und R2 vorbestimmte Werte haben; und wobei die Wahrscheinlichkeit, dass D1Match „wahr" zurückgibt, kleiner ist als die Wahrscheinlichkeit, dass D2Match „wahr" zurückgibt.
  2. Verfahren gemäß Anspruch 1, bei dem das Erhalten eines Fingerabdruckwerts für eine Position in der Sequenz das Erhalten eines Hashwerts für eine Sequenz von Datenwerten umfasst, die in einem Fenster enthalten sind, das die Position enthält, für die der Fingerabdruckwert erhalten werden soll.
  3. Verfahren gemäß Anspruch 1 oder 2, bei dem die Position nicht als Unterbrechungspunkt bestimmt wird, selbst wenn zumindest eine der Unterbrechungsbedingungen wahr ist, falls der Abstand zwischen der Position und jedem vorhergehenden Unterbrechungspunkt geringer ist als eine minimale Chunkgröße.
  4. Verfahren gemäß Anspruch 3, bei dem die letzte Position jedes Chunks ein Unterbrechungspunkt oder die letzte Position in der Sequenz von Werten ist.
  5. Verfahren gemäß Anspruch 3, bei dem die erste Position jedes Chunks ein Unterbrechungspunkt oder die erste Position in der Sequenz von Werten ist.
  6. Verfahren gemäß einem der Ansprüche 3 bis 5, das ferner das Bestimmen von Unterbrechungspunkten in der Sequenz von Werten umfasst, durch Bestimmen von Fingerabdruckwerten, die an oder nahe einem Ende der Sequenz von Werten beginnen und durch das andere Ende der Sequenz von Werten laufen.
  7. Verfahren gemäß Anspruch 6, bei dem die Sequenz von Werten eine Sequenz von Ganzzahlwerten ist und D1, D2, R1 und R2 Ganzzahlen sind.
  8. Verfahren gemäß Anspruch 7, bei dem D1 gerade ist und D2 die Hälfte von D1 ist, oder D1 ungerade ist und D2 die nächste Ganzzahl größer oder kleiner als D1 geteilt durch 2 ist.
  9. Verfahren gemäß einem der Ansprüche 1 bis 8, bei dem das Verfahren durch einen Computer durchgeführt wird.
  10. Verfahren gemäß einem der Ansprüche 1 bis 9, das ferner das Bestimmen umfasst, zumindest ob der Fingerabdruckwert keine D1-Übereinstimmung oder eine D2-Übereinstimmung ist, ob der Fingerabdruckwert dividiert durch zumindest einen zusätzlichen Divisor D1 zu einem Rest mit einem Wert RN führt, wobei DN und RN vorbestimmte Werte haben, DN nicht gleich D1 oder D2 ist und RN DN entspricht.
  11. Verfahren gemäß einem der Ansprüche 1 bis 10, bei dem jedem Chunk ein Hashwert zugeordnet ist, wobei die Hashwerte mit den Hashwerten von vorher gespeicherten Chunks verglichen werden, um zu bestimmen welcher, falls einer, der Chunks gespeichert werden soll.
  12. Verfahren gemäß Anspruch 11, bei dem die unterteilte Sequenz übertragen wird, indem zuerst Hashwerte für die Chunks an eine Empfangsvorrichtung übertragen werden, und nur Chunks übertragen werden, die nicht bereits auf der Empfangsvorrichtung gespeichert sind.
  13. Computerlesbares Medium mit Befehlen zum Ausführen eines Verfahrens nach einem der Ansprüche 1 bis 12, wenn die Befehle durch einen Computer ausgeführt werden.
  14. Computerlesbares Medium gemäß Anspruch 13, das eines der Folgenden umfasst: einen flüchtigen Halbleiterspeicher, einen nicht-flüchtigen Halbleiterspeicher, eine optische Scheibe, eine magnetische Scheibe, eine magnetooptische Scheibe, RAM, PROM, EPROM, Magnetband, eine elektronische Schaltung und/oder eine RAID-, DAS, NAS- oder SAN-Vorrichtung.
DE102005023128A 2004-06-17 2005-05-19 System und Verfahren zum gemeinschaftlichen Verwenden von Speicherressourcen zwischen mehreren Dateien Active DE102005023128B4 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/870,783 US7269689B2 (en) 2004-06-17 2004-06-17 System and method for sharing storage resources between multiple files
US10/870,783 2004-06-17

Publications (2)

Publication Number Publication Date
DE102005023128A1 DE102005023128A1 (de) 2006-01-12
DE102005023128B4 true DE102005023128B4 (de) 2009-03-05

Family

ID=34839072

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102005023128A Active DE102005023128B4 (de) 2004-06-17 2005-05-19 System und Verfahren zum gemeinschaftlichen Verwenden von Speicherressourcen zwischen mehreren Dateien

Country Status (4)

Country Link
US (1) US7269689B2 (de)
JP (1) JP4238233B2 (de)
DE (1) DE102005023128B4 (de)
GB (1) GB2415523B (de)

Families Citing this family (46)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7126945B2 (en) * 2001-11-07 2006-10-24 Symbol Technologies, Inc. Power saving function for wireless LANS: methods, system and program products
US6667700B1 (en) * 2002-10-30 2003-12-23 Nbt Technology, Inc. Content-based segmentation scheme for data compression in storage and transmission including hierarchical segment representation
US8176186B2 (en) 2002-10-30 2012-05-08 Riverbed Technology, Inc. Transaction accelerator for client-server communications systems
US7949824B2 (en) * 2006-04-11 2011-05-24 Emc Corporation Efficient data storage using two level delta resemblance
US7844652B2 (en) 2006-04-11 2010-11-30 Emc Corporation Efficient computation of sketches
US8190742B2 (en) * 2006-04-25 2012-05-29 Hewlett-Packard Development Company, L.P. Distributed differential store with non-distributed objects and compression-enhancing data-object routing
JP5204099B2 (ja) 2006-05-05 2013-06-05 ハイバー インコーポレイテッド グループ・ベースの完全および増分コンピュータ・ファイル・バックアップ・システム、処理および装置
US8214517B2 (en) * 2006-12-01 2012-07-03 Nec Laboratories America, Inc. Methods and systems for quick and efficient data management and/or processing
US7844581B2 (en) * 2006-12-01 2010-11-30 Nec Laboratories America, Inc. Methods and systems for data management using multiple selection criteria
US7733910B2 (en) * 2006-12-29 2010-06-08 Riverbed Technology, Inc. Data segmentation using shift-varying predicate function fingerprinting
WO2009054828A1 (en) * 2007-10-25 2009-04-30 Hewlett-Packard Development Company, L.P. Data processing apparatus and method of processing data
US8140637B2 (en) 2007-10-25 2012-03-20 Hewlett-Packard Development Company, L.P. Communicating chunks between devices
US8099573B2 (en) * 2007-10-25 2012-01-17 Hewlett-Packard Development Company, L.P. Data processing apparatus and method of processing data
WO2009054827A1 (en) * 2007-10-25 2009-04-30 Hewlett-Packard Development Company, L.P. Data processing apparatus and method of processing data
US8782368B2 (en) * 2007-10-25 2014-07-15 Hewlett-Packard Development Company, L.P. Storing chunks in containers
US8150851B2 (en) * 2007-10-25 2012-04-03 Hewlett-Packard Development Company, L.P. Data processing apparatus and method of processing data
US8332404B2 (en) * 2007-10-25 2012-12-11 Hewlett-Packard Development Company, L.P. Data processing apparatus and method of processing data
DE112007003645B4 (de) * 2007-10-25 2011-06-16 Hewlett-Packard Development Co., L.P., Houston Datenverarbeitungsvorrichtung und Verfahren zur Datenverarbeitung
EP2075796A1 (de) * 2007-12-27 2009-07-01 Thomson Licensing Verfahren und Vorrichtungen zur Verwaltung von Lesen, Schreiben und Abschneiden eines Dateisystems
US8200969B2 (en) * 2008-01-31 2012-06-12 Hewlett-Packard Development Company, L.P. Data verification by challenge
US9766983B2 (en) 2008-03-05 2017-09-19 Ca, Inc. Proximity and in-memory map based signature searching for duplicate data
US8959089B2 (en) * 2008-04-25 2015-02-17 Hewlett-Packard Development Company, L.P. Data processing apparatus and method of processing data
US8117343B2 (en) * 2008-10-28 2012-02-14 Hewlett-Packard Development Company, L.P. Landmark chunking of landmarkless regions
US8375182B2 (en) * 2009-02-10 2013-02-12 Hewlett-Packard Development Company, L.P. System and method for segmenting a data stream
US8001273B2 (en) * 2009-03-16 2011-08-16 Hewlett-Packard Development Company, L.P. Parallel processing of input data to locate landmarks for chunks
US8489612B2 (en) * 2009-03-24 2013-07-16 Hewlett-Packard Development Company, L.P. Identifying similar files in an environment having multiple client computers
US7979491B2 (en) * 2009-03-27 2011-07-12 Hewlett-Packard Development Company, L.P. Producing chunks from input data using a plurality of processing elements
US20100281077A1 (en) * 2009-04-30 2010-11-04 Mark David Lillibridge Batching requests for accessing differential data stores
US9141621B2 (en) * 2009-04-30 2015-09-22 Hewlett-Packard Development Company, L.P. Copying a differential data store into temporary storage media in response to a request
US8412848B2 (en) * 2009-05-29 2013-04-02 Exagrid Systems, Inc. Method and apparatus for content-aware and adaptive deduplication
JP4960417B2 (ja) * 2009-09-15 2012-06-27 株式会社東芝 可変長のデータ断片の開始・終了オフセットを決定する方法及び装置
JP4852135B2 (ja) * 2009-09-30 2012-01-11 株式会社東芝 データ分割方法及び装置
US8660994B2 (en) * 2010-01-28 2014-02-25 Hewlett-Packard Development Company, L.P. Selective data deduplication
US8499131B2 (en) 2010-04-13 2013-07-30 Hewlett-Packard Development Company, L.P. Capping a number of locations referred to by chunk references
US8909657B2 (en) * 2011-01-14 2014-12-09 Apple Inc. Content based file chunking
JP2014514618A (ja) * 2011-04-11 2014-06-19 株式会社日立製作所 データ管理方法及びデータ管理システム
US8904128B2 (en) 2011-06-08 2014-12-02 Hewlett-Packard Development Company, L.P. Processing a request to restore deduplicated data
US8918375B2 (en) * 2011-08-31 2014-12-23 Microsoft Corporation Content aware chunking for achieving an improved chunk size distribution
CN104067239B (zh) 2012-02-02 2017-05-10 慧与发展有限责任合伙企业 用于数据组块去复制的系统和方法
CN104246720B (zh) * 2012-05-01 2016-12-28 惠普发展公司,有限责任合伙企业 确定用于去重复的段边界
WO2014185916A1 (en) 2013-05-16 2014-11-20 Hewlett-Packard Development Company, L.P. Selecting a store for deduplicated data
US10592347B2 (en) 2013-05-16 2020-03-17 Hewlett Packard Enterprise Development Lp Selecting a store for deduplicated data
RU2626334C2 (ru) 2013-08-19 2017-07-26 Хуавей Текнолоджиз Ко., Лтд. Способ и устройство обработки объекта данных
US9367562B2 (en) * 2013-12-05 2016-06-14 Google Inc. Distributing data on distributed storage systems
US10146752B2 (en) 2014-12-31 2018-12-04 Quantum Metric, LLC Accurate and efficient recording of user experience, GUI changes and user interaction events on a remote web document
WO2017011829A1 (en) 2015-07-16 2017-01-19 Quantum Metric, LLC Document capture using client-based delta encoding with server

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5990810A (en) * 1995-02-17 1999-11-23 Williams; Ross Neil Method for partitioning a block of data into subblocks and for storing and communcating such subblocks

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2341249A (en) * 1998-08-17 2000-03-08 Connected Place Limited A method of generating a difference file defining differences between an updated file and a base file
US6667700B1 (en) * 2002-10-30 2003-12-23 Nbt Technology, Inc. Content-based segmentation scheme for data compression in storage and transmission including hierarchical segment representation
US7281006B2 (en) 2003-10-23 2007-10-09 International Business Machines Corporation System and method for dividing data into predominantly fixed-sized chunks so that duplicate data chunks may be identified

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5990810A (en) * 1995-02-17 1999-11-23 Williams; Ross Neil Method for partitioning a block of data into subblocks and for storing and communcating such subblocks

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Lawrence You et al.: Evaluation of efficient archi val storage techniques. In: Proceedings of the 21s t IEEE/12th NASA Goddard Conference on Mass Storag e Systems and Technologies, April 2004, S. 1-6
Lawrence You et al.: Evaluation of efficient archival storage techniques. In: Proceedings of the 21st IEEE/12th NASA Goddard Conference on Mass Storage Systems and Technologies, April 2004, S. 1-6 *

Also Published As

Publication number Publication date
GB2415523B (en) 2008-10-29
JP2006031686A (ja) 2006-02-02
US7269689B2 (en) 2007-09-11
GB0511574D0 (en) 2005-07-13
GB2415523A (en) 2005-12-28
US20050283500A1 (en) 2005-12-22
JP4238233B2 (ja) 2009-03-18
DE102005023128A1 (de) 2006-01-12

Similar Documents

Publication Publication Date Title
DE102005023128B4 (de) System und Verfahren zum gemeinschaftlichen Verwenden von Speicherressourcen zwischen mehreren Dateien
DE112007003678B4 (de) Datenverarbeitungsvorrichtung und Verfahren zur Datenverarbeitung
DE3788750T2 (de) Schätzeinrichtung des Indexschlüsselbereiches.
DE112008003826B4 (de) Datenverarbeitungsvorrichtung und Verfahren zur Datenverarbeitung
DE69031491T2 (de) Hypertextdatenverarbeitungssystem und Verfahren
DE3780807T2 (de) Verfahren zum schnellen oeffnen von mit pfadnamen identifizierten plattendateien.
DE69913618T2 (de) Verfahren zur Erzeugung eines Prüfpunktes, welcher eine Basisdatei beschreibt, und Verfahren zur Erzeugung einer Differenzdatei zwischen einer aktualisierten Datei und einer Basisdatei
DE3784190T2 (de) Eintragung eines datenbasisindex in das journal zur verbesserten rueckstellung.
DE3606869C2 (de) Vorrichtung zur Datenkompression
DE112007003693B4 (de) Datenverarbeitungsvorrichtung und Verfahren zur Datenverarbeitung
DE19782227B4 (de) Verfahren zum Verteilen von Indexdaten unter einer Mehrzahl vernetzter Knoten und System zum Verwalten eines Index
DE68926693T2 (de) System und Verfahren zur einem Systemfehler nachfolgenden Datenerholung in einer Datenbank eines Rechnersystems
DE69926305T2 (de) Rechnerlesbarer Speicher zum Speichern einer Datenbank und Indizes
DE69636761T2 (de) Speichern und wiederauffinden von geordneten schlüsselmengen in einem kompakten 0-kompletten baum
DE102008015662B4 (de) Beseitigung von Daten
DE69026924T2 (de) Datenkomprimierungsverfahren
DE112007003645T5 (de) Datenverarbeitungsvorrichtung und Verfahren zur Datenverarbeitung
DE10255128A1 (de) Computer-implementierte PDF-Dokumentenverwaltung
DE112021000665T5 (de) Primärspeicher mit Deduplizierung
DE112018003585B4 (de) Verfahren, Computerprogrammprodukt und Speicherbandlaufwerk-Hardwareeinheit zum Verbessern der Deduplizierung eines Bandlaufwerkspeichers
DE112017000167T5 (de) Verteilte Datendeduplizierung in einem Prozessorraster
DE102021102442A1 (de) Katalog der mit schnappschüssen verbundenen dateien
DE102013200030A1 (de) Hash-basiertes verwalten von speicher-ids
DE102021108967A1 (de) Schlüssel-wert-index mit knotenpuffern suchen
DE69104625T2 (de) Seitenverwaltungsverfahren mit erweiterungstabellen.

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law
8364 No opposition during term of opposition
R081 Change of applicant/patentee

Owner name: HEWLETT PACKARD ENTERPRISE DEVELOPMENT LP, HOU, US

Free format text: FORMER OWNER: HEWLETT-PACKARD DEVELOPMENT COMPANY, L.P., HOUSTON, TEX., US

R082 Change of representative

Representative=s name: SCHOPPE, ZIMMERMANN, STOECKELER, ZINKLER, SCHE, DE

R081 Change of applicant/patentee

Owner name: HEWLETT PACKARD ENTERPRISE DEVELOPMENT LP, SPR, US

Free format text: FORMER OWNER: HEWLETT PACKARD ENTERPRISE DEVELOPMENT LP, HOUSTON, TEX., US

R082 Change of representative

Representative=s name: PROCK, THOMAS, DR., GB