DE102021126985A1 - Speicherung einer kleinen objektdarstellung in einem deduplizierungssystem - Google Patents

Speicherung einer kleinen objektdarstellung in einem deduplizierungssystem Download PDF

Info

Publication number
DE102021126985A1
DE102021126985A1 DE102021126985.7A DE102021126985A DE102021126985A1 DE 102021126985 A1 DE102021126985 A1 DE 102021126985A1 DE 102021126985 A DE102021126985 A DE 102021126985A DE 102021126985 A1 DE102021126985 A1 DE 102021126985A1
Authority
DE
Germany
Prior art keywords
chunk
level data
data structure
manifest
metadata
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.)
Granted
Application number
DE102021126985.7A
Other languages
English (en)
Inventor
David Malcolm Falkinder
Richard Phillip MAYO
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 Enterprise Development 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 Enterprise Development LP filed Critical Hewlett Packard Enterprise Development LP
Publication of DE102021126985A1 publication Critical patent/DE102021126985A1/de
Granted 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/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems
    • G06F16/258Data format conversion from or to a database
    • 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
    • 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/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0608Saving storage space on storage systems
    • 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/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2219Large Object storage; Management thereof
    • 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/23Updating
    • G06F16/2379Updates performed during online database operations; commit processing
    • 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
    • G06F3/0641De-duplication techniques
    • 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/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0688Non-volatile semiconductor memory arrays

Landscapes

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

Abstract

Beispiele können die Speicherung einer kleinen Objektdarstellung in einem Deduplizierungssystem umfassen. In Beispielen kann die Darstellung eines kleinen Objekts im Deduplizierungssystem auf der Grundlage der Feststellung gespeichert werden, dass das Objekt kleiner als eine Schwellengröße ist. In Beispielen kann die Darstellung eines kleinen Objekts einen direkten Verweis von einer Datenstruktur der obersten Ebene auf Metadaten des kleinen Objekts in einer Datenstruktur der untersten Ebene der Darstellung des kleinen Objekts enthalten.

