DE102022108668A1 - Zeitschriftengruppen für die verwaltung von metadaten - Google Patents

Zeitschriftengruppen für die verwaltung von metadaten Download PDF

Info

Publication number
DE102022108668A1
DE102022108668A1 DE102022108668.2A DE102022108668A DE102022108668A1 DE 102022108668 A1 DE102022108668 A1 DE 102022108668A1 DE 102022108668 A DE102022108668 A DE 102022108668A DE 102022108668 A1 DE102022108668 A1 DE 102022108668A1
Authority
DE
Germany
Prior art keywords
container
journal
indices
group
index
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE102022108668.2A
Other languages
English (en)
Inventor
Richard Phillip MAYO
Callum Murray
David Malcolm Falkinder
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 DE102022108668A1 publication Critical patent/DE102022108668A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/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
    • 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/2282Tablespace storage structures; 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/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational databases
    • G06F16/285Clustering or classification

Landscapes

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

Abstract

Beispielimplementierungen beziehen sich auf Metadatenoperationen in einem Speichersystem. Ein Beispiel umfasst das Erkennen einer Housekeeping-Operation durch eine Speichersteuerung eines Deduplizierungsspeichersystems, um Aktualisierungen von Daten eines Satzes von Container-Indizes gespeicherter deduplizierter Daten durchzuführen; als Reaktion auf eine Erkennung der Housekeeping-Operation identifiziert die Speichersteuerung unter dem Satz von Container-Indizes eine Vielzahl von Container-Indizes, die mit einer bestimmten Journalgruppe verbunden sind, wobei die bestimmte Journalgruppe eine Vielzahl von Journalen umfasst, um Aktualisierungen von Daten der Vielzahl von Container-Indizes zu speichern; und Aufrechterhalten der bestimmten Journalgruppe, die in den Speicher geladen ist, durch die Speichersteuerung, bis alle Aktualisierungen der Housekeeping-Operation an der Vielzahl von Containerindizes in den jeweiligen Journalen der bestimmten Journalgruppe gespeichert worden sind.

