DE102022102228A1 - Hashen mit unterschiedlicher hash-grösse und kompressionsgrösse - Google Patents

Hashen mit unterschiedlicher hash-grösse und kompressionsgrösse Download PDF

Info

Publication number
DE102022102228A1
DE102022102228A1 DE102022102228.5A DE102022102228A DE102022102228A1 DE 102022102228 A1 DE102022102228 A1 DE 102022102228A1 DE 102022102228 A DE102022102228 A DE 102022102228A DE 102022102228 A1 DE102022102228 A1 DE 102022102228A1
Authority
DE
Germany
Prior art keywords
hash
data
block
size
block size
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.)
Pending
Application number
DE102022102228.5A
Other languages
English (en)
Inventor
Mark Abrian Moran
Michael Ray Ham
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.)
MaxLinear Inc
Original Assignee
MaxLinear Inc
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 MaxLinear Inc filed Critical MaxLinear Inc
Publication of DE102022102228A1 publication Critical patent/DE102022102228A1/de
Pending legal-status Critical Current

Links

Images

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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • G06F16/215Improving data quality; Data cleansing, e.g. de-duplication, removing invalid entries or correcting typographical errors
    • 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/13File access structures, e.g. distributed indices
    • G06F16/137Hash-based
    • 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/16File or folder operations, e.g. details of user interfaces specifically adapted to file systems
    • G06F16/168Details of user interfaces specifically adapted to file systems, e.g. browsing and visualisation, 2d or 3d GUIs
    • 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/1744Redundancy elimination performed by the file system using compression, e.g. sparse files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2255Hash tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0652Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket

Landscapes

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

Abstract

System zum Hashen eines Datensatzes durch Identifizieren eines zu deduplizierenden Datensatzes auf der Grundlage einer Hash-Block-Größe und zum Komprimieren auf der Grundlage einer Kompressions-Block-Größe, wobei die Hash-Block-Größe kleiner ist als die Kompressions-Block-Größe, Definieren eines Satzes von Datenblöcken innerhalb des Datensatzes auf der Grundlage der Hash-Block-Größe, Erzeugen eines Hashes für jeden Datenblock in dem Satz von Datenblöcken innerhalb des Datensatzes, Deduplizieren eines Datenblocks in dem Datensatz auf der Grundlage eines entsprechenden Hashes für den Datenblock und Komprimieren des Datensatzes auf der Grundlage der Kompressions-Block-Größe.