Description

  • HINTERGRUND
  • Ein Client-Computer, wie z. B. ein Server oder ähnliches, kann Daten in einem primären Speicher-Array speichern und Arbeitslasten anhand der im primären Speicher-Array gespeicherten Daten ausführen. In einigen Beispielen können die im primären Speicher-Array gespeicherten Daten zu Zwecken der Redundanz und des Datenschutzes in einem Computersystem gesichert werden, das sowohl vom Client-Computergerät als auch vom primären Speicher-Array getrennt ist. In einigen Beispielen kann dieses Computersystem Daten in einer deduplizierten Form speichern, um die Daten kompakter zu speichern.
  • Figurenliste
  • Die folgende detaillierte Beschreibung bezieht sich auf die Zeichnungen, in denen:
    • ist ein Blockdiagramm eines beispielhaften Deduplizierungssystems zur Speicherung einer kleinen Objektdarstellung eines Objekts;
    • ist ein Blockdiagramm eines Beispiel-Computergeräts, das Anweisungen enthält, die ausgeführt werden können, um eine kleine Objektdarstellung eines Objekts zu speichern;
    • ist ein Flussdiagramm eines Beispielverfahrens, das die Speicherung einer kleinen Objektdarstellung eines Objekts umfasst;
    • ist ein Blockdiagramm eines beispielhaften Deduplizierungssystems, in dem eine kleine Objektdarstellung ein Manifest enthält; und
    • ist ein Blockdiagramm eines beispielhaften Deduplizierungssystems zur Deduplizierung von Manifesten.
  • DETAILLIERTE BESCHREIBUNG
  • Ein Client-Computergerät, wie z. B. ein Server, eine Speicheranordnung usw. kann Daten sichern, indem es die Daten in einem Computersystem speichert, das in der Lage ist, eine Deduplizierung an den Daten vorzunehmen, um die Daten in einer deduplizierten Form zu speichern, die kompakter ist als eine nicht-duplizierte Form. Ein solches Computersystem, das in der Lage ist, eine solche Deduplizierung von Daten durchzuführen, kann hier als Deduplizierungssystem bezeichnet werden und kann durch eine Backup-Appliance implementiert werden. In den hier beschriebenen Beispielen kann ein Deduplizierungssystem einen Deduplizierungsprozess an einem Objekt durchführen, das in den hier beschriebenen Beispielen eine Sammlung von Daten ist. Ein Deduplizierungssystem kann Objekte als Datenströme zur deduplizierten Speicherung empfangen.
  • Die einzelnen Objekte, die einem Deduplizierungssystem zur deduplizierten Speicherung zur Verfügung gestellt werden, können vom Client-System definiert werden, das die Objekte dem Deduplizierungssystem zur Speicherung zur Verfügung stellt, so dass die bereitgestellten Objekte in Größe und Art des Inhalts variieren können. Ein Objekt kann zum Beispiel eine einzelne Datei, ein ganzes Dateisystem (oder einen Teil davon), ein oder mehrere virtuelle Volumes oder ähnliches darstellen, und ein bestimmter Client kann dem Deduplizierungssystem Objekte unterschiedlicher Größe zur Verfügung stellen. Es kann jedoch ineffizient sein, deduplizierte Darstellungen von großen und kleinen Objekten auf die gleiche Weise zu speichern. Um diese Probleme zu lösen, können die hier beschriebenen Beispiele eine große Objektdarstellung für große Objekte in einem Deduplizierungssystem und eine kleine Objektdarstellung für kleine Objekte im Deduplizierungssystem verwenden.
  • ist ein Blockdiagramm eines beispielhaften Deduplizierungssystems 100 zur Speicherung einer kleinen Objektdarstellung eines Objekts. Das Deduplizierungssystem 100 kann durch ein Computergerät, wie z. B. mindestens ein Speicher-Array, eine Backup-Appliance oder ähnliches, implementiert werden. Das Deduplizierungssystem 100 kann mindestens eine Verarbeitungsressource 110 und mindestens ein maschinenlesbares Speichermedium 120 umfassen, das mindestens Anweisungen 122 enthält (z. B. mit diesen kodiert ist), die von der mindestens einen Verarbeitungsressource 110 ausgeführt werden können, um hierin beschriebene Funktionalitäten in Bezug auf Anweisungen 122 zu implementieren. Hierin beschriebene Funktionalitäten, die von dem Deduplizierungssystem 100 ausgeführt werden (oder von diesem ausgeführt werden können), können von der/den Verarbeitungsressource(n) 110 implementiert werden, die die Anweisungen 122 des Deduplizierungssystems 100 ausführen, und können auch als Funktionalitäten der Anweisungen 122 beschrieben werden (d.h. Funktionalitäten, die von der/den Verarbeitungsressource(n) 110 ausgeführt werden, wenn sie die Anweisungen 122 ausführen).
  • Das Deduplizierungssystem 100 kann deduplizierte Repräsentationen von Objekten unter Verwendung einer Vielzahl von Datenstrukturen speichern. Die Vielzahl von Datenstrukturen kann Container-Datenstrukturen (z.B. Dateien) enthalten, die feste oder variabel große Teile des Dateninhalts des Objekts/der Objekte speichern sollen. Container-Datenstrukturen können hier auch als Container bezeichnet werden. Im Beispiel von verwendet das Deduplizierungssystem 100 jeden der Container 250, 252, 254 und 256, um die jeweiligen Chunks 260 der im Deduplizierungssystem 100 gespeicherten Objekte über deduplizierte Darstellungen zu speichern. Zum Beispiel kann Container 250 mindestens die Chunks 261-264 speichern, Container 252 kann mindestens die Chunks 261-269 speichern, Container 254 kann mindestens die Chunks 206-209 speichern und Container 250 kann mindestens die Chunks 201-204 speichern. Obwohl aus Gründen der Übersichtlichkeit in den Figuren in jedem Behälter eine relativ geringe Anzahl von Chunks 260 dargestellt ist, kann jeder Behälter in den hier beschriebenen Beispielen mehr oder weniger Chunks enthalten.
  • Das Deduplizierungssystem 100 kann Metadaten für die deduplizierten Repräsentationen von Objekten in einer Hierarchie 290 aus verschiedenen Arten von Datenstrukturen speichern. Die Hierarchie 290 kann Datenstrukturen der obersten Ebene, Datenstrukturen der untersten Ebene und Datenstrukturen der Zwischenebene enthalten, die von den Datenstrukturen der obersten Ebene und der untersten Ebene in der Hierarchie 290 getrennt sind und zwischen diesen liegen. Im Beispiel von kann die Hierarchie 290 eine Top-Level-Datenstruktur 210, Zwischen-Level-Datenstrukturen 212, 214 und 216 und Bottom-Level-Datenstrukturen 220, 222, 224 und 226 enthalten.
  • Jede Datenstruktur der untersten Ebene enthält eine entsprechende Instanz von Chunk-Metadaten 150 für jeden Chunk 260 in einer entsprechenden Container-Datenstruktur. Im Beispiel von enthalten die Datenstrukturen der unteren Ebene 220, 222, 224 und 226 jeweils Instanzen von Chunk-Metadaten 150 für Chunks 260 der entsprechenden Container-Datenstrukturen 250, 252, 254 und 256. Eine Datenstruktur der untersten Ebene, die Instanz(en) von Chunk-Metadaten 150 speichert, kann hier als Container-Index oder Container-Index-Datenstruktur bezeichnet werden.
  • Jede Instanz von Chunk-Metadaten 150 ist mit einem entsprechenden Chunk 260 verbunden, der in einer der Container-Datenstrukturen gespeichert ist, und enthält Metadaten, die mit dem entsprechenden Chunk verbunden sind. Die Metadaten können eine Chunk-Signatur (die den Inhalt des zugehörigen Chunk repräsentiert), eine Referenzzählung für den zugehörigen Chunk und einen Ortsbezeichner enthalten, der den Speicherort des zugehörigen Chunk angibt (z. B. einen Ort innerhalb der Container-Datenstruktur, in der er gespeichert ist). Chunk-Metadaten 150 können auch einen Datenbezeichner (z. B. eine Ankunftsnummer) enthalten, der diese Instanz der Chunk-Metadaten 150 selbst identifiziert.
  • Im Beispiel von entspricht die Datenstruktur 220 auf der untersten Ebene der Container-Datenstruktur 250 und enthält eine entsprechende Instanz von Chunk-Metadaten 150 für jeden der in der Container-Datenstruktur 250 gespeicherten Chunks 260. Beispielsweise enthält die Datenstruktur 220 auf der untersten Ebene eine Instanz von Chunk-Metadaten 150 (in dargestellt) für Chunk 261 des Containers 250. Die Chunk-Metadaten 150 für Chunk 261 umfassen einen Datenidentifikator 230 (um diese Instanz von Chunk-Metadaten 150 selbst zu identifizieren), eine Chunk-Signatur SIG-1 für Chunk 261, eine Referenzzahl von 2 für Chunk 261 und eine Position 80, die eine Position von Chunk 261 angibt (z. B. einen Offset innerhalb der Container-Datenstruktur 250).
  • Die ebenfalls in dargestellte Datenstruktur 222 auf der untersten Ebene, die mit dem Container 252 verbunden ist, enthält Chunk-Metadaten 150 für Chunk 266 des Containers 252. Die Chunk-Metadaten 150 für Chunk 266 umfassen den Datenidentifikator 242, die Chunk-Signatur SIG-5, eine Referenzzahl von 3 und den Speicherort 82. Die Datenstruktur 224 auf unterster Ebene, die dem Container 254 zugeordnet ist, enthält die Chunk-Metadaten 150 für den Chunk 206 des Containers 254. Die Chunk-Metadaten 150 für Chunk 206 enthalten den Datenidentifikator 236, die Chunk-Signatur SIG-3, einen Referenzzähler von 1 und den Speicherplatz 84. Ebenfalls in dargestellt sind mehrere Instanzen von Chunk-Metadaten 150, die in der Bottom-Level-Datenstruktur 226 enthalten sind, die mit dem Container 256 assoziiert ist, darunter: Chunk-Metadaten 150 für Chunk 201 (einschließlich Kennung 249, Signatur SIG-2, einer Referenzzahl von 4 und Speicherplatz 85); Chunk-Metadaten 150 für Chunk 203 (einschließlich Kennung 270, Signatur SIG-4, einer Referenzzahl von 2 und Speicherplatz 86); und Chunk-Metadaten 150 für Chunk 204 (einschließlich Kennung 272, Signatur SIG-7, einer Referenzzahl von „7“ und Speicherplatz 87). Obwohl aus Gründen der Übersichtlichkeit eine relativ kleine Anzahl von Instanzen von Chunk-Metadaten 150 in jeder Datenstruktur der unteren Ebene in den Abbildungen dargestellt ist, kann jede Datenstruktur der unteren Ebene in den hier beschriebenen Beispielen mehr Instanzen von Chunk-Metadaten 150 enthalten.
  • Datenstrukturen auf mittlerer Ebene der Hierarchie 290, sofern vorhanden, sind von den Datenstrukturen auf oberster und unterster Ebene in der Hierarchie 290 getrennt und liegen zwischen diesen. Eine Datenstruktur der obersten Ebene 210 in der Hierarchie 290 kann eine oder mehrere Objektkennungen (z. B. 20, 30) speichern, die jeweils mit einem entsprechenden Objekt verbunden sind, das (in einer deduplizierten Darstellung) im Deduplizierungssystem 100 gespeichert ist. In einigen Beispielen kann ein Client-System des Deduplizierungssystems 100 den/die Objektidentifikator(en) verwenden, um auf das/die jeweilige(n) Objekt(e) zuzugreifen, das/die im Deduplizierungssystem 100 gespeichert ist/sind. Eine Top-Level-Datenstruktur 210 kann jeden der darin gespeicherten Objektbezeichner auf eine entsprechende Metadaten-Referenz abbilden. Eine zugeordnete Metadatenreferenz kann auf andere Metadaten einer deduplizierten Darstellung eines im Deduplizierungssystem 100 gespeicherten Objekts verweisen (z. B. einen Ort angeben). In solchen Beispielen wird für jeden Objektidentifikator, der in der Top-Level-Datenstruktur 210 gespeichert ist, der Objektidentifikator mit einem bestimmten Objekt assoziiert und die Top-Level-Datenstruktur 210 ordnet den Objektidentifikator einem Metadatenverweis auf andere Metadaten einer deduplizierten Darstellung des bestimmten Objekts zu.
  • Im Beispiel von kann die Top-Level-Datenstruktur 210 (die auch als Katalog oder Katalogdatenstruktur 210 bezeichnet werden kann) einen Objektidentifikator (ID) 20 (z. B. einen Schlüssel) speichern, der mit einem vom Kunden bereitgestellten Objekt 10 verbunden ist, das in einer deduplizierten Darstellung im Deduplizierungssystem 100 gespeichert ist. Die Top-Level-Datenstruktur 210 ordnet den Objektidentifikator 20 (der dem Objekt 10 zugeordnet ist) einer Referenz 25 zu, bei der es sich um einen Verweis auf andere Metadaten (Datenstruktur 212 auf mittlerer Ebene im Beispiel von ) der deduplizierten Darstellung des Objekts 10 handelt. Obwohl aus Gründen der Übersichtlichkeit eine relativ kleine Anzahl von Zuordnungen zwischen Objektidentifikator und Referenzen in der Top-Level-Datenstruktur 210 in den Figuren dargestellt ist, kann jede Top-Level-Datenstruktur in den hier beschriebenen Beispielen mehr oder weniger solcher Zuordnungen enthalten.
  • Wie bereits erwähnt, sind die Datenstrukturen der Zwischenebene der Hierarchie 290, sofern vorhanden, von den Datenstrukturen der obersten und der untersten Ebene der Hierarchie 290 getrennt und liegen zwischen diesen. Jede Datenstruktur der Zwischenebene kann von einer Datenstruktur der obersten Ebene oder einer anderen (höheren) Datenstruktur der Zwischenebene in der Hierarchie 290 referenziert werden (z. B. durch einen Verweis auf diese). Jede Datenstruktur der mittleren Ebene kann auf eine andere (niedrigere) Datenstruktur der mittleren Ebene in der Hierarchie 290 oder auf eine oder mehrere Datenstrukturen der unteren Ebene verweisen (z. B. zeigen). In der Hierarchie 290 kann eine erste Datenstruktur als höher angesehen werden als eine zweite Datenstruktur, auf die die erste Datenstruktur zeigt oder verweist. In der Hierarchie 290 kann eine erste Datenstruktur als niedriger angesehen werden als eine zweite Datenstruktur, die auf die erste Datenstruktur zeigt oder auf sie verweist.
  • Im Beispiel von kann die Top-Level-Datenstruktur 210 auf die Intermediate-Level-Datenstruktur 212 verweisen, die wiederum auf die Intermediate-Level-Datenstrukturen 214 und 216 verweisen kann. Die Datenstruktur 214 auf mittlerer Ebene kann auf die Datenstrukturen 220 und 222 auf unterer Ebene verweisen (z. B. Instanzen von Chunk-Metadaten 150 darin) und die Datenstruktur 216 auf mittlerer Ebene kann auf die Datenstrukturen 224 und 226 auf unterer Ebene verweisen (z. B. Instanzen von Chunk-Metadaten 150 darin). In einigen Beispielen kann eine deduplizierte Darstellung eines vom Kunden bereitgestellten Objekts ein oder mehrere Manifeste enthalten, die gemeinsam eine Reihenfolge der (im Deduplizierungssystem gespeicherten) Chunks angeben, die, wenn sie in dieser Reihenfolge kombiniert werden, eine rekonstituierte (oder rehydrierte) Version des vom Kunden bereitgestellten Objekts bilden würden, die in der deduplizierten Darstellung im Deduplizierungssystem gespeichert ist. Die Reihenfolge der in einem Manifest angegebenen Chunks kann hier als Rekonstruktionsreihenfolge bezeichnet werden. In diesen Beispielen kann ein Manifest ein ganzes Objekt oder einen Teil eines Objekts darstellen (in diesem Fall stellen mehrere Manifeste für mehrere Teile eines Objekts gemeinsam das gesamte Objekt dar).
  • In den hier beschriebenen Beispielen kann eine Datenstruktur auf mittlerer Ebene ein Manifest für ein Objekt (oder einen Teil dieses Objekts) umfassen, das im Deduplizierungssystem gespeichert ist. Das Manifest für das Objekt (oder einen Teil davon) kann die Sammlung von Chunks darstellen, aus denen das Objekt (oder ein Teil davon) besteht, und zwar durch Verweise auf Chunk-Metadaten, die mit jedem dieser Chunks verbunden sind. Ein Manifest für das Objekt (oder einen Teil davon) kann eine Rekonstruktionsreihenfolge für die Chunks darstellen, aus denen das Objekt (oder ein Teil davon) besteht. Beispielsweise kann ein Manifest die Rekonstruktionsreihenfolge für die Chunks enthalten, indem es die Verweise auf die Chunk-Metadaten für diese Chunks in einer Reihenfolge speichert, die die Rekonstruktionsreihenfolge für die Chunks darstellt (oder auf jede andere geeignete Weise).
  • Im Beispiel von umfasst die Datenstruktur 214 der Zwischenebene ein Manifest 160 mit direkten Verweisen 162 auf die Chunk-Metadaten 150 in der/den Datenstruktur(en) der unteren Ebene (z. B. 220, 222, usw.). Das Manifest 160 kann die Verweise 162 auf die Chunk-Metadaten 150 für einen ersten Teil des Objekts 10 speichern, der mit der großen Objekt-ID 20 verbunden ist. Das Manifest 160 kann die Referenzen 162 in einer Rekonstruktionsreihenfolge für den ersten Teil des Objekts 10 speichern. Die Verweise 162 umfassen einen Verweis auf Chunk-Metadaten 150 mit der ID 230, die in der Datenstruktur 220 („BL-220“) auf unterster Ebene gespeichert sind, und einen Verweis auf Chunk-Metadaten 150 mit der ID 242, die in der Datenstruktur 222 („BL-222“) auf unterster Ebene gespeichert sind.
  • Die Datenstruktur 216 auf mittlerer Ebene umfasst ein Manifest 164 mit direkten Verweisen 166 auf Chunk-Metadaten 150 in Datenstruktur(en) auf unterer Ebene (z. B. 224, 226 usw.). Das Manifest 164 kann die Verweise 166 auf die Chunk-Metadaten 150 für einen zweiten Teil des Objekts 10 speichern, der mit der großen Objekt-ID 20 verbunden ist. Das Manifest 164 kann die Referenzen 166 in einer Rekonstruktionsreihenfolge für den zweiten Teil des Objekts 10 speichern. Die Verweise 166 umfassen einen Verweis auf die Chunk-Metadaten 150 mit der ID 236, die in der Bottom-Level-Datenstruktur 224 („BL-224“) gespeichert sind, und einen Verweis auf die Chunk-Metadaten 150 mit der ID 272, die in der Bottom-Level-Datenstruktur 226 („BL-226“) gespeichert sind. Da ein Manifest eine Rekonstruktionsreihenfolge für mindestens einen Teil eines Objekts darstellen kann, kann es hier auch als Teilindex bezeichnet werden. Obwohl aus Gründen der Übersichtlichkeit in den in den Abbildungen gezeigten Manifesten eine relativ geringe Anzahl von Referenzen dargestellt ist, kann jedes Manifest in den hier beschriebenen Beispielen mehr oder weniger Referenzen enthalten.
  • In den hier beschriebenen Beispielen kann eine deduplizierte Darstellung eines Objekts die Daten und Metadaten des Deduplizierungssystems 100 enthalten, die zur Rekonstruktion einer vollständigen (d.h. nicht-duplizierten oder re-hydrierten) Version des Objekts verwendet werden können. Im Beispiel von kann die deduplizierte Darstellung für das Objekt 10 die Top-Level-Datenstruktur 210, die Intermediate-Level-Datenstrukturen 212, 214 und 216 und die Bottom-Level-Datenstrukturen 220, 222, 224 und 226 (die eine baumartige Struktur für den Zugriff auf jeden der entsprechenden Chunks 260 für das Objekt 10 bilden) sowie verschiedene Chunks 260 enthalten, die in den Containern des Deduplizierungssystems 100 gespeichert sind und auf die durch die Metadaten der deduplizierten Darstellung verwiesen wird. In den hier beschriebenen Beispielen können Daten, Metadaten und Datenstrukturen des Deduplizierungssystems 100 Teil mehrerer verschiedener deduplizierter Darstellungen von Objekten sein, die im Deduplizierungssystem 100 gespeichert sind.
  • In solchen Beispielen kann das Deduplizierungssystem 100 für den Zugriff auf Teile von Objekt 10 (z.B. für die vollständige Rekonstruktion, den selektiven Zugriff auf Daten von Objekt 10 usw.) mit der großen Objekt-ID 20 beginnen, die mit Objekt 10 verbunden ist. Basierend auf der Zuordnung der großen Objekt-ID 20 zur Referenz 25 in der Datenstruktur 210 kann das Deduplizierungssystem 100 der Referenz 25 bis zur Datenstruktur 212 auf mittlerer Ebene folgen. Von dort aus kann das Deduplizierungssystem 100 jedem der Verweise 168 von der Datenstruktur 212 auf der mittleren Ebene zu den Datenstrukturen 214, 216, usw. folgen. Obwohl aus Gründen der Übersichtlichkeit eine relativ kleine Anzahl von Referenzen 168 in der in den Figuren gezeigten Zwischenstufen-Datenstruktur 212 dargestellt ist, kann eine Zwischenstufen-Datenstruktur in den hier beschriebenen Beispielen mehr oder weniger solcher Referenzen enthalten.
  • Das Deduplizierungssystem 100 kann die jeweiligen Manifeste 160, 164 usw. verwenden, die in jeder der Datenstrukturen 214, 216 usw. der Zwischenebene enthalten sind, um auf die entsprechenden Chunks 260 des Objekts 10 zuzugreifen (und sie gegebenenfalls in der Rekonstruktionsreihenfolge zu rekonstruieren). Unter Verwendung des Manifests 160 kann das Deduplizierungssystem 100 beispielsweise eine erste Referenz 162 verwenden, um auf die Chunk-Metadaten 150 mit der ID 230 in der Bottom-Level-Datenstruktur 220 zuzugreifen. Von diesen Chunk-Metadaten 150 aus kann das Deduplizierungssystem 100 auf den Chunk 261 im Speicherplatz 80 des Containers 250 zugreifen. Das Deduplizierungssystem 100 kann eine zweite Referenz 162 verwenden, um auf Chunk-Metadaten 150 mit der ID 242 in der Bottom-Level-Datenstruktur 220 zuzugreifen und von diesen Chunk-Metadaten 150 aus auf Chunk 266 an Position 82 des Containers 252 zuzugreifen. Auf die gleiche Weise kann das Deduplizierungssystem 100 auf jeden Chunk zugreifen, auf den das Manifest 160 über jede der Referenzen 162 verweist.
  • Das Deduplizierungssystem 100 kann in ähnlicher Weise auf Chunks 260 zugreifen, die auf zusätzlichen Manifesten von Datenstrukturen auf mittlerer Ebene basieren, auf die die Datenstruktur 212 auf mittlerer Ebene verweist (d.h. Manifeste für Objekt 10). Zum Beispiel kann das Deduplizierungssystem 100 jede der Referenzen 166 des Manifests 164 verwenden, um auf Instanzen von Chunk-Metadaten 150 zuzugreifen, einschließlich der Verwendung einer ersten Referenz 166, um auf Chunk-Metadaten 150 mit der ID 236 in der Bottom-Level-Datenstruktur 224 zuzugreifen und von diesen Chunk-Metadaten 150 auf den Chunk 206 an der Position 84 des Containers 254 zuzugreifen. Das Deduplizierungssystem 100 kann eine zweite Referenz 166 verwenden, um auf die Chunk-Metadaten 150 mit der ID 272 in der Bottom-Level-Datenstruktur 226 zuzugreifen und von diesen Chunk-Metadaten 150 aus auf den Chunk 204 an der Position 85 des Containers 256 zuzugreifen.
  • Die Hierarchie 290 von Datenstrukturen, wie oben beschrieben, kann für die Darstellung großer Objekte (z. B. in der Größenordnung von GB bis TB oder mehr) effizient sein. Beispielsweise kann die baumartige Struktur der Hierarchie 290 von Datenstrukturen den Zugriff auf ein bestimmtes Datenelement eines großen Objekts effizienter machen als dies bei Metadaten der Fall wäre, die in einer flachen oder monolithischen Struktur organisiert sind. Zum Beispiel kann die Hierarchie 290 viel weniger Verarbeitungsaufwand erfordern als ein flacheres Metadaten-Layout, da das Durchlaufen der baumartigen Struktur der Hierarchie 290 oft weniger Verarbeitungsaufwand erfordert als das Durchsuchen eines flacheren Metadaten-Layouts.
  • Die Hierarchie 290 der Datenstrukturen kann auch eine effizientere Nutzung der Speicherressourcen beim Zugriff auf die Daten im Vergleich zu einem flacheren Metadaten-Layout ermöglichen. Mit einer Hierarchie 290 von Datenstrukturen kann ein Deduplizierungssystem 100 zum Beispiel die Menge an Metadaten begrenzen, die in den Speicher geladen werden, um einen bestimmten Zugriff durchzuführen. Beispielsweise kann die Menge der in den Speicher geladenen Metadaten auf die Datenstrukturen in der Hierarchie 290 beschränkt werden, die für das Auffinden der angeforderten Daten relevant sind, wodurch das Laden anderer Datenstrukturen der Hierarchie 290 (z. B. Manifestdatenstrukturen), die für eine bestimmte Zugriffsanforderung nicht verwendet werden, vermieden wird. Im Gegensatz dazu kann eine flache Metadaten-Organisation oder sogar eine flachere Metadaten-Organisation, die größere individuelle Datenstrukturen verwendet, mehr Speicherplatz verbrauchen und größere Mengen an Eingabe/Ausgabe (E/A) und Latenzzeit erfordern, um mehr Daten in den Speicher zu ziehen, um auf die angeforderten Daten zuzugreifen.
  • Während eine Hierarchie von Datenstrukturen bei großen Objekten vorteilhaft sein kann, kann sie bei kleinen Objekten jedoch recht ineffizient sein. Zum Beispiel kann die oben beschriebene Hierarchie von Datenstrukturen ineffizient sein, wenn die Objektgröße in der Nähe einer minimalen Blockgröße liegt, die vom Deduplizierungssystem verwendet werden kann (z.B. aufgrund einer Dateisystemgrenze, einer Speichergerätegrenze oder ähnlichem). Bei einem Objekt, das die Größe eines einzelnen Blocks hat (z. B. 4 KB), kann die Verwendung von zwei Ebenen von Datenstrukturen auf mittlerer Ebene in einer Hierarchie 290 doppelt so viel Platz beanspruchen wie der tatsächliche Inhalt der dargestellten Daten (d. h. 4 KB in diesem Beispiel). Während das in diesem Beispiel dargestellte Objekt 4KB groß ist, kann jede der beiden Zwischenebenen der Metadaten für das Objekt mindestens weitere 4KB beanspruchen und damit doppelt so viel Platz beanspruchen (z. B. 2 x 4KB = 8KB) wie der eigentliche Inhalt der dargestellten Daten (d. h. 4KB in diesem Beispiel). In ähnlicher Weise kann der Zugriff auf Teile des kleinen Objekts in einem solchen Beispiel bedeuten, dass jede der für dieses Objekt verwendeten Datenstrukturen auf mittlerer Ebene im Speicher abgerufen werden muss, um auf das kleine Objekt zuzugreifen, was den Speicherverbrauch und die Latenzzeit für den Abruf von Teilen des kleinen Objekts erhöht.
  • Um diese Probleme zu lösen, können die hier beschriebenen Beispiele eine kleine Objektdarstellung eines Objekts auf der Grundlage der Feststellung speichern, dass das Objekt kleiner als eine Schwellengröße ist. Die Darstellung eines kleinen Objekts des gegebenen Objekts kann einen direkten Verweis von einer Datenstruktur der obersten Ebene auf Metadaten des kleinen Objekts in einer Datenstruktur der untersten Ebene der Darstellung des kleinen Objekts umfassen, wobei der direkte Verweis alle Datenstrukturen der Zwischenebene auslässt, die von den Datenstrukturen der obersten Ebene und der untersten Ebene der Darstellung des kleinen Objekts getrennt sind.
  • Auf diese Weise können die hier beschriebenen Beispiele in der Lage sein, kleine Objekte in einem Deduplizierungssystem zu speichern, während Datenstrukturen auf mittlerer Ebene weggelassen werden, die, wenn sie verwendet werden, die Größe der Deduplizierungsrepräsentation des kleinen Objekts (im Verhältnis zur geringen Größe des Objekts selbst) signifikant erhöhen und auch den Speicherverbrauch und die Latenzzeit beim Zugriff auf die Deduplizierungsrepräsentation des kleinen Objekts erhöhen könnten. Die Speicherung eines kleinen Objekts über eine kleine Objektdarstellung, wie hier beschrieben, kann es auch ermöglichen, dass das kleine Objekt in einem Deduplizierungssystem effizient und auf eine Weise gespeichert wird, die es ermöglicht, dass seine Daten Teil einer Deduplizierungsdomäne werden, so dass es gegen andere (zuvor gespeicherte) Daten dedupliziert werden kann, so dass andere (später gespeicherte) Daten gegen die Daten des kleinen Objekts dedupliziert werden können, oder beides.
  • Die hier beschriebenen Beispiele ermöglichen Flexibilität im Deduplizierungssystem, so dass große und kleine Objekte unterschiedlich behandelt werden können, so dass beide effizient behandelt werden können. Eine solche Flexibilität kann von Vorteil sein, da ein Deduplizierungssystem nicht in der Lage ist, die Größe und den Inhalt des Objekts, das ihm zur Speicherung übergeben wird, zu bestimmen. Wie bereits erwähnt, können Größe und Inhalt von Objekten, die dem Deduplizierungssystem zur Speicherung bereitgestellt werden, von dem Client-System bestimmt werden, das die Objekte zur Speicherung bereitstellt, und Client-Systeme können kleine Objekte zur Speicherung in einem Deduplizierungssystem bereitstellen, insbesondere wenn sich die Nutzung von Backup-, Langzeit- oder Sekundärspeicherressourcen ändert.
  • In der Vergangenheit wurde ein Deduplizierungssystem (z. B. eine deduplizierende Backup-Appliance) häufig verwendet, um sehr große Objekte zu speichern, die die Daten einer ganzen Maschine oder eines Dateisystems repräsentieren. In solchen Fällen wurden die gesicherten Daten oft unbenutzt in der Backup-Appliance belassen, bis sie vollständig wiederhergestellt wurden (wenn überhaupt). Diese Nutzung einer Backup-Appliance als „kalte Speicherschicht“ wird jedoch durch eine Nutzung der Backup-Appliances ergänzt, die eher der Nutzung einer primären Speicherschicht entspricht. Dies kann Modelle umfassen, bei denen Arbeitslasten auf Backup-Appliances ausgeführt werden, wie z. B. das Starten einer virtuellen Maschine auf einer Backup-Appliance (mit den dort gespeicherten Daten), bevor sie für weitere Operationen auf ein anderes System übertragen wird. Da Backup-Appliances eher wie eine primäre Speicherebene behandelt werden, besteht möglicherweise ein größerer Bedarf an wahlfreiem Zugriff auf die auf der Backup-Appliance gespeicherten Daten, und daher kann es wünschenswert sein, die Menge an E/A und die Latenzzeit von E/A für solche wahlfreien Zugriffsanforderungen zu verringern. Wie oben beschrieben, können die hier beschriebenen Beispiele die E/A und die entsprechende E/A-Latenz für kleine Objekte verringern, indem die Datenstrukturen auf der Zwischenebene (und damit der Abruf dieser Datenstrukturen in den Speicher zur Interaktion mit den Daten kleiner Objekte) weggelassen werden.
  • Darüber hinaus können sich durch solche Änderungen in der Nutzung von Backup-Appliances auch die Arten von Objekten ändern, die Clients in Backup-Appliances speichern. Es gibt zum Beispiel mehrere Szenarien, in denen Backup Appliances kleine Objekte von Client-Systemen erhalten und in denen diese kleinen Objekte häufigen Änderungen unterliegen können. So kann ein Client-System beispielsweise eine sehr kleine Sperrdatei für seine Operationen verwenden und diese kleine Datei als unabhängiges Objekt für die Sicherung bereitstellen. Auch Metadaten über eine Sicherung können von einem Client-System als separate Datei gespeichert werden, und das Client-System kann diese Datei als unabhängiges Objekt für die Speicherung in der Backup-Appliance bereitstellen.
  • Vor der weiteren Erörterung kleiner Objektrepräsentationen wird im Folgenden ein beispielhafter Deduplizierungsprozess in Bezug auf das Deduplizierungssystem 100 von beschrieben, um zusätzlichen Kontext zu liefern. Das Deduplizierungssystem 100 kann eine oder mehrere Deduplizierungsdomänen haben, von denen jede eine bestimmte Sammlung von Daten ist, mit denen ein bereitgestelltes Objekt dedupliziert werden kann. Im Beispiel von ist ein Teil einer einzelnen Deduplizierungsdomäne dargestellt. Obwohl der Einfachheit halber verkürzte Versionen der Deduplizierungsdomäne und der Daten, Metadaten und Datenstrukturen der Deduplizierungsdomäne in dargestellt sind, kann das Deduplizierungssystem 100 mehr oder weniger von jedem Typ der Datenstruktur der Hierarchie 290, mehr oder weniger Containerdatenstrukturen und mehr oder weniger Instanzen der jeweils enthaltenen Datentypen enthalten.
  • In einem in dargestellten Beispiel kann das Deduplizierungssystem 100 den Inhalt eines Objekts 10 (z. B. als Datenstrom) empfangen, um ihn in einer deduplizierten Darstellung im Deduplizierungssystem 100 zu speichern. Das Deduplizierungssystem 100 kann die Daten des Objekts 10 in eine Vielzahl von Teilen des Objekts 10 unterteilen und Aspekte des Deduplizierungsprozesses (z. B. Abgleich usw.) für jeden Teil des Objekts 10 portionsweise durchführen. In anderen Beispielen kann das Objekt 10 als eine einzige Portion behandelt werden, die den gesamten Inhalt des Objekts 10 enthält (z. B. abhängig von der Größe des Objekts 10).
  • Das Deduplizierungssystem 100 kann jeden Teil des Objekts 10 separat verarbeiten, einschließlich Prozessen der Unterteilung (oder Chunking) des Teils in Abschnitte fester Länge (z.B. 4KB) oder variabler Länge, die hier als Chunks bezeichnet werden, der Durchführung eines Abgleichprozesses zur Identifizierung doppelter Chunks des Teils (d.h., Chunks, deren Inhalt mit dem anderer Chunks, die bereits in der Deduplizierungsdomäne gespeichert sind, identisch ist), das Speichern einer (vollständigen oder komprimierten) Kopie jedes Chunks, der nicht als Duplikat eines bereits gespeicherten Chunks identifiziert wurde, und, für jeden doppelten Chunk, das Speichern eines Verweises (z. B. eines Zeigers) auf eine gespeicherte Kopie des Chunks, ohne den doppelten Chunk erneut zu speichern. Auf diese Weise kann ein Deduplizierungsprozess oft die Speicherung von Duplikaten desselben Chunks in einem Deduplizierungssystem vermeiden. In einigen Beispielen kann ein Verweis auf die gespeicherte Kopie des Chunks ein Verweis auf eine Instanz der Chunk-Metadaten 150 für den Chunk sein (d.h. ein indirekter Verweis auf den Chunk). Indem dieser Prozess für jeden Teil des Objekts 10 durchgeführt wird, kann das Deduplizierungssystem 100 eine deduplizierte Darstellung des Objekts 10 speichern.
  • Das Deduplizierungssystem 100 kann den Abgleichprozess für einen Teil durchführen, nachdem der Teil in Chunks aufgeteilt wurde. Der Abgleichsprozess kann die Bestimmung der jeweiligen Chunk-Signaturen für jeden der Chunks beinhalten (d.h. eine pro Chunk). Chunk-Signaturen werden in den Abbildungen mit Referenzsymbolen des Formats „SIG-N“ angegeben, wobei „N“ für eine Zahl steht. In den hier beschriebenen Beispielen kann eine Chunk-Signatur aus Daten bestehen, die für den Inhalt eines Chunks repräsentativ sind und durch Anwendung einer Signaturfunktion auf den Chunk abgeleitet werden. In einigen Beispielen kann die Signaturfunktion eine Hash-Funktion sein, und die Chunk-Signatur kann ein Hash (oder Hash-Wert) des Chunks sein, der durch Anwendung der Hash-Funktion auf den Chunk erzeugt wird. Jede geeignete Hash-Funktion kann zur Erzeugung der Chunk-Signatur verwendet werden. In anderen Beispielen kann anstelle einer Hash-Funktion jede andere geeignete Art von Signaturfunktion verwendet werden, um eine Chunk-Signatur zu erzeugen (z. B. eine Funktion zur Erzeugung einer geeigneten Art von Fingerabdruck).
  • Im Beispiel von kann das Deduplizierungssystem 100 in einem Abgleichsprozess für einen Teil des Objekts 10 für jeden Chunk des Teils die Chunk-Signatur des Chunks mit den Chunk-Signaturen vergleichen, die in mindestens einer der Bottom-Level- (oder Container-Index-) Datenstrukturen (z.B. 220, 222, 224, 226, etc.) der Deduplizierungsdomäne vorhanden sind, um festzustellen, ob irgendeine Chunk-Signatur in der/den durchsuchten Bottom-Level-Datenstruktur(en) mit der Chunk-Signatur des gegebenen Chunks übereinstimmt. Wenn eine Chunk-Signatur, die mit der Chunk-Signatur des gegebenen Chunks übereinstimmt, in der/den durchsuchten Datenstruktur(en) auf unterster Ebene gefunden wird, kann das Deduplizierungssystem 100 feststellen, dass eine Übereinstimmung für den gegebenen Chunk gefunden wurde und kann die aktuelle Kopie (d.h. die doppelte Kopie) des Chunks nicht in der Deduplizierungsdomäne speichern. Stattdessen kann das Deduplizierungssystem 100 den Chunk durch Hinzufügen eines Verweises auf den passenden, zuvor gespeicherten Chunk zu einem Manifest für den aktuellen Teil darstellen. Dieser Verweis kann einen Verweis auf die Instanz der Chunk-Metadaten 150 umfassen, die mit dem passenden, zuvor gespeicherten Chunk verbunden ist.
  • Zum Beispiel kann das Deduplizierungssystem 100 in einem Abgleichsprozess während des Ingests des Objekts 10 von eine Chunk-Signatur von „SIG-1“ für einen gegebenen Chunk bestimmen, ausgewählte Bottom-Level-Datenstrukturen nach einer übereinstimmenden Chunk-Signatur durchsuchen und die übereinstimmende Chunk-Signatur „SIG-1“ in einer Instanz der Chunk-Metadaten 150 der Bottom-Level-Datenstruktur 220 finden, wodurch festgestellt wird, dass eine Übereinstimmung für den gegebenen Chunk (z.B. Chunk 261) gefunden wurde. In diesem Beispiel kann das Deduplizierungssystem 100 den gegebenen Chunk nicht zu einem Container der Deduplizierungsdomäne hinzufügen (da dies die Speicherung eines Duplikats des Chunk 261 bedeuten würde). Stattdessen kann das Deduplizierungssystem 100 einen Verweis 162 auf die Instanz der Chunk-Metadaten 150 mit der ID 230, die dem Chunk 261 zugeordnet ist, zum Manifest 160 der Datenstruktur 214 hinzufügen.
  • In Fällen, in denen keine Chunk-Signatur, die mit der Chunk-Signatur eines gegebenen Chunks übereinstimmt, in der/den durchsuchten Datenstruktur(en) auf unterster Ebene gefunden wird, kann das Deduplizierungssystem 100 feststellen, dass keine Übereinstimmung für den gegebenen Chunk gefunden wurde und den gegebenen Chunk zu einem Container hinzufügen, um ihn in der Deduplizierungsdomäne zu speichern. Das Deduplizierungssystem 100 kann auch eine Instanz der Chunk-Metadaten 150 für den gegebenen Chunk zu einer Datenstruktur auf unterster Ebene hinzufügen, die dem Container entspricht, zu dem der gegebene Chunk hinzugefügt wird. In solchen Beispielen wird ein Verweis auf die Instanz der Chunk-Metadaten 150 für den gegebenen Chunk zu einem Manifest für den Teil des Objekts 10 hinzugefügt, der verarbeitet wird.
  • Betrachten wir als Beispiel einen Zeitpunkt, bevor der Chunk 204 und seine zugehörigen Metadaten in der in dargestellten Deduplizierungsdomäne gespeichert wurden, und gehen wir davon aus, dass das Deduplizierungssystem 100 während des Ingest von Objekt 10 einen Abgleichprozess für einen bestimmten Chunk 204 durchführt. In einem solchen Beispiel kann das Deduplizierungssystem 100 eine Chunk-Signatur „SIG-7“ für den gegebenen Chunk 204 bestimmen, eine oder mehrere Datenstrukturen auf unterster Ebene (Container-Index) durchsuchen (z. B. 220, 222, 224, 226 usw.) und feststellen, dass keine passende Chunk-Signatur „SIG-7“ in ihnen vorhanden ist. Auf diese Weise kann das Deduplizierungssystem 100 feststellen, dass keine passende Chunk-Signatur in der Deduplizierungsdomäne gefunden wurde. Basierend auf dieser Feststellung kann das Deduplizierungssystem 100 den Chunk 204 zur Container-Datenstruktur 256 hinzufügen, eine entsprechende Instanz von Chunk-Metadaten 150 mit der ID 272 zur Datenstruktur 226 auf unterster Ebene hinzufügen (die dem Container 256 entspricht) und dem Manifest 164 einen Verweis 166 auf die Chunk-Metadaten 150 mit der ID 272 hinzufügen. In solchen Beispielen kann das Deduplizierungssystem 100 die in Bottom-Level-Datenstrukturen gespeicherten Chunk-Signaturen verwenden, um festzustellen, ob ein gegebener Chunk eines aufgenommenen Teils ein Duplikat eines Chunk ist, der bereits in einer Container-Datenstruktur der aktuellen Deduplizierungsdomäne gespeichert ist, und wenn dies der Fall ist, die Speicherung einer doppelten Kopie dieses Chunk in der Deduplizierungsdomäne vermeiden.
  • Beispiele werden im Folgenden in Bezug auf die und und unter fortgesetzter Bezugnahme auf beschrieben. ist ein Blockdiagramm eines Beispiel-Computersystems 102, das Anweisungen 122 enthält, die zum Speichern einer kleinen Objektdarstellung eines Objekts ausgeführt werden können. Im Beispiel von umfasst das Beispielrechnersystem 102 mindestens eine Verarbeitungsressource 110 und mindestens ein maschinenlesbares Speichermedium 120, das Anweisungen 122 zum Speichern von Objekten speichert. Die Anweisungen 122 können Anweisungen 124 zum Speichern eines Objekts unter Verwendung einer kleinen Objektdarstellung enthalten. Das Rechensystem 102 kann durch mindestens ein Rechengerät implementiert werden und kann einen oder mehrere Server, ein Speicher-Array, eine Backup-Appliance oder Ähnliches (oder eine Kombination davon) umfassen. Das Rechensystem 102 kann ein Deduplizierungssystem implementieren, wie das Deduplizierungssystem 100 von . Die Verarbeitungsressource(n) 110, das maschinenlesbare Speichermedium 120 und die Anweisungen 122 von sind die gleichen wie die in dargestellten Komponenten des Systems 100. Die Funktionalitäten der Anweisungen 124 können hier auch als Funktionalitäten der Anweisungen 122 beschrieben werden, da die Anweisungen 122 die Anweisungen 124 umfassen.
  • ist ein Flussdiagramm eines Beispielverfahrens 300, das die Speicherung einer kleinen Objektdarstellung eines Objekts umfasst. Obwohl die Ausführung des Verfahrens 300 im Folgenden unter Bezugnahme auf das Deduplizierungssystem 100 von und das Computersystem 102 von beschrieben wird, können auch andere für die Ausführung des Verfahrens 300 geeignete Computersysteme verwendet werden, und die Implementierung des Verfahrens 300 ist nicht auf solche Beispiele beschränkt. Obwohl das Flussdiagramm in eine bestimmte Reihenfolge der Ausführung bestimmter Funktionen zeigt, ist das durch die dargestellte Methode nicht auf diese Reihenfolge beschränkt. Beispielsweise können die nacheinander gezeigten Funktionen in einer anderen Reihenfolge ausgeführt werden, sie können gleichzeitig oder teilweise gleichzeitig ausgeführt werden, oder eine Kombination davon.
  • Unter Bezugnahme auf und können bei 305 des Verfahrens 300 die Anweisungen 122 des Computersystems 102 (bei Ausführung durch mindestens eine Verarbeitungsressource 110) im Computersystem 102 eine große Objektdarstellung eines ersten Objekts speichern, die größer als eine Schwellengröße ist. Bei 310 können die Anweisungen 124 feststellen, dass ein zweites Objekt kleiner als die Schwellengröße ist. Bei 315 können die Anweisungen 124, basierend auf der Bestimmung bei 310, eine kleine Objektdarstellung des zweiten Objekts im Computersystem 102 speichern. Die Schwellengröße kann eine beliebige geeignete Größe in Übereinstimmung mit den hier beschriebenen Beispielen sein. Beispielsweise kann die Schwellengröße 10 MB betragen, so dass die Anweisungen 122 feststellen können, dass ein Objekt, das kleiner als 10 MB ist, kleiner als die Schwellengröße ist (und als kleines Objekt behandelt und über eine kleine Objektdarstellung gespeichert werden kann), und die Anweisungen 122 können feststellen, dass ein Objekt, das größer oder gleich 10 MB ist, größer oder gleich der Schwellengröße ist (und als großes Objekt behandelt und über eine große Objektdarstellung gespeichert werden kann). Die Anweisungen 122 können die Größe eines Objekts mit der Schwellengröße auf der Grundlage der Größe des Objekts ohne Deduplizierung (z. B. vor der Deduplizierung oder der Größe, die das Objekt hätte, wenn es in einer nicht-deduplizierten oder rehydrierten Form wiederhergestellt würde) vergleichen. In anderen Beispielen kann die Schwellengröße größer oder kleiner als 10 MB sein, kann ein einstellbarer Parameter des Computersystems 102 sein, und eine geeignete Schwellengröße kann empirisch bestimmt werden. In solchen Beispielen kann die Bestimmung, ob ein Objekt kleiner (oder größer oder gleich) als die Schwellengröße ist, direkt erfolgen, indem eine Größe des Objekts (ohne Deduplizierung) mit der Schwellengröße verglichen wird. In anderen Beispielen kann die Bestimmung indirekt erfolgen, z. B. auf der Grundlage der Größe eines Manifests für das Objekt in einer deduplizierten Darstellung (da die Größe eines solchen Manifests für ein Objekt mit der Größe des Objekts ohne Deduplizierung zusammenhängt).
  • Beispiele werden unter Bezugnahme auf die und näher beschrieben. Die im Folgenden in Bezug auf die Anweisungen 122 beschriebenen Funktionalitäten gelten sowohl für die Anweisungen 122 des Deduplizierungssystems 100 von als auch für das Computersystem 102 von (einschließlich der Funktionalitäten der Anweisungen 124, die in den Anweisungen 122 enthalten sind). In einigen Beispielen kann das Rechnersystem 102 von das Deduplizierungssystem 100 von implementieren.
  • Unter Bezugnahme auf die und können die Anweisungen 122 ein erstes Objekt 10 zur Speicherung in einer deduplizierten Darstellung im Deduplizierungssystem 100 empfangen. Die Anweisungen 122 können das Objekt 10 als Datenstrom empfangen und das Objekt 10 in seiner Gesamtheit verarbeiten oder es in Teile aufteilen, die separat dedupliziert werden (wie oben beschrieben). Im Beispiel von können die Anweisungen 122 feststellen, dass das erste Objekt 10 größer als ein Schwellenwert ist, und auf der Grundlage dieser Feststellung bei 305 des Verfahrens 300 eine große Objektdarstellung des ersten Objekts 10 im Deduplizierungssystem 100 speichern. Die Darstellung des großen Objekts 10 kann Metadaten umfassen, die in einer Hierarchie 290 von Datenstrukturen organisiert sind, die Folgendes umfassen: eine Top-Level-Datenstruktur 210; Bottom-Level-Datenstrukturen 220, 222, 224, 226 usw.; und Zwischen-Level-Datenstrukturen 212, 214, 216 usw., die von der Top-Level-Datenstruktur 201 und den Bottom-Level-Datenstrukturen 220, 222, 224, 226 usw. in der Hierarchie 290 getrennt sind.
  • Wie oben beschrieben, können die Anweisungen 122 das Objekt 10 als Teil eines Deduplizierungsprozesses für das Objekt 10 in Chunks aufteilen und den oben beschriebenen Abgleichprozess durchführen, nach dem jede der Datenstrukturen auf unterster Ebene (220, 222, 224, 226 usw.) der großen Objektdarstellung des Objekts 10 eine Instanz von Chunk-Metadaten 150 umfasst, die einen Speicherort (z. B. 80) für einen entsprechenden Chunk (z. B. 261) des Objekts 10 enthält. Jede Instanz von Chunk-Metadaten 150 der großen Objektdarstellung von Objekt 10 enthält auch eine ID für die Instanz von Chunk-Metadaten 150 (z. B. ID 230), eine Chunk-Signatur (z. B. SIG-1) für einen entsprechenden Chunk (z. B. Chunk 261) von Objekt 10 und eine Referenzzahl (z. B. 2) für den entsprechenden Chunk von Objekt 10 (jeweils wie oben in Bezug auf beschrieben).
  • Im Beispiel von enthält die große Objektdarstellung von Objekt 10 Datenstrukturen auf mittlerer Ebene (212, 214, 216 usw.), die ein Manifest enthalten, das eine Rekonstruktionsreihenfolge für die Chunks von Objekt 10 darstellt. Die Rekonstruktionsreihenfolge kann in den Datenstrukturen der Zwischenebene über Verweise auf Instanzen von Chunk-Metadaten 150 der Datenstrukturen der unteren Ebene 220, 222, 224, 226 usw. der großen Objektdarstellung von Objekt 10 beibehalten werden.
  • In den hier beschriebenen Beispielen kann eine Vielzahl von Datenstrukturen auf mittlerer Ebene gemeinsam ein Manifest enthalten, indem eine der Datenstrukturen auf mittlerer Ebene das gesamte Manifest enthält, oder indem mehr als eine der Datenstrukturen auf mittlerer Ebene jeweils ein Manifest für einen bestimmten Teil eines Objekts enthält, so dass die Manifeste für die Teile gemeinsam ein Manifest für das Objekt als Ganzes bilden. Darüber hinaus können einige Datenstrukturen der Zwischenebene keinen Teil eines Manifests speichern. Beispielsweise können die Datenstrukturen 214, 216 usw. auf der Zwischenebene jeweils ein Manifest 160, 164 usw. für einen entsprechenden Teil des Objekts 10 enthalten, wobei die Manifeste für die entsprechenden Teile des Objekts 10 zusammen ein Manifest für das Objekt 10 bilden. Ferner ist die Zwischenstufen-Datenstruktur 212 zwar Teil der Vielzahl von Zwischenstufen-Datenstrukturen 212, 214, 216 usw., die ein Manifest für Objekt 10 umfassen, doch enthält die Zwischenstufen-Datenstruktur 212 keinen Manifestteil, da sie eine Datenstruktur höherer Ebene in der Hierarchie 290 ist, die über den Zwischenstufen-Datenstrukturen liegt und auf diese verweist, die die Manifeste der Teile von Objekt 10 enthalten.
  • In den hier beschriebenen Beispielen sind die Datenstrukturen der Zwischenebene von den Datenstrukturen der obersten Ebene und der untersten Ebene getrennt und befinden sich zwischen diesen. In sind beispielsweise die Zwischenstufen-Datenstrukturen 212, 214 und 216 von der Top-Level-Struktur 210 und den Bottom-Level-Datenstrukturen 220, 222, 224, 226 usw. getrennt und liegen zwischen diesen. in der Hierarchie 290. In den hier beschriebenen Beispielen befindet sich eine Datenstruktur der Zwischenebene zwischen einer Datenstruktur der obersten Ebene und einer Datenstruktur der untersten Ebene, wenn zum Beispiel eine Folge von Verweisen von der Datenstruktur der obersten Ebene auf die Datenstruktur der untersten Ebene durch die Datenstruktur der Zwischenebene verläuft. Beispielsweise durchläuft eine Folge von Verweisen von der obersten Datenstruktur 210 zur untersten Datenstruktur 220 die mittlere Datenstruktur 212 zur untersten Datenstruktur 220, einschließlich der folgenden Verweise: ein Verweis 25 von der obersten Datenstruktur 210 auf die mittlere Datenstruktur 212, ein Verweis 168 von der mittleren Datenstruktur 212 auf die mittlere Datenstruktur 214 und ein Verweis 162 von der mittleren Datenstruktur 214 auf die unterste Datenstruktur 220 (speziell auf die Instanz der Chunk-Metadaten 150 mit ID 230). In diesem Beispiel befindet sich die Zwischendatenstruktur 214 auch zwischen der obersten Datenstruktur 210 und der untersten Datenstruktur 220.
  • Eine andere Art und Weise, in der eine Datenstruktur auf mittlerer Ebene, sofern vorhanden, als zwischen einer Datenstruktur auf oberster Ebene und einer Datenstruktur auf unterster Ebene liegend betrachtet wird, besteht darin, dass die Datenstruktur auf oberster Ebene in der Hierarchie über der Datenstruktur auf mittlerer Ebene liegt und die Datenstruktur auf unterster Ebene in der Hierarchie unter der Datenstruktur auf mittlerer Ebene liegt. Beispielsweise liegt die oberste Datenstruktur 210 in der Hierarchie 290 über der mittleren Datenstruktur 212 (und den mittleren Datenstrukturen 214 und 216) und die unterste Datenstruktur liegt in der Hierarchie 290 unter der mittleren Datenstruktur 212 (und den mittleren Datenstrukturen 214 und 216).
  • In den hier beschriebenen Beispielen sind die Datenstrukturen der Zwischenebene von den Datenstrukturen der obersten Ebene und den Datenstrukturen der untersten Ebene (die ebenfalls voneinander getrennt sind) getrennt. In solchen Beispielen kann das Deduplizierungssystem separate Speicherplatzeinheiten für jede Datenstruktur der obersten Ebene, jede Datenstruktur der mittleren Ebene und jede Datenstruktur der untersten Ebene zuweisen. Zum Beispiel kann ein Computersystem wie das Deduplizierungssystem 100 eine Speicherzuweisungsstrategie mit einer kleinsten Zuweisungs- (oder Block-) Größe (z.B. 4KB oder ähnliches) verwenden. In solchen Beispielen kann die Erstellung einer beliebigen Datenstruktur auf oberster, mittlerer oder unterster Ebene Anweisungen 122 enthalten, die Speicherplatz mit mindestens der kleinsten Zuweisungsgröße für die Datenstruktur zuweisen. Der Speicherplatz kann anfänglich in einem flüchtigen Speicher, wie z. B. dem Arbeitsspeicher, oder in einem nichtflüchtigen Speicher o. ä. zugewiesen werden. Jede derartige Datenstruktur kann innerhalb des ursprünglich zugewiesenen Speicherplatzes verbleiben oder über diese anfängliche Zuweisungsgröße hinaus wachsen. In solchen Beispielen kann jede Top-Level-, Intermediate-Level- und Bottom-Level-Datenstruktur als separate Speichereinheit verwaltet werden, die getrennt von anderen derartigen Datenstrukturen verwaltet werden kann. Beispielsweise kann jede Datenstruktur der obersten, mittleren und untersten Ebene innerhalb des Deduplizierungssystems 100 unabhängig verwaltet werden, z. B. indem sie unabhängig aus dem Speicher in den permanenten Speicher gespült oder unabhängig aus dem permanenten Speicher in den Speicher zurückgeholt wird.
  • Wiederum Bezug nehmend auf die und , können Anweisungen 122 ein zweites Objekt 40 zur Speicherung in einer deduplizierten Darstellung im Deduplizierungssystem 100 empfangen. Die Anweisungen 122 können das Objekt 40 als Datenstrom empfangen und das Objekt 40 in seiner Gesamtheit verarbeiten oder es in Teile aufteilen, die separat dedupliziert werden sollen (wie oben beschrieben). In solchen Beispielen können die Anweisungen 122 bei 310 des Verfahrens 300 feststellen, dass das Objekt 40 kleiner als die Schwellengröße ist. Basierend auf dieser Feststellung können die Anweisungen 122 bei 315 des Verfahrens 300 eine kleine Objektdarstellung des Objekts 40 im Deduplizierungssystem 100 speichern.
  • Die kleine Objektdarstellung des zweiten Objekts 40 kann einen direkten Verweis 35 von der Top-Level-Datenstruktur 210 zu den Metadaten des kleinen Objekts in der Bottom-Level-Datenstruktur 226 der kleinen Objektdarstellung umfassen. Der Direktverweis 35 ist insofern direkt, als er alle Datenstrukturen auf mittlerer Ebene auslässt, die von der Datenstruktur 210 auf oberster Ebene (die den Direktverweis 35 enthält) und der Datenstruktur 226 auf unterster Ebene der Darstellung des kleinen Objekts, auf die der Direktverweis 35 verweist (z. B. zeigt), getrennt sind. Die Bottom-Level-Datenstruktur 226 der kleinen Objektdarstellung enthält Chunk-Metadaten 150 für jeden Chunk des zweiten Objekts 40, einschließlich eines oder mehrerer Speicherplätze (z. B. Speicherplatz 87) für jeden Chunk (z. B. Chunk 204) des zweiten Objekts 40.
  • In den hier beschriebenen Beispielen können kleine Objekt-Metadaten in einer Bottom-Level-Datenstruktur eine Instanz von Chunk-Metadaten 150 (wie im Beispiel von ) oder ein in der Bottom-Level-Datenstruktur gespeichertes Manifest sein (wie in den Beispielen von und , die unten beschrieben werden). Im Beispiel von kann der Inhalt des zweiten Objekts 40 in einem einzigen Chunk 204 des Containers 256 enthalten sein, und der Chunk 204 kann vor dem Ingest des Objekts 40 vorhanden gewesen sein oder während des Ingest des Objekts 40 hinzugefügt worden sein. In solchen Beispielen enthalten die Metadaten des kleinen Objekts der kleinen Objektdarstellung die Instanz der Chunk-Metadaten 150 mit der ID 272, die für den einzelnen Chunk 204 des zweiten Objekts 40 ist. In solchen Beispielen umfasst der direkte Verweis 35 einen in der obersten Datenstruktur 210 gespeicherten Verweis auf die Instanz der Chunk-Metadaten 150 mit der ID 272, die für den einzelnen Chunk 204 des zweiten Objekts 40 bestimmt ist. Diese Instanz von Chunk-Metadaten 150 wird in der Datenstruktur 226 der kleinen Objektdarstellung auf unterster Ebene gespeichert. In solchen Beispielen umfasst der direkte Verweis 35 einen Verweis, der in der Datenstruktur 210 der obersten Ebene gespeichert und auf einen kleinen Objektidentifikator 30 abgebildet ist, der mit dem zweiten Objekt 40 verbunden ist.
  • Im Beispiel von können die Anweisungen 122 während des Einlesens des Objekts 40 feststellen, dass der Inhalt des zweiten Objekts 40 klein genug ist, um im Deduplizierungssystem 100 durch einen einzigen Chunk dargestellt zu werden. Beispielsweise kann das zweite Objekt 40 nicht größer sein als eine vom Deduplizierungssystem verwendete Chunk-Größe (oder eine maximale Chunk-Größe) (z. B. 4 KB). Basierend auf der Feststellung, dass der Chunk 40 klein genug ist, können die Anweisungen 122 in der Top-Level-Datenstruktur 210 einen Verweis 35 auf die Instanz der Chunk-Metadaten 150 für den einzelnen Chunk des zweiten Objekts 40 speichern (d.h. die Instanz der Chunk-Metadaten 150 mit der ID 272, die für den Chunk 204 ist).
  • Weitere Beispiele für kleine Objektdarstellungen werden hier in Bezug auf die und beschrieben. ist ein Blockdiagramm eines beispielhaften Deduplizierungssystems 100, in dem eine kleine Objektdarstellung ein Manifest enthält. Das Deduplizierungssystem 100 von ist dasselbe wie das Deduplizierungssystem 100 von , obwohl das Beispiel von einige andere Funktionalitäten des Deduplizierungssystems 100 als das Beispiel von zeigt.
  • Wie oben in Bezug auf beschrieben, kann eine Darstellung eines kleinen Objekts eines zweiten Objekts 40 einen direkten Verweis von der Top-Level-Datenstruktur 210 auf Metadaten des kleinen Objekts in der Bottom-Level-Datenstruktur 226 der Darstellung des kleinen Objekts umfassen, und die Metadaten des kleinen Objekts können ein in der Bottom-Level-Datenstruktur 226 gespeichertes Manifest sein. Im Beispiel von kann eine kleine Objektdarstellung eines zweiten Objekts 40 einen direkten Verweis 37 von der Top-Level-Datenstruktur 210 auf ein in der Bottom-Level-Datenstruktur 226 gespeichertes Manifest 211 enthalten. In einigen Beispielen können die Metadaten des kleinen Objekts zunächst eine Instanz der Chunk-Metadaten 150 sein (wie im Beispiel von ) und dann in ein Manifest 211 übergehen, wie in dargestellt. In anderen Beispielen können die Metadaten des kleinen Objekts zunächst ein Manifest wie das Manifest 211 sein, wie in dargestellt.
  • Ein Beispiel, bei dem das Deduplizierungssystem 100 die Metadaten des kleinen Objekts von einer Instanz von Chunk-Metadaten in ein Manifest umwandelt, wird weiter unten in Bezug auf die und beschrieben. In solchen Beispielen können die Anweisungen 122 zunächst im Deduplizierungssystem 100 eine kleine Objektdarstellung des zweiten Objekts 40 speichern, wie oben in Bezug auf beschrieben (einschließlich eines direkten Verweises 35 auf eine Instanz von Chunk-Metadaten 150 mit ID 272). In einigen Beispielen können die Anweisungen 122 nach dem Speichern dieser kleinen Objektdarstellung des zweiten Objekts 40 eine aktualisierte Version des Objekts 40 empfangen (siehe ), die größer ist als die ursprüngliche Version des Objekts 40 des Beispiels von . In solchen Beispielen können die Anweisungen 122 bestimmen, dass zusätzliche Inhalte 41 der aktualisierten Version des Objekts 40 in der deduplizierten Darstellung des zweiten Objekts 40 im Deduplizierungssystem 100 gespeichert werden sollen. In einigen Beispielen können die Anweisungen 122 feststellen, dass der Inhalt des aktualisierten zweiten Objekts 40 mit dem zusätzlichen Inhalt 41 sowohl zu groß ist, um in einem Chunk gespeichert zu werden, als auch kleiner als die Schwellengröße.
  • Auf der Grundlage dieser Bestimmung können die Anweisungen 122 in der untersten Datenstruktur 226 der kleinen Objektdarstellung ein Manifest 211 für das aktualisierte zweite Objekt 40 mit dem zusätzlichen Inhalt 41 speichern. Im Beispiel von ist der Inhalt des aktualisierten zweiten Objekts 40 in einer Vielzahl von Chunks 260, einschließlich der Chunks 201, 203, 204 usw. des Containers 256, enthalten. Das Manifest 211 für das aktualisierte zweite Objekt 40 stellt über Verweise 168 auf Instanzen von Chunk-Metadaten 150 eine Rekonstruktionsreihenfolge der Vielzahl von Chunks 260 dar, die den Inhalt des aktualisierten zweiten Objekts 40 enthalten, einschließlich des zusätzlichen Inhalts 41. Das Manifest 211 umfasst direkte Verweise 168 auf Instanzen von Chunk-Metadaten 150 in der/den Datenstruktur(en) auf unterster Ebene. Im Beispiel von umfassen die Verweise 168 einen Verweis auf Chunk-Metadaten 150 mit der ID 272, die in der Bottom-Level-Datenstruktur 226 („BL-224“) gespeichert sind, einen Verweis auf Chunk-Metadaten 150 mit der ID 270 in der Datenstruktur 226 und einen Verweis auf Chunk-Metadaten 150 mit der ID 249 in der Datenstruktur 226. Die Chunk-Metadaten 150 mit der ID 272 sind dem Chunk 203 zugeordnet, die Chunk-Metadaten 150 mit der ID 270 dem Chunk 204 und die Chunk-Metadaten 150 mit der ID 249 dem Chunk 201 im Beispiel von .
  • In einem solchen Beispiel des Übergangs der Metadaten des kleinen Objekts von einer Instanz der Chunk-Metadaten 150 zu einem Manifest können die Anweisungen 122 die Top-Level-Datenstruktur 210 (siehe ) modifizieren, um einen direkten Verweis 37 auf das Manifest 211 (siehe ) als direkten Verweis der Darstellung des kleinen Objekts aufzunehmen. In solchen Beispielen umfassen die Metadaten des kleinen Objekts das Manifest 211 für das aktualisierte zweite Objekt 40. In solchen Beispielen ist der aktualisierte direkte Verweis 37 ein Verweis auf das Manifest 211, das in der untersten Datenstruktur 226 der Darstellung des kleinen Objekts für das aktualisierte Objekt 40 gespeichert ist.
  • Obwohl die Chunks 260 für das aktualisierte zweite Objekt 40 im Beispiel von Chunks 260 des Containers 256 sind, können in anderen Beispielen die Chunks 260 für das aktualisierte zweite Objekt 40 aus jedem der Container des Deduplizierungssystems 100 stammen. Obwohl die Chunks 201, 203 und 204 als Beispielchunks 260 für das aktualisierte zweite Objekt 40 beschrieben sind, können in verschiedenen Beispielen mehr oder weniger Chunks 260 verwendet werden, um den Inhalt des aktualisierten zweiten Objekts 40 darzustellen, und in anderen Beispielen kann das Manifest 211 mehr oder weniger Referenzen 168 als die in dargestellten enthalten. Im Beispiel von sind die dargestellten Verweise 168 Verweise auf Instanzen von Chunk-Metadaten 150 in der Bottom-Level-Datenstruktur 226 (d. h. die Bottom-Level-Datenstruktur einschließlich Manifest 211). In anderen Beispielen kann das Manifest 211 für das aktualisierte zweite Objekt 40 Verweise auf Instanzen von Chunk-Metadaten 150 von mehreren verschiedenen Datenstrukturen der untersten Ebene des Deduplizierungssystems 100 umfassen, und die Chunks 260, die den Inhalt des aktualisierten zweiten Objekts 40 darstellen, können Chunks 260 aus beliebigen Containern des Deduplizierungssystems 100 (die sich in derselben Deduplizierungsdomäne befinden) umfassen.
  • In den hier beschriebenen Beispielen, in denen die Metadaten des kleinen Objekts ein Manifest umfassen, können die Anweisungen 122 eine Datenstruktur der untersten Ebene auswählen, in der das Manifest aus den Datenstrukturen der untersten Ebene der Deduplizierungsdomäne des Deduplizierungssystems gespeichert werden soll. Die Anweisungen 122 können die Auswahl auf verschiedene Arten treffen. Zum Beispiel können die Anweisungen 122 eine Datenstruktur der untersten Ebene auswählen, zu der das Manifest eine Affinität hat oder zu der das Manifest die größte Affinität unter den Datenstrukturen der untersten Ebene der Deduplizierungsdomäne hat, basierend auf einem oder mehreren geeigneten Affinitätsmaßen.
  • Ein Maß für die Affinität zwischen einem Manifest und einer bestimmten Datenstruktur auf unterster Ebene kann beispielsweise die Anzahl der Verweise im Manifest auf Instanzen von Chunk-Metadaten 150 in der gegebenen Datenstruktur auf unterster Ebene sein. Wenn beispielsweise alle Verweise 168 des Manifests 211 Verweise auf Chunk-Metadaten 150 in der Datenstruktur 226 auf der untersten Ebene sind, können die Anweisungen 122 feststellen, dass das Manifest 211 die größte Affinität zur Datenstruktur 226 auf der untersten Ebene hat (siehe ). In anderen Beispielen, wenn sich die Referenzen 168 des Manifests 211 auf Chunk-Metadaten 150 in verschiedenen verschiedenen Datenstrukturen der untersten Ebene einer Deduplizierungsdomäne des Deduplizierungssystems 100 beziehen, können die Anweisungen 122 bestimmen, dass das Manifest 211 die größte Affinität zu einer der Datenstrukturen der untersten Ebene 220, 222, 224, 226 usw. hat, zu der es die meisten Referenzen 168 hat (d. h. Referenzen auf Instanzen von Chunk-Metadaten 150 in diesen Datenstrukturen der untersten Ebene). Wenn die Anweisungen 122 beispielsweise feststellen, dass das Manifest 211 die größte Affinität zu einer der Datenstrukturen der untersten Ebene 220, 22, 224, 226 usw. hat, zu der es die meisten Verweise 168 (d. h. die meisten Verweise auf Instanzen von Chunk-Metadaten 150 in dieser Datenstruktur der untersten Ebene) aufweist. Wenn das Manifest 211 beispielsweise Verweise 168 auf Instanzen von Chunk-Metadaten 150 in mehreren Datenstrukturen der untersten Ebene 220, 22, 224, 226 usw. umfasst und die meisten Verweise 168 auf Instanzen von Chunk-Metadaten 150 in der Datenstruktur 226 der untersten Ebene enthält, können die Anweisungen 122 feststellen, dass die Datenstruktur 226 der untersten Ebene die größte Affinität zu Manifest 211 hat, und auf dieser Grundlage die Datenstruktur 226 der untersten Ebene für die Platzierung von Manifest 211 auswählen. In anderen Beispielen, wenn das Manifest 211 die meisten Verweise 168 auf Instanzen von Chunk-Metadaten 150 in einer anderen Datenstruktur auf unterster Ebene (z. B. 224) umfasst, können die Anweisungen 122 bestimmen, dass die andere Datenstruktur auf unterster Ebene (z. B. 224) die größte Affinität zu Manifest 211 hat, und auf dieser Grundlage diese andere Datenstruktur auf unterster Ebene (z. B. 224) für die Platzierung von Manifest 211 auswählen. In einigen Beispielen können die Anweisungen 122 nur die eindeutigen Referenzen 168 in Manifest 211 berücksichtigen, um die Affinität zu bestimmen.
  • In einigen Beispielen können die Anweisungen 122 andere Affinitätsmaße verwenden und die Auswahl einer Bottom-Level-Datenstruktur für die Platzierung eines Manifests auf diese(s) Maß(e) stützen. Beispielsweise können die Anweisungen 122 den Jaccard-Index verwenden, um die Ähnlichkeit zwischen einem Manifest und jeder Bottom-Level-Datenstruktur in der Deduplizierungsdomäne (oder zwischen einem Manifest und einer geeigneten Kandidatenuntergruppe der Bottom-Level-Datenstrukturen in der Deduplizierungsdomäne) zu bestimmen. Beispielsweise können die Anweisungen 122 feststellen, dass ein Manifest die größte Affinität zu einer bestimmten Datenstruktur auf unterster Ebene hat, die die größte Ähnlichkeit gemäß dem Jaccard-Index-Maß der Ähnlichkeit unter einer Vielzahl von Datenstrukturen auf unterster Ebene aufweist. In solchen Beispielen kann das Jaccard-Index-Maß der Ähnlichkeit beispielsweise durch den Vergleich eines ersten Satzes, der eine gegebene Datenstruktur auf unterster Ebene darstellt, und eines zweiten Satzes, der ein gegebenes Manifest darstellt, verwendet werden, wobei der Inhalt des ersten Satzes die Instanzen von Chunk-Metadaten 150 darstellt, die in der gegebenen Datenstruktur auf unterster Ebene enthalten sind, und der Inhalt des zweiten Satzes die Instanzen von Chunk-Metadaten 150 (in entsprechenden Datenstrukturen auf unterster Ebene) darstellt, auf die durch Verweise 168 in dem gegebenen Manifest verwiesen wird.
  • In anderen Beispielen können die Anweisungen 122 eine Maximal- oder Minimalidentifizierungstechnik zur Bestimmung der Affinität verwenden. Beispielsweise können die Anweisungen 122 eine maximale Chunk-Signatur („SIG-X“) bestimmen, auf die das Manifest 211 verweist, und feststellen, dass das Manifest 211 eine Affinität zu der Datenstruktur der untersten Ebene mit dieser maximalen Chunk-Signatur hat. In solchen Beispielen können die Anweisungen 122 für die Platzierung des Manifests 211 die Datenstruktur der untersten Ebene auswählen, für die eine Affinität des Manifests 211 festgestellt wurde. In solchen Beispielen kann die Affinität binär sein (d. h., hat Affinität oder hat keine Affinität) und nicht ein Maß mit zusätzlichen Abstufungen (z. B. größere oder geringere Affinität). Beispielsweise können die Anweisungen 122 für jede Referenz 168 (oder jede eindeutige Referenz 168) im Manifest 211 die Chunk-Signatur SIG-X in der Instanz der Chunk-Metadaten 150 bestimmen, auf die die Referenz 168 verweist, und die größte Chunk-Signatur unter den bestimmten Chunk-Signaturen ermitteln. Die Anweisungen 122 können dann feststellen, dass das Manifest 211 eine Affinität zu der Datenstruktur der untersten Ebene hat, die diese größte Chunk-Signatur in einer ihrer Instanzen von Chunk-Metadaten 150 aufweist. Beispielsweise kann das Manifest 211 Verweise 168 auf Instanzen von Chunk-Metadaten 150 in den Datenstrukturen 224 und 226 der untersten Ebene enthalten, und die Anweisungen 122 können feststellen, dass die Chunk-Signatur SIG-7 die größte Chunk-Signatur unter denjenigen ist, auf die durch die Verweise 168 (d. h. indirekt) verwiesen wird, und auf der Grundlage dieser Feststellung können die Anweisungen 122 feststellen, dass das Manifest 211 eine Affinität zur Datenstruktur 226 der untersten Ebene mit der Chunk-Signatur SIG-7 hat, und auf der Grundlage dieser Feststellung die Datenstruktur 226 der untersten Ebene zur Platzierung des Manifests 211 auswählen. In einigen Beispielen können die Anweisungen 122 die kleinste Chunk-Signatur und nicht die größte Chunk-Signatur verwenden. In anderen Beispielen können die Anweisungen 122 die Identifikatoren der Datenstrukturen der untersten Ebene selbst zur Bestimmung der Affinität verwenden und nicht die in ihnen enthaltenen Chunk-Signaturen. Beispielsweise können die Anweisungen 122 aus den Referenzen 168 des Manifests 211 die Identifikatoren der durch die Referenzen 168 referenzierten Datenstrukturen auf unterster Ebene ermitteln und feststellen, dass das Manifest 211 eine Affinität zu der referenzierten Datenstruktur auf unterster Ebene mit dem größten Identifikator aufweist, und auf dieser Grundlage die referenzierte Datenstruktur auf unterster Ebene mit dem größten Identifikator für die Platzierung des Manifests 211 auswählen. In anderen Beispielen kann die referenzierte Bottom-Level-Datenstruktur mit dem kleinsten Bezeichner ausgewählt werden.
  • In einigen Beispielen können verschiedene Affinitätsmaße in Kombination verwendet werden. So kann beispielsweise ein binäres Maß für die Affinität als Tiebreaker verwendet werden, wenn ein Manifest nach einem anderen Maß den gleichen Grad an Affinität aufweist. Wenn die Anweisungen 122 beispielsweise auf der Grundlage eines Ähnlichkeitsmaßes (z. B. Jaccard-Index usw.) feststellen, dass das Manifest 211 die größte Affinität zu den beiden Datenstrukturen 224 und 226 auf der untersten Ebene aufweist (d. h. die gleiche Affinität zu beiden), kann eine maximale oder minimale Chunk-Signatur oder ein maximaler oder minimaler Identifikator (wie oben beschrieben) verwendet werden, um zwischen den Datenstrukturen 224 und 226 auf der untersten Ebene für die Platzierung des Manifests 211 auszuwählen. In anderen Beispielen können Verknüpfungen auf andere Weise aufgelöst werden, z. B. durch Auswahl einer zuletzt referenzierten Datenstruktur der untersten Ebene (im Manifest 211) unter den verknüpfenden Datenstrukturen. In den hier beschriebenen Beispielen können zwar ein oder mehrere Maße oder Bedingungen zur Messung der Affinität verwendet werden (allein oder in Kombination), aber die Anweisungen 122 können eine einzige Methode (z. B. ein Maß oder eine Kombination von Maßen) der Affinität verwenden, um Platzierungsentscheidungen im Deduplizierungssystem 100 zu treffen. Auf diese Weise können die hier beschriebenen Beispiele so funktionieren, dass sie die Platzierungsentscheidungen so beeinflussen, dass Manifeste für doppelte Datensequenzen eine größere Chance haben, dass dieselbe Datenstruktur auf unterster Ebene für die Platzierung ausgewählt wird, was eine größere Chance für die Deduplizierung solcher Manifeste bieten kann, wie unten in Bezug auf beschrieben. In den hier beschriebenen Beispielen können die Anweisungen 122 jedes Mal, wenn ein neues Manifest zu speichern ist (für Objekte unterhalb der Schwellengröße), eine Bottom-Level-Datenstruktur auswählen, in der ein Manifest, wie oben beschrieben, platziert werden soll; dies kann beim erstmaligen Einlesen eines neuen Objekts oder beim Empfang zusätzlicher Daten für ein zuvor eingelesenes Objekt geschehen. Wenn beispielsweise neue Daten für ein Objekt empfangen werden, das zuvor im Deduplizierungssystem 100 über eine kleine Objektdarstellung gespeichert wurde, können die Anweisungen 122 ein neues Manifest erzeugen, um die aktualisierte Version des Objekts darzustellen, und in solchen Beispielen können die Anweisungen 122 eine Datenstruktur der untersten Ebene auswählen, um das neue Manifest für die aktualisierte Version des Objekts zu speichern (wenn das Objekt unterhalb der Schwellengröße bleibt). In solchen Beispielen können die Anweisungen 122 die oben beschriebene Auswahl für die Speicherung eines Manifests vornehmen, wenn ein Manifest erstellt wird und wenn ein Manifest aktualisiert wird (in Beispielen, in denen eine Aktualisierung eines Objekts die Erstellung eines neuen Manifests für das aktualisierte Objekt beinhaltet).
  • In einigen Beispielen können die kleinen Objekt-Metadaten der kleinen Objektdarstellung des zweiten Objekts 40 zunächst ein Manifest 211 als Ergebnis des anfänglichen Ingest des zweiten Objekts 40 sein. In solchen Beispielen ist das zweite Objekt 40 von keine aktualisierte (und größere) Version eines zuvor gespeicherten Objekts 40, sondern das zweite Objekt 40 kann sowohl zu groß sein, um in einem Chunk gespeichert zu werden, als auch kleiner als die Schwellengröße, wenn es ursprünglich vom Deduplizierungssystem 100 aufgenommen wird.
  • In solchen Beispielen können die Anweisungen 122 beim anfänglichen Empfang und der Verarbeitung des zweiten Objekts 40 feststellen, dass das zweite Objekt 40 sowohl zu groß ist, um in einem Chunk gespeichert zu werden, als auch kleiner als die Schwellengröße. Basierend auf der Feststellung, dass das zweite Objekt 40 kleiner als die Schwellengröße ist, können die Anweisungen 122 eine kleine Objektdarstellung des zweiten Objekts 40 im Deduplizierungssystem 100 speichern. In solchen Beispielen kann die kleine Objektdarstellung den Inhalt des zweiten Objekts 40 enthalten, der in einer Vielzahl von Chunks (z.B. 201, 203, 204, etc.) enthalten ist. Die Chunks des zweiten Objekts 40 können zuvor gespeicherte, übereinstimmende Chunks (die in die Darstellung des kleinen Objekts aufgenommen werden, indem auf die zuvor gespeicherten Chunks verwiesen wird), neue Chunks (für die keine Übereinstimmung gefunden wurde), die auf der Grundlage des Ingest des Objekts 40 gespeichert wurden, oder eine Kombination davon umfassen.
  • In solchen Beispielen können die Anweisungen 122 eine Bottom-Level-Datenstruktur auswählen, in der ein Manifest 211 für das zweite Objekt 40 gespeichert werden soll (z. B. auf der Grundlage der oben beschriebenen Affinität). Im Beispiel von können die Anweisungen 122 die Datenstruktur 226 der untersten Ebene auf der Grundlage geeigneter Affinitätsmaße zwischen ihr und dem Manifest 211 auswählen und auf der Grundlage der Auswahl das Manifest 211 in der Datenstruktur 226 der untersten Ebene speichern. In solchen Beispielen können die Anweisungen 122 in der Datenstruktur 210 der obersten Ebene einen direkten Verweis 37 von der Datenstruktur 210 der obersten Ebene auf das Manifest 211 in der Datenstruktur 226 der untersten Ebene speichern. In solchen Beispielen ist das Manifest 211 die kleinen Objekt-Metadaten der kleinen Objektdarstellung des Objekts 40. Der direkte Verweis 37 von der Top-Level-Datenstruktur 210 auf das Manifest 211 lässt alle Datenstrukturen der Zwischenebene aus, die von der Top-Level- und der Bottom-Level-Datenstruktur der Darstellung des kleinen Objekts getrennt sind (z. B. Verweisketten oder indirekte Verweise auf oder durch Datenstrukturen der Zwischenebene, um von der Top-Level-Datenstruktur 210 auf das Manifest 211 zuzugreifen). In der Top-Level-Datenstruktur 210 kann die direkte Referenz 37 auf die ID 30 für das zweite Objekt 40 abgebildet werden.
  • In solchen Beispielen kann die Darstellung des kleinen Objekts 40 die Datenstruktur 210 der obersten Ebene, die direkte Referenz 37, die der ID 30 für das zweite Objekt 40 zugeordnet ist, die Datenstruktur 226 der untersten Ebene, das Manifest 211 der Datenstruktur 226 der untersten Ebene, die Chunk-Metadaten 150, auf die das Manifest 211 verweist, und die Chunks, auf die diese Chunk-Metadaten 150 verweisen, umfassen. Im Beispiel von enthält die Bottom-Level-Datenstruktur 226 der kleinen Objektdarstellung Chunk-Metadaten 150 für das zweite Objekt 40, einschließlich der jeweiligen Speicherplätze für jeden Chunk des zweiten Objekts 40. Wie oben beschrieben, stellt das Manifest 211 für das zweite Objekt 40 über Verweise auf die Chunk-Metadaten 150 der jeweiligen Vielzahl von Chunks des zweiten Objekts 40 eine Reihenfolge der Vielzahl von Chunks zur Rekonstruktion des zweiten Objekts 40 dar.
  • In einigen Beispielen können die Anweisungen 122 die deduplizierte Darstellung des Objekts 40 von einer kleinen Objektdarstellung des zweiten Objekts 40 (einschließlich eines direkten Verweises auf die Metadaten des kleinen Objekts) zu einer großen Objektdarstellung des zweiten Objekts 40 ändern. In einigen Beispielen kann die deduplizierte Darstellung des Objekts 40 anfänglich eine kleine Objektdarstellung sein, die ein Manifest als Metadaten des kleinen Objekts enthält (wie im Beispiel von ), und in anderen Beispielen kann die deduplizierte Darstellung des Objekts 40 anfänglich eine kleine Objektdarstellung sein, die eine Instanz von Chunk-Metadaten 150 als Metadaten des kleinen Objekts enthält.
  • Beispielsweise können die Anweisungen 122, nachdem sie die kleine Objektdarstellung des zweiten Objekts 40 mit zusätzlichem Inhalt 41 im Deduplizierungssystem 100 gespeichert haben, bestimmen, dass weiterer zusätzlicher Inhalt in der deduplizierten Darstellung des zweiten Objekts 40 im Deduplizierungssystem 100 gespeichert werden soll (siehe ). Beispielsweise können die Anweisungen 122 eine weitere aktualisierte, größere Version des zweiten Objekts 40 zur Speicherung empfangen (d.h. größer als die Version des Objekts 40 mit zusätzlichem Inhalt 41). Die Anweisungen 122 können feststellen, ob die empfangene und weiter aktualisierte, größere Version des zweiten Objekts 40 größer als die Schwellengröße ist. Wenn dies der Fall ist, können die Anweisungen 122 die kleine Objektdarstellung des zweiten Objekts 40 (einschließlich des direkten Verweises 37 auf das Manifest 211 der Bottom-Level-Datenstruktur 226) in eine große Objektdarstellung des weiter aktualisierten zweiten Objekts 40 ändern. In einigen Beispielen kann die Schwellengröße eine Größe sein, bei der ein gegebenes Objekt zu groß für das Deduplizierungssystem 100 ist, um alle Chunks des gegebenen Objekts in einem einzigen Manifest des Deduplizierungssystems 100 darzustellen. Zum Beispiel kann, wie oben beschrieben, ein Manifest für ein Objekt (oder einen Teil davon) Verweise auf Chunk-Metadaten 150 für die Chunks 260 des Objekts (oder eines Teils davon) enthalten, und die Anweisungen 122 können bestimmen, dass das weiter aktualisierte zweite Objekt 40 zu groß für das Deduplizierungssystem 100 ist, um alle Verweise auf Chunk-Metadaten 150 für die Chunks 260 des weiter aktualisierten zweiten Objekts 40 in einem einzigen Manifest zu speichern.
  • In solchen Beispielen kann die Bestimmung, ob das Objekt kleiner als (oder größer als oder gleich) die Schwellengröße ist, indirekt, wie oben beschrieben, auf der Grundlage der Größe des Manifests für das Objekt in der deduplizierten Darstellung erfolgen. In anderen Beispielen kann die Bestimmung direkt erfolgen, indem die Größe des Objekts (ohne Deduplizierung) mit der Schwellengröße verglichen wird, wie oben beschrieben.
  • Um die deduplizierte Darstellung des Objekts 40 von einer kleinen Objektdarstellung in eine große Objektdarstellung der weiter aktualisierten Version des zweiten Objekts 40 zu ändern, können die Anweisungen 122 eine oder mehrere Datenstrukturen der Zwischenebene zur Hierarchie 290 hinzufügen. Die hinzugefügte(n) Datenstruktur(en) auf mittlerer Ebene können von der Datenstruktur 210 auf oberster Ebene und der Datenstruktur 226 auf unterster Ebene der kleinen Objektdarstellung des zweiten Objekts 40 getrennt sein, und die Anweisungen 122 können sie zwischen der Datenstruktur 210 auf oberster Ebene und der Datenstruktur 226 auf unterster Ebene in der Hierarchie 290 hinzufügen. In den vorliegenden Beispielen bedeutet „zwischen einer ersten und einer zweiten Datenstruktur in der Hierarchie 290“, dass sie niedriger als eine der Datenstrukturen und höher als die andere ist.
  • Unter Bezugnahme auf das Beispiel von können die Anweisungen 122 die deduplizierte Darstellung des Objekts 40 von einer kleinen Objektdarstellung einschließlich eines Manifests 211 in der Datenstruktur 226 auf unterster Ebene in eine große Objektdarstellung der weiter aktualisierten Version des zweiten Objekts 40 ändern. In solchen Beispielen können die Anweisungen 122 das Manifest 211 für das zweite Objekt 40 aktualisieren, um eine Rekonstruktionsreihenfolge für die Chunks des zweiten Objekts mit dem zusätzlichen Inhalt 41 und dem weiteren zusätzlichen Inhalt darzustellen. In solchen Beispielen können Verweise auf Instanzen von Chunk-Metadaten 150 für Chunks, die den weiteren zusätzlichen Inhalt des Objekts 40 darstellen, zum Manifest 211 hinzugefügt werden. Die Chunks, die den weiteren zusätzlichen Inhalt repräsentieren, können zuvor gespeicherte übereinstimmende Chunks, neue Chunks (für die keine Übereinstimmung gefunden wurde), die dem Deduplizierungssystem 100 hinzugefügt wurden, oder eine Kombination davon umfassen.
  • Die Anweisungen können das aktualisierte Manifest 211 in einer oder mehreren hinzugefügten Datenstrukturen der Zwischenebene speichern. Beispielsweise können die Anweisungen 122 das Manifest 211 in einer neuen Datenstruktur der Zwischenebene (z. B. einer ähnlichen Datenstruktur 216) unterhalb einer anderen Datenstruktur der Zwischenebene (z. B. einer ähnlichen Datenstruktur 212) speichern, die beide in der Hierarchie 290 unterhalb der Datenstruktur 210 der obersten Ebene liegen. In anderen Beispielen können die Anweisungen 122 das aktualisierte Manifest 211 in entsprechende Manifeste für getrennte Teile des weiter aktualisierten zweiten Objekts 40 unterteilen und jedes der entsprechenden Manifeste für die Teile in einer entsprechenden der hinzugefügten Datenstrukturen der Zwischenebene speichern (z. B. wie die entsprechenden Manifeste 160 und 164 der Datenstrukturen der Zwischenebene 214 und 216, wie oben beschrieben). Die Anweisungen 122 können den direkten Verweis 37 mit einem Verweis auf die hinzugefügte(n) Datenstruktur(en) der Zwischenebene aktualisieren. Beispielsweise kann der aktualisierte Direktverweis auf eine hinzugefügte Datenstruktur auf mittlerer Ebene verweisen (z. B. wie die Datenstruktur 212), die sich oberhalb befindet und auf jede der anderen hinzugefügten Datenstruktur(en) auf mittlerer Ebene verweist (z. B. wie bei den Datenstrukturen 212, 214 und 216).
  • In einigen Beispielen kann das Deduplizierungssystem 100 zunächst eine kleine Objektdarstellung des Objekts 40 einschließlich der Chunk-Metadaten 150 als kleine Objektmetadaten speichern, später die kleinen Objektmetadaten in ein Manifest 211 überführen und später die kleine Objektdarstellung einschließlich des Manifests 211 in eine große Objektdarstellung ändern, wie oben beschrieben. In anderen Beispielen kann das Deduplizierungssystem 100 zunächst eine kleine Objektdarstellung des Objekts 40 einschließlich des Manifests 211 als die kleinen Objektmetadaten speichern und später die kleine Objektdarstellung einschließlich des Manifests 211 in eine große Objektdarstellung ändern, wie oben beschrieben.
  • In anderen Beispielen können die Anweisungen 122 die deduplizierte Darstellung von Objekt 40 von einer kleinen Objektdarstellung, einschließlich einer Instanz von Chunk-Metadaten 150 als kleine Objektmetadaten, in eine große Objektdarstellung einer aktualisierten Version des zweiten Objekts 40 ändern. Beispielsweise können die Anweisungen 122 nach dem Speichern einer anfänglichen kleinen Objektdarstellung des Objekts 40, einschließlich einer Instanz von Chunk-Metadaten 150 als Metadaten des kleinen Objekts, eine aktualisierte Version des Objekts 40 mit zusätzlichem Inhalt empfangen und ein Manifest für das aktualisierte zweite Objekt 40 mit dem zusätzlichen Inhalt speichern (siehe ). In einigen Beispielen können die Anweisungen 122 feststellen, dass das aktualisierte zweite Objekt 40 mit dem zusätzlichen Inhalt größer als die Schwellengröße ist.
  • In solchen Beispielen können die Anweisungen 122 ein Manifest für das aktualisierte zweite Objekt 40 erzeugen, um eine Rekonstruktionsreihenfolge für die Chunks des aktualisierten zweiten Objekts 40 mit dem zusätzlichen Inhalt darzustellen, können eine oder mehrere Datenstrukturen der Zwischenebene hinzufügen, die von den Datenstrukturen der obersten und der untersten Ebene der kleinen Objektdarstellung des Objekts 40 getrennt sind und zwischen diesen liegen (wie oben in Bezug auf beschrieben), und können das erzeugte Manifest in einer oder mehreren der hinzugefügten Datenstrukturen der Zwischenebene speichern (wie oben in Bezug auf beschrieben). In solchen Beispielen können die Anweisungen 122 den direkten Verweis der kleinen Objektdarstellung mit einem Verweis auf die hinzugefügte(n) Datenstruktur(en) auf mittlerer Ebene aktualisieren, wie oben in Bezug auf beschrieben.
  • Obwohl Beispiele für den Übergang zwischen Typen kleiner Objektmetadaten und zwischen kleinen und großen Objektdarstellungen hier im Kontext des Deduplizierungssystems 100 beschrieben werden, das aktualisierte (größere) Versionen eines Objekts empfängt, kann das Deduplizierungssystem 100 ähnliche Funktionen in anderen Zusammenhängen ausführen. Beispielsweise können die Anweisungen 122 während der Aufnahme eines Objekts zunächst festlegen, dass das Objekt mit einer kleinen Objektdarstellung gespeichert wird, und erst dann zu einer großen Objektdarstellung übergehen, wenn die Datenmenge des aufgenommenen Objekts die Schwellengröße überschreitet. Die Anweisungen 122 können in ähnlicher Weise von einer Instanz von Chunk-Metadaten 150 als Metadaten für kleine Objekte zu einem Manifest als Metadaten für kleine Objekte für ein Objekt übergehen, wenn mehr Daten für ein einzelnes Objekt während eines Erfassungsprozesses erfasst werden.
  • Weitere Beispiele werden hier in Bezug auf beschrieben. ist ein Blockdiagramm eines beispielhaften Deduplizierungssystems 100 zur Deduplizierung von Manifesten. Das Deduplizierungssystem 100 von ist dasselbe wie das Deduplizierungssystem 100 von und , obwohl das Beispiel von einige andere Funktionalitäten des Deduplizierungssystems 100 als die Beispiele von und zeigt.
  • Im Beispiel von kann das Deduplizierungssystem 100 eine große Objektdarstellung eines ersten Objekts 10 speichern, das mit der ID 20 assoziiert ist (wie oben in Bezug auf beschrieben), und kann eine kleine Objektdarstellung eines zweiten Objekts 40 speichern, das mit der ID 30 assoziiert ist, einschließlich eines Manifests 211 als kleine Objektmetadaten in der Bottom-Level-Datenstruktur 226 (wie oben in Bezug auf beschrieben). Das Manifest 211 umfasst Verweise 168 auf Chunk-Metadaten 150 für jeden Chunk des zweiten Objekts 40. Jede Instanz von Chunk-Metadaten 150, auf die das Manifest 211 verweist, umfasst eine Chunk-Signatur (z. B. SIG-2, SIG-4, SIG-7 usw. in ). Für jede Instanz von Chunk-Metadaten 150 stellt die Chunk-Signatur dieser Instanz von Chunk-Metadaten 150 den Inhalt des Chunk 260 dar, der mit dieser Instanz von Chunk-Metadaten 150 verbunden ist.
  • Im Beispiel von können die Anweisungen 122 eine Manifestsignatur 169 („SiG-11“) für das zweite Objekt 40 auf der Grundlage jeder der Chunk-Signaturen der Chunk-Metadaten 150 erzeugen, auf die das Manifest 211 für das zweite Objekt 40 verweist (z. B. auf der Grundlage jeder der Chunk-Signaturen der Chunk-Metadaten 150 für jeden Chunk 260 des zweiten Objekts 40). Die Anweisungen 122 können die Manifestsignatur 169 in einer Datenstruktur der untersten Ebene (z. B. 226) der kleinen Objektdarstellung des zweiten Objekts 40 speichern. Beispielsweise können die Anweisungen 122 die manifeste Signatur 169 im Manifest 211 der Bottom-Level-Datenstruktur 226 speichern.
  • In einigen Beispielen können die Anweisungen 122 die Manifestsignatur 169 bestimmen, indem sie eine Signaturfunktion (z. B. eine Hash-Funktion usw.), wie oben beschrieben, auf die Chunk-Signaturen für die Chunks 260 des zweiten Objekts 40 anwenden, die in den Instanzen der Chunk-Metadaten 150 enthalten sind, auf die das Manifest 211 verweist. Im Beispiel von kann das zweite Objekt 40 im Deduplizierungssystem 100 durch eine Sammlung von Chunks repräsentiert werden, auf die (über Chunk-Metadaten) durch das Manifest 211 verwiesen wird, einschließlich z. B. der Chunks 201, 203 und 204 (mindestens).
  • Manifest 211 kann auf jeden dieser Chunks über Verweise auf Instanzen von Chunk-Metadaten 150 verweisen, die mit diesen Chunks verbunden sind. Beispielsweise enthält das Manifest 211 einen Verweis 168 auf Chunk-Metadaten 150 mit der ID 272, die dem Chunk 204 zugeordnet ist, einen Verweis 168 auf Chunk-Metadaten 150 mit der ID 270, die dem Chunk 203 zugeordnet ist, und einen Verweis 168 auf Chunk-Metadaten 150 mit der ID 249, die dem Chunk 201 zugeordnet ist. Diese Instanzen von Chunk-Metadaten enthalten jeweils eine Chunk-Signatur (z. B. SIG-7, SIG-4 und SIG-2), und die Anweisungen 122 können die Manifest-Signatur 169 auf der Grundlage dieser Chunk-Signaturen in den Chunk-Metadaten 150 bestimmen, auf die das Manifest 211 verweist. Beispielsweise können die Anweisungen 122 alle Chunk-Signaturen der Instanzen der Chunk-Metadaten 150, auf die das Manifest 211 verweist, verketten (z. B. die Chunk-Signaturen SIG-7, SIG-4, SIG-2 usw.) und dann die Signaturfunktion auf das Ergebnis der Verkettung anwenden, um die manifeste Signatur 169 zu erzeugen. In anderen Beispielen kann die manifeste Signatur auf jede andere geeignete Weise erzeugt werden (z. B. auf der Grundlage der Chunk-Signaturen). Obwohl das Beispiel in in Bezug auf drei dargestellte Referenzen 168 auf Chunk-Metadaten beschrieben wurde, kann das Manifest 211 in anderen Beispielen mehr oder weniger Referenzen 168 und entsprechend mehr oder weniger Chunk-Signaturen enthalten, um die manifeste Signatur 169 zu erzeugen.
  • In Fortsetzung des Beispiels von können die Anweisungen 122 ein drittes Objekt 60 zur Speicherung (im Deduplizierungssystem 100) über eine deduplizierte Darstellung empfangen, die eine Vielzahl von Chunks enthält, um den Inhalt des dritten Objekts 60 darzustellen. In einigen Beispielen können die Anweisungen 122 ein Manifest für das dritte Objekt 60 erzeugen, feststellen, dass das dritte Objekt 60 unter der Schwellengröße liegt, und auf der Grundlage dieser Feststellung eine Manifestsignatur für das dritte Objekt 60 auf der Grundlage jeder der Chunk-Signaturen der Chunk-Metadaten erzeugen, auf die das Manifest des dritten Objekts 60 verweist (z. B. wie oben in Bezug auf die Manifestsignatur 169 beschrieben).
  • Beispielsweise umfasst das Manifest für das dritte Objekt 60 für jeden Chunk 260 des dritten Objekts 60 einen Verweis auf eine entsprechende Instanz von Chunk-Metadaten 150, die eine Chunk-Signatur enthält, die den Inhalt des zugehörigen Chunk 260 darstellt, und die Anweisungen 122 können die Manifest-Signatur für das dritte Objekt 60 auf der Grundlage jeder dieser Chunk-Signaturen erzeugen. In einigen Beispielen können die Chunks 260, die den Inhalt des dritten Objekts 60 repräsentieren, bereits im Deduplizierungssystem 100 gespeichert sein, sie können während des Ingest-Prozesses für das dritte Objekt 60 hinzugefügt werden, oder eine Kombination daraus.
  • In einigen Beispielen können die Anweisungen 122 eine Bottom-Level-Datenstruktur auswählen, in der das Manifest für das dritte Objekt 60 gespeichert werden soll, wie oben beschrieben. Im Beispiel von können die Anweisungen 122 die unterste Datenstruktur 226 für die Speicherung des Manifests auswählen. In solchen Beispielen können die Anweisungen 122 vor dem Speichern des Manifests für das dritte Objekt 60 die Manifestsignatur für das dritte Objekt 60 mit der Manifestsignatur 169 für das zweite Objekt 40 vergleichen. Basierend auf der Feststellung, dass die Manifestsignatur 169 für das zweite Objekt mit der Manifestsignatur für das dritte Objekt 60 äquivalent ist, können die Anweisungen 122 (im Deduplizierungssystem 100) eine kleine Objektdarstellung des dritten Objekts 60 speichern, die einen direkten Verweis 55 von der Top-Level-Datenstruktur 210 auf das Manifest 211 für das zweite Objekt 40 in der Bottom-Level-Datenstruktur 226 enthält.
  • In solchen Beispielen können die Anweisungen 122 eine Deduplizierung auf der Manifestebene durchführen. In solchen Beispielen können die Anweisungen 122 vor dem Speichern eines neuen Manifests für das dritte Objekt 60 die jeweiligen Manifestsignaturen verwenden, um festzustellen, ob ein äquivalentes Manifest bereits im Deduplizierungssystem 100 gespeichert ist, wie im Beispiel von . Wenn ein äquivalentes Manifest bereits im Deduplizierungssystem 100 gespeichert ist, kann ein Verweis (z. B. 55) auf das bereits gespeicherte Manifest im Deduplizierungssystem 100 anstelle eines Duplikats des Manifests gespeichert werden. Im Beispiel von kann eine kleine Objekt-ID 50, die mit dem dritten Objekt 60 verbunden ist, in der Top-Level-Datenstruktur 210 gespeichert und dem Verweis 55 auf das bereits gespeicherte Manifest 211 zugeordnet werden. In solchen Beispielen können die Anweisungen 122 eine kleine Objektdarstellung des dritten Objekts 60 einschließlich des direkten Verweises 55 von der Top-Level-Datenstruktur 210 auf das Manifest für das zweite Objekt in der Bottom-Level-Datenstruktur speichern. In den hier beschriebenen Beispielen kann die Auswahl einer Bottom-Level-Datenstruktur für die Speicherung eines Manifests auf der Grundlage eines oder mehrerer Affinitätsmaße, wie oben beschrieben, dazu führen, dass die Anweisungen 122 dieselbe Bottom-Level-Datenstruktur für zwei identische Manifeste auswählen, so dass sie wie oben beschrieben dedupliziert werden können. In solchen Beispielen wird erwartet, dass die Verwendung einheitlicher Platzierungsauswahlkriterien zu gleichen Platzierungsentscheidungen für identische Manifestdaten führt.
  • Ein „Rechengerät“ kann ein Server, ein Speichergerät, ein Speicher-Array, ein Backup-Gerät, ein Desktop- oder Laptop-Computer, ein Switch, ein Router oder ein anderes Verarbeitungsgerät oder eine andere Ausrüstung mit mindestens einer Verarbeitungsressource sein. In den hier beschriebenen Beispielen kann eine Verarbeitungsressource z. B. einen Prozessor oder mehrere Prozessoren umfassen, die in einem einzigen Computergerät enthalten oder über mehrere Computergeräte verteilt sind. Bei einem Prozessor kann es sich um mindestens eine Zentraleinheit (CPU), einen Mikroprozessor auf Halbleiterbasis, eine Grafikverarbeitungseinheit (GPU), ein feldprogrammierbares Gate-Array (FPGA), das zum Abrufen und Ausführen von Befehlen konfiguriert ist, andere elektronische Schaltungen, die zum Abrufen und Ausführen von auf einem maschinenlesbaren Speichermedium gespeicherten Befehlen geeignet sind, oder eine Kombination davon handeln. In den hier beschriebenen Beispielen kann eine Verarbeitungsressource die auf einem Speichermedium gespeicherten Befehle abrufen, dekodieren und ausführen, um die in Bezug auf die auf dem Speichermedium gespeicherten Befehle beschriebenen Funktionen auszuführen. In anderen Beispielen können die Funktionen, die in Bezug auf die hier beschriebenen Anweisungen beschrieben werden, in Form von elektronischen Schaltungen, in Form von ausführbaren Anweisungen, die auf einem maschinenlesbaren Speichermedium kodiert sind, oder einer Kombination davon implementiert werden. Das Speichermedium kann sich entweder in der Rechnereinrichtung befinden, die die maschinenlesbaren Anweisungen ausführt, oder es kann von der Rechnereinrichtung entfernt, aber für die Ausführung zugänglich sein (z. B. über ein Computernetz). In den hier dargestellten Beispielen kann ein Speichermedium 120 durch ein maschinenlesbares Speichermedium oder mehrere maschinenlesbare Speichermedien realisiert werden.
  • In den hier beschriebenen Beispielen kann eine Backup-Appliance, ein Speicher-Array oder ähnliches ein Computergerät sein, das eine Vielzahl von Speichergeräten und einen oder mehrere Controller umfasst, die mit Client- (oder Host-) Geräten interagieren und den Zugriff auf die Speichergeräte steuern. In einigen Beispielen können die Speichergeräte Festplattenlaufwerke (HDDs), Solid-State-Laufwerke (SSDs) oder jede andere geeignete Art von Speichergerät oder eine beliebige Kombination davon umfassen. In einigen Beispielen können der/die Controller die von den Speichergeräten bereitgestellte Speicherkapazität virtualisieren, damit ein Host auf ein virtuelles Objekt (z. B. ein Volume) zugreifen kann, das aus Speicherplatz von mehreren verschiedenen Speichergeräten besteht.
  • Ein „maschinenlesbares Speichermedium“ kann jedes elektronische, magnetische, optische oder andere physikalische Speichermedium sein, das Informationen wie ausführbare Befehle, Daten und Ähnliches enthält oder speichert. Beispielsweise kann jedes hier beschriebene maschinenlesbare Speichermedium ein RAM, EEPROM, flüchtiger Speicher, nichtflüchtiger Speicher, persistenter Speicher, persistenter Speicher, Flash-Speicher, ein Speicherlaufwerk (z. B. eine HDD, eine SSD), eine beliebige Art von Speicherplatte (z. B. eine Compact Disc, eine DVD usw.) oder Ähnliches oder eine Kombination davon sein. Darüber hinaus kann jedes hier beschriebene maschinenlesbare Speichermedium nicht-durchlässig sein. In den hier beschriebenen Beispielen kann ein maschinenlesbares Speichermedium oder können maschinenlesbare Speichermedien Teil eines Artikels (oder Herstellungsartikels) sein. Ein Artikel oder Herstellungsgegenstand kann sich auf ein einzelnes hergestelltes Bauteil oder auf mehrere Bauteile beziehen. In einigen Beispielen können Anweisungen Teil eines Installationspakets sein, das, wenn es installiert ist, von einer Verarbeitungsressource ausgeführt werden kann, um die hier beschriebenen Funktionen zu implementieren.
  • In den hier beschriebenen Beispielen ist der Ausdruck „basierend auf‟ umfassend und bedeutet dasselbe wie die alternative Formulierung „zumindest basierend auf oder " zumindest teilweise basierend auf. In den hier beschriebenen Beispielen können Funktionalitäten, die als von „Anweisungen“ ausgeführt beschrieben werden, als Funktionalitäten verstanden werden, die von diesen Anweisungen ausgeführt werden können, wenn sie von einer Verarbeitungsressource ausgeführt werden. In anderen Beispielen können Funktionen, die in Bezug auf Anweisungen beschrieben werden, durch eine oder mehrere Maschinen implementiert werden, die eine beliebige Kombination aus Hardware und Programmierung zur Implementierung der Funktionen der Maschine(n) sein können.