Description

  • Hintergrund
  • Techniken zur Datenreduzierung können angewandt werden, um die Menge der in einem Speichersystem gespeicherten Daten zu verringern. Ein Beispiel für ein Datenreduktionsverfahren ist die Datendeduplizierung. Bei der Datendeduplizierung werden doppelte Dateneinheiten identifiziert, und es wird versucht, die Anzahl der im Speichersystem gespeicherten doppelten Dateneinheiten zu reduzieren oder zu eliminieren.
  • Figurenliste
  • Einige Ausführungsformen werden anhand der folgenden Abbildungen beschrieben.
    • ist ein schematisches Diagramm eines beispielhaften Speichersystems gemäß einigen Ausführungsformen.
    • ist eine Darstellung von Beispiel-Datenstrukturen in Übereinstimmung mit einigen Implementierungen.
    • ist eine Darstellung von Beispiel-Datenstrukturen in Übereinstimmung mit einigen Implementierungen.
    • ist eine Illustration eines Beispielprozesses in Übereinstimmung mit einigen Implementierungen.
    • sind Abbildungen von Beispiel-Datenstrukturen gemäß einigen Implementierungen.
    • ist ein Diagramm eines maschinenlesbaren Mediums, das Befehle in Übereinstimmung mit einigen Implementierungen speichert.
    • ist ein schematisches Diagramm eines Beispiel-Computergeräts gemäß einigen Implementierungen.
    • ist eine Illustration eines Beispielprozesses in Übereinstimmung mit einigen Implementierungen.
  • In den Zeichnungen bezeichnen identische Referenznummern ähnliche, aber nicht unbedingt identische Elemente. Die Abbildungen sind nicht unbedingt maßstabsgetreu, und die Größe einiger Teile kann übertrieben sein, um das gezeigte Beispiel deutlicher zu machen. Darüber hinaus enthalten die Zeichnungen Beispiele und/oder Ausführungsformen, die mit der Beschreibung übereinstimmen; die Beschreibung ist jedoch nicht auf die in den Zeichnungen dargestellten Beispiele und/oder Ausführungsformen beschränkt.
  • Ausführliche Beschreibung
  • In der vorliegenden Offenlegung schließt die Verwendung des Begriffs „ein“, „ein“ oder „die“ auch die Pluralformen ein, sofern aus dem Kontext nicht eindeutig etwas anderes hervorgeht. Auch der Begriff „umfasst“, „einschließlich“, „umfasst“, „umfasst“, „haben“ oder „haben“, wenn er in dieser Offenlegung verwendet wird, spezifiziert das Vorhandensein der angegebenen Elemente, schließt aber das Vorhandensein oder die Zugabe anderer Elemente nicht aus.
  • In einigen Beispielen kann ein Speichersystem Daten deduplizieren, um den für die Speicherung der Daten erforderlichen Speicherplatz zu reduzieren. Das Speichersystem kann einen Deduplizierungsprozess durchführen, bei dem ein Datenstrom in diskrete Dateneinheiten oder „Chunks“ unterteilt wird. "Darüber hinaus kann das Speichersystem Identifikatoren oder „Fingerabdrücke“ eingehender Dateneinheiten ermitteln und feststellen, welche eingehenden Dateneinheiten Duplikate von zuvor gespeicherten Dateneinheiten sind. Im Falle von Dateneinheiten, bei denen es sich um Duplikate handelt, kann das Speichersystem Verweise auf die vorherigen Dateneinheiten speichern, anstatt die doppelten eingehenden Dateneinheiten zu speichern.
  • Wie hier verwendet, bezieht sich der Begriff „Fingerabdruck“ auf einen Wert, der durch Anwendung einer Funktion auf den Inhalt der Dateneinheit abgeleitet wird (wobei der „Inhalt“ die Gesamtheit oder eine Teilmenge des Inhalts der Dateneinheit umfassen kann). Ein Beispiel für eine Funktion, die angewendet werden kann, ist eine Hash-Funktion, die einen Hash-Wert auf der Grundlage der eingehenden Dateneinheit erzeugt. Beispiele für Hash-Funktionen sind kryptografische Hash-Funktionen wie die Hash-Funktionen des Secure Hash Algorithm 2 (SHA-2), z. B. SHA-224, SHA-256, SHA-384, usw. In anderen Beispielen können auch andere Arten von Hash-Funktionen oder andere Arten von Fingerprint-Funktionen verwendet werden.
  • Ein „Speichersystem“ kann ein Speichergerät oder eine Anordnung von Speichergeräten umfassen. Ein Speichersystem kann auch einen oder mehrere Speicher-Controller enthalten, die den Zugriff auf das/die Speichergerät(e) verwalten. Eine „Dateneinheit“ kann sich auf jeden Teil der Daten beziehen, der im Speichersystem separat identifiziert werden kann. In einigen Fällen kann sich eine Dateneinheit auf einen Chunk, eine Sammlung von Chunks oder einen anderen Teil von Daten beziehen. In einigen Beispielen kann ein Speichersystem Dateneinheiten in einem persistenten Speicher speichern. Die dauerhafte Speicherung kann mit einem oder mehreren dauerhaften (z. B. nichtflüchtigen) Speichergeräten, wie plattenbasierten Speichergeräten (z. B. Festplattenlaufwerken (HDDs)), Solid-State-Geräten (SSDs), wie Flash-Speichergeräten oder Ähnlichem, oder einer Kombination davon erfolgen.
  • Ein „Steuergerät“ kann sich auf einen Hardware-Verarbeitungsschaltkreis beziehen, der eine beliebige oder eine Kombination aus einem Mikroprozessor, einem Kern eines Multi-Core-Mikroprozessors, einem Mikrocontroller, einem programmierbaren integrierten Schaltkreis, einem programmierbaren Gate-Array, einem digitalen Signalprozessor oder einem anderen Hardware-Verarbeitungsschaltkreis umfassen kann. Alternativ kann sich ein „Steuergerät“ auf eine Kombination aus einer Hardware-Verarbeitungsschaltung und maschinenlesbaren Anweisungen (Software und/oder Firmware) beziehen, die auf der Hardware-Verarbeitungsschaltung ausführbar sind.
  • In einigen Beispielen kann ein Deduplizierungsspeichersystem Metadaten für die Verarbeitung eines oder mehrerer eingehender Datenströme (z. B. mehrerer gleichzeitiger eingehender Datenströme) verwenden. Solche Metadaten können zum Beispiel Datenrezepte (hier auch als „Manifeste“ bezeichnet) enthalten, die die Reihenfolge angeben, in der bestimmte Dateneinheiten (z. B. in einem Datenstrom) empfangen werden. Anschließend kann das Deduplizierungssystem als Reaktion auf eine Leseanforderung einen Satz von Manifesten (hier auch als „Element-Metadaten“ bezeichnet) verwenden, um die Reihenfolge der empfangenen Dateneinheiten zu bestimmen, und so den ursprünglichen Datenstrom wiederherstellen. Dementsprechend kann der Satz von Manifesten eine Darstellung des ursprünglichen Datenstroms sein. Die Manifeste können eine Folge von Datensätzen enthalten, wobei jeder Datensatz einen bestimmten Satz von Dateneinheiten darstellt. Die Datensätze des Manifests können ein oder mehrere Felder (hier auch als „Zeigerinformationen“ bezeichnet) enthalten, die Indizes identifizieren, die Speicherinformationen für die Dateneinheiten enthalten. So kann ein Index beispielsweise ein oder mehrere Felder enthalten, die Standortinformationen (z. B. Container, Offsets usw.) für die gespeicherten Dateneinheiten, Komprimierungs- und/oder Verschlüsselungsmerkmale der gespeicherten Dateneinheiten usw. angeben. Ferner kann der Index Verweiszahlen enthalten, die die Anzahl der Manifeste angeben, die auf jede Dateneinheit verweisen.
  • In einigen Beispielen kann das Deduplizierungsspeichersystem Housekeeping-Prozesse durchführen, um die Genauigkeit der enthaltenen Metadaten zu erhalten. Wenn beispielsweise eine Dateneinheit aus einem bestimmten Manifest gelöscht wird (z. B. aufgrund einer Änderung des Datenstroms oder des durch das Manifest repräsentierten Elements), kann die Referenzanzahl für diese Dateneinheit um eins verringert werden (d. h., es wird angezeigt, dass die Dateneinheit von einem Manifest weniger referenziert wird). In einigen Beispielen können solche „Housekeeping“-Operationen das Laden eines Index in den Speicher beinhalten, um die im Index enthaltenen Referenzzahlen zu dekrementieren. Nachdem die Referenzzahlen dekrementiert wurden, kann der Index in einen dauerhaften Speicher geschrieben werden (z. B. während einer Speicherbereinigung). In einigen Beispielen muss der gesamte Index als Einheit in einen dauerhaften Speicher geschrieben werden, um die Verschlüsselung und/oder Komprimierung des Index zu erhalten, um die Kompatibilität mit einem Speichersystem zu wahren usw. In einigen Beispielen kann es jedoch vorkommen, dass die Änderungen der Referenzzahl nur einen relativ kleinen Teil des Indexes betreffen (z. B. einen von zehntausend Datensätzen im Index), während der Index in den Speicher geladen wurde. Daher wird in solchen Beispielen das Schreiben des gesamten Index in den permanenten Speicher viel mehr Systemverarbeitungszeit und Bandbreite verbrauchen, als wenn nur der geänderte Teil in den permanenten Speicher geschrieben würde. Dementsprechend können in einigen Beispielen die Änderungen an den Referenzzahlen in einem mit dem Index verbundenen Journal und nicht im Index selbst gespeichert werden. Da sich das Journal auf die Aufzeichnung der Änderungen am Index (und nicht der vollständigen Daten des Index) beschränkt, verbraucht das Schreiben des Journals in den permanenten Speicher relativ weniger Verarbeitungszeit und Bandbreite, als wenn der gesamte Index in den permanenten Speicher geschrieben wird.
  • In einigen Beispielen kann eine Journalgruppe aus mehreren Journalen gebildet werden, wobei jedes der Journale in der Journalgruppe mit einem entsprechenden Index verknüpft ist, der Metadaten speichert, die mit einem einzelnen im Deduplizierungssystem gespeicherten Objekt (z. B. einer Datei, einer Tabelle usw.) verknüpft sind. So kann eine Journalgruppe ausschließlich Journale enthalten, die mit einem einzigen gespeicherten Objekt verbunden sind. In einigen Beispielen kann es wahrscheinlicher sein, dass Metadatenänderungen an den Dateneinheiten eines einzelnen gespeicherten Objekts in zeitlicher Nähe zueinander stattfinden (d.h. zeitnah). Dementsprechend kann die Gesamtzahl der Schreibvorgänge in den persistenten Speicher reduziert werden, indem ganze Journalgruppen (z. B. ein oder mehrere Journale, die zeitnah zueinander geschrieben werden) in den persistenten Speicher geschrieben werden, anstatt einzelne Journale stückweise zu schreiben.
  • In einigen Beispielen kann ein Housekeeping-Prozess die Verarbeitung von Manifesten in Stapeln beinhalten, wobei jeder Stapel eine Vielzahl von Manifesten umfasst, die zusammen einen kontinuierlichen Bereich von Benutzerdaten darstellen, die dem System zur Verfügung gestellt werden. Eine solche Stapelverarbeitung kann die Anzahl der für denselben Index durchgeführten Lade- und Schreibvorgänge verringern. In einigen Beispielen kann die Stapelverarbeitung das Laden aller Manifeste für einen Stapel in den Speicher, das Identifizieren des Satzes von Indizes, die von den Änderungen an den Manifesten betroffen sind, das Laden der identifizierten Indizes in den Speicher, das Laden der zugehörigen Journalgruppen (d. h. einschließlich der mit den identifizierten Indizes verbundenen Journale) in den Speicher, das Aktualisieren der Journale und das Schreiben der Journalgruppen in den Speicher umfassen. In einigen Beispielen kann die Verarbeitung eines einzigen Stapels jedoch mehrere Lade- und Schreibvorgänge (d. h. Lesen aus dem Speicher in den Speicher und Schreiben aus dem Speicher in den Speicher) für jede Journalgruppe umfassen. Bei der Verarbeitung einer Gruppe von Indizes, die einer bestimmten Journalgruppe zugeordnet sind, kann die Verarbeitung beispielsweise in einer Reihenfolge erfolgen, die diese Journalgruppe zu verschiedenen Zeitpunkten aktualisiert. So kann die Journalgruppe aus dem Speicher entfernt werden (z. B. um Speicherplatz für andere Journalgruppen zu schaffen) und später für weitere Aktualisierungen wieder in den Speicher geladen werden. Daher können in solchen Beispielen die mehrfachen Lade- und Schreibvorgänge für dieselbe Journalgruppe mehr Systemverarbeitungszeit und Bandbreite verbrauchen, als wenn die Journalgruppe nur einmal während des Batch-Prozesses in den Speicher geladen (und in den Speicher geschrieben) würde.
  • In Übereinstimmung mit einigen Implementierungen der vorliegenden Offenlegung kann ein Deduplizierungsspeichersystem eine Housekeeping-Operation durchführen, die das Ordnen eines Satzes von Indizes entsprechend ihrer zugehörigen Journalgruppen und das anschließende Laden der Indizes in den Speicher entsprechend ihrer sortierten Reihenfolge umfasst. Jede Journalgruppe kann während der Verarbeitung der mit dieser Journalgruppe verbundenen Indizes im Speicher gehalten (oder hier „angeheftet“) werden. Die angeheftete Journalgruppe kann Änderungen an den in den zugehörigen Indizes enthaltenen Referenzzahlen speichern. In einigen Implementierungen kann ein Countdown-Zähler mit der Anzahl der zugehörigen Indizes initialisiert werden, die Änderungen an ihren Referenzzählungen aufweisen. Wenn jeder Index abgeschlossen ist, kann der Countdown-Zähler um eins dekrementiert werden. Wenn also der Countdown-Zähler gleich Null ist, wurde die Journalgruppe aktualisiert, um alle Referenzzählungsänderungen für die zugehörigen Indizes zu berücksichtigen, und als Reaktion darauf wird die Journalgruppe aus dem Speicher entfernt und in den Speicher geschrieben. Auf diese Weise kann die beschriebene Technik die Anzahl der Ladevorgänge einer Joumalgruppe in den Speicher (und das Schreiben der Journalgruppe in den Speicher) reduzieren und dadurch die Leistung des Deduplizierungsspeichersystems verbessern.
  • ABB. 1 - Beispiel für ein Speichersystem
  • zeigt ein Beispiel für ein Speichersystem 100, das einen Speicher-Controller 110, einen Speicher 115 und einen dauerhaften Speicher 140 gemäß einigen Implementierungen umfasst. Wie dargestellt, kann der dauerhafte Speicher 140 eine beliebige Anzahl von Manifesten 150, Indizes 160 und Datencontainern 170 enthalten. Der dauerhafte Speicher 140 kann ein oder mehrere nicht transitorische Speichermedien wie Festplattenlaufwerke (HDDs), Solid-State-Laufwerke (SSDs), optische Festplatten usw. oder eine Kombination davon umfassen. Der Speicher 115 kann in einem Halbleiterspeicher wie z. B. einem Direktzugriffsspeicher (RAM) implementiert sein. In einigen Beispielen kann die Speichersteuerung 110 durch Hardware (z. B. elektronische Schaltungen) oder eine Kombination aus Hardware und Programmierung (z. B. mit mindestens einem Prozessor und Anweisungen, die von dem mindestens einen Prozessor ausgeführt werden können und auf mindestens einem maschinenlesbaren Speichermedium gespeichert sind) implementiert werden.
  • In einigen Implementierungen kann das Speichersystem 100 eine Deduplizierung der gespeicherten Daten durchfiihren. Beispielsweise kann die Speichersteuerung 110 einen Strom von Eingabedaten in Dateneinheiten unterteilen und mindestens eine Kopie jeder Dateneinheit in einem Datencontainer 170 speichern (z. B. durch Anhängen der Dateneinheiten an das Ende des Containers 170). In einigen Beispielen kann jeder Datencontainer 170 in Teile unterteilt sein (hier auch als „Einheiten“ bezeichnet).
  • In einer oder mehreren Implementierungen kann die Speichersteuerung 110 einen Fingerabdruck für jede Dateneinheit erzeugen. Der Fingerabdruck kann zum Beispiel einen vollständigen oder teilweisen Hash-Wert für die Dateneinheit enthalten. Um festzustellen, ob eine eingehende Dateneinheit ein Duplikat einer gespeicherten Dateneinheit ist, kann die Speichersteuerung 110 den für die eingehende Dateneinheit erzeugten Fingerabdruck mit den Fingerabdrücken der gespeicherten Dateneinheiten vergleichen. Ergibt dieser Vergleich eine Übereinstimmung, so kann die Speichersteuerung 110 feststellen, dass ein Duplikat der eingehenden Dateneinheit bereits im Speichersystem 100 gespeichert ist.
  • Wie in dargestellt, kann der dauerhafte Speicher 140 Manifeste 150, Indizes 160, Datencontainer 170 und Journalgruppen 120 speichern. In einigen Implementierungen kann die Speichersteuerung 110 ein Manifest 150 erzeugen, um die Reihenfolge aufzuzeichnen, in der die Dateneinheiten empfangen wurden. Außerdem kann das Manifest 150 einen Zeiger oder andere Informationen enthalten, die den Index 160 angeben, der jeder Dateneinheit zugeordnet ist. In einigen Implementierungen kann der zugehörige Index 160 den Ort angeben, an dem die Dateneinheit gespeichert ist. Zum Beispiel kann der zugehörige Index 160 Informationen enthalten, die angeben, dass die Dateneinheit an einem bestimmten Offset in einer Entität gespeichert ist und dass die Entität an einem bestimmten Offset in einem Datencontainer 170 gespeichert ist. Ferner kann der Index 160 Verweiszahlen enthalten, die die Anzahl der Manifeste 150 angeben, die auf jede Dateneinheit verweisen.
  • In einigen Implementierungen kann der Speicher-Controller 110 eine Leseanforderung für den Zugriff auf die gespeicherten Daten erhalten und daraufhin auf das Manifest 150 zugreifen, um die Reihenfolge der Dateneinheiten zu bestimmen, aus denen die ursprünglichen Daten bestanden. Die Speichersteuerung 110 kann dann die im Manifest 150 enthaltenen Zeigerdaten verwenden, um die mit den Dateneinheiten verbundenen Indizes 160 zu identifizieren. Ferner kann die Speichersteuerung 110 die in den identifizierten Indizes 160 (und die im Manifest 150 enthaltenen Informationen) enthaltenen Informationen verwenden, um die Speicherorte der Dateneinheiten zu bestimmen (z. B. Datencontainer 170, Entität, Offsets usw.), und kann dann die Dateneinheiten aus den bestimmten Speicherorten lesen.
  • In einigen Implementierungen kann jedem Index 160 ein Journal 130 zugeordnet sein. Jedes Journal 130 kann Informationen enthalten, die Änderungen an den Daten anzeigen, die in dem mit diesem Journal 130 verbundenen Index 160 gespeichert sind. Wenn beispielsweise eine Kopie des Index 160 im Speicher 115 geändert wird, um eine Änderung der Metadaten widerzuspiegeln, kann diese Änderung auch als Eintrag in dem zugehörigen Journal 130 aufgezeichnet werden. In einigen Implementierungen können mehrere Journale 130 in einer Journalgruppe 120 gruppiert werden, die mit einer einzelnen Datei oder einem einzelnen Objekt, das im Deduplizierungssystem gespeichert ist, verbunden ist. Beispielsweise können die mehreren Journale Indizes entsprechen, die Metadaten zu einer einzigen Datei speichern.
  • In einigen Implementierungen kann der Speicher-Controller 110 eine Housekeeping-Operation für einen Stapel von Manifesten 150 durchführen (z. B. als Reaktion auf einen Befehl oder eine Anforderung, basierend auf einem periodischen Zeitplan oder Ähnlichem). Die Housekeeping-Operation kann die Aktualisierung von Referenzzählungen (z. B. in den Indizes 160) beinhalten, um die Löschung von Dateneinheiten aus den Manifesten 150 zu berücksichtigen (z. B. aufgrund einer Änderung des Datenstroms oder des durch die Manifeste 150 repräsentierten Elements). In einigen Implementierungen kann die Speichersteuerung 110 einen Satz von Indizes 160 identifizieren, die von den Manifesten 150 des Stapels der Housekeeping-Operation referenziert werden, und kann eine Work Map 180 erzeugen, die die Referenzzählungsänderungen in jedem Index 160 anzeigt, der von einem Manifest 150 des Stapels referenziert wird. Ferner kann die Speichersteuerung 110 eine gespeicherte Nachschlagetabelle 186 verwenden, um die Journalgruppen 120 zu identifizieren, die mit diesen Indizes 160 verbunden sind, und kann die Indizes 160 nach ihren zugehörigen Journalgruppen 120 sortieren (z. B. nach den Kennungen der Journalgruppen 120).
  • In einigen Implementierungen kann die Speichersteuerung 110 eine Journalgruppe 120 in den Speicher 115 laden und einen Countdown-Zähler 182 („CD-Zähler“) auf die Anzahl der Indizes 160 setzen, die mit dieser Journalgruppe 120 verbunden sind. Die Speichersteuerung 110 kann dann die Indizes 160 gemäß der sortierten Reihenfolge verarbeiten, einschließlich, für jeden der Indizes 160, der Aktualisierung der Journalgruppe 120, um die Referenzzählungsänderungen für diesen Index 160 gemäß der Arbeitsübersicht 180 aufzunehmen. Für jeden Index 160, der abgeschlossen ist, kann die Speichersteuerung 110 den Countdown-Zähler 182 um eins dekrementieren. Wenn der Countdown-Zähler 182 Null erreicht (d.h., die Journalgruppe 120 wurde aktualisiert, um alle Referenzzählungsänderungen für ihre zugehörigen Indizes 160 einzuschließen), schreibt die Speichersteuerung 110 die Journalgruppe 120 in den permanenten Speicher 140 und entfernt die Journalgruppe 120 aus dem Speicher 115. Auf diese Weise kann die Speichersteuerung 110 die Anzahl der Ladevorgänge einzelner Journale 130 (und Journalgruppen 120) in den Speicher 115 und das Schreiben in den permanenten Speicher 140 während des Housekeeping-Prozesses reduzieren. Die offengelegte Housekeeping-Technik wird weiter unten unter Bezugnahme auf die erörtert.
  • ABB. 2 - Beispielhafte Datenstrukturen
  • zeigt ein Beispiel für Datenstrukturen 200, die bei der Deduplizierung in Übereinstimmung mit einigen Implementierungen verwendet werden. Wie dargestellt, können die Datenstrukturen 200 Element-Metadaten 202, einen Manifest-Datensatz 210, einen Container-Index 220 und einen Container 250 enthalten. In einigen Implementierungen können die Element-Metadaten 202 mehrere Manifesteinträge 210 und eine Nachschlagetabelle 205 enthalten. In einigen Beispielen können der Manifestdatensatz 210, der Containerindex 220, der Container 250 und die Nachschlagetabelle 205 im Allgemeinen den Beispielimplementierungen eines Manifests 150, eines Index 160, eines Datencontainers 170 bzw. der Nachschlagetabelle 186 (wie in dargestellt) entsprechen. In einigen Beispielen können die Datenstrukturen 200 von der Speichersteuerung 110 (in dargestellt) erzeugt und/oder verwaltet werden.
  • Wie in dargestellt, kann der Manifestdatensatz 210 in einigen Beispielen verschiedene Felder enthalten, z. B. Offset, Länge, Containerindex und Einheitsadresse oder Fingerabdruck. In einigen Ausführungsformen kann jeder Containerindex 220 eine beliebige Anzahl von Dateneinheitendatensätzen 230 und Entitätsdatensätzen 240 enthalten. Jeder Datensatz 230 kann verschiedene Felder enthalten, wie z. B. einen Fingerabdruck (z. B. einen Hash der Dateneinheit), eine Einheitsadresse, einen Entitätsidentifikator, einen Einheitsoffset (d. h. einen Offset der Dateneinheit innerhalb der Entität), einen Referenzzählwert, eine Einheitslänge oder Ähnliches oder eine Kombination davon. In einigen Beispielen kann der Referenzzählwert die Anzahl der Manifestdatensätze 210 angeben, die auf den Dateneinheitssatz 230 verweisen. Darüber hinaus kann jeder Entitätsdatensatz 240 verschiedene Felder enthalten, wie z. B. einen Entitätsidentifikator, einen Entitätsoffset (d. h. einen Offset der Entität innerhalb des Containers), eine gespeicherte Länge (d. h. eine Länge der Dateneinheit innerhalb der Entität), eine dekomprimierte Länge, einen Prüfsummenwert und Komprimierungs-/Verschlüsselungsinformationen (z. B. Art der Komprimierung, Art der Verschlüsselung usw.). In einigen Ausführungsformen kann jeder Container 250 eine beliebige Anzahl von Einheiten 260 enthalten, und jede Einheit 260 kann eine beliebige Anzahl von gespeicherten Dateneinheiten enthalten.
  • In einer oder mehreren Implementierungen können die Datenstrukturen 200 verwendet werden, um gespeicherte deduplizierte Daten abzurufen. Beispielsweise kann eine Leseanforderung einen Versatz und eine Länge von Daten in einer bestimmten Datei angeben. Diese Anforderungsparameter können mit den Offset- und Längenfeldern eines bestimmten Manifestdatensatzes 210 abgeglichen werden. Der Containerindex und die Einheitsadresse des bestimmten Manifestdatensatzes 210 können dann mit einem bestimmten Dateneinheitsdatensatz 230 abgeglichen werden, der in einem Containerindex 220 enthalten ist. Ferner kann die Entitätskennung des bestimmten Datensatzes 230 mit der Entitätskennung eines bestimmten Entitätsdatensatzes 240 abgeglichen werden. Darüber hinaus können ein oder mehrere andere Felder des bestimmten Entitätsdatensatzes 240 (z. B. der Entitätsoffset, die gespeicherte Länge, die Prüfsumme usw.) zur Identifizierung des Behälters 250 und der Entität 260 verwendet werden, und die Dateneinheit kann dann aus dem identifizierten Behälter 250 und der Entität 260 gelesen werden.
  • In einigen Implementierungen kann die Nachschlagetabelle 205 eine gespeicherte Struktur sein, die Indizes und ihre zugehörigen Journalgruppen identifiziert. Die Nachschlagetabelle 205 kann beispielsweise mehrere Einträge enthalten, wobei jeder Eintrag einen bestimmten Index angibt und auch die bestimmte Journalgruppe angibt, die das Journal zum Speichern von Metadatenänderungen für diesen bestimmten Index enthält. In einigen Implementierungen kann jeder Eintrag der Nachschlagetabelle 205 zu dem Zeitpunkt hinzugefügt werden, zu dem die Journalgruppe dem Index erstmals zugewiesen wird (z. B. zum Zeitpunkt der Erstellung des Index). Ein Beispiel für die Nachschlagetabelle 205 wird im Folgenden unter Bezugnahme auf erörtert. Obwohl in der Einfachheit halber nur eine von ihnen dargestellt ist, können die Datenstrukturen 200 eine Vielzahl von Instanzen von Element-Metadaten 202 enthalten, die jeweils einen oder mehrere Manifestdatensätze 210 enthalten oder auf diese verweisen. In solchen Beispielen können die Datenstrukturen 200 eine Vielzahl von Manifestsätzen 210 enthalten. Die Manifesteinträge 210 können auf eine Vielzahl von Containerindizes 220 verweisen, die jeweils einem von mehreren Containern 250 entsprechen. Jeder Containerindex 220 kann einen oder mehrere Datensätze 230 und einen oder mehrere Entitätsdatensätze 240 umfassen.
  • ABB. 3 - Beispielhafte Datenstrukturen
  • zeigt eine Darstellung des Speichers 115 mit einer Journalgruppe 310 und mehreren Indizes 330. Wie dargestellt, umfasst die Journalgruppe 310 mehrere Journale 320. In einigen Beispielen können die Zapfengruppe 310, die Zapfen 320 und die Indizes 330 im Allgemeinen den Beispielimplementierungen der Zapfengruppe 120, der Zapfen 130 bzw. der Indizes 160 (dargestellt in ) entsprechen.
  • In einigen Implementierungen kann jedes Journal 320 mit einem entsprechenden Index 330 verbunden sein und Änderungen an den im entsprechenden Index 330 gespeicherten Metadaten aufzeichnen. Ferner können für jeder Journalgruppe 310 alle entsprechenden Indizes 330 mit einem einzigen gespeicherten Objekt (z. B. einer Benutzersicherung, einem Dokument, einer Datenbanktabelle, einer Datendatei usw.) verbunden sein. Beispielsweise können alle entsprechenden Indizes 330 Metadaten für Dateneinheiten enthalten, die in einer einzelnen Datei enthalten sind, die in einem Deduplizierungssystem gespeichert ist (z. B. das in dargestellte Speichersystem 100). In einigen Implementierungen können die Assoziationen zwischen den Indizes 330 und der Journalgruppe 310 in Einträgen einer gespeicherten Nachschlagetabelle aufgezeichnet werden (z. B. in der gespeicherten Nachschlagetabelle 186 in ).
  • In einigen Implementierungen kann jedes Journal 320 eine Versionsnummer 325 enthalten oder damit verbunden sein. Außerdem kann jeder Index 330 eine Versionsnummer 335 enthalten oder mit dieser verknüpft sein. In einigen Implementierungen kann die Versionsnummer 325 mit der Versionsnummer 335 verglichen werden, um festzustellen, ob die Zeitschrift 320 oder der zugehörige Index 330 die neueste Version der Metadaten enthält. Wenn beispielsweise die Versionsnummer 325 größer ist als die Versionsnummer 335, kann festgestellt werden, dass die im Journal 320 enthaltenen Änderungsdaten einen neueren Stand der Metadaten widerspiegeln als die im Index 330 gespeicherten Metadaten. Ist dies der Fall, kann der Index 330 aktualisiert werden, um die im Journal 320 aufgezeichneten Änderungen aufzunehmen. Wenn jedoch die Versionsnummer 325 kleiner ist als die Versionsnummer 335, kann festgestellt werden, dass die im Journal 320 enthaltenen Änderungsdaten einen Zustand der Metadaten widerspiegeln, der älter ist als die im Index 330 gespeicherten Metadaten. In diesem Fall kann das Journal 320 gelöscht werden, ohne den Index 330 zu aktualisieren. In einigen Implementierungen kann der Vergleich der Versionsnummer 325 mit der Versionsnummer 335 als Reaktion auf das Laden des Journals 320 oder des zugehörigen Index 330 aus dem persistenten Speicher in den Speicher (z. B. aus dem persistenten Speicher 140 in den Speicher 115, wie in dargestellt) durchgeführt werden.
  • In einer oder mehreren Implementierungen kann die Anzahl der in einer Journalgruppe 310 enthaltenen Journale 320 in einem gespeicherten Parameter (z. B. einer Benutzereinstellung, einer Konfigurationsvariablen usw.) angegeben werden. In einigen Beispielen kann dieser Parameter angepasst oder abgestimmt werden, um die Leistungscharakteristiken von Ein-/Ausgabeoperationen (E/A) in einem Speichersystem zu ändern. Beispielsweise kann dieser Parameter erhöht werden, um zu versuchen, relativ weniger häufige Schreibvorgänge von relativ großer Größe zu erhalten. In einem anderen Beispiel kann dieser Parameter verringert werden, um relativ häufige Schreibvorgänge von relativ geringer Größe zu erreichen.
  • ABB. 4 - Beispielprozess für die Verwaltung von Metadaten
  • In ist ein Beispielprozess 400 für die Verwaltung von Metadaten in Übereinstimmung mit einigen Implementierungen dargestellt. Der Prozess 400 kann von der Speichersteuerung 110 durchgeführt werden, die Anweisungen ausführt. Der Prozess 400 kann in Hardware oder einer Kombination aus Hardware und Programmierung (z. B. maschinenlesbare Anweisungen, die von einem oder mehreren Prozessoren ausgeführt werden können) implementiert werden. Die maschinenlesbaren Anweisungen können in einem nicht transitorischen, computerlesbaren Medium gespeichert werden, z. B. in einem optischen, Halbleiter- oder magnetischen Speichergerät. Die maschinenlesbaren Anweisungen können von einem einzigen Prozessor, mehreren Prozessoren, einer einzigen Verarbeitungsmaschine, mehreren Verarbeitungsmaschinen usw. ausgeführt werden. Zur Veranschaulichung werden Einzelheiten des Prozesses 400 im Folgenden unter Bezugnahme auf beschrieben, die Beispiele gemäß einigen Implementierungen zeigen. Es sind jedoch auch andere Implementierungen möglich.
  • Block 410 kann das Laden eines Stapels von Manifesten in den Speicher während eines Housekeeping-Vorgangs umfassen. Block 415 kann das Identifizieren von Indizes, auf die in dem Stapel von Manifesten verwiesen wird, und das Laden der Indizes in den Speicher umfassen. Beispielsweise kann die Speichersteuerung 110 einen Befehl oder eine Anforderung (z. B. von einem internen Prozess, einem periodischen Zeitgeber, einem Client usw.) erhalten, um einen Housekeeping-Prozess für einen Stapel von Manifesten 150 durchzuführen (z. B. um die Anzahl der Verweise auf Dateneinheiten zu verringern, die nicht mehr in den Manifesten 150 enthalten sind). Als Reaktion auf den Befehl oder die Anforderung kann die Speichersteuerung 110 einen Satz von Indizes 160 identifizieren, auf die der Stapel von Manifesten 150 verweist, und die identifizierten Indizes 160 in den Speicher 115 laden.
  • Wie in dargestellt, kann Block 420 die Erstellung einer Arbeitsübersicht im Speicher beinhalten, um Änderungen der Referenzanzahl in jedem Index aufzuzeichnen. Block 425 kann das Entladen des Stapels von Manifesten aus dem Speicher beinhalten. Beispielsweise kann der Speicher-Controller 110, wie in dargestellt, den Stapel von Manifesten 150 verwenden, um die Referenzzählungsänderungen für jeden Index 160 (z. B. für jede Dateneinheit, auf die der Index 160 verweist) zu bestimmen, und diese Informationen in einer Arbeitsübersicht 180 speichern. Nachdem die mit jedem Manifest 150 verbundenen Änderungen in die Work-Map 180 aufgenommen wurden, kann die Speichersteuerung 110 dieses Manifest 150 aus dem Speicher 115 entfernen.
  • Wie in dargestellt, kann Block 430 die Identifizierung der den Indizes zugeordneten Zeitschriftengruppen anhand einer gespeicherten Nachschlagetabelle umfassen. Block 435 kann das Sortieren der Indizes in einer sortierten Reihenfolge nach der zugehörigen Zeitschriftengruppe umfassen. Block 440 kann beinhalten, dass für jede Joumalgruppe die Anzahl der Indizes bestimmt wird, die der Journalgruppe zugeordnet sind. In Bezug auf kann die Speichersteuerung 110 beispielsweise eine gespeicherte Nachschlagetabelle 186 verwenden, um die Zeitschriftengruppen 120 zu identifizieren, die mit den Indizes 160 verbunden sind, und kann die Indizes 160 nach ihren zugehörigen Zeitschriftengruppen 120 sortieren (z. B. nach den Kennungen der Zeitschriftengruppen 120). Die Speichersteuerung 110 kann auch für jede Journalgruppe 120 die Anzahl der zugehörigen Indizes 160 bestimmen, die in der Arbeitsübersicht enthalten sind (d.h., deren Referenzzahlen durch den Housekeeping-Prozess geändert wurden).
  • Wieder Bezug nehmend auf , kann in Block 450 eine Schleife (definiert durch die Blöcke 450, 460, 465, 470, 475 und 480) eingegeben werden, um jeden Index in der sortierten Reihenfolge (bestimmt in Block 435) zu verarbeiten. Block 460 kann, wenn der aktuelle Index der anfängliche (d. h. erste) Index ist, der für eine bestimmte Zeitschriftengruppe verarbeitet werden soll, das Laden dieser Zeitschriftengruppe in den Speicher und das Setzen eines Countdown-Zählers auf die Anzahl der Indizes (bestimmt in Block 440) umfassen. Beispielsweise kann der Speichercontroller 110 ( ) unter Bezugnahme auf feststellen, dass ein neuer Index 160 verarbeitet wird und dass dieser neue Index 160 der erste Index 160 in der sortierten Reihenfolge ist, der für eine bestimmte Journalgruppe 120 verarbeitet werden soll. Dementsprechend kann die Speichersteuerung 110 die Journalgruppe 120 in den Speicher 115 laden und einen Countdown-Zähler 182 („CD-Zähler“) setzen, der der Anzahl der Indizes 160 entspricht, die dieser Journalgruppe 120 zugeordnet sind. In einigen Implementierungen kann das Speichersteuergerät 110 die Journalgruppe 120 im Speicher 115 beibehalten oder „feststecken“, bis alle Referenzzählungsänderungen in die Journalgruppe 120 aufgenommen wurden.
  • Wieder Bezug nehmend auf , kann Block 465 die Aktualisierung der Journalgruppe beinhalten, um Referenzzählungsänderungen aus der Arbeitsübersicht zu speichern. Block 470 kann das Dekrementieren des Countdown-Zählers beinhalten, wenn Änderungen für den Index abgeschlossen sind. Block 475 kann beinhalten, dass, wenn der Countdown-Zähler Null erreicht, die aktuelle Journalgruppe in den Speicher geschrieben und aus dem Speicher entfernt wird. Beispielsweise kann der Speicher-Controller 110 die im Speicher 115 abgelegte Journalgruppe 120 aktualisieren, um die Referenzzählungen der Änderungen für den aktuellen Index 160 aufzunehmen, wie in der Workmap 180 angegeben. Sobald alle Änderungen für den aktuellen Index 160 abgeschlossen sind (d. h. in der Journalgruppe 120 gespeichert sind), kann die Speichersteuerung 110 den Countdown-Zähler 182 um eins dekrementieren. Wenn der Countdown-Zähler 182 Null erreicht (d.h. die Journalgruppe 120 wurde aktualisiert, um alle Referenzzählungsänderungen für die zugehörigen Indizes 160 zu enthalten), kann die Speichersteuerung 110 die Journalgruppe 120 in den permanenten Speicher 140 schreiben und die Journalgruppe 120 aus dem Speicher 115 entfernen.
  • Wiederum Bezug nehmend auf , kann der Entscheidungsblock 480 die Feststellung beinhalten, ob alle Indizes verarbeitet wurden. Ist dies der Fall, kann der Prozess 400 abgeschlossen werden. Andernfalls, wenn nicht alle Indizes verarbeitet wurden, kann der Prozess 400 zu Block 450 zurückkehren (d. h. mit der Verarbeitung eines anderen Index beginnen). Beispielsweise kann die Speichersteuerung 110 die Indizes 160 gemäß der sortierten Reihenfolge weiter verarbeiten, bis alle Indizes 160 verarbeitet sind (siehe ). Auf diese Weise kann die Speichersteuerung 110 den Housekeeping-Prozess mit einer reduzierten Anzahl von Instanzen des Ladens einer Journalgruppe 120 in den Speicher 115 sowie einer reduzierten Anzahl von Instanzen des Schreibens der Journalgruppe 160 in den permanenten Speicher 140 durchführen.
  • ABB. 5A-5B - Beispielhafte Datenstrukturen
  • In ist ein Beispiel für die Implementierung der Nachschlagetabelle 186 zu sehen. Wie dargestellt, kann die Nachschlagetabelle 186 mehrere Einträge oder Zeilen enthalten. Jeder Eintrag kann einem bestimmten Behälterindex entsprechen. Außerdem kann jeder Eintrag die Zeitschriftengruppe identifizieren, die einem bestimmten Containerindex zugeordnet ist. In einigen Implementierungen kann jeder Eintrag der Nachschlagetabelle 186 zu dem Zeitpunkt hinzugefügt werden, an dem die Journalgruppe dem Index erstmals zugewiesen wird (z. B. bei der Erstellung des Index). In einigen Implementierungen kann die Nachschlagetabelle 186 auch dauerhaft in den Metadaten der Elemente gespeichert werden (z. B. in dem in ABB. dargestellten dauerhaften Speicher 140).
  • zeigt ein Beispiel für die Implementierung der Arbeitsübersicht 180. Wie gezeigt, kann die Arbeitsübersicht 180 mehrere Einträge oder Zeilen enthalten, wobei jeder Eintrag einem bestimmten Referenzzählwert (d. h. für eine bestimmte Adresse oder einen bestimmten Ort) entspricht, der in einem bestimmten Containerindex enthalten ist. Ferner kann jeder Eintrag den Änderungsbetrag für jeden Referenzwert angeben. In einigen Implementierungen kann jeder Eintrag während eines Housekeeping-Prozesses zur Arbeitsübersicht 180 hinzugefügt werden. Beispielsweise kann der Speicher-Controller 110 die in den Speicher geladenen Manifeste 150 verwenden, um die Änderungen der Referenzzählung für jeden Index 160 (z. B. für jede Dateneinheit, auf die der Index 160 verweist) zu bestimmen, und kann diese Informationen in einem entsprechenden Eintrag der Work Map 180 speichern. In einigen Implementierungen kann die Work-Map 180 nur im Speicher 115 gespeichert werden und nach Abschluss des Housekeeping-Prozesses gelöscht werden.
  • ABB. 6 - Beispiel für ein maschinenlesbares Medium
  • zeigt ein maschinenlesbares Medium 600, auf dem Anweisungen 610-630 in Übereinstimmung mit einigen Implementierungen gespeichert sind. Die Anweisungen 610-630 können von einem einzelnen Prozessor, mehreren Prozessoren, einer einzelnen Verarbeitungsmaschine, mehreren Verarbeitungsmaschinen usw. ausgeführt werden. Das maschinenlesbare Medium 600 kann ein nicht-transitorisches Speichermedium sein, wie z. B. ein optisches, Halbleiter- oder magnetisches Speichermedium.
  • Die Anweisung 610 kann ausgeführt werden, um eine Housekeeping-Operation zu erkennen, um Aktualisierungen an Daten eines Satzes von Container-Indizes gespeicherter deduplizierter Daten durchzuführen. Die Anweisung 620 kann ausgeführt werden, um als Reaktion auf die Erkennung der Housekeeping-Operation aus dem Satz von Container-Indizes eine Vielzahl von Container-Indizes zu identifizieren, die einer bestimmten Journal-Gruppe zugeordnet sind, wobei die bestimmte Journal-Gruppe eine Vielzahl von Journalen umfasst, um Aktualisierungen von Daten der Vielzahl von Container-Indizes zu speichern. Die Anweisung 630 kann ausgeführt werden, um die bestimmte Journalgruppe im Speicher geladen zu halten, bis alle Aktualisierungen der Housekeeping-Operation an der Vielzahl von Container-Indizes in den jeweiligen Journalen der bestimmten Journalgruppe gespeichert worden sind.
  • Beispielsweise kann der Speicher-Controller 110 einen Befehl oder eine Anfrage zur Durchführung eines Housekeeping-Prozesses für einen Stapel von Manifesten 150 erhalten (siehe ). Daraufhin kann die Speichersteuerung 110 einen Satz von Indizes 160 ermitteln, auf die der Stapel von Manifesten 150 verweist. Ferner kann die Speichersteuerung 110 die Journalgruppen 120 identifizieren, die mit den Indizes 160 verbunden sind, und die Indizes 160 nach den ihnen zugeordneten Journalgruppen 120 sortieren. Darüber hinaus kann die Speichersteuerung 110 die Journalgruppe 120 in den Speicher 115 laden und pflegen, bis alle Referenzzählungsänderungen in der Journalgruppe 120 enthalten sind.
  • ABB. 7 - Beispiel für eine Datenverarbeitungsanlage
  • zeigt ein schematisches Diagramm eines Beispiel-Computergeräts 700. In einigen Beispielen kann die Rechenvorrichtung 700 im Allgemeinen einem Teil oder der Gesamtheit des Speichersystems 100 (dargestellt in ) entsprechen. Wie dargestellt, kann die Rechenvorrichtung 700 einen Hardware-Prozessor 702, einen Speicher 704 und einen maschinenlesbaren Speicher 705 mit Anweisungen 710-730 umfassen. Bei dem maschinenlesbaren Speicher 705 kann es sich um ein nicht-übertragbares Medium handeln. Die Anweisungen 710-730 können von dem Hardware-Prozessor 702 oder von einer im Hardware-Prozessor 702 enthaltenen Verarbeitungsmaschine ausgeführt werden.
  • Die Anweisung 710 kann ausgeführt werden, um eine Housekeeping-Operation zu erkennen, um Aktualisierungen von Daten eines Satzes von Container-Indizes gespeicherter deduplizierter Daten durchzuführen. Die Anweisung 720 kann ausgeführt werden, um als Reaktion auf die Erkennung der Housekeeping-Operation aus dem Satz von Container-Indizes eine Vielzahl von Container-Indizes zu identifizieren, die einer bestimmten Joumalgruppe zugeordnet sind, wobei die bestimmte Journalgruppe eine Vielzahl von Journalen umfasst, um Aktualisierungen von Daten der Vielzahl von Container-Indizes entsprechend zu speichern. Die Anweisung 730 kann ausgeführt werden, um die bestimmte Journalgruppe, die in den Speicher geladen ist, aufrechtzuerhalten, bis alle Aktualisierungen der Housekeeping-Operation an der Vielzahl von Container-Indizes in den jeweiligen Journalen der bestimmten Journalgruppe gespeichert worden sind.
  • ABB. 8 - Beispielprozess
  • In ist ein Beispielprozess 800 in Übereinstimmung mit einigen Implementierungen dargestellt. In einigen Beispielen kann der Prozess 800 unter Verwendung des Speicher-Controllers 110 (dargestellt in ) durchgeführt werden. Der Prozess 800 kann in Hardware oder einer Kombination aus Hardware und Programmierung (z. B. maschinenlesbare Anweisungen, die von einem oder mehreren Prozessoren ausgeführt werden können) implementiert werden. Die maschinenlesbaren Anweisungen können in einem nichttransitorischen, computerlesbaren Medium gespeichert werden, z. B. in einer optischen, Halbleiter- oder magnetischen Speichereinrichtung. Die maschinenlesbaren Anweisungen können von einem einzigen Prozessor, mehreren Prozessoren, einer einzigen Verarbeitungsmaschine, mehreren Verarbeitungsmaschinen usw. ausgeführt werden. Zur Veranschaulichung werden Einzelheiten des Prozesses 800 im Folgenden unter Bezugnahme auf die beschrieben, die Beispiele für einige Implementierungen zeigen. Es sind jedoch auch andere Implementierungen möglich.
  • Block 810 kann beinhalten, dass ein Speicher-Controller eines Deduplizierungs-Speichersystems eine Housekeeping-Operation erkennt, um Aktualisierungen an Daten eines Satzes von Container-Indizes gespeicherter deduplizierter Daten durchzuführen. Block 820 kann als Reaktion auf eine Erkennung der Housekeeping-Operation beinhalten, dass der Speicher-Controller unter dem Satz von Container-Indizes eine Vielzahl von Container-Indizes identifiziert, die mit einer bestimmten Journal-Gruppe verbunden sind, wobei die bestimmte Journal-Gruppe eine Vielzahl von Journalen umfasst, um Aktualisierungen von Daten der Vielzahl von Container-Indizes zu speichern. Block 830 kann beinhalten, dass der Speicher-Controller die bestimmte Journalgruppe, die in den Speicher geladen ist, solange aufrechterhält, bis alle Aktualisierungen der Housekeeping-Operation an der Vielzahl von Container-Indizes in den jeweiligen Journalen der bestimmten Journalgruppe gespeichert worden sind. Nach Block 830 kann der Prozess 800 abgeschlossen werden.
  • In Übereinstimmung mit den hier beschriebenen Implementierungen kann ein Deduplizierungsspeichersystem eine Housekeeping-Operation durchführen, die das Ordnen eines Satzes von Indizes entsprechend ihrer zugehörigen Journalgruppen und das anschließende Laden der Indizes in den Speicher entsprechend ihrer sortierten Reihenfolge umfasst. Jede Journalgruppe kann während der Verarbeitung der zugehörigen Indizes im Speicher gehalten werden. Die angeheftete Journalgruppe kann die Änderungen an den in den zugehörigen Indizes enthaltenen Referenzzahlen speichern. In einigen Implementierungen kann ein Countdown-Zähler mit der Anzahl der zugehörigen Indizes initialisiert werden, die Änderungen an ihren Referenzzählungen aufweisen. Wenn jeder Index abgeschlossen ist, kann der Countdown-Zähler dekrementiert werden. Wenn der Countdown-Zähler gleich Null ist, wurde die Journalgruppe so aktualisiert, dass sie alle Referenzzählungsänderungen für die zugehörigen Indizes enthält. Dementsprechend wird die Journalgruppe aus dem Speicher entfernt und in den Speicher geschrieben. Auf diese Weise kann die beschriebene Technik die Anzahl der Ladevorgänge einer Journalgruppe in den Speicher und die Anzahl der Schreibvorgänge der Journalgruppe in den Speicher reduzieren und dadurch die Leistung des Deduplizierungsspeichersystems verbessern.
  • Beachten Sie, dass die verschiedene Beispiele zeigen, sind die Implementierungen in dieser Hinsicht nicht beschränkt. Beispielsweise kann das Speichersystem 100, wie in dargestellt, zusätzliche Geräte und/oder Komponenten, weniger Komponenten, andere Komponenten, andere Anordnungen usw. enthalten. Ein weiteres Beispiel ist, dass die oben beschriebene Funktionalität des Speicher-Controllers 110 in einer anderen Maschine oder Software des Speichersystems 100 enthalten sein kann. Andere Kombinationen und/oder Variationen sind ebenfalls möglich.
  • Daten und Anweisungen werden in entsprechenden Speichervorrichtungen gespeichert, die als ein oder mehrere computerlesbare oder maschinenlesbare Speichermedien ausgeführt sind. Zu den Speichermedien gehören verschiedene Formen von nicht transitorischen Speichern, darunter Halbleiterspeicher wie dynamische oder statische Direktzugriffsspeicher (DRAMs oder SRAMs), löschbare und programmierbare Festwertspeicher (EPROMs), elektrisch löschbare und programmierbare Festwertspeicher (EEPROMs) und Flash-Speicher; Magnetplatten wie Fest-, Disketten- und Wechselplatten; andere magnetische Medien einschließlich Bänder; optische Medien wie Compact Discs (CDs) oder digitale Videodisks (DVDs) oder andere Arten von Speichervorrichtungen.
  • Es ist zu beachten, dass die oben erörterten Anweisungen auf einem einzigen computerlesbaren oder maschinenlesbaren Speichermedium oder alternativ auf mehreren computerlesbaren oder maschinenlesbaren Speichermedien bereitgestellt werden können, die in einem großen System mit möglicherweise mehreren Knotenpunkten verteilt sind. Ein solches computerlesbares oder maschinenlesbares Speichermedium oder solche Speichermedien werden als Teil eines Artikels (oder eines Herstellungsartikels) betrachtet. Ein Artikel oder Herstellungsgegenstand kann sich auf jede hergestellte Einzelkomponente oder auf mehrere Komponenten beziehen. Das Speichermedium oder die Speichermedien können sich entweder in der Maschine befinden, auf der die maschinenlesbaren Anweisungen ausgeführt werden, oder an einem entfernten Standort, von dem maschinenlesbare Anweisungen über ein Netzwerk zur Ausführung heruntergeladen werden können.
  • In der vorstehenden Beschreibung sind zahlreiche Details aufgeführt, um ein Verständnis des hierin offengelegten Themas zu vermitteln. Allerdings können Implementierungen ohne einige dieser Details praktiziert werden. Andere Implementierungen können Modifikationen und Abweichungen von den oben beschriebenen Details enthalten. Es ist beabsichtigt, dass die beigefügten Ansprüche solche Modifikationen und Variationen abdecken.