Description

  • TECHNISCHES GEBIET
  • Die hier diskutierten Ausführungsformen beziehen sich auf Hashen, Deduplizierung und Komprimierung.
  • STAND DER TECHNIK
  • Datensätze können doppelte Daten enthalten. Das Entfernen oder Reduzieren der Menge doppelter Daten aus einem Datensatz, was gemeinhin als Deduplizierung bezeichnet wird, kann zu einer Verringerung des Speicherplatzes und einer stärkeren Komprimierung des Datensatzes führen. Hash-Engines können verwendet werden, um doppelte Daten in Datensätzen zu identifizieren.
  • Der hier beanspruchte Gegenstand ist nicht auf Ausführungsformen beschränkt, die irgendwelche Nachteile beseitigen oder nur in Umgebungen wie den oben beschriebenen funktionieren. Vielmehr soll dieser Hintergrund nur einen beispielhaften Technologiebereich illustrieren, in dem einige hier beschriebene Ausführungsformen praktiziert werden können.
  • ZUSAMMENFASSUNG
  • Ein System zum Berechnen eines Fingerabdrucks über einen Datensatz durch Identifizieren eines zu deduplizierenden Datensatzes auf der Grundlage einer Hash-Block-Größe und eines zu komprimierenden Datensatzes auf der Grundlage einer Kompressions-Block-Größe, wobei die Hash-Block-Größe kleiner als die Kompressions-Block-Größe ist, Definieren eines Satzes von Datenblöcken innerhalb des Datensatzes auf der Grundlage der Hash-Block-Größe, Erzeugen eines Hashes (Hashwertes) für jeden Datenblock in dem Satz von Datenblöcken innerhalb des Datensatzes, Deduplizieren eines Datenblocks in dem Datensatz auf der Grundlage eines entsprechenden Hashes für den Datenblock und Komprimieren des Datensatzes auf der Grundlage der Kompressions-Block-Größe.
  • Figurenliste
  • Beispielhafte Ausführungsformen werden anhand der beigefügten Zeichnungen, in denen sie dargestellt sind, noch genauer beschrieben und erläutert:
    • 1 zeigt ein Beispiel für ein System zur Datendeduplizierung;
    • 2 zeigt einen Datensatz, der mit einer Hash-Blockgröße gehasht und mit einer Kompressionsblockgröße komprimiert werden kann;
    • 3 zeigt ein weiteres Beispiel für ein Daten-Deduplizierungssystem mit mehreren Hash-Engines;
    • 4 zeigt einen Datensatz, der von verschiedenen Hash-Engines mit jeweils unterschiedlicher Hash-Blockgröße gehasht und mit einer Kompressionsblockgröße komprimiert werden kann;
    • 5 zeigt ein Flussdiagramm eines Beispielverfahrens zum Hashen eines Datensatzes;
    • 6 zeigt ein Flussdiagramm eines weiteren Beispiels für ein Verfahren zum Hashen eines Datensatzes;
    • 7 zeigt ein Flussdiagramm eines weiteren Beispielverfahrens zum Hashen eines Datensatzes; und
    • 8 zeigt eine schematische Darstellung einer Maschine in der beispielhaften Form einer Computervorrichtung, in der ein Satz von Anweisungen ausgeführt werden kann, um die Maschine zu veranlassen, eines oder mehrere der hier erörterten Verfahren durchzuführen.
  • BESCHREIBUNG DER AUSFÜHRUNGSFORMEN
  • Hash-Engines können verwendet werden, um doppelte Daten in Datensätzen zu identifizieren. Die Deduplizierung dieser deduplizierten Daten ist eine Schlüsselkomponente bei der Datenreduzierung. Mithilfe eines Hash-Algorithmus kann eine Hash-Engine eine Abbildung eines Datensatzes beliebiger Größe mit einem Satz von Werten fester Größe, so genannten Hashes, erzeugen. Ein Hash kann ein eindeutiger Satz von Bits einer bestimmten Größe sein, bei dem die Wahrscheinlichkeit einer Wiederholung gering ist. Das Durchlaufen eines Datensatzes durch einen Hash-Algorithmus kann zu einer viel kleineren Datenbitgröße führen. Wenn z. B. Daten im Volumen von 32k Bits durch den Hash-Algorithmus laufen, kann die Ausgabe auf 8 Bits, 16 Bits, 32 Bits usw. reduziert werden.
  • Hashen kann verwendet werden, um potenziell doppelte Daten in Datensätzen, die dedupliziert werden könnten, zu identifizieren. Hash-Algorithmen können aus einem Datensatz ein eindeutiges Ergebnis mit einer bestimmten Bitgröße erzeugen. Hashes über einen oder mehrere Datensätze werden verglichen, um eine mögliche exakte Übereinstimmung zu finden, die dedupliziert werden kann. Es können auch mehrere Datensätze durch den Hash-Algorithmus laufen. Da eine Hash-Engine mehrere Datensätze verarbeiten kann, können die Ergebnisse verglichen werden. Hash-Übereinstimmungen zwischen den mehreren Datensätzen können darauf hindeuten, dass es sich bei den Daten, die den übereinstimmenden Hashes entsprechen, mit hoher Wahrscheinlichkeit um eine Duplikation handelt. Alle bis auf eine Instanz der übereinstimmenden Daten können aus den Mehrfachdatensätzen entfernt und durch einen Zeiger auf die eine verbleibende Instanz der übereinstimmenden Daten ersetzt werden. Das Entfernen der doppelten Daten kann dazu führen, dass weniger Speicherplatz für die Speicherung der Mehrfachdatensätze benötigt wird. Falls die Daten komprimiert werden sollen, werden die doppelten Daten nicht komprimiert, was zu einer stärkeren Komprimierung führen kann.
  • Bei der Komprimierung eines Datensatzes mit Hilfe von Hardware wird der Datensatz üblicherweise mit der gleichen Datensatzgröße wie der Hash komprimiert. Mit anderen Worten, wenn der Datensatz mit 32k Bits komprimiert werden soll, werden die Daten auch mit 32k Bits gehasht. Die Kopplung von Komprimierungsgröße und Hash-Größe kann zu Kompromissen bei Speichergröße, Effizienz, Anzahl der Duplikate usw. führen. Je größer beispielsweise die Komprimierungsgröße ist, desto besser kann die Datenkomprimierung des Datensatzes sein. Mit zunehmender Hash-Größe sinkt jedoch die Anzahl der übereinstimmenden Hashes, was die Effizienz der Deduplizierung beeinträchtigt. Ebenso nimmt mit abnehmender Hash-Größe die Anzahl der Duplikate zu, aber die resultierende Komprimierung ist geringer, da die gleiche Größe weniger effektiv ist. Die Kopplung von Komprimierungsgröße und Hash-Größe führt also zu Spannungen zwischen diesen beiden Eigenschaften. In der Regel wird weder die Komprimierung noch die Hash-Größe optimiert, sondern ein Mittelweg gewählt, der sowohl bei der Komprimierung als auch bei der Deduplizierung suboptimale Ergebnisse erzielt.
  • Aspekte der vorliegenden Offenlegung beheben diese und andere Unzulänglichkeiten herkömmlicher Komprimierungs- und Deduplizierungsverfahren. Beschrieben werden hier Systeme und Verfahren zur gleichzeitigen Verbesserung der Kompression und Deduplizierung durch Entkopplung der Kompressionsgröße und der Hash-Größe. Durch die Entkopplung der Hash-Größe von der Kompressionsgröße kann ein System die Hash-Größe viel kleiner machen, und je kleiner der Hash ist, desto effektiver ist der Hash in der Lage, Duplikate zu finden. Wenn beispielsweise ein Hash mit 32k Bits durchgeführt wird, ist die Wahrscheinlichkeit, dass mehrere 32k Bits in einem Datensatz vorkommen, viel geringer, als wenn der Hash mit 1k Bits oder 512 Bits durchgeführt wird. Einige hier beschriebene Systeme bieten einen Mechanismus zur Festlegung einer Hash-Größe in beliebiger Größe, unabhängig von der Größe des Datensatzes für die Kompressionsgröße.
  • Zu den Vorteilen der vorliegenden Offenlegung gehören die Erhöhung der Kompression und Deduplizierung. Durch die Trennung der Hash-Größe und der Komprimierungsgröße kann beispielsweise eine sehr große Datengröße verwendet werden, um eine erhöhte Komprimierung zu erzielen, während eine kleine Hash-Größe im selben Datensatz die Anzahl der Hashes im Datensatz erhöht, was die „Hash-Treffer“ oder die Fähigkeit, doppelte Daten im gesamten Datensatz zu identifizieren und zu entfernen, verbessert.
  • Wenn beispielsweise ein erster Datensatz A eine Größe von einem Megabit hat und die Hash-Größe viel kleiner ist, z. B. Ikb, kann es in diesem Datensatz ein Datenpaket mit dem Ikb-Hash geben, das irgendwo anders im Datensatz oder in einem anderen Datensatz B dupliziert ist. In jedem Fall können die duplizierten Daten einmal komprimiert werden, und für die anderen duplizierten Daten wird ein Zeiger auf die komprimierten Daten im ersten Datensatz A verfolgt, so dass die duplizierten Daten aus dem ersten Datensatz A abgerufen werden können, wenn auf diese duplizierten Daten in Bezug auf den Datensatz B zugegriffen wird. In mindestens einer Ausführungsform werden die Zeiger/Standorte von einem Hauptspeicher-Kontrollsystem identifiziert und verwaltet, das lokal oder entfernt von der Hash-Engine sein kann.
  • Aspekte der vorliegenden Offenlegung können auch Daten identifizieren, die beim Hashen übersprungen werden sollen. Die Vorteile dieser Technik können die Anzahl der Hash-Treffer und die Gesamteffizienz von Hashen und Kompression erhöhen.
  • Einige Aspekte der vorliegenden Offenlegung befassen sich damit, dass mehrere Hash-Engines zum Einsatz kommen können, die jeweils unterschiedliche Hash-Operationen an demselben Datensatz in einem einzigen Durchgang durchführen können. Die Vorteile dieser Technik können die Hash-Treffer und Kompressionsraten weiter verbessern. Mehrere Hash-Engines können beispielsweise die folgenden Eigenschaften aufweisen: Ausführung unterschiedlicher Hash-Algorithmen, Ausführung mit unterschiedlichen Hash-Blockgrößen, Ausführung mit unterschiedlichen Start-Offsets, Ausführung mit unterschiedlichen Skip-Funktionen/Einstellungen und/oder Ausführung mit einer beliebigen Kombination der oben genannten Eigenschaften.
  • 1 zeigt ein Beispiel für ein Deduplizierungssystem 100. Das Deduplizierungssystem 100 kann in Übereinstimmung mit mindestens einer in der vorliegenden Offenlegung beschriebenen Ausführungsform angeordnet sein. Das Beispiel-Deduplizierungssystem 100 kann eine oder mehrere Datenquellen 105, einen Deduplizierungs-Manager 110, eine oder mehrere Hash-Engines 115, einen Datenspeicher 120 und einen Kompressions-Manager 125 umfassen. In mindestens einer Ausführungsform können der Deduplizierungs-Manager 110, die Hash-Engine 115 und der Kompressions-Manager 125 in eine Beschleunigungskarte 155 integriert sein.
  • Die Datenquelle 105 kann jede Art von Gerät sein, z. B. ein Computergerät, ein Client-Gerät, ein Datenspeichergerät usw. Die Datenquelle 105 kann Daten empfangen und an den Deduplizierungs-Manager 110 senden, damit diese gehasht werden. Die Datenquelle 105 kann eine Schnittstelle enthalten, um dem Deduplizierungs-Manager 110 Parameter zur Verfügung zu stellen, mit denen die Daten dedupliziert werden sollen.
  • Der Deduplizierungs-Manager 110 kann eine Zentraleinheit (CPU) enthalten oder Teil davon sein oder ein Modul sein, das von der CPU ausgeführt werden kann. Zusätzlich oder alternativ kann der Deduplizierungs-Manager 110 eine eigenständige Einheit sein, die mit der CPU kommuniziert. Zum Beispiel kann die CPU verschiedene Aufgaben an den Deduplizierungs-Manager 110 übertragen, wie z.B. Hashen, Verschlüsselung und Kompression.
  • Die Datenquelle 105 kann so ausgebildet sein, dass sie mit dem Deduplizierungs-Manager 110 kommuniziert, z. B. über einen Bus oder ein Netzwerk. Daten können von der Datenquelle 105 an den Deduplizierungs-Manager 110 mit einer Anfrage zur Durchführung von Operationen an den Daten gesendet werden, wie z.B. Operationen zum Hashen, Verschlüsseln und/oder Komprimieren der Daten. Die Anfrage kann verschiedene Parameter und Metadaten enthalten, die mit den Daten verbunden sind. Der Deduplizierungs-Manager 110 ist kommunikativ mit der Hash-Engine 115 in Bezug auf die Durchführung von Hash-Operationen verbunden.
  • Die Hash-Engine 115 kann Schaltkreise, Software oder eine Kombination aus Schaltkreisen und Software enthalten, die so ausgebildet sind, dass sie einen Hash-Algorithmus auf einem Datensatz ausführen, beispielsweise auf Daten, die von der Datenquelle 105 empfangen wurden. Die Hash-Engine 115 kann so ausgebildet sein, dass sie einen beliebigen Hash-Algorithmus wie MD5, SHA-1, SHA-2 (224, 256, 384, 512) oder einen anderen Hash-Algorithmus oder eine Fehlererkennung (z. B. eine Prüfsumme, eine zyklische Redundanzprüfung (CRC)) ausführt.
  • Der Datenspeicher 120 kann einen beliebigen Speicher oder Datenspeicher umfassen. In einigen Ausführungsformen kann der Datenspeicher 120 computerlesbare Speichermedien umfassen, auf denen computerausführbare Befehle oder Datenstrukturen gespeichert sind oder werden. Zu den computerlesbaren Speichermedien kann jedes verfügbare Medium gehören, auf das ein Allzweck- oder Spezialcomputer, wie z. B. ein Prozessor, zugreifen kann. Beispielsweise kann der Datenspeicher 120 computerlesbare Speichermedien umfassen, die greifbare oder nichttransitorische computerlesbare Speichermedien sein können, einschließlich Random Access Memory (RAM), Read-Only Memory (ROM), Electrically Erasable Programmable Read-Only Memory (EEPROM), Compact Disc Read-Only Memory (CD-ROM) oder andere optische Plattenspeicher, Magnetplattenspeicher oder andere magnetische Speichervorrichtungen, Flash-Speichervorrichtungen (z. B., Flash-Speicher (z. B. Festkörperspeicher), nichtflüchtiger Speicher oder jedes andere Speichermedium, das zur Übertragung oder Speicherung von gewünschtem Programmcode in Form von computerausführbaren Befehlen oder Datenstrukturen verwendet werden kann und auf das ein Allzweck- oder Spezialcomputer zugreifen kann. Der Datenspeicher 120 kann auch Kombinationen der oben genannten Elemente enthalten. In der dargestellten Ausführungsform ist der Datenspeicher 120 von der Beschleunigungskarte 155 getrennt. In einigen Ausführungsformen kann der Datenspeicher 120 Teil der Beschleunigungskarte 155 sein, die über eine beliebige Schnittstelle, z. B. eine PCI-Express-3.0-Schnittstelle mit acht Lanes, mit einem Host verbunden werden kann. In mindestens einer Ausführungsform kann der Datenspeicher 120 mehrere verteilte Datenspeicher umfassen.
  • Der Kompressions-Manager (Komprimierungsmanager) 125 kann Schaltkreise, Software oder eine Kombination aus Schaltkreisen und Software enthalten, die so ausgebildet sind, dass sie einen Komprimierungsalgorithmus auf einen Datensatz anwenden, z. B. Daten, die von der Datenquelle 105 empfangen wurden und/oder Daten, die gehasht wurden. Die komprimierten Daten 150 können in dem Datenspeicher 120 gespeichert werden. Der Kompressions-Manager 125 kann so ausgebildet sein, dass er einen beliebigen Komprimierungsalgorithmus ausführt, z. B. gzip/zlib/Deflate L4, eLZS/LZS oder einen anderen Komprimierungsalgorithmus.
  • Der Deduplizierungs-Manager 110 kann einen Slice-Manager 130 und einen Skip-Manager 135 umfassen. Der Slice-Manager 130 kann ein Hardwaremodul, ein Softwaremodul oder eine Kombination aus Hardware und Software enthalten, das so ausgebildet ist, dass es eine Hash-Operation mit einer kleineren Hash-Größe im Vergleich zur Größe eines Kompressionsdatensatzes verwaltet. Der Skip-Manager 135 kann ein Hardwaremodul, ein Softwaremodul oder eine Kombination aus Hardware und Software umfassen, das so ausgebildet ist, dass es einige Daten in einem Datensatz identifiziert, die beim Hashen übersprungen werden können.
  • Im Betrieb kann der Deduplizierungs-Manager 110 einen Datensatz von der Datenquelle 105 erhalten. Traditionell ist die Größe des Hash-Blocks die gleiche wie die Größe des Kompressionsdatensatzes. Der Slice-Manager 130 entkoppelt die Hash-Blockgröße von der Größe des Kompressionsdatensatzes und erlaubt Hash-Blockgrößen für die Deduplizierung, die sich von der Größe des Kompressionsdatensatzes unterscheiden. Der Datensatz kann einen Satz von Datenblöcken enthalten oder auf der Grundlage eines solchen Satzes organisiert sein.
  • Der Slice-Manager 130 kann einen zu deduplizierenden Datensatz identifizieren, z. B. einen Datensatz aus der Datenquelle 105. Der Slice-Manager 130 kann eine Hash-Blockgröße auswählen, die kleiner ist als eine Kompressionsblockgröße (die später vom Kompressions-Manager 125 verwendet wird). Der Slice-Manager 130 kann einen Satz von Datenblöcken innerhalb des Datensatzes auf der Grundlage der Hash-Block-Größe definieren und kann die Hash-Engine 115 anweisen, einen Hash für jeden Datenblock in dem Satz von Datenblöcken innerhalb des Datensatzes zu erzeugen. Die Hash-Engine 115 kann einen Hash für jeden Datenblock im Satz der Datenblöcke innerhalb des Datensatzes erzeugen, der in einem Hash-Index 140 gespeichert werden kann. Der Deduplizierungs-Manager 110 kann einen Datenblock im Datensatz auf der Grundlage eines entsprechenden Hashes für den Datenblock deduplizieren. Um den Datenblock zu deduplizieren, kann der Deduplizierungs-Manager 110 beispielsweise den doppelten Datenblock entfernen und dem entfernten Datenblock einen Zeiger auf einen anderen Speicherort zuordnen, der ebenfalls die gleichen Daten wie die doppelten Daten speichert. Der Zeiger kann als Zeigerdaten 145 gespeichert werden. In mindestens einer Ausführungsform kann der Kompressions-Manager 125 den Datensatz auf der Grundlage der Kompressionsblockgröße komprimieren. In mindestens einer Ausführungsform komprimiert der Kompressions-Manager 125 keine doppelten Daten oder Zeiger auf die doppelten Daten. In mindestens einer Ausführungsform werden der Hash und die Komprimierung des Datensatzes in einem einzigen Durchgang durchgeführt. Zusätzlich oder alternativ kann der Deduplizierungs-Manager 110 angewiesen werden, verschiedene Operationen auszuführen und Ergebnisse für andere Systeme bereitzustellen, um die eigentliche Deduplizierung durchzuführen und Zeiger und/oder eine oder mehrere Tabellen zu verwalten und/oder zu erzeugen.
  • Die Größe des Hash-Blocks kann beliebig groß sein. In mindestens einer Ausführungsform kann die Größe des Hash-Blocks zwischen 1k und 4k Bit liegen. In mindestens einer Ausführungsform können die Datenblöcke bei der Deduplizierung strukturierter oder tabellarischer Daten, wie z. B. einer Datenbankstruktur, relativ klein sein, so dass eine kleinere Hash-Blockgröße verwendet werden kann. Für unstrukturierte Daten kann beispielsweise eine größere Hash-Block-Größe verwendet werden.
  • In mindestens einer Ausführungsform ist die Größe des Hash-Blocks ein Divisor des gesamten Datensatzes, so dass jeder Hash-Block die gleiche Größe hat. Bei einem Gesamtdatensatz von 16k Bits kann die Hash-Blockgröße beispielsweise ein Divisor von 16k sein, wie 8k, 4k, 2k, 1k usw. Die Größe des Hash-Blocks kann eine ganze Zahl, eine Ganzzahl usw. sein. In einer anderen Ausführungsform ist die Größe des Hash-Blocks kein Teiler des gesamten Datensatzes. In diesem Beispiel werden alle Hashes aufbewahrt, mit Ausnahme des letzten Hashes, der verwendet oder verworfen werden kann. Wenn z. B. das letzte Bit nur 1k beträgt, die Hash-Blockgröße aber 4k Bits, kann der letzte Hash von 1k Bits ignoriert oder verworfen werden. In diesem Beispiel sind die Daten, die mit dem letzten, übergangenen oder verworfenen Hash verbunden sind, möglicherweise kein Deduplizierungskandidat.
  • In mindestens einer Ausführungsform kann der Deduplizierungs-Manager 110 bestimmen, dass einige der Daten im Datensatz für das Hashen übersprungen werden können. In mindestens einer Ausführungsform erhält der Deduplizierungs-Manager 110 eine Anweisung von der Datenquelle 105, einige der Daten im Datensatz zu überspringen. Zusätzlich oder alternativ kann der Deduplizierungs-Manager 110 den Skip-Manager 135 verwenden, um den Datensatz automatisch zu analysieren und zu bestimmen, ob Daten im Datensatz übersprungen werden sollen. Der Skip-Manager 135 kann zum Beispiel bestimmte Datentypen identifizieren, die übersprungen werden können, wie Kopfdaten (Headerdaten), Fußdaten (Footerdaten), Datenbankfelder, vorgegebene Datentypen, Datenschutzfelder (z. B. NVMe-Schutzdaten, ein Datenintegritätsfeld (DIF), eine Datenintegritätserweiterung (DIX), T10-DIF oder T10-DIX usw.). In einem Beispiel wird eine unternehmensweite E-Mail mit einer Kalendereinladung zu einer Firmenfeier verschickt. Jede E-Mail würde Kalenderdaten enthalten, die für alle Mitarbeiter des Unternehmens gleich sind. Jede E-Mail würde auch eine Kopfzeile (Header) enthalten, die für jeden Mitarbeiter leicht unterschiedlich wäre. Bei herkömmlichen Systemen wäre diese E-Mail aufgrund der unterschiedlichen Kopfzeilen nicht dedupliziert worden. Der Skip-Manager 135 kann die Kopfzeilen als Skip-Kandidaten identifizieren, so dass die Kopfzeilen während des Deduplizierungsprozesses übersprungen werden und die Kalenderdaten trotzdem dedupliziert werden können.
  • In mindestens einer Ausführungsform enthalten die Daten aus der Datenquelle 105 Anweisungen oder Metadaten über die Daten, die der Skip-Manager 135 verwenden kann, um die während der Deduplizierung zu überspringenden Daten zu bestimmen. Zum Beispiel können die Daten aus der Datenquelle 105 Informationen und/oder Metadaten über die Daten aus der Datenquelle enthalten, wie z.B. eine Anzahl von Datenbits, Kopfdaten, Fußdaten, Kopfgröße, Fußgröße, Index, Indexkopf usw. Die Informationen und/oder Metadaten über die Daten aus der Datenquelle können auch einen Hinweis auf ein sich wiederholendes Muster in den Daten enthalten. Beispielsweise kann ein Datenprovider (z. B. die Datenquelle 105) das Muster der Kopfzeilen in den Daten angeben, das einen Offset, die Größe des Musters und die Anzahl der Skips (Übersprünge) umfassen kann. Der Skip-Manager 135 kann die Hash-Engine 115 anweisen, eine bestimmte Größe von Daten zu überspringen, beginnend mit dem Offset, wie die nächsten zu überspringenden Daten zu identifizieren sind, und einen Zähler für die Gesamtzahl der auszuführenden Skips angeben. Auf diese Weise kann die Hash-Engine 115 einen Hash für alle nicht übersprungenen Daten durchführen, was zu einer größeren Anzahl von Hash-Treffern führen kann. Ein Beispielpattern (Beispielmuster) kann eine oder mehrere der folgenden Anweisungen mit der Beschreibung enthalten : Überspringen einer Anzahl von „x“ Bits, Verarbeiten einer Anzahl von „y“ Bits, Überspringen einer Anzahl von „z“ Bits, Verarbeiten einer Anzahl von „a“ Bits, Wiederholen usw., wobei „x“, „y“, „z“ und „a“ eine beliebige Zahl sein können, einschließlich der gleichen Zahl wie jede andere, oder einige oder alle können sich voneinander unterscheiden.
  • Eine ähnliche Technik kann für tabellarische oder datenbankartige Daten oder andere Daten mit einem Indexkopf und Daten verwendet werden. Bei solchen Daten wird der Indexkopf bzw. werden die Indexköpfe übersprungen und die Daten können gehasht, dedupliziert und/oder komprimiert werden. In mindestens einer Ausführungsform kann die Größe eines Hash-Blocks kleiner sein als die Datenmenge zwischen den Skips. In mindestens einer Ausführungsform kann die Größe eines Hash-Blocks größer sein als die Datenmenge zwischen den Skips, so dass die Daten auf zwei Seiten eines „Sprungs“ (Skips) zusammen gehasht werden können. In mindestens einer Ausführungsform werden die „nicht übersprungenen“ (nicht geskippten) Daten komprimiert, während die „übersprungenen“ (geskippten) Daten nicht komprimiert werden. In mindestens einer Ausführungsform sind die Skip-Fähigkeiten so geschichtet, dass zunächst ein Satz von Skip-Regeln angewandt wird, dann ein zweiter Satz von Skip-Regeln auf die verbleibenden nicht geskippten Daten angewandt werden kann, und so weiter.
  • In mindestens einer Ausführungsform kann die Identifizierung von Skip-Kandidaten durch den Skip-Manager 135 automatisiert werden. Zum Beispiel kann der Skip-Manager 135 die Daten vor dem Hash-Vorgang analysieren, um Skip-Kandidaten zu identifizieren, die Daten enthalten können, die „überspringbaren“ Daten ähneln. Der Skip-Manager 135 kann eine Reihe von Kriterien haben, die er bei der Analyse der Daten verwendet. Der Satz von Kriterien kann verschiedene Daten identifizieren, die übersprungen werden können, wie Kopf- und Fußzeilen usw. Wenn der Skip-Manager 135 diese Arten von Daten identifiziert, die übersprungen werden können, kann der Skip-Manager 135 diesen Daten ein Kennzeichen hinzufügen, so dass die Hash-Engine 115 und/oder der Kompressions-Manager 125 diese speziellen Daten beim Hashen/Komprimieren der Daten überspringen kann. In mindestens einer Ausführungsform können dem Skip-Manager 135 Trainingsdaten übermittelt werden, die zur Erstellung einer künstlichen Intelligenz (KI) verwendet werden können, um die Daten zu verarbeiten und „überspringbare“ Berreiche zu finden. In mindestens einer Ausführungsform kann die KI-Einheit überwacht oder unüberwacht sein. In mindestens einer Ausführungsform kann der Skip-Manager 135 die KI-Einheit anhand der von einem Systemadministrator erhaltenen Eingaben verfeinern. Zum Beispiel kann der Skip-Manager 135 „Skip-Kandidaten“ identifizieren, die dem Systemadministrator über eine Schnittstelle präsentiert werden können. Der Systemadministrator kann angeben, ob die Kandidaten übersprungen werden sollen oder nicht. Der Skip-Manager 135 kann die Daten des Systemadministrators verwenden, um die KI-Einheit zu verfeinern, damit sie Skip-Kandidaten besser identifizieren kann.
  • In mindestens einer Ausführungsform enthalten die Daten Metadaten, die überspringbare Daten kennzeichnen. Zu den überspringbaren Daten können vorgegebene Standards für Daten gehören, die ein genaues oder vorgegebenes Format haben. Zu den vorgegebenen Standards können beispielsweise NVMe-Schutzdaten wie T10-DIF-Daten, T10-DIX-Daten usw. gehören.
  • Durch die Identifizierung von NVMe-Schutzfeldern können der Skip-Manager 135 und die Hash-Engine 115 das Hashen dieser NVMe-Schutzfelder, die DIF-Daten, Metadaten usw. enthalten können, vermeiden. In ähnlicher Weise kann der Kompressions-Manager 120 die Komprimierung dieser NVMe-Schutzfelder vermeiden.
  • In mindestens einer Ausführungsform kann der Skip-Manager 135, wenn er in einem Datensatz auf ein NVMe-Schutzfeld stößt, der Hash-Engine 115 genaue Anweisungen zum Überspringen dieser NVMe-Schutzfelder geben.
  • In mindestens einer Ausführungsform kann der Skip-Manager 135 feststellen, dass der Datensatz mit „NVMe Protect, DIF-Konfiguration“ formatiert ist. Der Skip-Manager 135 kann feststellen, dass unter dieser Konfiguration entweder die DIF-Daten, die Metadaten oder sowohl die DIF-Daten als auch die Metadaten übersprungen werden können. Die dem Datensatz zugeordneten Metadaten können angeben, welche dieser Auswahlen zu treffen ist. Ist dies nicht der Fall, kann der Skip-Manager 135 bestimmen, welche Auswahl zu treffen ist, oder er kann sich auf eine Standardeinstellung für die Auswahl verlassen. Der Skip-Manager 135 kann den Hash-Manager 115 anweisen, einen bestimmten Bereich des Datensatzes mit einer bestimmten Datenhash-Größe zu hashen, dann die Metadaten und/oder DIF-Daten zu überspringen, dann einen nächsten Bereich des Datensatzes mit der gegebenen Datenhash-Größe zu hashen, bis alle Daten im Datensatz (mit Ausnahme der Skip-Daten) gehasht wurden.
  • Diese Techniken zur Identifizierung und zum Überspringen von Teilen eines Datensatzes zum Hashen, Deduplizieren und Komprimieren können der CPU erhebliche Vorteile bringen. Indem dieses Überspringen in der Hardware erfolgt, wird in einigen Ausführungsformen die Software-CPU-Zeit reduziert. Bei Datenbankstrukturen können diese Techniken zu einer 2-, 3- oder sogar 5-fachen Deduplizierungsrate führen.
  • Änderungen, Ergänzungen oder Auslassungen können am Deduplizierungssystem 100 vorgenommen werden, ohne den Rahmen der vorliegenden Offenbarung zu sprengen. Alle hier vorgestellten Konstrukte können in einem zustandslosen Betrieb implementiert werden, bei dem alle zu bearbeitenden Daten in einem einzigen Befehl geliefert werden. Zusätzlich oder alternativ können diese Funktionen bei zustandsbehafteten Strukturen, bei denen Daten, die Teil dieses einzigen Befehls sind, in nachfolgenden Befehlen weitergegeben werden, dort fortgesetzt werden, wo sie aufgehört haben. Darüber hinaus können alle hier vorgesehenen Konstrukte in einer oder mehreren zustandsabhängigen Operationen implementiert werden.
  • 2 zeigt einen Datensatz 200, der mit einer Hash-Blockgröße 210 gehasht und mit einer Kompressionsblockgröße 220 komprimiert werden kann. Die Hash-Blockgröße 210 kann ein anderer Wert sein als die Kompressionsblockgröße 220. Wie dargestellt, scheint die Größe des Kompressionsblocks 220 gleich der Größe des Datensatzes 200 zu sein, aber die Größe des Kompressionsblocks 220 kann eine beliebige Größe sein, einschließlich einer Größe, die kleiner als die Größe des Datensatzes 200 ist. Die Größe des Hash-Blocks 210 kann beliebig groß sein, auch größer als die Größe des Kompressionsblocks.
  • 3 zeigt ein weiteres Beispiel für ein Datendeduplizierungssystem 300 mit mehreren Hash-Engines 315a, 315b, 315n. Das Daten-Deduplizierungssystem 300 kann dem Daten-Deduplizierungssystem 100 von 1 ähnlich sein und ähnliche Komponenten wie dieses enthalten. Das Datendeduplizierungssystem 300 kann mehrere Hash-Engines 315a, 315b, 315n enthalten, die der Hash-Engine 115 von 1 ähnlich sein können. Das Daten-Deduplizierungssystem 300 kann dazu verwendet werden, jede Art von Daten zu deduplizieren, einschließlich mehrerer ähnlicher Dokumente, wie z. B. mehrere Versionen eines einzigen Dokuments. Wenn ein Benutzer beispielsweise ein textbasiertes Dokument erstellt und dann eine neue Version des textbasierten Dokuments anfertigt, in der jedoch die Leerzeichen, zusätzliche Wörter usw. geändert wurden, stimmt nun nichts mehr in diesem textbasierten Dokument für die Zwecke des Hashens und der Deduplizierung von Daten in dem textbasierten Dokument überein, obwohl die beiden Versionen der textbasierten Dokumente praktisch identisch sind. Die mehreren Hash-Engines 315 können unterschiedlich ausgebildet werden, um jeweils das ursprüngliche textbasierte Dokument und die neue Version des textbasierten Dokuments für die Deduplizierung zu hashen.
  • Jede der Hash-Engines 315a, 315b, 315n kann mit einer beliebigen Hash-Blockgröße ausgebildet werden, die sich zwischen den Hash-Engines 315a, 315b, 315n unterscheiden kann, wie in 4 dargestellt. Beispielsweise kann eine erste Hash-Engine 315a Daten mit einer ersten Hash-Blockgröße hashen, eine zweite Hash-Engine 315b kann Daten mit einer zweiten Hash-Blockgröße hashen und eine „n-te“ Hash-Engine 315n kann Daten mit einer dritten Hash-Blockgröße hashen. Darüber hinaus kann jede Hash-Engine 315a, 315b, 315n so ausgebildet sein, dass sie einen Hash-Vorgang an einem Datensatz an einem Offset beginnt, wie ebenfalls in 4 dargestellt. Beispielsweise kann die erste Hash-Engine 315a Daten unter Verwendung eines ersten Offsets hashen, die zweite Hash-Engine 315b kann Daten unter Verwendung eines zweiten Offsets hashen, und die „n-te“ Hash-Engine 315n kann Daten unter Verwendung eines dritten oder „n-ten“ Offsets hashen.
  • In einem anderen Beispiel und wie in 4 dargestellt, kann die erste Hash-Engine 315a den Datensatz mit einer ersten Hash-Block-Konfiguration 410 (z. B. Hash-Block-Größe von 4k Bits, Offset von Null) hashen, um auf einem 32k-Bit-Block des Datensatzes und einer Hash-Block-Größe von 4k Bits zu bleiben, die zweite Hash-Engine 315b kann den Datensatz mit einer zweiten Hash-Block-Konfiguration 420 (z. B., Hash-Blockgröße von 4k Bits, Offset von 1k Bits), eine dritte Hash-Engine (nicht dargestellt) kann den Datensatz mit einer dritten Hash-Blockkonfiguration 430 (z. B. Hash-Blockgröße von 4k Bits, Offset bei 2k Bits) hashen, und die n-te Hash-Engine 315n kann den Datensatz mit einer vierten Hash-Blockkonfiguration 440 (z. B. Hash-Blockgröße von 4k Bits, Offset bei 3k Bits) hashen. Wie im obigen Beispiel beschrieben, sind die Hash-Block-Größen der Hash-Block-Konfigurationen mit unterschiedlichen Offsets identisch. Alternativ können die Hash-Block-Größen unter den Hash-Block-Konfigurationen unterschiedlich sein und auch unterschiedliche Offsets aufweisen. Alternativ können die Hash-Block-Größen unter den Hash-Block-Konfigurationen mit denselben Offsets unterschiedlich sein. Ein weiterer Parameter der Hash-Block-Konfigurationen kann ein Hash-Algorithmus sein. Jede der Hash-Engines 315 kann beim Hashen desselben Datensatzes denselben oder unterschiedliche Hash-Algorithmen verwenden.
  • In einigen Ausführungsformen müssen die Größe des Datensatzes, die Größe des Hash-Blocks und die Offsets der Hash-Engine nicht identisch sein oder auf Byte-Grenzen liegen. In mindestens einer Ausführungsform können Hash-Engines nach einer „x“-Anzahl von Hashes aufhören und Hashes über vollständige „Hash-Blöcke“ zurückgeben. Zusätzlich oder alternativ können Hash-Engines fortfahren und am Ende eines Befehls Hashes über einen Rest von „partiellen Hash-Blöcken“ zurückgeben. Für den zustandsabhängigen Betrieb eines Slice-Hashes kann die Option „letzter Hash“ von Vorteil sein, da die Hashes der partiellen Hash-Blöcke am Ende des Befehls in einem „nächsten“ Befehl, der dem aktuellen Befehl zustandsabhängig hinzugefügt wird, wieder aufgenommen, fortgesetzt und abgeschlossen werden können.
  • In einem anderen Beispiel könnten die Hash-Engines 315 jeweils bei Bit Null beginnen und jede der Hash-Engines 315 könnte unabhängige Algorithmen verwenden. Die Hashes können unter den verschiedenen Algorithmen gespeichert werden, was nützlich sein kann, um Fehlduplikationstreffer zu verifizieren oder zu überprüfen. Ein weiterer Vorteil der Verwendung mehrerer Hash-Engines 315 zum Hashen desselben Datensatzes in einem einzigen Durchgang kann bei der Deduplizierung zwischen verschiedenen Systemtypen hilfreich sein, z. B. wenn ein älteres System eine bestimmte Art von Hash-Block-Konfiguration verwendet und ein neueres System eine andere Hash-Block-Konfiguration (z. B. einen erweiterten Hash). Diese Flexibilität bei den Hash-Block-Konfigurationen kann es den mehreren Hash-Engines 315 ermöglichen, mehrere Hashes zu generieren, so dass selbst in einem Cluster, in dem es verschiedene Speichergeräte mit verschiedenen Hash-Tabellen geben kann, die mehreren Hash-Engines 315 Hashes aus den Daten in einem einzigen Durchgang generieren können, ohne dass diese mehrfach durchlaufen werden müssen. Zusätzlich oder alternativ kann ein bestehendes System von einem kleineren Hash-Algorithmus auf einen neueren oder größeren Hash-Algorithmus migriert werden, um die Deduplizierung zu verbessern oder die Kapazität zu erhöhen, was bei dem älteren Algorithmus zu vermehrten Kollisionen geführt haben könnte. In mindestens einer Ausführungsform können die Hash-Block-Konfigurationen global oder unabhängig für jede der Hash-Engines 315 eingestellt werden. Die Hash-Engines 315 können die verschiedenen Hashes im Hash-Index 140 speichern, der für die Datenquelle 105 zugänglich ist.
  • In mindestens einer Ausführungsform können die Hashes für jede Hash-Engine 315 analysiert werden, um Hash-Treffer zu ermitteln. Die Anzahl der Hash-Treffer zwischen den Hash-Engines 315 kann aufgrund der unterschiedlichen Hash-Block-Konfigurationen, die für die Hash-Engines 315 verwendet werden, unterschiedlich sein. In mindestens einer Ausführungsform können die Hashes, die der höchsten Anzahl von Hash-Treffern entsprechen, für die Deduplizierung ausgewählt werden, wodurch die Leistung des Deduplizierungssystems erhöht wird.
  • In mindestens einer Ausführungsform können doppelte Daten eine Hash-Grenze überschreiten, was bedeutet, dass ein erster Teil der doppelten Daten Teil eines ersten Hashes des Datensatzes ist und ein zweiter Teil der doppelten Daten Teil eines zweiten Hashes des Datensatzes ist. In diesem Fall können die Hashes, die der höchsten Anzahl von Hash-Treffern oder gehashten Bytes entsprechen, für die Deduplizierung ausgewählt werden.
  • Für Szenarien, in denen es keine doppelten Daten gibt, die eine Hash-Grenze überlappen, können Hashes von allen mehreren Hash-Engines 315 verwendet werden, um den Datensatz zu deduplizieren. Wenn sich Hashes von weniger als allen Hash-Engines 315 überschneiden, kann einer der überlappenden Sätze ausgewählt und die anderen verworfen werden. Wenn beispielsweise fünf Hash-Engines 315 in einem einzigen Durchgang Hashes über einen Datensatz laufen lassen und es Überschneidungen zwischen drei der fünf Hash-Engines 315 gibt, dann wird eine dieser drei zusammen mit den beiden ohne Überschneidungen ausgewählt. Die ausgewählten Hashes können zur Deduplizierung des Datensatzes verwendet werden. Eine Deduplizierung auf diese Weise kann zu einem höheren Anteil an Deduplikaten und einem höheren Kompressionsverhältnis führen.
  • In mindestens einer Ausführungsform kann das Datendeduplizierungssystem 300 auch Hash-Blockgrößen verwenden, die sich von der Größe der Kompressionsblöcke unterscheiden, wie in Verbindung mit 1 näher erläutert. Darüber hinaus kann das Datendeduplizierungssystem 300 beim Hashen die Skip-Techniken verwenden, wie in Verbindung mit 1 weiter beschrieben. Zum Beispiel kann jede der mehreren Hash-Engines 315 Daten identifizieren, die beim Hashen des Datensatzes übersprungen werden sollen. Jede der mehreren Hash-Engines 315 kann dieselben Daten überspringen oder alternativ verschiedene Daten überspringen. Die mehreren Hash-Engines 315 können unterschiedliche Daten überspringen, wenn z. B. überspringbare Daten auf eine Hash-Grenze fallen. In mindestens einer Ausführungsform identifizieren die mehreren Hash-Engines 315 die zu überspringenden Daten, bevor sie Hash-Grenzen erzeugen.
  • Änderungen, Ergänzungen oder Auslassungen können am Deduplizierungssystem 300 vorgenommen werden, ohne den Rahmen der vorliegenden Offenbarung zu sprengen.
  • 4 zeigt einen Datensatz 400, der von verschiedenen Hash-Engines mit jeweils einer anderen Hash-Block-Konfiguration 410, 410, 420, 430, 440 gehasht und mit einer Kompressionsblockgröße 450 komprimiert werden kann. Die Hash-Block-Konfiguration kann verschiedene einstellbare Parameter umfassen, wie z. B. Hash-Block-Größe, Offset, Algorithmus usw. In mindestens einer Ausführungsform können die Hash-Blockgröße(n) völlig unabhängig von den anderen Hash-Engines, Datensatzgrößen und/oder Kompressionsblockgrößen sein. In mindestens einer Ausführungsform können die Hash-Blockgrößen von einem Hash-Block zum nächsten variabel sein. Eine Ausführungsform, die sich diese Fähigkeit zunutze macht, kann einen Hash-Algorithmus umfassen, der von einer oder mehreren Maschinen eingesetzt wird und einen rollierenden Hash verwendet, um die Ränder zu finden, an denen mit dem Hashen begonnen wird. Ein Beispiel für einen Hash-Algorithmus kann ein Rabin-Karp-Hash-Algorithmus sein. Jede Maschine könnte unterschiedliche Randwerte haben oder so programmiert sein, dass sie nicht mit demselben Rand beginnt, um beispielsweise den besten Rand zu finden.
  • Die 5 bis 7 zeigen Flussdiagramme von Beispielverfahren im Zusammenhang mit Hashen und Deduplizierung. Die Verfahren können von einer Verarbeitungslogik durchgeführt werden, die Hardware (Schaltkreise, spezielle Logik usw.), Software (wie sie auf einem Allzweck-Computersystem oder einer speziellen Maschine ausgeführt wird) oder eine Kombination aus beidem umfassen kann, wobei die Verarbeitungslogik in dem Deduplizierungs-Manager 110, der Hash-Engine 115 (oder den Hash-Engines 315), dem Kompressions-Manager 125 und/oder der Beschleunigungskarte 155 der 1 und 3 oder einem anderen Computersystem oder -gerät enthalten sein kann. Es kann jedoch auch ein anderes System oder eine Kombination von Systemen verwendet werden, um die Verfahren durchzuführen. Der Einfachheit halber werden die hier beschriebenen Verfahren als eine Reihe von Handlungen dargestellt und beschrieben. Die Handlungen gemäß dieser Offenbarung können jedoch in verschiedenen Reihenfolgen und/oder gleichzeitig sowie mit anderen, hier nicht dargestellten und beschriebenen Handlungen erfolgen. Ferner können nicht alle dargestellten Handlungen zur Durchführung der Verfahren gemäß dem offengelegten Gegenstand verwendet werden. Darüber hinaus wird der Fachmann verstehen und anerkennen, dass die Verfahren alternativ als eine Reihe von miteinander verbundenen Zuständen über ein Zustandsdiagramm oder Ereignisse dargestellt werden können. Darüber hinaus können die in dieser Beschreibung offengelegten Verfahren auf einem Herstellungsgegenstand, wie z. B. einem nicht transitorischen computerlesbaren Medium, gespeichert werden, um den Transport und die Übertragung solcher Verfahren auf Computergeräte zu erleichtern. Der Begriff Herstellungsgegenstand, wie er hier verwendet wird, soll ein Computerprogramm umfassen, auf das von einem beliebigen computerlesbaren Gerät oder Speichermedium zugegriffen werden kann. Obwohl als einzelne Blöcke dargestellt, können verschiedene Blöcke in zusätzliche Blöcke aufgeteilt, zu weniger Blöcken kombiniert oder eliminiert werden, je nach gewünschter Implementierung.
  • 5 zeigt ein Flussdiagramm eines Beispielverfahrens 500 zum Hashen eines Datensatzes. Das Verfahren 500 kann in Block 505 beginnen, wo die Verarbeitungslogik über eine Benutzerschnittstelle eine Benutzereingabe empfangen kann, die eine Hash-Blockgröße angibt. In Block 510 kann die Verarbeitungslogik die Hash-Blockgröße auf der Grundlage der Benutzereingabe festlegen.
  • In Block 515 kann die Verarbeitungslogik einen zu deduplizierenden Datensatz (basierend auf einer Hash-Blockgröße) und einen zu komprimierenden Datensatz (basierend auf einer Kompressionsblockgröße) identifizieren. Die Hash-Blockgröße kann kleiner sein als die Kompressionsblockgröße. Die Größe des Kompressionsblocks kann mindestens doppelt so groß sein wie die Größe des Hash-Blocks. Die Hash-Blockgröße kann ein Divisor der Kompressionsblockgröße sein. Der Datensatz kann eine elektronische Datei enthalten. Die Größe des Kompressionsblocks kann gleich der Größe der elektronischen Datei sein. In Block 520 kann die Verarbeitungslogik einen Satz von Datenblöcken innerhalb des Datensatzes auf der Grundlage der Hash-Block-Größe definieren.
  • In Block 525 kann die Verarbeitungslogik einen Hash für jeden Datenblock im Satz der Datenblöcke innerhalb des Datensatzes erzeugen. Zusätzlich oder alternativ kann die Verarbeitungslogik einen ersten Befehl zur Erzeugung eines Hashes für jeden Datenblock im Satz der Datenblöcke innerhalb des Datensatzes generieren.
  • In Block 530 kann die Verarbeitungslogik einen Datenblock im Datensatz auf der Grundlage eines entsprechenden Hashes für den Datenblock deduplizieren. In mindestens einer Ausführungsform wird der deduplizierte Datenblock nicht komprimiert. Zusätzlich oder alternativ kann die Verarbeitungslogik eine zweite Anweisung zur Deduplizierung eines Datenblocks im Datensatz auf der Grundlage eines entsprechenden Hashes für den Datenblock erzeugen.
  • In Block 535 kann die Verarbeitungslogik den Datensatz auf der Grundlage der Kompressionsblockgröße komprimieren. In mindestens einer Ausführungsform mag die Kompressionsblockgröße kein ganzzahliges Vielfaches der Hash-Blockgröße sein. Ein zweiter Datenblock des Satzes von Datenblöcken kann eine eindeutige Hash-Block-Größe haben. Das Komprimieren des Datensatzes auf der Grundlage der Komprimierungsblockgröße (Kompressionsblockgröße) kann mindestens eines der folgenden Verfahren beinhalten: Unterlassen der Komprimierung des zweiten Datenblocks oder Verwerfen eines Hashes, der mit dem zweiten Datenblock verknüpft ist. Zusätzlich oder alternativ kann die Verarbeitungslogik eine dritte Anweisung zur Komprimierung des Datensatzes auf der Grundlage der Kompressionsblockgröße erzeugen.
  • 6 zeigt ein Flussdiagramm eines weiteren Beispielverfahrens 600 zum Hashen eines Datensatzes. Das Verfahren 600 kann in Block 605 beginnen, wo die Verarbeitungslogik einen zu hashenden Datensatz identifizieren kann, der einen Satz von Datenblöcken umfasst.
  • In Block 610 kann die Verarbeitungslogik Daten innerhalb des zu überspringenden Datensatzes identifizieren. In mindestens einer Ausführungsform umfassen die zu überspringenden Daten innerhalb des Datensatzes mindestens eines der folgenden Elemente: Daten, die als Muster, Kopfzeile, Fußzeile, NVMe-Schutzdaten (Non-Volatile Memory Express) oder Steuerdaten für die Fehlerbehebung gekennzeichnet sind. In mindestens einer Ausführungsform umfasst das Identifizieren von Daten innerhalb des zu überspringenden Datensatzes: Identifizieren eines Skip-Kandidaten im Datensatz, Bereitstellen des Skip-Kandidaten, der über eine Schnittstelle bereitgestellt werden soll, und Empfangen einer Bestätigung des Skip-Kandidaten.
  • In Block 615 kann die Verarbeitungslogik einen Hash für jeden Datenblock im Satz von Datenblöcken innerhalb des Datensatzes mit Ausnahme der zu überspringenden Daten innerhalb des Datensatzes erzeugen. In mindestens einer Ausführungsform beinhaltet die Identifizierung der zu überspringenden Daten innerhalb des Datensatzes die Feststellung, dass die Daten ein Wiederholungsfeld enthalten. Das Wiederholungsfeld kann einen bestimmte Byte-Zählwert (Byte-Zahl) enthalten. In mindestens einer Ausführungsform umfasst das Erzeugen des Hashes für jeden Datenblock im Satz von Datenblöcken innerhalb des Datensatzes mit Ausnahme der zu überspringenden Daten innerhalb des Datensatzes das Identifizieren des ersten Bytes des Feldes und das Überspringen einer Anzahl von Bytes, die dem Byte-Zählwert entspricht. In mindestens einer Ausführungsform umfasst das Erzeugen des Hashes für jeden Datenblock im Satz von Datenblöcken innerhalb des Datensatzes mit Ausnahme der zu überspringenden Daten innerhalb des Datensatzes das Überspringen von Daten auf der Grundlage von Offset und Anzahl.
  • In Block 620 kann die Verarbeitungslogik die Daten mit einer Kompressionsblockgröße komprimieren. In Block 625 kann die Verarbeitungslogik die übersprungenen Daten in einem Datensatz zur Speicherung bereitstellen. In Block 630 kann die Verarbeitungslogik den Datensatz mit den ausgelassenen Daten über eine Benutzerschnittstelle bereitstellen. In mindestens einer Ausführungsform mögen die Quelldaten nicht übersprungen werden, und das gesamte Hashen einschließlich der Offsets kann an den komprimierten Daten durchgeführt werden.
  • 7 zeigt ein Flussdiagramm eines weiteren Beispielverfahrens 700 zum Hashen eines Datensatzes. Das Verfahren 700 kann im Block 705 beginnen, wo die Verarbeitungslogik einen zu hashenden Datensatz identifizieren kann. Der Datensatz kann eine Reihe von Datenblöcken enthalten.
  • In Block 710 kann die Verarbeitungslogik unter Verwendung einer ersten Hash-Engine einen ersten Hash für jeden Datenblock im Satz der Datenblöcke innerhalb des Datensatzes erzeugen. In mindestens einer Ausführungsform kann die erste Hash-Engine so ausgebildet sein, dass sie den ersten Hash unter Verwendung eines ersten Hash-Algorithmus erzeugt. In mindestens einer Ausführungsform kann die erste Hash-Engine so ausgebildet sein, dass sie den ersten Hash auf der Grundlage einer ersten Hash-Blockgröße erzeugt. In mindestens einer Ausführungsform kann die erste Hash-Engine so ausgebildet sein, dass sie den ersten Hash beginnend bei einem ersten Bit des Datensatzes erzeugt.
  • In Block 715 kann die Verarbeitungslogik unter Verwendung einer zweiten Hash-Engine einen zweiten Hash für jeden Datenblock im Satz der Datenblöcke innerhalb des Datensatzes erzeugen. In mindestens einer Ausführungsform kann die zweite Hash-Engine so ausgebildet sein, dass sie den zweiten Hash unter Verwendung eines zweiten Hash-Algorithmus erzeugt. In mindestens einer Ausführungsform kann die zweite Hash-Engine so ausgebildet sein, dass sie den zweiten Hash auf der Grundlage einer zweiten Hash-Blockgröße erzeugt. In mindestens einer Ausführungsform kann die zweite Hash-Engine so ausgebildet sein, dass sie den zweiten Hash an einem zweiten Bit des Datensatzes erzeugt. Das erste Bit des Datensatzes kann Bit Null sein und das zweite Bit des Datensatzes kann auf der Grundlage eines Offsets vom ersten Bit bestimmt werden. In mindestens einer Ausführungsform kann die Verarbeitungslogik eine Auswahl der ersten Hash-Engine und der zweiten Hash-Engine aus einem verfügbaren Satz von Hash-Engines empfangen.
  • In Block 720 kann die Verarbeitungslogik einen bestimmten Datenblock im Datensatz entweder auf der Grundlage eines bestimmten ersten Hashes, der dem bestimmten Datenblock zugeordnet ist, oder eines bestimmten zweiten oder nachfolgenden Hashes, der dem bestimmten Datenblock zugeordnet ist, deduplizieren. In Block 725 kann die Verarbeitungslogik den Datensatz auf der Grundlage einer Kompressionsblockgröße komprimieren. In mindestens einer Ausführungsform kann das Hashen nach der Datenkompression erfolgen.
  • 8 zeigt eine schematische Darstellung einer Maschine in der beispielhaften Form eines Computergeräts 800, in dem ein Satz von Befehlen ausgeführt werden kann, um die Maschine zu veranlassen, eines oder mehrere der hier beschriebenen Verfahren durchzuführen. Die Computervorrichtung 800 kann einen Rackmount-Server, einen Router-Computer, einen Server-Computer, einen Großrechner, einen Laptop-Computer, einen Tablet-Computer, einen Desktop-Computer oder eine beliebige Computervorrichtung mit mindestens einem Prozessor usw. umfassen, in der ein Satz von Anweisungen ausgeführt werden kann, um die Maschine zu veranlassen, eines oder mehrere der hierin erörterten Verfahren auszuführen. In alternativen Ausführungsformen kann die Maschine mit anderen Maschinen in einem LAN, einem Intranet, einem Extranet oder dem Internet verbunden (z. B. vernetzt) sein. Der Rechner kann in der Funktion eines Servers in einer Client-Server-Netzwerkumgebung arbeiten. Auch wenn nur eine einzige Maschine dargestellt ist, kann der Begriff „Maschine“ auch eine beliebige Ansammlung von Maschinen umfassen, die einzeln oder gemeinsam einen Satz (oder mehrere Sätze) von Anweisungen ausführen, um eine oder mehrere der hier beschriebenen Verfahren durchzuführen.
  • Die beispielhafte Computervorrichtung 800 umfasst eine Verarbeitungsvorrichtung (z. B. einen Prozessor) 802, einen Hauptspeicher 804 (z. B. Festwertspeicher (ROM), Flash-Speicher, dynamischer Direktzugriffsspeicher (DRAM) wie synchroner DRAM (SDRAM)), einen statischen Speicher 806 (z. B. Flash-Speicher, statischer Direktzugriffsspeicher (SRAM)) und eine Datenspeichereinrichtung 816, die über einen Bus 808 miteinander kommunizieren.
  • Die Verarbeitungsvorrichtung 802 ist eine oder mehrere Mehrzweckverarbeitungsvorrichtungen, wie z. B. ein Mikroprozessor, eine zentrale Verarbeitungseinheit oder ähnliches. Insbesondere kann die Verarbeitungsvorrichtung 802 einen CISC-Mikroprozessor (Complex Instruction Set Computing), einen RISC-Mikroprozessor (Reduced Instruction Set Computing), einen VLIW-Mikroprozessor (Very Long Instruction Word) oder einen Prozessor umfassen, der andere Befehlssätze oder Prozessoren implementiert, die eine Kombination von Befehlssätzen implementieren. Die Verarbeitungsvorrichtung 802 kann auch eine oder mehrere spezielle Verarbeitungsvorrichtungen enthalten, wie z. B. eine anwendungsspezifische integrierte Schaltung (ASIC), ein Field Programmable Gate Array (FPGA), einen digitalen Signalprozessor (DSP), einen Netzwerkprozessor oder Ähnliches. Die Verarbeitungsvorrichtung 802 ist so ausgebildet, dass sie Anweisungen 826 zur Durchführung der hier besprochenen Operationen und Schritte ausführt.
  • Das Computergerät 800 kann ferner eine Netzwerkschnittstelle 822 enthalten, die mit einem Netzwerk 818 kommunizieren kann. Die Rechenvorrichtung 800 kann auch eine Anzeigevorrichtung 810 (z. B. eine Flüssigkristallanzeige (LCD) oder eine Kathodenstrahlröhre (CRT)), eine alphanumerische Eingabevorrichtung 812 (z. B. eine Tastatur), eine Cursorsteuerungsvorrichtung 814 (z. B. eine Maus) und eine Signalerzeugungsvorrichtung 820 (z. B. einen Lautsprecher) umfassen. In mindestens einer Ausführungsform können die Anzeigevorrichtung 810, die alphanumerische Eingabevorrichtung 812 und die Cursorsteuerungsvorrichtung 814 in einer einzigen Komponente oder Vorrichtung (z. B. einem LCD-Touchscreen) kombiniert werden.
  • Die Datenspeichervorrichtung 816 kann ein computerlesbares Speichermedium 824 enthalten, auf dem ein oder mehrere Sätze von Anweisungen 826 gespeichert sind, die eine oder mehrere der hier beschriebenen Verfahren oder Funktionen verkörpern. Die Anweisungen 826 können sich auch vollständig oder zumindest teilweise im Hauptspeicher 804 und/oder in der Verarbeitungsvorrichtung 802 befinden, während sie von der Rechenvorrichtung 800 ausgeführt werden, wobei der Hauptspeicher 804 und die Verarbeitungsvorrichtung 802 ebenfalls computerlesbare Medien darstellen. Die Anweisungen können ferner über ein Netzwerk 818 über die Netzwerkschnittstellenvorrichtung 822 übertragen oder empfangen werden.
  • Während das computerlesbare Speichermedium 826 in einem Ausführungsbeispiel als einzelnes Medium dargestellt ist, kann der Begriff „computerlesbares Speichermedium“ ein einzelnes Medium oder mehrere Medien (z. B. eine zentralisierte oder verteilte Datenbank und/oder zugehörige Caches und Server) umfassen, die den einen oder mehrere Befehlssätze speichern. Der Begriff „computerlesbares Speichermedium“ kann auch jedes Medium umfassen, das in der Lage ist, einen Satz von Anweisungen zur Ausführung durch die Maschine zu speichern, zu kodieren oder zu tragen, und das die Maschine veranlasst, eines oder mehrere der Verfahren der vorliegenden Offenbarung durchzuführen. Der Begriff „computerlesbares Speichermedium“ kann dementsprechend Festkörperspeicher, optische Medien und magnetische Medien umfassen, ist aber nicht auf diese beschränkt.
  • Wie in der Praxis üblich, sind die verschiedenen in den Zeichnungen dargestellten Merkmale möglicherweise nicht maßstabsgetreu gezeichnet. Die in der vorliegenden Offenbarung dargestellten Abbildungen sind nicht als tatsächliche Ansichten eines bestimmten Geräts (z. B. einer Vorrichtung, eines Systems usw.) oder Verfahrens zu verstehen, sondern stellen lediglich idealisierte Darstellungen dar, die zur Beschreibung verschiedener Ausführungsformen der Offenbarung verwendet werden. Dementsprechend können die Abmessungen der verschiedenen Merkmale aus Gründen der Übersichtlichkeit beliebig erweitert oder reduziert werden. Darüber hinaus können einige der Zeichnungen aus Gründen der Übersichtlichkeit vereinfacht werden. So sind in den Zeichnungen möglicherweise nicht alle Komponenten eines bestimmten Apparats (z. B. einer Vorrichtung) oder alle Vorgänge eines bestimmten Verfahrens dargestellt.
  • Die hier und insbesondere in den beigefügten Ansprüchen (z. B. in den Hauptteilen der beigefügten Ansprüche) verwendeten Begriffe sind im Allgemeinen als „offene“ Begriffe zu verstehen (z. B. ist der Begriff „einschließlich“ als „einschließlich, aber nicht beschränkt auf‟ zu verstehen, der Begriff „mit“ als „mit mindestens“, der Begriff „umfasst“ als „umfasst, aber nicht beschränkt auf“ usw.).
  • Wenn eine bestimmte Anzahl von einleitenden Ansprüchen beabsichtigt ist, wird diese Absicht ausdrücklich im Anspruch erwähnt; fehlt eine solche Erwähnung, liegt keine Absicht vor. Zum besseren Verständnis können in den folgenden beigefügten Ansprüchen die einleitenden Ausdrücke „mindestens einer“ und „einer oder mehrere“ verwendet werden, um Anspruchserwähnungen einzuleiten. Die Verwendung solcher Ausdrücke sollte jedoch nicht so ausgelegt werden, dass die Einführung einer Anspruchsaufzählung durch die unbestimmten Artikel „ein“, „eine“ oder „eines“ einen bestimmten Anspruch, der eine solche eingeführte Anspruchsaufzählung enthält, auf Ausführungsformen beschränkt, die nur eine solche Aufzählung enthalten, selbst wenn derselbe Anspruch die einleitenden Ausdrücke „eine oder mehrere“ oder „mindestens eine“ und unbestimmte Artikel wie „ein“, „eine“ oder „eines“ enthält (z. B., „ein“, „eine“ und/oder „eines“ sollten so ausgelegt werden, dass sie „mindestens ein(es)“ oder „ein(es) oder mehrere“ bedeuten); dasselbe gilt für die Verwendung bestimmter Artikel, die zur Einleitung von Ansprüchen verwendet werden.
  • Selbst wenn eine bestimmte Anzahl von eingeführten Ansprüchen ausdrücklich genannt wird, ist diese Angabe so zu verstehen, dass mindestens die genannte Anzahl gemeint ist (z. B. bedeutet die bloße Angabe „zwei Bezugnahmen“ ohne weitere Modifikatoren mindestens zwei Bezugnahmen oder zwei oder mehr Bezugnahmen). In den Fällen, in denen eine Konvention analog zu „mindestens eines von A, B und C usw.“ oder „eines oder mehrere von A, B und C usw.“ verwendet wird, soll eine solche Konstruktion im Allgemeinen A allein, B allein, C allein, A und B zusammen, A und C zusammen, B und C zusammen oder A, B und C zusammen usw. einschließen. So ist beispielsweise die Verwendung des Begriffs „und/oder“ in diesem Sinne zu verstehen.
  • Darüber hinaus sollte jedes disjunktive Wort oder jeder disjunktive Satz, der zwei oder mehr alternative Begriffe enthält, ob in der Beschreibung, den Ansprüchen oder den Zeichnungen, so verstanden werden, dass die Möglichkeit besteht, genau einen der Begriffe, einen der beiden Begriffe oder beide Begriffe einzuschließen. Zum Beispiel sollte die Formulierung „A oder B“ so verstanden werden, dass sie die Möglichkeiten „A“ oder „B“ oder „A und B“ einschließt.
  • Außerdem werden die Begriffe „erster“, „zweiter“, „dritter“ usw. hier nicht unbedingt verwendet, um eine bestimmte Reihenfolge oder Anzahl von Elementen zu bezeichnen. Im Allgemeinen werden die Begriffe „erster“, „zweiter“, „dritter“ usw. zur Unterscheidung zwischen verschiedenen Elementen als generische Bezeichnungen verwendet. Solange nicht nachgewiesen wird, dass die Begriffe „erster“, „zweiter“, „dritter“ usw. eine bestimmte Reihenfolge bezeichnen, sollten diese Begriffe nicht so verstanden werden, dass sie eine bestimmte Reihenfolge bezeichnen. Wenn nicht nachgewiesen wird, dass die Begriffe „erster“, „zweiter“, „dritter“ usw. eine bestimmte Anzahl von Elementen bezeichnen, sollten diese Begriffe auch nicht so verstanden werden, dass sie eine bestimmte Anzahl von Elementen bezeichnen. Zum Beispiel kann ein erstes Widget als eine erste Seite und ein zweites Widget als eine zweite Seite beschrieben werden. Die Verwendung des Begriffs „zweite Seite“ in Bezug auf das zweite Widget kann dazu dienen, diese Seite des zweiten Widgets von der „ersten Seite“ des ersten Widgets zu unterscheiden, und soll nicht bedeuten, dass das zweite Widget zwei Seiten hat.
  • Alle Beispiele und bedingten Ausdrücke, die hier angeführt werden, sind für pädagogische Zwecke gedacht, um dem Leser das Verständnis der Erfindung und der Konzepte, die der Erfinder zur Weiterentwicklung des Standes der Technik beigetragen hat, zu erleichtern, und sind so auszulegen, dass sie keine Beschränkung auf diese speziell angeführten Beispiele und Bedingungen darstellen. Obwohl Ausführungsformen der vorliegenden Offenbarung im Detail beschrieben wurden, ist davon auszugehen, dass die verschiedenen Änderungen, Ersetzungen und Abwandlungen vorgenommen werden können, ohne vom Geist und Umfang der vorliegenden Offenbarung abzuweichen.

Claims (20)

  1. Ein Verfahren, das Folgendes umfasst: Identifizieren eines zu deduplizierenden Datensatzes auf der Grundlage einer Hash-Blockgröße und auf der Grundlage einer Kompressionsblockgröße, wobei die Hash-Blockgröße kleiner ist als die Kompressionsblockgröße; Definieren eines Satzes von Datenblöcken innerhalb des Datensatzes auf der Grundlage der Hash-Block-Größe; Erzeugen eines Hashes für jeden Datenblock im Satz der Datenblöcke innerhalb des Datensatzes; Deduplizieren eines Datenblocks in dem Datensatz auf der Grundlage eines entsprechenden Hashes für den Datenblock; und Komprimieren des Datensatzes auf der Grundlage der Kompressionsblockgröße.
  2. Das Verfahren nach Anspruch 1, wobei die Größe des Kompressionsblocks mindestens doppelt so groß ist wie die Größe des Hash-Blocks.
  3. Das Verfahren nach Anspruch 1 oder 2, wobei die Hash-Blockgröße ein Divisor der Kompressionsblockgröße ist.
  4. Das Verfahren nach einem der Ansprüche 1 bis 3, wobei die Blockgröße der Kompressionsblockgröße kein ganzzahliges Vielfaches der Hash-Blockgröße ist, wobei ein zweiter Datenblock des Satzes von Datenblöcken eine eindeutige Hash-Blockgröße hat, wobei das Komprimieren des Datensatzes auf der Grundlage der Kompressionsblockgröße mindestens eines der folgenden Merkmale umfasst: Verzicht auf die Komprimierung des zweiten Datenblocks; oder Verwerfen eines Hashes, der mit dem zweiten Datenblock verbunden ist.
  5. Das Verfahren nach einem der Ansprüche 1 bis 4 umfasst ferner: Empfangen von Benutzereingaben über eine Benutzerschnittstelle, die die Größe des Hash-Blocks angeben; und Einstellen der Hash-Block-Größe auf der Grundlage der Benutzereingabe.
  6. Das Verfahren nach einem der Ansprüche 1 bis 5, wobei der Datensatz eine elektronische Datei ist und die Größe des Kompressionsblocks gleich der Größe der elektronischen Datei ist.
  7. Das Verfahren nach einem der Ansprüche 1 bis 6, wobei der deduplizierte Datenblock nicht komprimiert wird.
  8. Ein Verfahren, das Folgendes umfasst: Identifizieren eines zu deduplizierenden Datensatzes auf der Grundlage einer Hash-Blockgröße und eines zu komprimierenden Datensatzes auf der Grundlage einer Kompressionsblockgröße, wobei die Hash-Blockgröße kleiner ist als die Kompressionsblockgröße; Definieren eines Satzes von Datenblöcken innerhalb des Datensatzes auf der Grundlage der Hash-Block-Größe; Erzeugen einer ersten Anweisung zum Erzeugen eines Hashes für jeden Datenblock im Satz der Datenblöcke innerhalb des Datensatzes; Erzeugen einer zweiten Anweisung zur Deduplizierung eines Datenblocks in dem Datensatz auf der Grundlage eines entsprechenden Hashes für den Datenblock; und Erzeugen einer dritten Anweisung zur Komprimierung des Datensatzes auf der Grundlage der Kompressionsblockgröße.
  9. Das Verfahren nach Anspruch 8, wobei die Größe des Kompressionsblocks mindestens doppelt so groß ist wie die Größe des Hash-Blocks.
  10. Das Verfahren nach Anspruch 8 oder 9, wobei die Hash-Blockgröße ein Divisor der Kompressionsblockgröße ist.
  11. Das Verfahren nach einem der Ansprüche 8 bis 10, wobei die Blockgröße der Kompressionsblockgröße kein ganzzahliges Vielfaches der Hash-Blockgröße ist, wobei ein zweiter Datenblock des Satzes von Datenblöcken eine eindeutige Hash-Blockgröße hat, wobei die dritte Anweisung zum Komprimieren des Datensatzes auf der Grundlage der Kompressionsblockgröße eine vierte Anweisung zum Ausführen von mindestens einem der folgenden Punkte umfasst: Verzicht auf die Komprimierung des zweiten Datenblocks; oder Verwerfen eines Hashes, der mit dem zweiten Datenblock verbunden ist.
  12. Das Verfahren nach einem der Ansprüche 8 bis 11, das außerdem umfasst: Empfangen von Benutzereingaben über eine Benutzerschnittstelle, die die Größe des Hash-Blocks angeben; und Einstellen der Hash-Block-Größe auf der Grundlage der Benutzereingabe.
  13. Das Verfahren nach einem der Ansprüche 8 bis 12, wobei der Datensatz eine elektronische Datei ist und die Größe des Kompressionsblocks gleich der Größe der elektronischen Datei ist.
  14. Das Verfahren nach einem der Ansprüche 8 bis 13, wobei der deduplizierte Datenblock nicht komprimiert wird.
  15. Ein System, das Folgendes umfasst: einen Speicher; und eine mit dem Speicher gekoppelte Verarbeitungseinheit, wobei die Verarbeitungseinheit so ausgebildet ist, dass sie das System veranlasst, Vorgänge durchzuführen, die Folgendes umfassen: Identifizieren eines zu deduplizierenden Datensatzes auf der Grundlage einer Hash-Blockgröße, wobei die Hash-Blockgröße kleiner ist als eine Kompressionsblockgröße, die dem Datensatz zugeordnet ist; Definieren eines Satzes von Datenblöcken innerhalb des Datensatzes auf der Grundlage der Hash-Block-Größe; Erzeugen eines Hashes für jeden Datenblock im Satz von Datenblöcken innerhalb des Datensatzes; und Deduplizieren eines Datenblocks in dem Datensatz auf der Grundlage eines entsprechenden Hashes für den Datenblock.
  16. Das System nach Anspruch 15, wobei die Größe des Kompressionsblocks mindestens doppelt so groß ist wie die Größe des Hash-Blocks.
  17. Das System nach Anspruch 15 oder 16, wobei die Hash-Blockgröße ein Divisor der Kompressionsblockgröße ist.
  18. Das System nach einem der Ansprüche 15 bis 17, wobei die Blockgröße des Kompressionsblocks kein ganzzahliges Vielfaches der Hash-Blockgröße ist, wobei ein zweiter Datenblock des Satzes von Datenblöcken eine eindeutige Hash-Blockgröße hat.
  19. Das System nach einem der Ansprüche 15 bis 18, wobei die Vorgänge außerdem umfassen: Empfangen, über eine Benutzerschnittstelle, einer Benutzereingabe, die die Größe des Hash-Blocks angibt; und Festlegen der Größe des Hash-Blocks auf der Grundlage der Benutzereingabe.
  20. Das System nach einem der Ansprüche 15 bis 19, wobei der Datensatz eine elektronische Datei ist, wobei die Größe des Kompressionsblocks gleich der Größe der elektronischen Datei ist.
DE102022102228.5A 2021-02-02 2022-01-31 Hashen mit unterschiedlicher hash-grösse und kompressionsgrösse Pending DE102022102228A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/165,910 US20220245097A1 (en) 2021-02-02 2021-02-02 Hashing with differing hash size and compression size
US17/165,910 2021-02-02

Publications (1)

Publication Number Publication Date
DE102022102228A1 true DE102022102228A1 (de) 2022-08-04

Family

ID=82403157

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102022102228.5A Pending DE102022102228A1 (de) 2021-02-02 2022-01-31 Hashen mit unterschiedlicher hash-grösse und kompressionsgrösse

Country Status (3)

Country Link
US (1) US20220245097A1 (de)
CN (1) CN114840502A (de)
DE (1) DE102022102228A1 (de)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114780501A (zh) * 2021-01-22 2022-07-22 伊姆西Ip控股有限责任公司 数据处理方法、电子设备和计算机程序产品

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9465823B2 (en) * 2006-10-19 2016-10-11 Oracle International Corporation System and method for data de-duplication
US7840537B2 (en) * 2006-12-22 2010-11-23 Commvault Systems, Inc. System and method for storing redundant information
US8205065B2 (en) * 2009-03-30 2012-06-19 Exar Corporation System and method for data deduplication
US8423520B2 (en) * 2009-11-23 2013-04-16 Dell Products L.P. Methods and apparatus for efficient compression and deduplication
US9626373B2 (en) * 2012-10-01 2017-04-18 Western Digital Technologies, Inc. Optimizing data block size for deduplication
US9639548B2 (en) * 2013-10-28 2017-05-02 Pivotal Software, Inc. Selecting files for compaction
US9384206B1 (en) * 2013-12-26 2016-07-05 Emc Corporation Managing data deduplication in storage systems
US10078451B1 (en) * 2016-01-22 2018-09-18 Red Hat, Inc. Deduplicating data based on boundary identification
US20180024767A1 (en) * 2016-07-19 2018-01-25 Western Digital Technologies, Inc. Reference Set Construction for Data Deduplication
US10452616B1 (en) * 2018-10-29 2019-10-22 EMC IP Holding Company LLC Techniques for improving storage space efficiency with variable compression size unit

Also Published As

Publication number Publication date
US20220245097A1 (en) 2022-08-04
CN114840502A (zh) 2022-08-02

Similar Documents

Publication Publication Date Title
DE112012005037B4 (de) Verwalten von redundanten unveränderlichen Dateien unter Verwendung von Deduplizierungen in Speicher-Clouds
DE112015000218B4 (de) Verfahren, System und Computerprogramm zum Abtasten einer Mehrzahl von Speicherbereichen in einem Arbeitsspeicher nach einer spezifizierten Anzahl von Ergebnissen
DE102013208930A1 (de) Zusammenfassen von Einträgen in einem Deduplizierungs-lndex
DE202012013462U1 (de) Datenverarbeitung in einem Mapreduce-Framework
DE202016005239U1 (de) Graph-basierte Abfragen
DE102016105526A1 (de) Schnelles mehrschichtiges Indexieren mit Unterstützung für dynamische Aktualisierung
DE102016013248A1 (de) Bezugsblockansammlung in einer Bezugsmenge zur Deduplizierung beim Speichermanagement
DE112012003503T5 (de) Skalierbares Deduplizierungssystem mit kleinen Blöcken
DE102014204834A1 (de) Computerimplementierte Systeme und Verfahren zum Vergleichen und Assoziieren von Objekten
DE102013207049A1 (de) Überwachen der Datenstrompufferung zur Optimierung der Operatorverarbeitung
DE202012013427U1 (de) Verknüpfung von Tabellen in einem MapReduce-Verfahren
DE112013000734B4 (de) Multiplex-Klassifizierung zum Komprimieren von Tabellendaten
DE112017006106T5 (de) Erzeugen von, Zugreifen auf und Anzeigen von Abstammungsmetadaten
DE102013200355A1 (de) Zusammenfügen von Dokumenten aud der Grundlage der Kenntnis eines Dokumentenschemas
DE112013003205T5 (de) Verfahren und Vorrichtung zum Verarbeiten von Datenbankdaten in einem verteilten Datenbanksystem
DE112011101200T5 (de) Spaltenorientierte Speicher-Darstellungen von Datensätzen
DE102013201174A1 (de) Online-Überprüfung einer Standby-Datenbank in physischen Replikationsumgebungen mit Protokollversand
DE112013000713T5 (de) Verfolgen von Änderungen in Zusammenhang mit einer Sammlung von Dokumenten
DE102008027605A1 (de) System und Verfahren zur rechnerbasierten Analyse großer Datenmengen
DE112019005881T5 (de) Kryptografische überprüfung von datenbanktransaktionen
DE112015002101T5 (de) Systeme und Verfahren für einen verbesserten Datenstrukturspeicher
DE102022102228A1 (de) Hashen mit unterschiedlicher hash-grösse und kompressionsgrösse
DE112016002305T5 (de) Reduktion der Schreibverstärkung in einem Objektspeicher
DE112018003585T5 (de) Deduplizierung eines bandlaufwerkspeichers
WO2018122269A1 (de) Bitsequenzbasiertes datenklassifikationssystem

Legal Events

Date Code Title Description
R012 Request for examination validly filed