Claims (20)

  1. Ein Verfahren, das Folgendes umfasst: Speichern, in einem Deduplizierungssystem, einer großen Objektdarstellung eines ersten Objekts, das größer als eine Schwellengröße ist, wobei die große Objektdarstellung Metadaten umfasst, die in einer Hierarchie von Datenstrukturen organisiert sind, die Folgendes umfassen: eine Top-Level-Datenstruktur; eine oder mehrere Bottom-Level-Datenstrukturen, die jeweils Chunk-Metadaten mit Speicherplätzen für entsprechende Chunks des ersten Objekts umfassen; und eine oder mehrere Datenstrukturen auf mittlerer Ebene, die von den Datenstrukturen auf oberer und unterer Ebene in der Hierarchie getrennt sind und ein Manifest umfassen, das über Verweise auf die Chunk-Metadaten der einen oder mehreren Datenstrukturen auf unterer Ebene eine Rekonstruktionsreihenfolge für die Chunks des ersten Objekts darstellt; Feststellung, dass ein zweites Objekt kleiner als die Schwellengröße ist; und basierend auf der Bestimmung, Speichern einer kleinen Objektdarstellung des zweiten Objekts in dem Deduplizierungssystem, die Folgendes umfasst: einen direkten Verweis von der Datenstruktur der obersten Ebene auf die Metadaten des kleinen Objekts in einer Datenstruktur der untersten Ebene der Darstellung des kleinen Objekts, wobei der direkte Verweis alle Datenstrukturen der Zwischenebene auslässt, die von der Datenstruktur der obersten Ebene und der Datenstruktur der untersten Ebene der Darstellung des kleinen Objekts getrennt sind und zwischen diesen liegen, wobei die Bottom-Level-Datenstruktur der kleinen Objektdarstellung Chunk-Metadaten für das zweite Objekt einschließlich eines jeweiligen Speicherplatzes für jeden Chunk des zweiten Objekts enthält.
  2. Das Verfahren nach Anspruch 1, wobei: der Inhalt des zweiten Objekts ist in einem einzigen Chunk enthalten; die kleinen Objekt-Metadaten die Chunk-Metadaten für den einzelnen Chunk des zweiten Objekts umfassen; und der direkte Verweis umfasst einen in der Datenstruktur der obersten Ebene gespeicherten Verweis auf die Chunk-Metadaten für den einzelnen Chunk des zweiten Objekts.
  3. Das Verfahren nach Anspruch 1, wobei: der Inhalt des zweiten Objekts in einer Vielzahl von Chunks enthalten ist; die Metadaten des kleinen Objekts ein Manifest für das zweite Objekt umfassen, das in der Datenstruktur der unteren Ebene der Darstellung des kleinen Objekts gespeichert ist; und das Manifest für das zweite Objekt über Verweise auf die Chunk-Metadaten der jeweiligen Vielzahl von Chunks des zweiten Objekts eine Reihenfolge der Vielzahl von Chunks zur Rekonstruktion des zweiten Objekts darstellt.
  4. Das Verfahren nach Anspruch 3, wobei: eine Deduplizierungsdomäne des Deduplizierungssystems eine Vielzahl von Datenstrukturen auf unterster Ebene umfasst, einschließlich der einen oder mehreren Datenstrukturen auf unterster Ebene der großen Objektdarstellung; und die Speicherung der kleinen Objektdarstellung des zweiten Objekts im Deduplizierungssystem umfasst: Auswählen einer gegebenen Datenstruktur auf unterster Ebene aus der Vielzahl von Datenstrukturen auf unterster Ebene als Datenstruktur auf unterster Ebene der kleinen Objektdarstellung und Speichern des Manifests auf der Grundlage einer Affinität zwischen dem Manifest und der gegebenen Datenstruktur auf unterster Ebene.
  5. Verfahren nach Anspruch 4, wobei für jeden Chunk des zweiten Objekts die jeweiligen Chunk-Metadaten eine Chunk-Signatur umfassen, die den Inhalt des Chunks darstellt, wobei das Verfahren ferner umfasst: Erzeugen einer Manifest-Signatur für das zweite Objekt auf der Grundlage jeder der Chunk-Signaturen der Chunk-Metadaten, auf die das Manifest des zweiten Objekts verweist; und Speicherung der Manifestsignatur in der untersten Datenstruktur der kleinen Objektdarstellung.
  6. Das Verfahren nach Anspruch 5 umfasst ferner: Erzeugen eines Manifests für das dritte Objekt, das für jeden Chunk des dritten Objekts einen Verweis auf entsprechende Chunk-Metadaten einschließlich einer Chunk-Signatur umfasst, die den Inhalt des Chunks darstellt; und basierend auf der Feststellung, dass ein drittes Objekt unterhalb der Schwellengröße liegt und einen Inhalt umfasst, der durch eine zweite Vielzahl von Chunks dargestellt werden soll: Erzeugen einer Manifestsignatur für das dritte Objekt auf der Grundlage jeder der Chunk-Signaturen der Chunk-Metadaten, auf die das Manifest des dritten Objekts verweist.
  7. Das Verfahren nach Anspruch 6 umfasst ferner: Vergleichen der Manifestsignatur für das dritte Objekt mit der Manifestsignatur für das zweite Objekt; und basierend auf der Feststellung, dass die Manifestsignaturen für das zweite und das dritte Objekt äquivalent sind, Speichern einer kleinen Objektdarstellung des dritten Objekts im Deduplizierungssystem, die einen direkten Verweis von der Datenstruktur der obersten Ebene auf das Manifest für das zweite Objekt in der Datenstruktur der untersten Ebene enthält.
  8. Ein Artikel, der ein nicht-transitorisches, maschinenlesbares Speichermedium umfasst, das Anweisungen enthält, die von mindestens einer Verarbeitungsressource ausgeführt werden können, um: basierend auf einer Bestimmung, dass ein erstes Objekt größer als eine Schwellengröße ist, eine Large-Object-Darstellung des ersten Objekts in einem Deduplizierungssystem zu speichern, wobei die Large-Object-Darstellung Metadaten umfasst, die in einer Hierarchie von Datenstrukturen organisiert sind, einschließlich: eine Top-Level-Datenstruktur; eine oder mehrere Bottom-Level-Datenstrukturen, die jeweils Chunk-Metadaten mit Speicherplätzen für entsprechende Chunks des ersten Objekts enthalten; eine oder mehrere Datenstrukturen auf mittlerer Ebene, die von den Datenstrukturen auf oberer und unterer Ebene in der Hierarchie getrennt sind und ein Manifest umfassen, das über Verweise auf Chunk-Metadaten der einen oder mehreren Datenstrukturen auf unterer Ebene eine Rekonstruktionsreihenfolge für die Chunks des ersten Objekts darstellt; und wobei die eine oder mehreren Datenstrukturen der Zwischenebene von den Datenstrukturen der obersten und der untersten Ebene getrennt sind und zwischen ihnen in einer Datenstrukturhierarchie liegen; und auf der Grundlage der Feststellung, dass ein zweites Objekt kleiner als die Schwellengröße ist, in dem Deduplizierungssystem eine Darstellung des zweiten Objekts als kleines Objekt speichern, die Folgendes umfasst: einen direkten Verweis von der Datenstruktur der obersten Ebene auf die Metadaten des kleinen Objekts in einer Datenstruktur der untersten Ebene der Darstellung des kleinen Objekts, wobei der direkte Verweis alle Datenstrukturen der Zwischenebene auslässt, die von der Datenstruktur der obersten Ebene und der Datenstruktur der untersten Ebene der Darstellung des kleinen Objekts getrennt sind und zwischen diesen liegen, wobei die Bottom-Level-Datenstruktur der kleinen Objektdarstellung Chunk-Metadaten für jeden Chunk des zweiten Objekts einschließlich eines jeweiligen Speicherorts für jeden Chunk des zweiten Objekts enthält.
  9. Der Artikel nach Anspruch 8, wobei die Anweisungen ausführbar sind, um: basierend auf der Feststellung, dass der Inhalt des zweiten Objekts klein genug ist, um im Deduplizierungssystem durch einen einzigen Chunk dargestellt zu werden: Speichern eines Verweises auf die Chunk-Metadaten für den einzelnen Chunk des zweiten Objekts in der Datenstruktur der obersten Ebene, wobei die Chunk-Metadaten für den einzelnen Chunk in der Datenstruktur der untersten Ebene der kleinen Objektdarstellung gespeichert sind; wobei der direkte Verweis den Verweis auf die Chunk-Metadaten für den einzelnen Chunk umfasst.
  10. Der Artikel nach Anspruch 9, wobei die Anweisungen ausführbar sind, um: nach dem Speichern der kleinen Objektdarstellung des zweiten Objekts in dem Deduplizierungssystem bestimmen, dass zusätzlicher Inhalt zu der deduplizierten Darstellung des zweiten Objekts in dem Deduplizierungssystem gespeichert werden soll; basierend auf der Feststellung, dass der Inhalt des zweiten Objekts mit dem zusätzlichen Inhalt zu groß ist, um in einem Chunk gespeichert zu werden, und kleiner als die Schwellengröße ist: Speichern eines Manifests für das zweite Objekt mit dem zusätzlichen Inhalt in der Bottom-Level-Datenstruktur der kleinen Objektdarstellung, wobei das Manifest für das zweite Objekt über Verweise auf Chunk-Metadaten eine Rekonstruktionsreihenfolge einer ersten Mehrzahl von Chunks darstellt, die den Inhalt des zweiten Objekts enthalten; und die Datenstruktur der obersten Ebene der Darstellung des kleinen Objekts ändern, um einen Verweis auf das Manifest für das zweite Objekt in der Datenstruktur der untersten Ebene der Darstellung des kleinen Objekts als direkten Verweis aufzunehmen.
  11. Der Artikel nach Anspruch 10, wobei die Anweisungen ausführbar sind, um: nach dem Speichern der kleinen Objektdarstellung des zweiten Objekts mit dem zusätzlichen Inhalt in dem Deduplizierungssystem bestimmen, dass weiterer zusätzlicher Inhalt zu der deduplizierten Darstellung des zweiten Objekts in dem Deduplizierungssystem gespeichert werden soll; auf der Grundlage der Feststellung, dass der Inhalt des zweiten Objekts mit dem weiteren zusätzlichen Inhalt größer als die Schwellengröße ist, die Darstellung des zweiten Objekts als kleines Objekt in eine Darstellung des zweiten Objekts als großes Objekt ändern; die Anweisungen zu ändern, die Anweisungen zu enthalten: eine oder mehrere Datenstrukturen auf mittlerer Ebene hinzufügen, die von den Datenstrukturen auf oberster und unterster Ebene der kleinen Objektdarstellung getrennt sind und zwischen diesen in einer Datenstrukturhierarchie liegen; Aktualisieren des Manifests für das zweite Objekt, um eine Rekonstruktionsreihenfolge für die Chunks des zweiten Objekts mit dem zusätzlichen Inhalt und dem weiteren zusätzlichen Inhalt darzustellen; und Speichern des aktualisierten Manifests in der einen oder den mehreren Datenstrukturen der Zwischenebene; und den direkten Verweis mit einem Verweis auf die hinzugefügte(n) Datenstruktur(en) der Zwischenebene aktualisieren.
  12. Der Artikel nach Anspruch 8, wobei die Anweisungen ausführbar sind, um: basierend auf der Feststellung, dass der Inhalt des zweiten Objekts nicht klein genug ist, um im Deduplizierungssystem durch einen einzelnen Chunk dargestellt zu werden: Speichern eines Manifests für das zweite Objekt in der Bottom-Level-Datenstruktur der kleinen Objektdarstellung, wobei das Manifest für das zweite Objekt über Verweise auf Chunk-Metadaten eine Rekonstruktionsreihenfolge einer ersten Mehrzahl von Chunks darstellt, die den Inhalt des zweiten Objekts enthalten; und Speichern eines Verweises auf das Manifest für das zweite Objekt in der Datenstruktur der unteren Ebene der Darstellung des kleinen Objekts in der Datenstruktur der oberen Ebene und als direkte Referenz.
  13. Der Artikel nach Anspruch 12, wobei die Anweisungen ausführbar sind, um: nach dem Speichern der kleinen Objektdarstellung des zweiten Objekts in dem Deduplizierungssystem bestimmen, dass zusätzlicher Inhalt zu der deduplizierten Darstellung des zweiten Objekts in dem Deduplizierungssystem gespeichert werden soll; basierend auf der Feststellung, dass der Inhalt des zweiten Objekts mit dem zusätzlichen Inhalt größer als die Schwellengröße ist, die Darstellung des zweiten Objekts als kleines Objekt in eine Darstellung des zweiten Objekts als großes Objekt ändern; die Anweisungen zu ändern, die Anweisungen zu enthalten: eine oder mehrere Datenstrukturen auf mittlerer Ebene hinzufügen, die von den Datenstrukturen auf oberster und unterster Ebene der kleinen Objektdarstellung getrennt sind und zwischen diesen in einer Datenstrukturhierarchie liegen; das Manifest für das zweite Objekt aktualisieren, um eine Rekonstruktionsreihenfolge für die Chunks des zweiten Objekts mit dem zusätzlichen Inhalt darzustellen; Speichern des aktualisierten Manifests in der einen oder den mehreren Datenstrukturen der Zwischenebene; und den direkten Verweis mit einem Verweis auf die hinzugefügte(n) Datenstruktur(en) der Zwischenebene aktualisieren.
  14. Ein Computergerät mit: mindestens eine Verarbeitungsressource; und ein nicht-übertragbares maschinenlesbares Speichermedium, das Anweisungen enthält, die von der mindestens einen Verarbeitungsressource ausgeführt werden können, um: Speichern einer großen Objektdarstellung eines ersten Objekts, das größer als eine Schwellengröße ist, in einem Deduplizierungssystem, wobei die große Objektdarstellung Metadaten umfasst, die in einer Hierarchie von Datenstrukturen organisiert sind, einschließlich: eine Top-Level-Datenstruktur; eine oder mehrere Bottom-Level-Datenstrukturen, die jeweils Chunk-Metadaten mit Speicherplätzen für entsprechende Chunks des ersten Objekts umfassen; und eine oder mehrere Datenstrukturen auf mittlerer Ebene, die von den Datenstrukturen auf oberer und unterer Ebene in der Hierarchie getrennt sind und ein Manifest umfassen, das eine Rekonstruktionsreihenfolge für die Chunks des ersten Objekts über Verweise auf Chunk-Metadaten der einen oder mehreren Datenstrukturen auf unterer Ebene darstellt; Feststellung, dass ein zweites Objekt kleiner als die Schwellengröße ist; und basierend auf der Bestimmung, Speichern einer kleinen Objektdarstellung des zweiten Objekts in dem Deduplizierungssystem, die Folgendes umfasst: einen direkten Verweis von der Datenstruktur der obersten Ebene auf die Metadaten des kleinen Objekts in einer Datenstruktur der untersten Ebene der Darstellung des kleinen Objekts, wobei der direkte Verweis alle Datenstrukturen der Zwischenebene auslässt, die von der Datenstruktur der obersten Ebene und der Datenstruktur der untersten Ebene der Darstellung des kleinen Objekts getrennt sind und zwischen diesen liegen, wobei die Bottom-Level-Datenstruktur der kleinen Objektdarstellung Chunk-Metadaten für das zweite Objekt enthält, die einen jeweiligen Speicherort für jeden Chunk des zweiten Objekts enthalten.
  15. Das Computergerät nach Anspruch 14, wobei: der Inhalt des zweiten Objekts ist in einem einzigen Chunk enthalten; die kleinen Objekt-Metadaten die Chunk-Metadaten für den einzelnen Chunk des zweiten Objekts umfassen; der direkte Verweis einen Verweis auf die Chunk-Metadaten für den einzelnen Chunk des zweiten Objekts in der Bottom-Level-Datenstruktur der kleinen Objektdarstellung umfasst; und die direkte Referenz wird in der obersten Datenstruktur der kleinen Objektdarstellung gespeichert.
  16. Das Computergerät nach Anspruch 14, wobei: der Inhalt des zweiten Objekts in einer Vielzahl von Chunks enthalten ist; die Metadaten des kleinen Objekts ein Manifest für das zweite Objekt umfassen, das in der Datenstruktur der unteren Ebene der Darstellung des kleinen Objekts gespeichert ist; und das Manifest für das zweite Objekt eine Rekonstruktionsreihenfolge für die Vielzahl von Chunks für das zweite Objekt über Referenzen zu den Chunk-Metadaten der Vielzahl von Chunks des zweiten Objekts darstellt.
  17. Das Computergerät nach Anspruch 16, wobei das Manifest für das zweite Objekt Verweise auf Chunk-Metadaten mehrerer unterschiedlicher Datenstrukturen der untersten Ebene des Deduplizierungssystems umfasst.
  18. Das Computergerät nach Anspruch 17, wobei für jeden Chunk des zweiten Objekts die jeweiligen Chunk-Metadaten eine Chunk-Signatur umfassen, die den Inhalt des Chunks darstellt, wobei das Verfahren ferner Folgendes umfasst: Erzeugen einer Manifest-Signatur für das zweite Objekt auf der Grundlage jeder der Chunk-Signaturen der Chunk-Metadaten, auf die das Manifest für das zweite Objekt verweist; und Speicherung der Manifestsignatur in der untersten Datenstruktur der kleinen Objektdarstellung.
  19. Das Computergerät nach Anspruch 18, das außerdem Folgendes umfasst: Erzeugen eines Manifests für das dritte Objekt, das für jeden Chunk des dritten Objekts einen Verweis auf entsprechende Chunk-Metadaten einschließlich einer Chunk-Signatur umfasst, die den Inhalt des Chunks darstellt; und basierend auf der Feststellung, dass ein drittes Objekt unterhalb der Schwellengröße liegt und einen Inhalt umfasst, der durch eine zweite Vielzahl von Chunks dargestellt werden soll: Erzeugen einer Manifestsignatur für das dritte Objekt basierend auf jeder der Chunk-Signaturen der Chunk-Metadaten, auf die das Manifest des dritten Objekts verweist.
  20. Das Computergerät nach Anspruch 19, das außerdem Folgendes umfasst: Vergleichen der Manifestsignatur für das dritte Objekt mit der Manifestsignatur für das zweite Objekt; und basierend auf der Feststellung, dass die Manifestsignaturen für das zweite und das dritte Objekt äquivalent sind, Speichern einer kleinen Objektdarstellung des dritten Objekts im Deduplizierungssystem, die einen direkten Verweis von der Datenstruktur der obersten Ebene auf das Manifest für das zweite Objekt in der Datenstruktur der untersten Ebene enthält.