Claims (20)

  1. Ein Speichersystem, das Folgendes umfasst: einen Prozessor; einen Speicher; und einen maschinenlesbaren Speicher, der Befehle speichert, wobei die Befehle vom Prozessor ausgeführt werden können, um: eine Housekeeping-Operation erkennen, um Aktualisierungen von Daten eines Satzes von Container-Indizes gespeicherter deduplizierter Daten durchzuführen; als Reaktion auf eine Erkennung der Housekeeping-Operation aus dem Satz von Container-Indizes eine Vielzahl von Container-Indizes zu identifizieren, die mit einer bestimmten Journalgruppe verbunden sind, wobei die bestimmte Journalgruppe eine Vielzahl von Journalen umfasst, um Aktualisierungen von Daten der Vielzahl von Container-Indizes zu speichern; und die bestimmte Zeitschriftengruppe, die in den Speicher geladen ist, aufrechtzuerhalten, bis alle Aktualisierungen der Housekeeping-Operation an der Vielzahl von Container-Indizes in den jeweiligen Zeitschriften der bestimmten Zeitschriftengruppe gespeichert worden sind.
  2. Das Seichersystem nach Anspruch 1, bei dem die Haushaltsfiihrung darin besteht, die in dem Satz von Behälterindizes enthaltenen Referenzzahlen auf der Grundlage eines Stapels von Manifesten zu aktualisieren, und bei dem der Satz von Behälterindizes durch den Stapel von Manifesten referenziert wird.
  3. Das Speichersystem nach Anspruch 1, das Anweisungen enthält, die vom Prozessor ausgeführt werden können, um: den Satz von Container-Indizes in den Speicher laden; Bestimmen einer Vielzahl von Referenzzählungsänderungen, die mit dem Satz von Containerindizes verbunden sind; und Erzeugen einer Arbeitskarte auf der Grundlage der Vielzahl von Referenzzählungsänderungen.
  4. Das Speichersystem nach Anspruch 1, das Anweisungen enthält, die vom Prozessor ausgeführt werden können, um: unter Verwendung einer gespeicherten Nachschlagetabelle eine Vielzahl von Zeitschriftengruppen zu identifizieren, die mit dem Satz von Container-Indizes verbunden sind; und die Menge der Container-Indizes nach den zugehörigen Zeitschriftengruppen zu sortieren.
  5. Das Speichersystem nach Anspruch 4, das Anweisungen enthält, die vom Prozessor ausgeführt werden können, um: für jede Journalgruppe der Vielzahl von Journalgruppen eine Anzahl von Containerindizes bestimmen, die mit der Journalgruppe verbunden sind.
  6. Das Speichersystem nach Anspruch 5, das Anweisungen enthält, die vom Prozessor ausgeführt werden können, um: einen bestimmten Container-Index gemäß der sortierten Reihenfolge auswählen, wobei der bestimmte Container-Index mit einer bestimmten Zeitschriftengruppe verbunden ist; und als Reaktion auf die Feststellung, dass der bestimmte Container-Index ein anfänglicher Container-Index ist, der für die bestimmte Zeitschriftengruppe verarbeitet werden soll: Laden der jeweiligen Zeitschriftengruppe in den Speicher; und einen Countdown-Zähler setzen, der der Anzahl der Container-Indizes entspricht, die mit der jeweiligen Journalgruppe verbunden sind.
  7. Das Speichersystem nach Anspruch 6, das Anweisungen enthält, die vom Prozessor ausgeführt werden können, um: die bestimmte Journalgruppe zu aktualisieren, um Referenzzählungsänderungen zu speichern, die mit dem bestimmten Containerindex verbunden sind; und Dekrementieren des Countdown-Zählers als Reaktion auf die Feststellung, dass die bestimmte Journalgruppe alle mit dem bestimmten Containerindex verbundenen Referenzzählungsänderungen enthält.
  8. Das Speichersystem nach Anspruch 7, das Anweisungen enthält, die vom Prozessor ausgeführt werden können, um: als Reaktion auf die Feststellung, dass der Countdown-Zähler Null erreicht hat: die jeweilige Journalgruppe in einen dauerhaften Speicher zu schreiben; und die betreffende Journalgruppe aus dem Speicher entfernen.
  9. Ein Verfahren, das Folgendes umfasst: Erkennen, durch einen Speicher-Controller eines Deduplizierungs-Speichersystems, einer Housekeeping-Operation, um Aktualisierungen an Daten eines Satzes von Container-Indizes gespeicherter deduplizierter Daten durchzuführen; als Reaktion auf eine Erkennung der Housekeeping-Operation die Speichersteuerung unter dem Satz von Container-Indizes eine Vielzahl von Container-Indizes identifiziert, die mit einer bestimmten Journal-Gruppe verbunden sind, wobei die bestimmte Journal-Gruppe eine Vielzahl von Journalen umfasst, um Aktualisierungen von Daten der Vielzahl von Container-Indizes zu speichern; und Aufrechterhalten der bestimmten Zeitschriftengruppe, die in den Speicher geladen wurde, durch die Speichersteuerung, bis alle Aktualisierungen der Housekeeping-Operation an der Vielzahl von Container-Indizes in den jeweiligen Zeitschriften der bestimmten Zeitschriftengruppe gespeichert wurden.
  10. Das Verfahren nach Anspruch 9, wobei der Haushaltsfiihrungsvorgang darin besteht, die in dem Satz von Behälterindizes enthaltenen Referenzzahlen auf der Grundlage eines Stapels von Manifesten zu aktualisieren, und wobei der Satz von Behälterindizes durch den Stapel von Manifesten referenziert wird.
  11. Das Verfahren nach Anspruch 9 umfasst ferner: das Laden der Container-Indizes in den Speicher; Bestimmen einer Vielzahl von Referenzzählungsänderungen, die mit dem Satz von Behälterindizes verbunden sind; und Erzeugen einer Arbeitskarte auf der Grundlage der Vielzahl von Referenzzählungsänderungen.
  12. Das Verfahren nach Anspruch 9 umfasst ferner: Identifizierung einer Vielzahl von Zeitschriftengruppen, die mit dem Satz von Containerindizes verbunden sind, unter Verwendung einer gespeicherten Nachschlagetabelle; und Sortierung der Container-Indizes nach den zugehörigen Zeitschriftengruppen in eine bestimmte Reihenfolge.
  13. Das Verfahren nach Anspruch 12 umfasst ferner: für jede Zeitschriftengruppe der Vielzahl von Zeitschriftengruppen, Bestimmen einer Anzahl von Containerindizes, die mit der Zeitschriftengruppe verbunden sind. Auswahl eines bestimmten Container-Indexes gemäß der sortierten Reihenfolge, wobei der bestimmte Container-Index mit einer bestimmten Zeitschriftengruppe verbunden ist; und Bestimmen, ob der bestimmte Container-Index ein anfänglicher Container-Index ist, der für die bestimmte Zeitschriftengruppe verarbeitet werden soll; und als Reaktion auf die Feststellung, dass der bestimmte Container-Index der erste Container-Index ist, der für die bestimmte Zeitschriftengruppe verarbeitet werden soll: Laden der jeweiligen Zeitschriftengruppe in den Speicher; und Setzen eines Countdown-Zählers, der der Anzahl der Container-Indizes entspricht, die mit der jeweiligen Journalgruppe verbunden sind.
  14. Das Verfahren nach Anspruch 13 umfasst ferner: Aktualisieren der bestimmten Journalgruppe, um Referenzzählungsänderungen einzuschließen, die mit dem bestimmten Containerindex verbunden sind; und Dekrementieren des Countdown-Zählers in Reaktion auf die Feststellung, dass die bestimmte Journalgruppe alle mit dem bestimmten Containerindex verbundenen Referenzzählungsänderungen enthält.
  15. Das Verfahren nach Anspruch 14 umfasst ferner: Feststellung, ob der Countdown-Zähler Null erreicht hat; und als Reaktion auf die Feststellung, dass der Countdown-Zähler Null erreicht hat: Schreiben der jeweiligen Journalgruppe in einen dauerhaften Speicher; und Löschen der betreffenden Journalgruppe aus dem Speicher.
  16. Ein nicht-transitorisches maschinenlesbares Medium, das Befehle speichert, die bei Ausführung einen Prozessor dazu veranlassen: eine Housekeeping-Operation erkennen, um Aktualisierungen von Daten eines Satzes von Container-Indizes gespeicherter deduplizierter Daten durchzufiihren; als Reaktion auf eine Erkennung der Housekeeping-Operation aus dem Satz von Container-Indizes eine Vielzahl von Container-Indizes zu identifizieren, die mit einer bestimmten Journalgruppe verbunden sind, wobei die bestimmte Journalgruppe eine Vielzahl von Journalen umfasst, um Aktualisierungen von Daten der Vielzahl von Container-Indizes zu speichern; und die bestimmte Journalgruppe im Speicher geladen zu halten, bis alle Aktualisierungen der Housekeeping-Operation an der Vielzahl von Container-Indizes in den jeweiligen Journalen der bestimmten Journalgruppe gespeichert worden sind.
  17. Das nicht-transitorische maschinenlesbare Medium nach Anspruch 16, wobei die Haushaltsführung darin besteht, Referenzzählungen, die in dem Satz von Containerindizes enthalten sind, auf der Grundlage eines Stapels von Manifesten zu aktualisieren, und wobei der Satz von Containerindizes durch den Stapel von Manifesten referenziert wird.
  18. Das nicht-transitorische maschinenlesbare Medium nach Anspruch 16, das Anweisungen enthält, die bei Ausführung den Prozessor veranlassen,: den Satz von Container-Indizes in den Speicher laden; Bestimmen einer Vielzahl von Referenzzählungsänderungen, die mit dem Satz von Containerindizes verbunden sind; Erzeugen einer Arbeitskarte auf der Grundlage der Vielzahl von Referenzzählungsänderungen; unter Verwendung einer gespeicherten Nachschlagetabelle eine Vielzahl von Zeitschriftengruppen zu identifizieren, die mit dem Satz von Container-Indizes verbunden sind; und die Menge der Container-Indizes nach den zugehörigen Zeitschriftengruppen zu sortieren.
  19. Das nicht-transitorische maschinenlesbare Medium nach Anspruch 18, das Anweisungen enthält, die bei Ausführung den Prozessor veranlassen,: für jede Journalgruppe der Vielzahl von Journalgruppen eine Anzahl von Containerindizes bestimmen, die mit der Journalgruppe verbunden sind; einen bestimmten Container-Index gemäß der sortierten Reihenfolge auswählen, wobei der bestimmte Container-Index mit einer bestimmten Zeitschriftengruppe verbunden ist; und als Reaktion auf die Feststellung, dass der bestimmte Container-Index ein anfänglicher Container-Index ist, der für die bestimmte Zeitschriftengruppe verarbeitet werden soll: Laden der jeweiligen Zeitschriftengruppe in den Speicher; und einen Countdown-Zähler setzen, der der Anzahl der Container-Indizes entspricht, die mit der jeweiligen Journalgruppe verbunden sind.
  20. Das nicht-transitorische maschinenlesbare Medium nach Anspruch 19, das Anweisungen enthält, die bei Ausführung den Prozessor veranlassen,: die jeweilige Journalgruppe zu aktualisieren, um Änderungen der Referenzzählung zu speichern, die mit dem jeweiligen Containerindex verbunden sind; Dekrementieren des Countdown-Zählers als Reaktion auf die Feststellung, dass die bestimmte Journalgruppe alle mit dem bestimmten Container-Index verbundenen Referenzzählungsänderungen enthält; und als Reaktion auf die Feststellung, dass der Countdown-Zähler Null erreicht hat: die jeweilige Journalgruppe in einen dauerhaften Speicher zu schreiben; und die betreffende Journalgruppe aus dem Speicher entfernen.
DE102022108668.2A 2022-01-27 2022-04-10 Zeitschriftengruppen für die verwaltung von metadaten Pending DE102022108668A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/586,131 2022-01-27
US17/586,131 US20230237048A1 (en) 2022-01-27 2022-01-27 Journal groups for metadata housekeeping operation

Publications (1)

Publication Number Publication Date
DE102022108668A1 true DE102022108668A1 (de) 2023-07-27

Family

ID=87068389

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102022108668.2A Pending DE102022108668A1 (de) 2022-01-27 2022-04-10 Zeitschriftengruppen für die verwaltung von metadaten

Country Status (3)

Country Link
US (1) US20230237048A1 (de)
CN (1) CN116561108A (de)
DE (1) DE102022108668A1 (de)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11940882B2 (en) 2022-07-25 2024-03-26 Hewlett Packard Enterprise Development Lp Migration of journal groups in a storage system

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8364648B1 (en) * 2007-04-09 2013-01-29 Quest Software, Inc. Recovering a database to any point-in-time in the past with guaranteed data consistency
US9043294B2 (en) * 2011-03-21 2015-05-26 International Business Machines Corporation Managing overflow access records in a database
US9710535B2 (en) * 2011-08-12 2017-07-18 Nexenta Systems, Inc. Object storage system with local transaction logs, a distributed namespace, and optimized support for user directories
US9600558B2 (en) * 2013-06-25 2017-03-21 Google Inc. Grouping of objects in a distributed storage system based on journals and placement policies
US11182256B2 (en) * 2017-10-20 2021-11-23 Hewlett Packard Enterprise Development Lp Backup item metadata including range information