DE102021126985.7A 2021-04-23 2021-10-19 Speicherung einer kleinen objektdarstellung in einem deduplizierungssystem Granted DE102021126985A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/302,109 US11663234B2 (en) 2021-04-23 2021-04-23 Storage of a small object representation in a deduplication system
US17/302,109 2021-04-23

Publications (1)

Publication Number Publication Date
DE102021126985A1 true DE102021126985A1 (de) 2022-10-27

Family

ID=83507808

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102021126985.7A Granted DE102021126985A1 (de) 2021-04-23 2021-10-19 Speicherung einer kleinen objektdarstellung in einem deduplizierungssystem

Country Status (3)

Country Link
US (1) US11663234B2 (de)
CN (1) CN115237336B (de)
DE (1) DE102021126985A1 (de)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US12019620B2 (en) 2022-01-27 2024-06-25 Hewlett Packard Enterprise Development Lp Journal groups for metadata housekeeping operation
CN117240799B (zh) * 2023-11-16 2024-02-02 北京中科网芯科技有限公司 用于汇聚分流设备的报文去重方法及其系统

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5239647A (en) 1990-09-07 1993-08-24 International Business Machines Corporation Data storage hierarchy with shared storage level
US8188997B2 (en) * 2000-06-19 2012-05-29 Mental Images Gmbh Accelerated ray tracing using shallow bounding volume hierarchies
US8572055B1 (en) 2008-06-30 2013-10-29 Symantec Operating Corporation Method and system for efficiently handling small files in a single instance storage data store
US8694466B2 (en) 2008-10-07 2014-04-08 Dell Products L.P. Object deduplication and application aware snapshots
WO2011159322A1 (en) 2010-06-18 2011-12-22 Hewlett-Packard Development Company, L.P. Data deduplication
US8392376B2 (en) * 2010-09-03 2013-03-05 Symantec Corporation System and method for scalable reference management in a deduplication based storage system
US8719286B1 (en) 2012-03-30 2014-05-06 Emc Corporation System and method for block-based subtree virtual machine backup
US8959067B1 (en) * 2012-08-08 2015-02-17 Amazon Technologies, Inc. Data storage inventory indexing
WO2014185916A1 (en) * 2013-05-16 2014-11-20 Hewlett-Packard Development Company, L.P. Selecting a store for deduplicated data
US9336260B2 (en) * 2013-10-16 2016-05-10 Netapp, Inc. Technique for global deduplication across datacenters with minimal coordination
US9633056B2 (en) 2014-03-17 2017-04-25 Commvault Systems, Inc. Maintaining a deduplication database
US10380072B2 (en) 2014-03-17 2019-08-13 Commvault Systems, Inc. Managing deletions from a deduplication database
US9696913B1 (en) 2015-04-13 2017-07-04 Cohesity, Inc. Tier-optimized write scheme
US10365974B2 (en) 2016-09-16 2019-07-30 Hewlett Packard Enterprise Development Lp Acquisition of object names for portion index objects
US11017032B1 (en) * 2016-09-30 2021-05-25 Amazon Technologies, Inc. Document recovery utilizing serialized data
US10642879B2 (en) 2017-01-06 2020-05-05 Oracle International Corporation Guaranteed file system hierarchy data integrity in cloud object stores
US11029862B2 (en) 2017-04-25 2021-06-08 Netapp, Inc. Systems and methods for reducing write tax, memory usage, and trapped capacity in metadata storage
US11416447B2 (en) * 2017-06-08 2022-08-16 Hitachi Vantara Llc Deduplicating distributed erasure coded objects
US11182256B2 (en) 2017-10-20 2021-11-23 Hewlett Packard Enterprise Development Lp Backup item metadata including range information
CN112486403A (zh) * 2019-09-12 2021-03-12 伊姆西Ip控股有限责任公司 管理存储对象的元数据的方法、装置和计算机程序产品
US11803518B2 (en) 2020-10-01 2023-10-31 Hewlett Packard Enterprise Development Lp Journals to record metadata changes in a storage system