Also Published As

Publication number Publication date
US20230237048A1 (en) 2023-07-27
CN116561108A (zh) 2023-08-08

Similar Documents

Publication Publication Date Title
DE102013204972B4 (de) Hybride Sicherung und Wiederherstellung eines sehr grossen Dateisystems unter Verwendung von Metadaten-Abbildsicherung und herkömmlicher Sicherung
DE69831708T2 (de) Effiziente Erkennung von Computerviren und andere Dateneigenschaften
US8626717B2 (en) Database backup and restore with integrated index reorganization
DE69333906T2 (de) Verfahren und System für die Dateienverwaltung mit einem schnell löschbaren, programmierbaren ROM
DE69913618T2 (de) Verfahren zur Erzeugung eines Prüfpunktes, welcher eine Basisdatei beschreibt, und Verfahren zur Erzeugung einer Differenzdatei zwischen einer aktualisierten Datei und einer Basisdatei
DE3743890C2 (de)
DE202010018481U1 (de) Asynchroner verteilter Objekt-Upload für replizierte Assoziativspeichercluster
WO2015090668A1 (de) Posix-kompatibles dateisystem, verfahren zum erzeugen einer dateiliste und speichervorrichtung
DE10255128A1 (de) Computer-implementierte PDF-Dokumentenverwaltung
DE102022108673A1 (de) Ressourcenzuweisung für synthetische backups
DE112007003645T5 (de) Datenverarbeitungsvorrichtung und Verfahren zur Datenverarbeitung
DE102010053282A1 (de) Modifizierter B+ Baum zum Speichern von Nand-Speicher Umleitungszuordnungen
DE102021108455B4 (de) Erzeugen von Snapshots eines Schlüssel-Wert-Index
DE112014000448T5 (de) Auszugabruf beruhend auf Ähnlichkeitssuche bei Datendeduplizierung
DE102021109729A1 (de) Schätzung der nutzung der speichersystemkapazität
DE102022108668A1 (de) Zeitschriftengruppen für die verwaltung von metadaten
DE102021101239B4 (de) Schwellenwert des deduplizierungssystems basierend auf der abnutzung eines speichergeräts
DE102021127170A1 (de) Journale für datenklonvorgänge
DE102021102442A1 (de) Katalog der mit schnappschüssen verbundenen dateien
DE102021108479B4 (de) Schlüssel-Wert-Index mit Knotenpuffern
DE102021126985A1 (de) Speicherung einer kleinen objektdarstellung in einem deduplizierungssystem
DE102021127177B4 (de) Container-index mit einer tracking-datenstruktur
DE102022102228A1 (de) Hashen mit unterschiedlicher hash-grösse und kompressionsgrösse
DE102021108829A1 (de) Aktualisierung des deduplizierungs-fingerprint-index in einem cache-speicher
DE102022127040A1 (de) Migration von zeitschriftengruppen in einem speichersystem

Legal Events

Date Code Title Description
R082 Change of representative

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