Also Published As

Publication number Publication date
US11663234B2 (en) 2023-05-30
CN115237336B (zh) 2024-03-01
CN115237336A (zh) 2022-10-25
US20220342902A1 (en) 2022-10-27

Similar Documents

Publication Publication Date Title
DE112017005868T5 (de) Verwaltung von e/a-abläufen für datenobjekte in einem speichersystem
DE112008003826B4 (de) Datenverarbeitungsvorrichtung und Verfahren zur Datenverarbeitung
DE102013215535B4 (de) Sicherung oder wiederherstellung von daten mit hilfe eines hauptspeichers und nichtflüchtiger speichermedien
DE112007003678B4 (de) Datenverarbeitungsvorrichtung und Verfahren zur Datenverarbeitung
DE102016013248A1 (de) Bezugsblockansammlung in einer Bezugsmenge zur Deduplizierung beim Speichermanagement
DE112007003645B4 (de) Datenverarbeitungsvorrichtung und Verfahren zur Datenverarbeitung
DE102010053282A1 (de) Modifizierter B+ Baum zum Speichern von Nand-Speicher Umleitungszuordnungen
DE112013000900B4 (de) Bewahren von Redundanz in Datendeduplizierungssystemen unter Verwendung eines Anzeigers
DE102013215009A1 (de) Verfahren und System zur Optimierung der Datenübertragung
DE202009019139U1 (de) Asynchron verteilte Deduplizierung für replizierte inhaltsadressierte Speichercluster
DE102021101239B4 (de) Schwellenwert des deduplizierungssystems basierend auf der abnutzung eines speichergeräts
DE69600754T2 (de) Aufteilung einer Teilung in einem Plattenspeichersystem
DE112017000167B4 (de) Verteilte Datendeduplizierung in einem Prozessorraster
DE102021126985A1 (de) Speicherung einer kleinen objektdarstellung in einem deduplizierungssystem
DE102021108572A1 (de) Containerisierte anwendungsmanifeste und virtuelle persistente volumes
DE102017118341B4 (de) Neuaufteilen von Daten in einem verteilten Computersystem
DE102021109729A1 (de) Schätzung der nutzung der speichersystemkapazität
DE112014000251T5 (de) Echtzeitklassifizierung von Daten in Datenkomprimierungsdomänen
DE102022108673A1 (de) Ressourcenzuweisung für synthetische backups
DE112014000448T5 (de) Auszugabruf beruhend auf Ähnlichkeitssuche bei Datendeduplizierung
DE602004007925T2 (de) Verwalten einer beziehung zwischen einem zielvolumen und einem quellenvolumen
DE112016000176T5 (de) Datendeduplizierung unter Verwendung von Chunk-Dateien
DE112018000227B4 (de) Verfahren zum teilweisen Aktualisieren von Dateninhalten in einem verteilten Speichernetzwerk
DE102021108967A1 (de) Schlüssel-wert-index mit knotenpuffern suchen
DE102023116348A1 (de) Wiederherstellung von sicherungskopien aus einem entfernten speicher

Legal Events

Date Code Title Description
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, TX, US

R012 Request for examination validly filed
R016 Response to examination communication
R018 Grant decision by examination section/examining division