DE102016013248A1 - Bezugsblockansammlung in einer Bezugsmenge zur Deduplizierung beim Speichermanagement - Google Patents

Bezugsblockansammlung in einer Bezugsmenge zur Deduplizierung beim Speichermanagement Download PDF

Info

Publication number
DE102016013248A1
DE102016013248A1 DE102016013248.5A DE102016013248A DE102016013248A1 DE 102016013248 A1 DE102016013248 A1 DE 102016013248A1 DE 102016013248 A DE102016013248 A DE 102016013248A DE 102016013248 A1 DE102016013248 A1 DE 102016013248A1
Authority
DE
Germany
Prior art keywords
data
data blocks
reference data
blocks
datum
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
DE102016013248.5A
Other languages
English (en)
Inventor
Ashish Singhai
Saurabh Manchanda
Ashwin Narasimha
Vijay Karamcheti
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.)
Western Digital Technologies Inc
Original Assignee
HGST Netherlands BV
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 HGST Netherlands BV filed Critical HGST Netherlands BV
Publication of DE102016013248A1 publication Critical patent/DE102016013248A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • 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
    • 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
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • 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/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]

Abstract

Ein System umfasst einen Prozessor und einen Speicher, der Anweisungen speichert, die, wenn sie ausgeführt werden, das System veranlassen, Bezugsdatenblöcke von einem Datenspeicher wiederzugewinnen, die Bezugsdatenblöcke basierend auf einem Kriterium in einer ersten Menge anzusammeln, basierend auf einem Anteil der ersten Menge, der die Bezugsdatenblöcke enthält, eine Bezugsdatenmenge zu erzeugen, und die Bezugsdatenmenge in dem Datenspeicher zu speichern.

Description

  • HINTERGRUND
  • Die vorliegende Offenbarung bezieht sich auf das Managen von Mengen von Datenblöcken in einer Speichervorrichtung. Insbesondere beschreibt die vorliegende Offenbarung einen ähnlichkeitsbasierten Inhaltsabgleich für Speicheranwendungen und für die Datendeduplizierung. Noch spezieller bezieht sich die vorliegende Offenbarung auf das Ansammeln von Bezugsdatenblöcken in einer Bezugsdatenmenge zur Deduplizierung beim Flash-Speicher-Management.
  • Der ähnlichkeitsbasierte Inhaltsabgleich kann auf Dokumente zum Identifizieren von Ähnlichkeiten zwischen einem Satz von Dokumenten im Gegensatz zu einer exakten Übereinstimmung angewendet werden. Das Konzept des Inhaltsabgleichs ist vorher in Suchmaschinenimplementierungen und beim Aufbauen von auf dynamischem Schreib-Lese-Speicher (DRAM) basierenden Caches, wie z. B. der auf dem Hash-Nachschlagen basierenden Entfernung von Dubletten, verwendet worden, was im Gegensatz zum ähnlichkeitsbasierten Entfernen von Dubletten, das annähernde Übereinstimmungen identifiziert, nur exakte Übereinstimmungen identifiziert. Die Verwendung des ähnlichkeitsbasierten Entfernens von Dubletten in einer Speichervorrichtung erfordert jedoch das Lösen eines Problems, das dem Management und der Konstruktion von Bezugsdatenmengen zugeordnet ist.
  • Vorhandene Verfahren führen die Datenblockansammlung durch das Vergleichen jedes entsprechenden Datenblocks einer ankommenden Datenmenge mit einem im Speicher gespeicherten Datenblock aus. Weiterhin führen die vorhandenen Verfahren den exakten Inhaltsabgleich für jeden Datenblock einer ankommenden Datenmenge aus. Der exakte Inhaltsabgleich enthält das Vergleichen des Inhalts, der jedem Datenblock einer ankommenden Datenmenge zugeordnet ist, mit dem der im Speicher gespeicherten Datenblöcke. Die Datenblöcke, die eine exakte Übereinstimmung besitzen, werden codiert, während die Datenblöcke, die keine exakte Übereinstimmung besitzen, nicht codiert werden und separat im Speicher gespeichert werden. Diese vorhandenen Verfahren enthalten viele Nachteile, wie z. B. Leistungsprobleme, das Erfordern einer umfangreichen Verarbeitungszeit, das Erfordern einer großen Menge einer überflüssigen Speicherverwendung, redundante Daten zwischen einem oder mehreren Datenblöcken, die eine geringfügige Variationen desselben Inhalts enthalten, usw. Folglich löst die vorliegende Offenbarung die der Datenansammlung in Speichervorrichtungen zugeordneten Probleme durch das effiziente Ansammeln von Bezugsblöcken in einer Bezugsdatenmenge.
  • ZUSAMMENFASSUNG
  • Die vorliegende Offenbarung bezieht sich auf Systeme und Verfahren zum hardware-effizienten Datenmanagement. Gemäß einem innovativen Aspekt des Gegenstands in dieser Offenbarung weist ein System einen oder mehrere Prozessoren und einen Speicher auf, der Anweisungen speichert, die, wenn sie ausgeführt werden, das System zu Folgendem veranlassen: Wiedergewinnen von Bezugsdatenblöcken von einem Datenspeicher; Ansammeln der Bezugsdatenblöcke in einer ersten Menge basierend auf einem Kriterium; Erzeugen einer Bezugsdatenmenge basierend auf einem Abschnitt der ersten Menge, der die Bezugsdatenblöcke enthält; und Speichern der Bezugsdatenmenge in dem Datenspeicher.
  • Im Allgemeinen kann ein weiterer innovativer Aspekt des in dieser Offenbarung beschriebenen Gegenstands in Verfahren implementiert sein, die Folgendes enthalten: Wiedergewinnen von Bezugsdatenblöcken von einem Datenspeicher; Ansammeln der Bezugsdatenblöcke in einer ersten Menge basierend auf einem Kriterium; Erzeugen einer Bezugsdatenmenge basierend auf einem Abschnitt der ersten Menge, die die Bezugsdatenblöcke enthält; und Speichern der Bezugsdatenmenge in dem Datenspeicher.
  • Andere Implementierungen eines oder mehrerer dieser Aspekte enthalten entsprechende Systeme, Vorrichtungen und Computerprogramme, die konfiguriert sind, die Prozesse der Verfahren auszuführen, die in Computerspeichervorrichtungen codiert sind.
  • Diese und andere Implementierungen können optional eines oder mehrere der folgenden Merkmale enthalten.
  • Die Operationen können z. B. ferner Folgendes enthalten: Empfangen eines Datenstroms, der eine neue Menge von Datenblöcken enthält; Ausführen einer Analyse an der neuen Menge von Datenblöcken; Codieren der neuen Menge von Datenblöcken basierend auf der Analyse durch das Zuordnen der neuen Menge von Datenblöcken zu der Bezugsdatenmenge; Aktualisieren einer Tabelle der Datensätze, die jeden codierten Datenblock der neuen Menge von Datenblöcken einem entsprechenden Bezugsdatenblock der Bezugsdatenmenge zuordnet; Bestimmen von Datenblöcken der neuen Menge, die sich von der Bezugsdatenmenge unterscheiden; Ansammeln der Datenblöcke der neuen Menge, die sich von der Bezugsdatenmenge unterscheiden, in einer zweiten Menge; Erzeugen einer zweiten Bezugsdatenmenge basierend auf der zweiten Menge, die die Datenblöcke der neuen Menge von Datenblöcken, die sich von der Bezugsdatenmenge unterscheiden, enthält; Zuweisen einer Verwendungszählungsvariable zu der zweiten Bezugsdatenmenge; und Speichern der zweiten Bezugsdatenmenge in dem Datenspeicher.
  • Die Merkmale können z. B. enthalten, dass die Analyse das Identifizieren, ob zwischen der neuen Menge von Datenblöcken und der Bezugsdatenmenge eine Ähnlichkeit vorhanden ist, enthält; dass das Kriterium einen vorgegebenen Schwellenwert enthält, der einer Anzahl von Bezugsdatenblöcken zur Aufnahme in die Bezugsdatenmenge zugeordnet ist; und dass das Kriterium einen Schwellenwert enthält, der einer Anzahl von Bezugsdatenmengen, die in dem Datenspeicher zu speichern sind, zugeordnet ist.
  • Diese Implementierungen sind in einer Anzahl von Beziehungen besonders vorteilhaft. Die hier beschriebene Technologie kann z. B. zum Ansammeln von Bezugsdatenblöcken in einer Bezugsdatenmenge zur Deduplizierung beim Speichermanagement verwendet werden.
  • Es sollte selbstverständlich sein, dass die in der vorliegenden Offenbarung verwendete Sprache prinzipiell für die Lesbarkeit und für Unterweisungszwecke und nicht, um den Schutzumfang des hier offenbarten Gegenstands einzuschränken, gewählt worden ist.
  • KURZBESCHREIBUNG DER ZEICHNUNGEN
  • Die vorliegende Offenbarung ist in den Figuren der beigefügten Zeichnungen, in denen gleiche Bezugszeichen verwendet werden, um auf ähnliche Elemente zu verweisen, beispielhaft und nicht einschränkend veranschaulicht.
  • 1 ist ein Blockschaltplan auf hoher Ebene, der ein beispielhaftes System zum Managen von Bezugsdatenblöcken in einer Bezugsdatenmenge in einer Speichervorrichtung gemäß den hier beschriebenen Techniken veranschaulicht.
  • 2 ist ein Blockschaltplan, der eine beispielhafte Speicher-Controller-Einheit gemäß den hier beschriebenen Techniken veranschaulicht.
  • 3A ist ein Blockschaltplan, der ein beispielhaftes System zum Managen von Bezugsdatenblöcken in einer Speichervorrichtung gemäß den hier beschriebenen Techniken veranschaulicht.
  • 3B ist ein Blockschaltplan, der eine beispielhafte Datenreduktionseinheit gemäß den hier beschriebenen Techniken veranschaulicht.
  • 4 ist ein Ablaufplan eines beispielhaften Verfahrens zum Erzeugen einer Bezugsdatenmenge gemäß den hier beschriebenen Techniken.
  • 5 ist ein Ablaufplan eines beispielhaften Verfahrens zum Ansammeln von Datenblöcken in einer Bezugsdatenmenge gemäß den hier beschriebenen Techniken.
  • 6A6C sind Ablaufpläne eines beispielhaften Verfahrens zum adaptiven Ansammeln von Bezugsblöcken in einer Bezugsdatenmenge basierend auf sich ändernden Datenströmen gemäß den hier beschriebenen Techniken.
  • 7 ist ein Ablaufplan eines beispielhaften Verfahrens zum Codieren von Datenblöcken in einer Pipelinearchitektur gemäß den hier beschriebenen Techniken.
  • 8A und 8B sind Ablaufpläne eines beispielhaften Verfahrens zum Erzeugen einer Bezugsdatenmenge in einer Pipelinearchitektur gemäß den hier beschriebenen Techniken.
  • 9 ist ein Ablaufplan eines beispielhaften Verfahrens zum Verfolgen von Bezugsdatenmengen beim Flash-Speicher-Management gemäß den hier beschriebenen Techniken.
  • 10 ist ein Ablaufplan eines beispielhaften Verfahrens zum Aktualisieren von Zählungsvariable, die einer Bezugsdatenmenge zugeordnet sind, gemäß den hier beschriebenen Techniken.
  • 11 ist ein Ablaufplan eines beispielhaften Verfahrens zum Zuweisen von codierten Datensegmenten zu einem neuen Ort in einem nichtflüchtigen Datenspeicher gemäß den hier beschriebenen Techniken.
  • 12 ist ein Ablaufplan eines beispielhaften Verfahrens zum Codieren von Datensegmenten, das der Integration des Flash-Managements und der Datenmüllsammlung zugeordnet ist, gemäß den hier beschriebenen Techniken.
  • 13 ist ein Ablaufplan eines beispielhaften Verfahrens zum Ausmustern einer Bezugsdatenmenge, das dem Flash-Management zugeordnet ist, gemäß den hier beschriebenen Techniken.
  • 14A ist ein Blockschaltplan, der ein Beispiel des Standes der Technik zum Komprimieren eines Bezugsdatenblocks veranschaulicht.
  • 14B ist ein Blockschaltplan, der ein Beispiel des Standes der Technik zur Deduplizierung eines Bezugsdatenblocks veranschaulicht.
  • 15 ist eine beispielhafte graphische Darstellung, die die Deltacodierung gemäß den hier beschriebenen Techniken veranschaulicht.
  • 16 ist eine beispielhafte graphische Darstellung, die die Ähnlichkeitscodierung gemäß den hier beschriebenen Techniken veranschaulicht.
  • 17 ist eine beispielhafte graphische Darstellung, die die Delta- und Selbstkomprimierung eines Bezugsdatenblocks gemäß den hier beschriebenen Techniken veranschaulicht.
  • 18A und 18B sind beispielhafte graphische Darstellungen, die die Verfolgung und die Ausmusterung von Bezugsblockmengen unter Verwendung der Datenmüllsammlung beim Flash-Management gemäß den hier beschriebenen Techniken veranschaulichen.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Im Folgenden werden Systeme und Verfahren zum Bereitstellen einer effizienten Datenmanagementarchitektur beschrieben. Insbesondere werden im Folgenden in der vorliegenden Offenbarung Systeme und Verfahren zum Managen von Mengen von Bezugsdatenblöcken in Speichervorrichtungen und spezifisch in Flash-Speicher-Vorrichtungen beschrieben. Während die Systeme und Verfahren der vorliegenden Offenbarung im Kontext einer speziellen Systemarchitektur, die einen Flash-Speicher verwendet, beschrieben werden, sollte erkannt werden, dass die Systeme und die Verfahren auf andere Architekturen und Organisationen der Hardware angewendet werden können.
  • Überblick
  • Die vorliegende Offenbarung beschreibt den ähnlichkeitsbasierten Inhaltsabgleich für Speicheranwendungen und die Datendeduplizierung. Insbesondere überwindet die vorliegende Offenbarung die aktuellen Verfahren beim Datenmanagement durch das Bereitstellen eines verbesserten Verfahrens zum effizienten Datenmanagement durch das Lösen des Problems des Managements und der Konstruktion von Bezugsdatenmengen. Noch spezieller stellt die vorliegende Offenbarung zusätzliche Verbesserungen zu der in der vorliegenden Offenbarung bereitgestellten Lösung bereit, die es den Entitäten ermöglicht, die Daten innerhalb ihres Sicherungsspeichers aufrechtzuerhalten, während die Kosten, der Speicherraum und die Leistung minimiert werden.
  • Die vorliegende Offenbarung unterscheidet sich von den früheren Implementierungen, indem sie wenigstens die folgenden Probleme löst: das Berechnen eines ähnlichkeitsbasierten Abgleichs in Speicheranwendungen; das Anwenden der Komprimierung und der Deduplizierung auf ankommende Datenblöcke in einer eindeutigen Weise; das Lösen des Problems sich ändernder Bezugsdatenmengen, die von sich ändernden Datenströmen abhängig sind, unter Verwendung eines Generationsbezugsdatenmengenspeichers; und das Integrieren des Bezugsdatenmengenmanagements mit der Datenmüllsammlung für den Raum- und Laufzeitwirkungsgrad in Speichervorrichtungen, wie z. B. Flash-Speichervorrichtungen, aber nicht eingeschränkt darauf.
  • Weiterhin arbeiten die ähnlichkeitsbasierten Deduplizierungsalgorithmen durch das Ableiten einer abstrakten Darstellung des Inhalts, der den Bezugsdatenblöcken zugeordnet ist. Folglich können die Bezugsdatenblöcke als die Schablonen zum Deduplizieren anderer (d. h., künftiger) ankommender Datenblöcke verwendet werden, was zu einer Verringerung des Gesamtvolumens der gespeicherten Daten führt. Wenn die deduplizierten Datenblöcke von dem Speicher abgerufen werden, kann eine verringerte (z. B. deduplizierte) Darstellung von dem Speicher wiedergewonnen werden und mit den durch den Bezugsdatenblock (die Bezugsdatenblöcke) gelieferten Informationen kombiniert werden, um den ursprünglichen Datenblock zu reproduzieren.
  • Die Bezugsdatenblöcke repräsentieren den Datenstrom in einer Zusammenfassung, da sich die Art des Datenstroms mit der Zeit ändert, ändert sich deshalb außerdem die Menge der Bezugsdatenblöcke. Mit der Zeit endet das Zuordnen eines Anteils der Bezugsdatenblöcke zu einer Bezugsdatenmenge, während neue Datenblöcke zu der Bezugsdatenmenge hinzugefügt werden, was zur Erzeugung einer neuen Bezugsdatenmenge führt. Die durch das Deduplizierungssystem erreichte Datenverringerung kann als eine Metrik verwendet werden, um zu bewerten, ob die Bezugsdatenmenge eine gute Darstellung des ankommenden Datenstroms ist. Dies kann z. B. ausgeführt werden, indem jeder deduplizierte Datenblock den Bezugsdatenblock (die Bezugsdatenblöcke) aufzeichnet, gegen den (die) er codiert (z. B. reduziert) wurde. Der Datensatz kann dann verwendet werden, so dass er bei anschließenden Abrufen des gespeicherten Datenblocks sofort zurück in die ursprüngliche Form richtig zusammengestellt werden kann. Dies stellt eine Anforderung dar, dass die Bezugsdatenblöcke verfügbar bleiben, solange wie wenigstens ein Datenblock sie potentiell zur Rekonstruktion erfordert. Die Anforderung kann eine Anzahl von Konsequenzen haben. Zuerst kann sich eine aktuelle Menge der Bezugsdatenblöcke in Reaktion auf den Datenstrom, der für die Speicherung dargestellt wird, mit der Zeit ändern; es ist jedoch möglich, dass die bisherigen Bezugsdatenblöcke nur durch eine kleine Teilmenge der gespeicherten Datenblöcke einer Bezugsdatenmenge in Gebrauch bleiben. Zweitens wächst während der Lebensdauer der Vorrichtung die Sammlung aller durch eine Speichervorrichtung verwendeten Bezugsdatenblöcke kontinuierlich. Dies führt zu einem unbegrenzten Wachstum der Sammlung während einer mehrjährigen Lebensdauer der Speichervorrichtungen. Das unbegrenzte Wachstum ist aufgrund der Art der Flash-Speichervorrichtungen in Verbindung mit dem Speichern aller Daten in der Speichervorrichtung zu allen Zeiten nicht durchführbar. Während die Flash-Speichervorrichtungen in ihrer Geschwindigkeit und dem direkten Lesezugriff im Vergleich zu herkömmlichen Speichervorrichtungen und Festplatten überlegen sind, weisen die Flash-Speichervorrichtungen Einschränkungen der Speicherkapazität und einer Verringerung der Beständigkeit während der Lebensdauer auf. Die Verringerung der Beständigkeit in den Flash-Speichervorrichtungen ist der Toleranz für die Schreib-Lösch-Zyklen durch die Flash-Speichervorrichtung zugeordnet, während die Leistung der Flash-Speichervorrichtung durch die Verfügbarkeit freier beschreibbarer Datenblöcke in der Flash-Speichervorrichtung beeinflusst ist.
  • Es muss ein Verfahren zum Ausmustern alter Bezugsdatenblöcke, die nicht länger nützlich sind, angewendet werden. Das Verfahren kann eine Bezugszählung enthalten, die durch das Verfolgen der Anzahl, wie oft sich Datenblöcke auf einen Bezugsdatenblock und/oder eine Menge von Bezugsdatenblöcken stützen, den Bezugsdatenblöcken zugeordnet ist, so dass bestimmt werden kann, wann sich ein Datenblock nicht länger auf einen Bezugsdatenblock stützt und der Bezugsdatenblock daher aus der Menge ausgemustert werden kann. Wenn ein neuer Datenblock zu dem Speicher hinzugefügt wird, muss die Bezugszählung außerdem inkrementiert werden, um eine Verwendungszählung dieses Bezugsdatenblocks und/oder dieser Bezugsdatenmenge widerzuspiegeln. Wenn ein Datenblock gelöscht (oder überschrieben wird), muss ähnlich die Verwendungszählung eines entsprechenden Bezugsdatenblocks und/oder einer entsprechenden Bezugsdatenmenge dekrementiert werden. Es ist wesentlich, dass die Verwendungszählungen richtig synchronisiert sind und zuverlässig bestehen, um sie gegen eine Stilllegung der Vorrichtung oder einen Leistungsausfall zu schützen.
  • A. Die Bezugsblockansammlung in eine Bezugsmenge zur Deduplizierung beim Speichermanagement
  • Ein Verfahren zum Implementieren der Bezugsdatenblockansammlung in eine Bezugsdatenmenge kann durch das Ansammeln der Bezugsdatenblöcke, die einen Grad der Ähnlichkeit teilen, in einer Bezugsdatenmenge ausgeführt werden. Die Bezugsdatenmenge kann eine vorgegebene Anzahl von Datenblöcken erfordern, damit die Deduplizierungsalgorithmen richtig ausgeführt werden. Die Deduplizierungsalgorithmen erfordern z. B., dass irgendeine Anzahl von Bezugsdatenblöcken (z. B. 10.000) vorhanden ist, um die Datencodierung/-reduktion auszuführen. Folglich arbeitet die vorliegende Offenbarung mit einer Bezugsdatenmenge, die einen oder mehrere Datenblöcke (z. B. Bezugsdatenblöcke) enthält, anstatt mit jedem Bezugsdatenblock unabhängig zu arbeiten.
  • Die Bezugsdatenmengen weisen die folgenden Eigenschaften auf: 1) eine Bezugsdatenmenge kann verwendet werden, um einen Deduplizierungsalgorithmus aktiv während eines Zeitraums auszuführen, und 2) wenn sich ein Datenstrom ändert, kann eine neue Bezugsdatenmenge geschaffen/erzeugt werden. Die vorhergehende Bezugsdatenmenge, die nicht länger aktiv verwendet wird, kann jedoch beibehalten werden, weil sich die vorher gespeicherten Datenblöcke für den Datenabruf auf diese Bezugsdatenmenge stützen. Als Nächstes 3) können Verwendungszählungen gegen eine Bezugsdatenmenge und nicht gegen jeden Bezugsdatenblock aufrechterhalten werden. Dies kann im Gegenzug den Managementmehraufwand der Verwendungszählungen signifikant verringern. Schließlich 4) kann eine Bezugsdatenmenge, sobald sie entsteht, ausgemustert werden, nachdem die Verwendungszählung auf null gefallen ist (d. h., sich keine Datenblöcke länger auf sie stützen).
  • In einigen Ausführungsformen können die Datenblöcke der Bezugsdatenmenge in Abhängigkeit von den Betriebsmitteleinschränkungen des Systems kundenspezifisch angepasst werden, so dass sie sowohl eine vorgegebene Anzahl von Datenblöcken in der Bezugsdatenmenge als auch eine maximale Anzahl von Bezugsdatenmengen enthalten. In weiteren Ausführungsformen kann das System ein geclustertes System umfassen, in dem mehrere verschiedene Bezugsdatenmengen über den Cluster gemeinsam benutzt werden, um eine breitere Abdeckung zu erhalten.
  • B. Die Pipelinebezugsmengen-Konstruktion und -Verwendung beim Speichermanagement
  • Die Pipelinebezugsdatenmengen-Konstruktion und -Verwendung kann durch das Ausführen einer überlappenden Konstruktion und Verwendung der Bezugsdatenmengen implementiert werden. Während eine aktuelle Bezugsdatenmenge z. B. verwendet wird, um einen ankommende Datenstrom (z. B. eine Folge von Datenblöcken) zu deduplizieren; kann parallel eine neue Bezugsdatenmenge konstruiert werden. Die vorliegende Offenbarung erfordert nicht, dass die neue Bezugsdatenmenge von neuem begonnen wird, stattdessen kann die neue Bezugsdatenmenge unter Verwendung einer populären Teilmenge der Bezugsdatenblöcke in der aktuellen Bezugsdatenmenge konstruiert werden, während neue Bezugsdatenblöcke hinzugefügt werden, die in Reaktion auf die Änderungen in dem Datenstrom konstruiert werden. Wenn ein Deduplizierungsalgorithmus meint, dass die aktuelle Bezugsdatenmenge nicht mehr effektiv ist, kann er in dieser Weise die Verwendung einer neuen Bezugsdatenmenge beginnen. Die beiden innovativen Bezugsdatenmengen-Managementtechniken, die oben beschrieben worden sind, können mit der Deduplizierung in einem Flash-Management-Speicher verwendet und integriert werden.
  • C. Die Integration von Bezugsmengen mit dem Segment-Flash-Management
  • Eine Ausführungsform des Implementierens der vorliegenden Offenbarung mit dem Flash-Management kann durch das Ansammeln von Datenblöcken, die sich auf eine Bezugsdatenmenge stützen, in einem Segment ausgeführt werden. Das Segment bezieht sich auf einen Datenabschnitt eines Flash-Speichers, der sequentiell gefüllt und als eine Einheit gelöscht werden kann. Jeder Datenblock kann der Bezugsdatenmenge (und spezifischen Bezugsdatenblöcken innerhalb dieser) zugeordnet sein, wobei er sich für den Datenabruf auf sie stützen kann. Folglich kann das System anstelle der einzelnen Verfolgung der Verwendung eines Bezugsdatenblocks durch jeden ankommenden Datenblock die Verwendung einer Bezugsdatenmenge (d. h., einer Gruppe von Bezugsdatenblöcken) verfolgen. In flash-basierten Speichersystemen werden die ankommenden Datenblöcke sequentiell in den Flash geschrieben, wobei es folglich eine spezielle Lokalität zwischen den Datenblöcken gibt, die nahe in der Zeit geschrieben werden. In einigen Ausführungsformen kann sich ein Segment auf mehrere (z. B. 2) Bezugsdatenmengen im Speicher des Flash-Speichers beziehen.
  • Weiterhin kann ein Segment mit einer Kennung (z. B. einer Bezugsdatenmengenkennung) markiert sein, wobei das System daher verfolgen kann, welche Segmente welche Bezugsdatenmengen verwenden. Dies kann zu einem beträchtlichen Wirkungsgrad führen – das Volumen der Informationen kann um drei Größenordnungen verringert werden (jedes Segment bringt Tausende von Datenblöcken unter), wobei, weil das Management auf Segmentebene dem Flash-Management bereits inhärent ist, die zusätzliche Belastung, um ein zusätzliches Informationsstück (die Verwendung der Bezugsmenge) zu verfolgen, minimal ist. Deshalb werden die Bezugsdatenmengen kompakt über eine einfache ganzzahlige Kennung repräsentiert, wobei die Bezugsdatenmengen durch verschiedene Datensegmente (keine einzelnen Datenblöcke) verwendet und kompakt verfolgt werden können. In einer Ausführungsform verwendet das System 16 Mengen, wobei jede 16.384 Bezugsdatenblöcke enthalten kann. Ein Bezugsdatenblock kann eine Größe von 4 kB (Kilobyte) aufweisen, während eine Kennung (z. B. eine Bezugsdatenmengenkennung) eine Größe von 4 Bits aufweisen kann. Die Kennung kann jedem Segment des Flashs, das eine Größe von 256 MB aufweist, zugeordnet sein. Dies ermöglicht ein raumeffizientes Management mit geringem Mehraufwand der Bezugsdatenmengen.
  • D. Die Datenmüllsammlung für die Bezugsmengen in Flash-Speicher-Systemen
  • In einigen Ausführungsformen kann das Implementieren der vorliegenden Offenbarung mit dem Flash-Management und der Datenmüllsammlung ausgeführt werden, wie im Folgenden beschrieben wird. Zum Zeitpunkt der Datenmüllsammlung werden die gültigen Datenblöcke zu einem neuen Ort in dem Flash-Speicher bewegt. Es ist wichtig anzugeben, dass die Datenblöcke in einem Flash-Segment sequentiell gefüllt werden und dieselbe Bezugsdatenmenge verwenden. Da der Datenmüllsammelalgorithmus in jedem Segment des Flash-Speichers arbeitet, trifft der Datenmüllsammelalgorithmus eine der folgenden zwei Entscheidungen für die darin enthaltenen Datenblöcke. Diese Entscheidungen können auf einem Zustand der Bezugsdatenmenge (z. B. der Bezugsdatenmenge R), die dem Segment zugeordnet ist, basieren. Die Entscheidung, die der Datenmüllsammelalgorithmus trifft, kann Folgendes sein: 1) wenn eine Bezugsdatenmenge (z. B. die Bezugsdatenmenge R) weiterhin verfügbar ist, dann werden die reduzierten Datenblöcke zu einem neuen Ort im Flash-Speicher bewegt, und/oder 2) wenn erwartet wird, dass eine Bezugsdatenmenge (z. B. die Bezugsdatenmenge R) bald ausgemustert wird, dann werden die ursprünglichen Datenblöcke unter Verwendung der Bezugsdatenmenge (z. B. R) rekonstruiert und unter Verwendung einer neueren Bezugsdatenmenge (Bezugsdatenmengen) neu dedupliziert. Im Ergebnis wird, sobald die Bezugsdatenmenge (z. B. R) auf einen Weg zur Ausmusterung gesetzt wird, eine Verwendungszählung der Bezugsdatenmenge (z. B. R) stetig abnehmen, wobei, sobald sie null erreicht (d. h., keine aktiven Anwender bleiben), R ausgemustert werden kann und ihre entsprechende Kennung für die Wiederverwendung verfügbar wird.
  • Wenn in einigen Ausführungsformen eine Bezugsdatenmenge für die Ausmusterung bereit ist, kann es der Datenmüllsammelalgorithmus erzwingen, dass die Bezugsdatenmenge unter Verwendung eines Datenmüllsammelalgorithmus schneller ausgemustert wird. In weiteren Ausführungsformen kann die vorliegende Offenbarung eine statistische Analyse an der Population der Datenblöcke ausführen, um populäre Bezugsdatenmengen zu bestimmen und sie zu verwenden, um die Bezugsdatenmengen-Auswahlalgorithmen abzustimmen.
  • Folglich stellt die vorliegende Offenbarung eine Integration zwischen der Verfolgung der Bezugsdatenmengen und dem Flash-Management – pro Segment-Bezugsdatenmenge bereit, um die Speicherung und den Verarbeitungsmehraufwand der Bezugsdatenmengeninformationen zu verbessern. Außerdem ermöglicht es die Integration zwischen der Handhabung der Bezugsdatenmengen und der Datenmüllsammlung dem System, die älteren Bezugsdatenmengen auszumustern und die Bezugsdatenmengenverwendung über die gesamte Speichervorrichtung zum Optimieren der Datenbewegung durch das Entscheiden zur Laufzeit, ob die reduzierten Datenblöcke zu kopieren sind, wie sie sind, oder ob sie unter Verwendung einer anderen Bezugsdatenmenge erneut zu reduzieren sind, zu verfolgen.
  • Das System
  • 1 ist ein Blockschaltplan auf hoher Ebene, der ein beispielhaftes System zum Managen der Bezugsdatenblöcke in einer Bezugsdatenmenge in einer Speichervorrichtung veranschaulicht. In der dargestellten Ausführungsform kann das System 100 die Client-Vorrichtungen 102a, 102b bis 102n, eine Speicher-Controller-Einheit 106 und einen Datenspeicher-Verwahrungsort 110 enthalten. In der veranschaulichten Ausführungsform sind diese Entitäten des Systems 100 kommunikationstechnisch über ein Netz 104 gekoppelt. Die vorliegende Offenbarung ist jedoch nicht auf diese Konfiguration eingeschränkt, wobei eine Vielfalt verschiedener Systemumgebungen und -konfigurationen verwendet werden kann und sich innerhalb des Schutzumfangs der vorliegenden Offenbarung befindet. Andere Implementierungen können zusätzliche oder weniger Computervorrichtungen, Dienste und/oder Netze enthalten. Es sollte erkannt werden, dass sowohl 1 als auch die anderen Figuren verwendet werden, um eine Ausführungsform zu veranschaulichen, wobei eine Angabe eines Buchstaben nach einem Bezugszeichen oder einer Ziffernfolge, z. B. ”102a”, ein spezifischer Verweis auf das Element oder die Komponente ist, das bzw. die durch dieses spezielle Bezugszeichen bezeichnet ist. In dem Fall, in dem ein Bezugszeichen in dem Text erscheint, ohne dass ihm ein Buchstabe folgt, z. B. ”102”, sollte erkannt werden, dass dies ein allgemeiner Verweis auf verschiedene Ausführungsformen des Elements oder der Komponente, das bzw. die dieses allgemeine Bezugszeichen trägt, ist.
  • In einigen Ausführungsformen können die Entitäten des Systems 100 eine cloud-basierte Architektur verwenden, bei der eine oder mehrere der Computer-Funktionen oder -Routinen durch entfernte Computer-Systeme und -Vorrichtungen auf Anforderung einer lokalen Computervorrichtung ausgeführt werden. Eine Client-Vorrichtung 102 kann z. B. eine Computervorrichtung sein, die Hardware- und/oder Software-Betriebsmittel aufweist und auf Hardware- und/oder Software-Betriebsmittel zugreifen kann, die durch andere Computer-Vorrichtungen und -Betriebsmittel, einschließlich z. B. anderer Client-Vorrichtungen 102, der Speicher-Controller-Einheit 106 und/oder des Datenspeicher-Verwahrungsorts 110 oder anderer Entitäten des Systems 100, über das Netz 104 bereitgestellt werden.
  • Das Netz 104 kann ein herkömmlicher Typ, verdrahtet oder drahtlos, sein und kann zahlreiche verschiedene Konfigurationen, einschließlich einer Sternkonfiguration, einer Token-Ring-Konfiguration oder anderer Konfigurationen aufweisen. Weiterhin kann das Netz 104 ein lokales Netz (LAN), ein Weitbereichsnetz (WAN) (z. B. das Internet) und/oder andere miteinander verbundene Datenwege, über die mehrere Vorrichtungen (z. B. die Speicher-Controller-Einheit 106, die Client-Vorrichtung 102 usw.) kommunizieren können, enthalten. In einigen Ausführungsformen kann das Netz 104 ein Peer-zu-Peer-Netz sein. Das Netz 104 kann außerdem mit einem Telekommunikationsnetz gekoppelt sein oder Abschnitte eines Telekommunikationsnetzes enthalten, um Daten unter Verwendung einer Vielfalt verschiedener Kommunikationsprotokolle zu senden. In weiteren Ausführungsformen kann das Netz 104 BluetoothTM-Kommunikationsnetze (oder Bluetooth Low Energy-Kommunikationsnetze) oder ein zellulares Kommunikationsnetz zum Senden und Empfangen von Daten einschließlich eines Kurznachrichtendienstes (SMS), eines Multimedia-Nachrichtendienstes (MMS), eines Hypertext-Übertragungsprotokolls (HTTP), einer direkten Datenverbindung, WAP, E-Mail usw. enthalten. Obwohl das Beispiel nach 1 ein Netz 104 veranschaulicht, können in der Praxis ein oder mehrere Netze 104 die Entitäten des Systems 100 verbinden.
  • In einigen Ausführungsformen sind die Client-Vorrichtungen 102 (irgendeine oder alle der 102a, 102b bis 102n) Computervorrichtungen, die Datenverarbeitungs- und Datenkommunikationsfähigkeiten aufweisen. In der veranschaulichten Ausführungsform sind die Client-Vorrichtungen 102a, 102b bis 102n über die Signalleitungen 118a, 118b bzw. 118n kommunikationstechnisch an das Netz 104 gekoppelt. Die Client-Vorrichtungen 102a, 102b bis 102n können irgendeine Computervorrichtung sein, die einen oder mehrere Speicher und einen oder mehrere Prozessoren enthält, z. B. ein Laptop-Computer, ein Desktop-Computer, ein Tablet-Computer, ein Mobiltelephon, ein persönlicher digitaler Assistent (PDA), eine mobile E-Mail-Vorrichtung, ein tragbarer Spiele-Spieler, ein tragbarer Musikspieler, ein Fernsehgerät mit einem oder mehreren darin eingebetteten oder an es gekoppelten Prozessoren oder irgendeine andere elektronische Vorrichtung, die Speicheranforderungen ausführen kann. Eine Client-Vorrichtung 102 kann eine Anwendung ausführen, die Speicheranforderungen (z. B. Lesen, Schreiben usw.) an den Datenspeicher-Verwahrungsort 110 ausführt. Die Client-Vorrichtungen können mit dem Datenspeicher-Verwahrungsort 110, der (nicht gezeigte) einzelne Speichervorrichtungen (z. B. die Speichervorrichtung 112a bis 112n) enthält, direkt gekoppelt sein.
  • Die Client-Vorrichtung 102 kann außerdem einen oder mehrere von einem Graphikprozessor; einem Berührungsschirm mit hoher Auflösung; einer physikalischen Tastatur, nach vorn und nach hinten gerichteten Kameras; einem Bluetooth®-Modul; einen Speicher, der anwendbare Firmware speichert; und verschiedenen physikalischen Verbindungs-Schnittstellen (z. B. USB, HDMI, einer Headset-Buchse usw.); usw. enthalten. Zusätzlich können ein Betriebssystem zum Managen der Hardware und der Betriebsmittel der Client-Vorrichtung 102, Anwendungsprogrammschnittstellen (APIs), um den Anwendungen Zugriff auf die Hardware und die Betriebsmittel bereitzustellen, ein (nicht gezeigtes) Anwenderschnittstellenmodul zum Erzeugen und Anzeigen von Schnittstellen für die Anwenderwechselwirkung und -eingabe und Anwendungen, einschließlich z. B. Anwendungen zum Manipulieren von Dokumenten, Bildern, E-Mail(s) und Anwendungen zum Browsen im Web usw., in der Client-Vorrichtung 102 gespeichert und betriebsfähig sein. Während das Beispiel nach 1 drei Client-Vorrichtungen, 102a, 102b und 102n, enthält, sollte erkannt werden, dass in dem System irgendeine Anzahl von Client-Vorrichtungen 102 vorhanden sein kann.
  • Die Speicher-Controller-Einheit 106 kann Hardware sein, die z. B. einen (Mikro-)Prozessor, einen Speicher und Netzkommunikationsfähigkeiten enthält, wie im Folgenden bezüglich 2 ausführlicher beschrieben wird. Die Speicher-Controller-Einheit 106 ist über eine Signalleitung 120 für die Kommunikation und Zusammenarbeit mit den anderen Komponenten des Systems 100 an das Netz 104 gekoppelt. In einigen Ausführungsformen sendet die Speicher-Controller-Einheit 106 Daten über das Netz 104 an eine oder mehrere der Client-Vorrichtungen 102a, 102b bis 102n und/oder den Datenspeicher-Verwahrungsort 110 und empfängt die Speicher-Controller-Einheit 106 Daten über das Netz 104 von einer oder mehreren der Client-Vorrichtungen 102a, 102b bis 102n und/oder dem Datenspeicher-Verwahrungsort 110. In einer Ausführungsform sendet die Speicher-Controller-Einheit 106 die Daten über die Signalleitung 124 direkt an den Datenspeicher-Verwahrungsort 110 und/oder die Speichervorrichtungen 112a bis 112n und empfängt die Speicher-Controller-Einheit 106 die Daten über die Signalleitung 124 direkt von dem Datenspeicher-Verwahrungsort 110 und/oder den Speichervorrichtungen 112a bis 112n. Obwohl eine Speicher-Controller-Einheit gezeigt ist, sollte erkannt werden, dass mehrere Speicher-Controller-Einheiten entweder in einer verteilten Architektur oder anderweitig verwendet werden können. Für den Zweck dieser Anmeldung werden die Systemkonfiguration und die durch das System ausgeführten Operationen im Kontext einer einzigen Speicher-Controller-Einheit 106 beschrieben.
  • In einigen Ausführungsformen kann die Speicher-Controller-Einheit 106 eine Speichersteuermaschine 108 zum Bereitstellen eines effizienten Datenmanagements enthalten. Die Speichersteuermaschine 108 kann Computer-Funktionalitäten, -Dienste und/oder -Betriebsmittel bereitstellen, um Daten von anderen Entitäten des Systems 100 zu senden, zu empfangen, zu lesen, zu schreiben und zu transformieren. Es sollte erkannt werden, dass die Speichersteuermaschine 108 nicht auf das Bereitstellen der oben angegebenen Funktionen eingeschränkt ist. In verschiedenen Ausführungsformen können die Speichervorrichtungen 112 direkt mit der Speicher-Controller-Einheit 106 verbunden sein oder können durch einen (nicht gezeigten) separaten Controller und/oder über das Netz 104 durch die Signalleitung 122 verbunden sein. Die Speicher-Controller-Einheit 106 kann eine Computervorrichtung sein, die konfiguriert ist, etwas oder alles des Speicherraums den Client-Vorrichtungen 106 verfügbar zu machen. Wie in dem beispielhaften System 100 dargestellt ist, können die Client-Vorrichtungen 102 über das Netz 104 oder (nicht gezeigt) direkt an die Speicher-Controller-Einheit 106 gekoppelt sein.
  • Weiterhin können die Client-Vorrichtungen 102 und die Speicher-Controller-Einheit 106 des Systems 100 zusätzliche Komponenten enthalten, die in 1 nicht gezeigt sind, um die Zeichnung zu vereinfachen. Außerdem sind in einigen Ausführungsformen nicht alle der gezeigten Komponenten vorhanden. Ferner können verschiedene Controller, Blöcke und Schnittstellen in irgendeiner geeigneten Weise implementiert sein. Eine Speicher-Controller-Einheit kann z. B. die Form eines oder mehrerer z. B. eines Mikroprozessors oder eines Prozessors und eines computerlesbaren Mediums, das computerlesbaren Programmcode (z. B. Software oder Firmware) speichert, der durch den (Mikro-)Prozessor, Logikgatter, Netzknoten, eine anwendungsspezifische integrierte Schaltung (ASIC), einen programmierbaren Logik-Controller und einen eingebetteten Mikrocontroller ausführbar ist, annehmen.
  • Der Datenspeicher-Verwahrungsort 110 und der optionale Datenspeicher-Verwahrungsort 220 können ein nichtflüchtiges computerverwendbares (z. B. lesbares, beschreibbares usw.) Medium enthalten, das irgendein nichtflüchtiges Gerät oder irgendeine nichtflüchtige Vorrichtung sein kann, das bzw. die Anweisungen, Daten, Computerprogramme, Software, Code, Routinen usw. zur Verarbeitung durch einen oder im Zusammenhang mit einem Prozessor enthalten, speichern, übertragen, ausbreiten oder transportieren kann. Während sich die vorliegende Offenbarung auf den Datenspeicher-Verwahrungsort 110/220 als einen Flash-Speicher bezieht, sollte erkannt werden, dass in einigen Ausführungsformen der Datenspeicher-Verwahrungsort 110/220 einen nichtflüchtigen Speicher, wie z. B. eine dynamische Schreib-Lese-Speicher-Vorrichtung (DRAM-Vorrichtung), eine statische Schreib-Lese-Speicher-Vorrichtung (SRAM-Vorrichtung) oder irgendwelche andere Speichervorrichtungen enthalten kann. In einigen Ausführungsformen kann der Datenspeicher-Verwahrungsort 110/220 außerdem einen nichtflüchtigen Speicher oder eine ähnliche Permanentspeichervorrichtung und ähnliche Permanentspeichermedien, z. B. ein Festplattenlaufwerk, ein Diskettenlaufwerk, eine Kompaktplatten-Festwertspeicher-Vorrichtung (CD-ROM-Vorrichtung), eine Vorrichtung eines Festwertspeichers einer digitalen vielseitigen Platte (DVD-ROM-Vorrichtung), eine Vorrichtung von Schreib-Lese-Speichern einer digitalen vielseitigen Platte (DVD-RAM-Vorrichtung), eine Vorrichtung einer wiederbeschreibbaren digitalen vielseitigen Platte (DVD-RW-Vorrichtung), eine Flash-Speichervorrichtung oder irgendeine andere nichtflüchtige Speichervorrichtung enthalten.
  • 2 ist ein Blockschaltplan, der ein Beispiel der Speicher-Controller-Einheit 106 veranschaulicht, die konfiguriert ist, die hier beschriebenen Techniken zu implementieren. Wie dargestellt ist, kann die Speicher-Controller-Einheit 106 eine Kommunikationseinheit 202, einen Prozessor 204, einen Speicher 206, einen Datenspeicher-Verwahrungsort 220 und die Speichersteuermaschine 108 enthalten, die durch einen Kommunikationsbus 224 kommunikationstechnisch gekoppelt sein können. Es sollte erkannt werden, dass die obigen Konfigurationen beispielhaft bereitgestellt sind und dass zahlreiche weitere Konfigurationen betrachtet werden und möglich sind.
  • Die Kommunikationseinheit 202 kann eine oder mehrere Schnittstellenvorrichtungen für die verdrahtete und die drahtlose Verbindbarkeit mit dem Netz 104 und den anderen Entitäten und/oder Komponenten des Systems 100 einschließlich z. B. der Client-Vorrichtungen 102 und des Datenspeicher-Verwahrungsorts 110 usw. enthalten. Die Kommunikationseinheit 202 kann z. B. CAT-Typ-Schnittstellen; drahtlose Sender/Empfänger zum Senden und Empfangen von Signalen unter Verwendung von Wi-FiTM, Bluetooth®, Mobilkommunikation usw.; USB-Schnittstellen; verschiedene Kombinationen daraus; usw. enthalten. In einigen Ausführungsformen kann die Kommunikationseinheit 202 den Prozessor 204 mit dem Netz 104 verbinden, das wiederum an andere Verarbeitungssysteme gekoppelt sein kann. Die Kommunikationseinheit 202 kann andere Verbindungen zu dem Netz 104 und zu anderen Entitäten des Systems 100 unter Verwendung verschiedener Standardkommunikationsprotokolle, einschließlich z. B. jener, die hier anderswo erörtert sind, bereitstellen.
  • Der Prozessor 204 kann eine Arithmetiklogikeinheit, einen Mikroprozessor, einen Universal-Controller oder irgendeine andere Prozessoranordnung enthalten, um Berechnungen auszuführen und einer Anzeigevorrichtung elektronische Anzeigesignale bereitzustellen. In einigen Ausführungsformen ist der Prozessor 204 ein Hardware-Prozessor, der einen oder mehrere Verarbeitungskerne aufweist. Der Prozessor 204 ist für die Kommunikation mit den anderen Komponenten an den Bus 224 gekoppelt. Der Prozessor 204 verarbeitet die Datensignale und kann verschiedene Computerarchitekturen einschließlich einer Architektur eines Computers mit komplexem Befehlsformat (CISC-Architektur), einer Architektur eines Computers mit reduziertem Befehlsformat (RISC-Architektur) oder einer Architektur, die eine Kombination der Befehlssätze implementiert, enthalten. Obwohl in dem Beispiel nach 2 nur ein einziger Prozessor gezeigt ist, können mehrere Prozessoren und/oder Verarbeitungskerne enthalten sein. Es sollte erkannt werden, dass andere Prozessorkonfigurationen möglich sind.
  • Der Speicher 206 speichert Anweisungen und/oder Daten, die durch den Prozessor 204 ausgeführt werden können. In einigen Ausführungsformen kann der Speicher 206 Anweisungen und/oder Daten speichern, die durch den Prozessor 204 ausgeführt werden können. Der Speicher 206 kann außerdem andere Anweisungen und Daten, einschließlich z. B. eines Betriebssystems, der Hardware-Treiber, anderer Software-Anwendungen, Datenbanken usw., speichern. Der Speicher 206 kann für die Kommunikation mit dem Prozessor 204 und den anderen Komponenten des Systems 100 an den Bus 224 gekoppelt sein.
  • Der Speicher 206 kann ein nichtflüchtiges, computerverwendbares (z. B. lesbares, beschreibbares usw.) Medium enthalten, das irgendein nichtflüchtiges Gerät oder irgendeine nichtflüchtige Vorrichtung sein kann, das bzw. die Anweisungen, Daten, Computerprogramme, Software, Code, Routinen usw. für die Verarbeitung durch den oder im Zusammenhang mit dem Prozessor 204 enthalten, speichern, übertragen, ausbreiten oder transportieren kann. In einigen Ausführungsformen kann der Speicher 206 einen nichtflüchtigen Speicher, wie z. B. eine dynamische Schreib-Lese-Speicher-Vorrichtung (DRAM-Vorrichtung), eine statische Schreib-Lese-Speicher-Vorrichtung (SRAM-Vorrichtung), einen Flash-Speicher oder irgendwelche anderen Speichervorrichtungen enthalten. In einigen Ausführungsformen enthält der Speicher 206 außerdem einen nichtflüchtigen Speicher oder eine ähnliche Permanentspeichervorrichtung oder ähnliche Permanentspeichermedien, z. B. ein Festplattenlaufwerk, ein Diskettenlaufwerk, eine Kompaktplatten-Festwertspeicher-Vorrichtung (CD-ROM-Vorrichtung), eine Vorrichtung eines Festwertspeichers einer digitalen vielseitigen Platte (DVD-ROM-Vorrichtung), eine Vorrichtung von Schreib-Lese-Speichern einer digitalen vielseitigen Platte (DVD-RAM-Vorrichtung), eine Vorrichtung einer wiederbeschreibbaren digitalen vielseitigen Platte (DVD-RW-Vorrichtung), eine Flash-Speichervorrichtung oder irgendeine andere nichtflüchtige Speichervorrichtung.
  • Der Bus 224 kann einen Kommunikationsbus zum Übertragen von Daten zwischen den Komponenten einer Computervorrichtung oder zwischen Computervorrichtungen, ein Netzbussystem, das das Netz 104 oder Abschnitte von ihm enthält, ein Prozessornetz, eine Kombination daraus usw. enthalten. In einigen Ausführungsformen können die Client-Vorrichtungen 102 und die Speicher-Controller-Einheit 106 zusammenarbeiten und über einen Software-Kommunikationsmechanismus, der in Verbindung mit dem Bus 224 implementiert ist, kommunizieren. Der Software-Kommunikationsmechanismus kann z. B. eine Zwischenprozesskommunikation, lokale Funktions- oder Prozeduraufrufe, Fernprozeduraufrufe, eine netzbasierte Kommunikation, eine sichere Kommunikation usw. enthalten und/oder fördern.
  • Die Speichersteuermaschine 108 ist eine Software, ein Code, eine Logik oder Routinen zum Bereitstellen eines effizienten Datenmanagements. Wie in 2 dargestellt ist, kann die Speichersteuermaschine 108 ein Datenempfangsmodul 208, eine Datenreduktionseinheit 210, ein Datenverfolgungsmodul 212, ein Daten-Clusterbildungs-Modul 214, ein Datenausmusterungsmodul 216, ein Aktualisierungsmodul 218 und ein Synchronisationsmodul 222 enthalten.
  • In einigen Ausführungsformen sind die Komponenten 208, 210, 212, 214, 216, 218 und/oder 222 elektronisch kommunikationstechnisch für die Zusammenarbeit und Kommunikation miteinander, mit der Kommunikationseinheit 202, dem Prozessor 204, dem Speicher 206 und/oder dem Datenspeicher-Verwahrungsort 220 gekoppelt. Diese Komponenten 208, 210, 212, 214, 216, 218 und 222 sind außerdem über das Netz 104 für die Kommunikation mit den anderen Entitäten (z. B. den Client-Vorrichtungen 102, den Speichervorrichtungen 112) des Systems 100 gekoppelt. In einigen Ausführungsformen sind das Datenempfangsmodul 208, die Datenreduktionseinheit 210, das Datenverfolgungsmodul 212, das Daten-Clusterbildungs-Modul 214, das Datenausmusterungsmodul 216, das Aktualisierungsmodul 218 und das Synchronisationsmodul 222 Sätze von Anweisungen, die durch den Prozessor 204 oder die Logik, die in einem oder mehreren kundenspezifisch angepassten Prozessoren enthalten ist, ausführbar sind, um ihre jeweiligen Funktionalitäten bereitzustellen. In anderen Ausführungsformen sind das Datenempfangsmodul 208, die Datenreduktionseinheit 210, das Datenverfolgungsmodul 212, das Daten-Clusterbildungs-Modul 214, das Datenausmusterungsmodul 216, das Aktualisierungsmodul 218 und das Synchronisationsmodul 222 im Speicher 206 gespeichert und für den Prozessor 204 zugänglich und durch den Prozessor 204 ausführbar, um ihre jeweiligen Funktionalitäten bereitzustellen. In jeder dieser Ausführungsformen sind das Datenempfangsmodul 208, die Datenreduktionseinheit 210, das Datenverfolgungsmodul 212, das Daten-Clusterbildungs-Modul 214, das Datenausmusterungsmodul 216, das Aktualisierungsmodul 218 und das Synchronisationsmodul 222 für die Zusammenarbeit und Kommunikation mit dem Prozessor 204 und den anderen Komponenten der Computervorrichtung 200 ausgelegt.
  • In einer Ausführungsform empfängt das Datenempfangsmodul 208 die ankommenden Daten und/oder gewinnt das Datenempfangsmodul 208 die Daten wieder, reduziert/codiert die Datenreduktionseinheit 210 einen Datenstrom, verfolgt das Datenverfolgungsmodul 212 die Daten über das System 100, führt das Daten-Clusterbildungs-Modul 214 die Clusterbildung der Bezugsdatenmengen, die die Datenblöcke enthalten, aus, mustert das Datenausmusterungsmodul 216 die Datenblöcke und/oder die Bezugsdatenmengen, die die Datenblöcke enthalten, unter Verwendung der Datenmüllsammlung aus, aktualisiert das Aktualisierungsmodul 218 die einem Datenstrom zugeordneten Informationen und stellt das Synchronisationsmodul 222 die Zuverlässigkeit für die eine oder die mehreren anderen Komponenten der Speicher-Controller-Einheit 106 bereit. Die spezielle Benennung und Unterteilung der Module, Routinen, Merkmale, Attribute, Methodologien und anderen Aspekte sind nicht obligatorisch oder signifikant, wobei die Mechanismen, die die vorliegende Erfindung oder ihre Merkmale implementieren, verschiedene Namen, Unterteilungen und/oder Formate aufweisen können.
  • Das Datenempfangsmodul 208 ist eine Software, ein Code, eine Logik oder Routinen zum Empfangen ankommender Daten und/oder Wiedergewinnen von Daten. In einer Ausführungsform ist das Datenempfangsmodul 208 eine Menge von Anweisungen, die durch den Prozessor 204 ausführbar sind. In einer weiteren Ausführungsform ist das Datenempfangsmodul 208 im Speicher 206 gespeichert und durch den Prozessor 204 zugänglich und ausführbar. In beiden Ausführungsformen ist das Datenempfangsmodul 208 für die Zusammenarbeit und Kommunikation mit dem Prozessor 204 und den anderen Komponenten der Computervorrichtung 200 einschließlich der anderen Komponenten einer Datenreduktionseinheit 210 ausgelegt.
  • Das Datenempfangsmodul 208 empfängt die ankommenden Daten und/oder gewinnt die Daten aus einem oder mehreren Datenspeichern, wie z. B. aus dem, aber nicht eingeschränkt auf den Datenspeicher-Verwahrungsort 110/220 des Systems 100, wieder. Die ankommenden Daten können einen Datenstrom enthalten, sind aber nicht darauf eingeschränkt. In einigen Ausführungsformen empfängt das Datenempfangsmodul 208 einen Datenstrom von einer Client-Vorrichtung 102. Der Datenstrom kann eine Menge von Datenblöcken (z. B. die aktuellen Datenblöcke eines neuen Datenstroms, die Bezugsdatenblöcke aus dem Speicher usw.) enthalten. Die Menge von Datenblöcken (z. B. des Datenstroms) kann Dokumenten, Dateien, E-Mails, Nachrichten, Blogs und/oder irgendwelchen Anwendungen, die durch die Client-Vorrichtung 102 ausgeführt und wiedergegeben werden und/oder im Speicher gespeichert sind, zugeordnet sein, ist aber nicht darauf eingeschränkt. Weiterhin kann die Menge von Datenblöcken anwenderlesbare Dateien enthalten, wie z. B. jene, die über eine Anwendung in den Client-Vorrichtungen ausgeführt und wiedergegeben werden, wie z. B. Tabellenkalkulationsanwendungen, Formulare, Zeitschriften, Artikel, Bücher, Kontakteinzelheiten, Datenbanken, Abschnitte von Datenbanken, Tabellen usw. In anderen Ausführungsformen kann der Datenstrom einer Menge von Datenblöcken (z. B. Bezugsdatenblöcken) zugeordnet sein, die von einem Datenspeicher, wie z. B. dem Datenspeicher-Verwahrungsort 220 und/oder einer (nicht gezeigten) Flash-Speichervorrichtung, wiedergewonnen werden.
  • Die Datenreduktionseinheit 210 ist eine Software, ein Code, eine Logik oder Routinen zum Reduzieren/Codieren eines Datenstroms, wie ferner anderswo hier erörtert ist. In einer Ausführungsform ist die Datenreduktionseinheit 210 eine Menge von Anweisungen, die durch den Prozessor 204 ausführbar sind. In einer weiteren Ausführungsform ist die Datenreduktionseinheit 210 im Speicher 206 gespeichert und durch den Prozessor 204 zugänglich und ausführbar. In beiden Ausführungsformen ist die Datenreduktionseinheit 210 für die Zusammenarbeit und Kommunikation mit dem Prozessor 204 und den anderen Komponenten der Computervorrichtung 200 ausgelegt. In weiteren Ausführungsformen kann die Datenreduktionseinheit 210 einen Bezugsblockpuffer 302, einen Dateneingangspuffer 304, eine Signaturfingerabdruck-Berechnungsmaschine 306, eine Abgleichmaschine 308, eine Codiermaschine 310, ein Kompressions-Hash-Tabellen-Modul 312, ein Bezugs-Hash-Tabellen-Modul 314, einen komprimierten Puffer 316 und einen Datenausgabepuffer 318 enthalten, wie in 3B dargestellt ist.
  • Das Datenverfolgungsmodul 212 ist eine Software, ein Code, eine Logik oder Routinen zum Verfolgen von Daten. In einer Ausführungsform ist das Datenverfolgungsmodul 212 eine Menge von Anweisungen, die durch den Prozessor 204 ausführbar sind. In einer weiteren Ausführungsform ist das Datenverfolgungsmodul 212 in dem Speicher 206 gespeichert und durch den Prozessor 204 zugänglich und ausführbar. In beiden Ausführungsformen ist das Datenverfolgungsmodul 212 für die Zusammenarbeit und die Kommunikation mit dem Prozessor 204 und den anderen Komponenten der Computervorrichtung 200 einschließlich der anderen Komponenten der Datenreduktionseinheit 210 ausgelegt.
  • Das Datenverfolgungsmodul 212 kann die Datenblöcke von einem oder mehreren Datenspeichern des Systems 100 verfolgen, die die exklusiven Speichervorrichtungen 112 des Datenspeicher-Verwahrungsorts 110, einen (nicht gezeigten) Speicher der Client-Vorrichtungen 102 und/oder den Datenspeicher-Verwahrungsort 220 enthalten können, aber nicht darauf eingeschränkt sind. In einigen Ausführungsformen kann das Datenverfolgungsmodul 212 die den Datenblöcken zugeordneten Zählungen über das System 100 verfolgen. Die Zählungen können durch das Datenverfolgungsmodul 212 durch das Verfolgen der Anzahl, wie oft sich ein oder mehrere Datenblöcke auf einen Bezugsdatenblock und/oder eine Bezugsdatenmenge stützen, verfolgt werden. Weiterhin kann das Datenverfolgungsmodul 212 die verfolgten Zählungen an eine oder mehrere andere Komponenten der Computervorrichtung 200 zum Bestimmen senden, wann sich ein Datenblock nicht länger auf einen Bezugsdatenblock einer Bezugsdatenmenge stützt und daher der Bezugsdatenblock der Bezugsdatenmenge ausgemustert werden kann. In einer Ausführungsform verfolgt das Datenverfolgungsmodul 212 die Segmente des Speichers, die einem nichtflüchtigen Datenspeicher (z. B. einem Flash-Speicher, dem Datenspeicher-Verwahrungsort 110/220) zugeordnet sind, für den Datenabruf durch eine oder mehrere Client-Vorrichtungen 102. Eine Client-Vorrichtung 102 kann z. B. eine oder mehrere Anwendungen ausführen und Zugriffe auf den Inhalt anfordern, der einem Segment zugeordnet ist, das die Datenblöcke (z. B. eine Menge von Datenblöcken) enthält, die in dem nichtflüchtigen Datenspeicher (d. h., im Flash-Speicher) gespeichert sind, wobei das Datenverfolgungsmodul 212 dann die Anzahl verfolgen kann, wie oft von einem Segment und/oder einer Bezugsdatenmenge etwas zurückgefordert wird (d. h., die Daten abgerufen werden), um einen oder mehrere Inhalte, die der Anforderung zugeordnet sind, wiederzugeben, wie hier anderswo ausführlicher erörtert ist.
  • Das Daten-Clusterbildungs-Modul 214 ist eine Software, ein Code, eine Logik oder Routinen zur Clusterbildung der Bezugsdatenmengen. In einer Ausführungsform ist das Daten-Clusterbildungs-Modul 214 eine Menge von Anweisungen, die durch den Prozessor 204 ausführbar ist. In einer weiteren Ausführungsform ist das Daten-Clusterbildungs-Modul 214 im Speicher 206 gespeichert und durch den Prozessor 204 zugänglich und ausführbar. In beiden Ausführungsformen ist das Daten-Clusterbildungs-Modul 214 für die Zusammenarbeit und die Kommunikation mit dem Prozessor 204 und den anderen Komponenten der Computervorrichtung 200 einschließlich der anderen Komponenten der Datenreduktionseinheit 210 ausgelegt.
  • In einigen Ausführungsformen bestimmt das Daten-Clusterbildungs-Modul 214 in Zusammenarbeit mit einer oder mehreren anderen Komponenten der Computervorrichtung 200 eine Abhängigkeit von einem oder mehreren Datenblöcken von einer oder mehreren Bezugsdatenmengen, die in den Segmenten eines entsprechenden Speichers, wie z. B. eines nichtflüchtigen Flash-Datenspeichers (z. B. eines Flash-Speichers, der eine oder mehrere Speichervorrichtungen 112 sein kann), gespeichert sind. Eine Abhängigkeit des einen oder der mehreren Datenblöcke von einer oder mehreren Bezugsdatenmengen kann eine gemeinsame Rekonstruktions-/Codierungsabhängigkeit des einen oder der mehreren Datenblöcke von einer oder mehreren Bezugsdatenmengen für das Zurückrufen widerspiegeln. Ein Datenblock (d. h., ein codierter Datenblock) kann sich z. B. auf eine Bezugsdatenmenge zum Rekonstruieren des ursprünglichen Datenblocks stützen, so dass die ursprünglichen Informationen, die dem ursprünglichen Datenblock (dem nicht codierten Datenblock) zugeordnet sind, einer Client-Vorrichtung (z. B. der Client-Vorrichtung 102) für die Darstellung bereitgestellt werden können.
  • In weiteren Ausführungsformen identifiziert das Daten-Clusterbildungs-Modul 214 eine oder mehrere sich unterscheidende Bezugsdatenmengen, auf die sich mehrere Datenblöcke stützen, über die Client-Vorrichtungen 102. Das Daten-Clusterbildungs-Modul 214 kann basierend auf der einen oder den mehreren Bezugsdatenmengen einen Cluster erzeugen, so dass die sich unterscheidenden Bezugsdatenmengen über den Cluster gemeinsam benutzt werden, um eine breitere Abdeckung zu erhalten. In einer Ausführungsform können die sich unterscheidenden Bezugsdatenmengen die Bezugsdatenmengen sein, von denen durch die Datenblöcke des Systems 100 häufig Daten abgerufen werden (z. B. über einem minimalen, einem maximalen und/oder einem Bereich von Schwellenwert(en) Daten abgerufen werden).
  • Das Datenausmusterungsmodul 216 ist eine Software, ein Code, eine Logik oder Routinen zum Ausmustern von Bezugsdatenmengen. In einer Ausführungsform ist das Datenausmusterungsmodul 216 eine Menge von Anweisungen, die durch den Prozessor 204 ausführbar sind. In einer weiteren Ausführungsform ist das Datenausmusterungsmodul 216 im Speicher 206 gespeichert und durch den Prozessor 204 zugänglich und ausführbar. In beiden Ausführungsformen ist das Datenausmusterungsmodul 216 für die Zusammenarbeit und Kommunikation mit den Prozessor 204 und den anderen Komponenten der Computervorrichtung 200 einschließlich der anderen Komponenten der Datenreduktionseinheit 210 ausgelegt.
  • Das Datenausmusterungsmodul 216 kann bestimmen, ob eine oder mehrere Bezugsdatenmengen, die in einem oder mehreren Datenspeichern, wie z. B. einem Datenspeicher 110/220, aber nicht darauf eingeschränkt, gespeichert sind, der Ausmusterung entsprechen. In einer Ausführungsform entspricht eine Bezugsdatenmenge der Ausmusterung basierend auf einer Verwendungszählungsvariable (z. B. einer Bezugszählung). Eine Bezugsdatenmenge kann z. B. der Ausmusterung entsprechen, wenn eine entsprechende Verwendungszählungsvariable bis zu einem speziellen Schwellenwert dekrementiert wird.
  • In einigen Ausführungsformen entspricht eine Bezugsdatenmenge der Ausmusterung, wenn eine Zählung der Verwendungszählungsvariable der Bezugsdatenmenge auf null dekrementiert wird. Eine Verwendungszählungsvariable von null kann angeben, dass sich keine Datenblöcke oder Mengen von Datenblöcken auf eine entsprechende gespeicherte Bezugsdatenmenge für die Regeneration stützen (z. B. beziehen). Ein ankommender Datenstrom enthält z. B. keine codierten Datenblöcke (z. B. komprimierte/deduplizierte Datenblöcke), die sich auf eine Bezugsdatenmenge für die Rekonstruktion (d. h., die Decodierung) stützen. In weiteren Ausführungsformen kann das Datenausmusterungsmodul 216 die Ausmusterung einer Bezugsdatenmenge basierend auf der Verwendungszählungsvariable erzwingen. Eine Bezugsdatenmenge kann z. B. zu einer bestimmten Zählung führen, wobei nach dem Erreichen der bestimmten Zählung das Datenausmusterungsmodul 216 durch das Anwenden eines Datenmüllsammelalgorithmus (und/oder irgendeines anderen in der Technik wohlbekannten Algorithmus für die Datenspeichersäuberung) auf die Bezugsdatenmenge die Ausmusterung der Bezugsdatenmenge erzwingen kann. Zusätzlich Operationen des Datenausmusterungsmoduls 216 sind hier anderswo erörtert.
  • Das Aktualisierungsmodul 218 ist eine Software, ein Code, eine Logik oder Routinen zum Aktualisieren der einem Datenstrom zugeordneten Informationen. In einer Ausführungsform ist das Aktualisierungsmodul 218 eine Menge von Anweisungen, die durch den Prozessor 204 ausführbar sind. In einer weiteren Ausführungsform ist das Aktualisierungsmodul 218 im Speicher 206 gespeichert und durch den Prozessor 204 zugänglich und ausführbar. In beiden Ausführungsformen ist das Aktualisierungsmodul 218 für die Zusammenarbeit und die Kommunikation mit dem Prozessor 204 und den anderen Komponenten der Computervorrichtung 200 einschließlich der anderen Komponenten der Datenreduktionseinheit 210 beschaffen.
  • Das Aktualisierungsmodul 218 kann Datenblöcke empfangen und eine oder mehrere Kennungen, die dem Datenblock zugeordnet sind, in einer in einem Datenspeicher (z. B. dem Datenspeicher-Verwahrungsort 110/120) gespeicherten Tabelle der Datensätze aktualisieren. Eine Tabelle der Datensätze kann eine Tabelle mit Zeilen und Spalten, die in einer Datenbank gespeichert ist, eine Indexierungstabelle usw. enthalten, ist aber nicht darauf eingeschränkt. In einer Ausführungsform können die empfangenen Datenblöcke codierte/reduzierte Datenblöcke sein. In weiteren Ausführungsformen kann das Aktualisierungsmodul 218 eine Kennung, die einer Bezugsdatenmenge zugeordnet ist, aktualisieren. Eine Kennung kann einen Zeiger enthalten, ist aber nicht darauf eingeschränkt. Ein Zeiger kann Datenblöcken und/oder Bezugsdatenmengen zugeordnet sein und kann zusätzliche Informationen, wie z. B. globale Informationen über die Datenblöcke und/oder die Bezugsdatenmenge, aber nicht darauf eingeschränkt, enthalten. In einigen Ausführungsformen kann der Zeiger Informationen, wie z. B. eine Gesamtzahl der Datenblöcke, die auf eine spezielle Bezugsdatenmenge im Speicher zeigen, enthalten.
  • In einer Ausführungsform empfängt das Aktualisierungsmodul 218 Informationen, die einem Datenabruf von einer Client-Vorrichtung zugeordnet sind, von dem Datenverfolgungsmodul 212. Der Datenabruf kann einer oder mehreren Bezugsdatenmengen im Speicher eines Segments des Datenspeichers zugeordnet sein. Das Aktualisierungsmodul 218 kann dann einen Segmentkopf (z. B. eine Kennung), der der Bezugsdatenmenge des Segments, das dem Datenabruf zugeordnet ist, zugeordnet ist, aktualisieren. In weiteren Ausführungsformen aktualisiert das Aktualisierungsmodul 218 einen Abschnitt des Segmentkopfs, der Informationen, wie z. B. die Anzahl, wie oft die Daten von dem Segment abgerufen worden sind, enthalten kann. Zusätzliche Operationen des Aktualisierungsmoduls 218 sind hier anderswo erörtert.
  • Das Synchronisationsmodul 222 kann eine Software, ein Code, eine Logik oder Routinen zum Bereitstellen von Zuverlässigkeit für die eine oder die mehreren anderen Komponenten der Speicher-Controller-Einheit 106, wie z. B. das Datenempfangsmodul 208, die Datenreduktionseinheit 210, das Datenverfolgungsmodul 212, das Daten-Clusterbildungs-Modul 214, das Datenausmusterungsmodul 216 und das Aktualisierungsmodul 218, aber nicht darauf eingeschränkt, sein. In einer Ausführungsform ist das Synchronisationsmodul 222 eine Menge von Anweisungen, die durch den Prozessor 204 ausführbar sind. In einer weiteren Ausführungsform ist das Synchronisationsmodul 222 im Speicher 206 gespeichert und durch den Prozessor 204 zugänglich und ausführbar. In beiden Ausführungsformen ist das Synchronisationsmodul 222 für die Zusammenarbeit und die Kommunikation mit dem Prozessor 204 und den anderen Komponenten der Speicher-Controller-Einheit 106 einschließlich der anderen Komponenten der Datenreduktionseinheit 210 beschaffen.
  • In einer Ausführungsform kann das Synchronisationsmodul 222 vor Datenunterbrechung, wie z. B. während der Vorrichtungs-Stilllegungen (z. B. der Stilllegung der Client-Vorrichtung) und/oder Leistungsausfällen, während des Empfangens, Wiedergewinnens, Codierens, Aktualisierens, Modifizierens und/oder Speicherns von Daten durch eine oder mehrere Komponenten der Speicher-Controller-Einheit 106 schützen. Das Synchronisationsmodul 222 kann z. B. eine Zuverlässigkeit für das Aktualisierungsmodul 218 bereitstellen, während das Aktualisierungsmodul 218 eine Verwendungszählungsvariable (z. B. eine Bezugszählung), die einem Daten-/Bezugsblock und/oder einer Bezugsdatenmenge zugeordnet ist, aktualisiert/modifiziert. In weiteren Ausführungsformen kann das Synchronisationsmodul 222 mit einem oder mehreren Puffer der Datenreduktionseinheit 210 parallel arbeiten. Das Synchronisationsmodul 222 kann z. B. einen Datenstrom an den Dateneingangspuffer 304 senden, um die Datenblöcke des Datenstroms vorübergehend zu speichern, falls während der Verarbeitung ein Leistungsausfall in dem System 100 auftritt, wobei die Datenblöcke des Datenstroms nicht beeinträchtigt würden.
  • 3A ist ein Blockschaltplan 300A, der einbeispielhaftes hardware-effizientes Datenmanagementsystem veranschaulicht, das konfiguriert ist, die hier eingeführten Techniken zu implementieren. Wie in 3A dargestellt ist, empfängt die Datenreduktionseinheit 210 einen Bezugsblock, wobei sie den Bezugsblock verarbeitet und eine codierte/reduzierte Version des Bezugsblocks ausgibt und den codierten Bezugsdatenblock in dem Datenspeicher-Verwahrungsort 220 speichert. Weiterhin enthält die dargestellte Veranschaulichung in 3A die Kernpunkte der vorliegenden Offenbarung, die den ähnlichkeitsbasierten Inhaltsabgleich für Speicheranwendungen und die Datendeduplizierung enthalten, aber nicht darauf eingeschränkt sind. Der ähnlichkeitsbasierte Inhaltsabgleich kann im Gegensatz zum Identifizieren einer exakten Übereinstimmung zwischen einer Menge von Dokumenten über mehrere Dokumente zum Detektieren und Identifizieren einer Ähnlichkeit zwischen einem oder mehreren Dokumenten angewendet werden. Die vorliegende Offenbarung unterscheidet sich von früheren Implementierungen (die in den 14A und 14B gezeigt sind) wenigstens durch das Lösen der folgenden Probleme: 1) die Verwendung eines ähnlichkeitsbasierten Abgleichs in Speicheranwendungen, 2) das Anwenden der Komprimierung und Deduplizierung in einer eindeutigen Weise auf die Datenblöcke, 3) das Lösen des Problems von sich ändernden Bezugsdatenmengen, die von sich ändernden Datenströmen (Verkehr) abhängen, unter Verwendung eines Generationsbezugsdatenmengenspeichers und 4) das Integrieren des Bezugsdatenmengen-Managements mit der Datenmüllsammlung für den Raum- und Laufzeitwirkungsgrad in Speichervorrichtungen, wie z. B. Flash-Speichervorrichtungen.
  • 3B ist ein Blockschaltplan, der eine beispielhafte Datenreduktionseinheit 210 veranschaulicht, die konfiguriert ist, die hier beschriebenen Techniken zu implementieren. Wie in 3 dargestellt ist, kann die Datenreduktionseinheit 210 den Bezugsblockpuffer 302, den Dateneingangspuffer 304, die Signaturfingerabdruck-Berechnungsmaschine 306, die Abgleichmaschine 308, die Codiermaschine 310, das Kompressions-Hash-Tabellen-Modul 312, das Bezugs-Hash-Tabellen-Modul 314, den komprimierten Puffer 316 und den Datenausgangspuffer 318 enthalten.
  • In einigen Ausführungsformen sind die Komponenten 302, 304, 306, 308, 310, 312, 314, 316 und 318 für die Zusammenarbeit und Kommunikation miteinander, mit der Kommunikationseinheit 202, dem Prozessor 204, dem Speicher 206 und/oder dem Datenspeicher-Verwahrungsort 220 elektronisch kommunikationstechnisch gekoppelt. Diese Komponenten 302, 304, 306, 308, 310, 312, 314, 316 und 318 sind außerdem über das Netz 104 für die Kommunikation mit den anderen Entitäten (z. B. den Client-Vorrichtungen 102) des Systems 100 gekoppelt. In weiteren Ausführungsformen sind der Bezugsblockpuffer 302, der Dateneingangspuffer 304, die Signaturfingerabdruck-Berechnungsmaschine 306, die Abgleichmaschine 308, die Codiermaschine 310, das Kompressions-Hash-Tabellen-Modul 312, das Bezugs-Hash-Tabellen-Modul 314, der komprimierte Puffer 316 und der Datenaungangspuffer 318 Mengen von Anweisungen, die durch den Prozessor 204 oder die Logik, die in einem oder mehreren kundenspezifisch angepassten Prozessoren enthalten ist, ausführbar sind, um ihre jeweiligen Funktionalitäten bereitzustellen. In anderen Ausführungsformen sind der Bezugsblockpuffer 302, der Dateneingangspuffer 304, die Signaturfingerabdruck-Berechnungsmaschine 306, die Abgleichmaschine 308, die Codiermaschine 310, das Kompressions-Hash-Tabellen-Modul 312, das Bezugs-Hash-Tabellen-Modul 314, der komprimierte Puffer 316 und der Datenausgangspuffer 318 im Speicher 206 gespeichert und durch den Prozessor 204 zugänglich und ausführbar, um ihre jeweiligen Funktionalitäten bereitzustellen. In jeder dieser Ausführungsformen sind der Bezugsblockpuffer 302, der Dateneingangspuffer 304, die Signaturfingerabdruck-Berechnungsmaschine 306, die Abgleichmaschine 308, die Codiermaschine 310, das Kompressions-Hash-Tabellen-Modul 312, das Bezugs-Hash-Tabellen-Modul 314, der komprimierte Puffer 316 und der Datenausgangspuffer 318 für die Zusammenarbeit und die Kommunikation mit dem Prozessor 204 und den anderen Komponenten der Computervorrichtung 200 beschaffen.
  • Der Bezugsblockpuffer 302 ist eine Logik oder Routinen zum vorläufigen Speichern eines Datenstroms. In einer Ausführungsform ist der Bezugsblockpuffer 302 eine Menge von Anweisungen, die durch den Prozessor 204 ausführbar sind. In einer weiteren Ausführungsform ist der Bezugsblockpuffer 302 im Speicher 206 gespeichert und durch den Prozessor 204 zugänglich und ausführbar. In beiden Ausführungsformen ist der Bezugsblockpuffer 302 für die Zusammenarbeit und die Kommunikation mit dem Prozessor 204 und den anderen Komponenten der Computervorrichtung 200 einschließlich der anderen Komponenten der Datenreduktionseinheit 210 beschaffen.
  • In einer Ausführungsform gewinnt die Speichersteuermaschine 108 die Bezugsdatenblöcke aus dem Datenspeicher-Verwahrungsort 220 zum Manipulieren und Verarbeiten der Bezugsdatenblöcke wieder. Die Speichersteuermaschine 108 kann dann die Bezugsdatenblöcke an den Bezugsblockpuffer 302 für die provisorische Speicherung senden. Das vorläufige Speichern der Bezugsdatenblöcke in dem Bezugsblockpuffer 302 stellt eine Systemratenstabilität zwischen dem Wiedergewinnen der Bezugsdatenblöcke und dem Verarbeiten der Bezugsdatenblöcke bereit. In einer Ausführungsform gewinnt die Speichersteuermaschine 108 eine Bezugsdatenmenge von dem Datenspeicher-Verwahrungsort 220 für die Verarbeitung der Bezugsdatenmenge in Zusammenarbeit mit einer oder mehreren Komponenten der Computervorrichtung 200 wieder. Vor der Verarbeitung der Bezugsdatenmenge können die Speichersteuermaschine 108 und/oder eine oder mehrere andere Komponenten der Computervorrichtung 200 die Bezugsdatenmenge für die vorläufige Speicherung an den Bezugsblockpuffer 302 senden. Der Bezugsblockpuffer 302 kann eine Warteschlange sein, die einen oder mehrere Bezugsdatenblöcke und/oder eine oder mehrere Bezugsdatenmengen in der Warteschlange für die Verarbeitung durch eine oder mehrere Komponenten der Computervorrichtung 200 enthalten kann.
  • Der Dateneingangspuffer 304 ist eine Logik oder Routinen zum vorläufigen Speichern eines oder mehrerer Datenblöcke eines ankommenden Datenstroms. In einer Ausführungsform ist der Dateneingangspuffer 304 eine Menge von Anweisungen, die durch den Prozessor 204 ausführbar sind. In einer weiteren Ausführungsform ist der Dateneingangspuffer 304 im Speicher 206 gespeichert und durch den Prozessor 204 zugänglich und ausführbar. In beiden Ausführungsformen ist der Dateneingangspuffer 304 für die Zusammenarbeit und die Kommunikation mit dem Prozessor 204 und den anderen Komponenten der Computervorrichtung 200 einschließlich der anderen Komponenten der Datenreduktionseinheit 210 beschaffen.
  • In einer Ausführungsform empfängt die Speichersteuermaschine 108 einen oder mehrere Datenblöcke von einer Client-Vorrichtung (z. B. den Client-Vorrichtungen 10) zum Verarbeiten der Datenblöcke des ankommenden Datenstroms. Die Speichersteuermaschine 108 kann dann die empfangenen Datenblöcke für die provisorische Speicherung an den Dateneingangspuffer 304 senden. Das vorläufige Speichern der Datenblöcke in dem Dateneingangspuffer 304 stellt den Systemverarbeitungswirkungsgrad zwischen dem Empfangen der Datenblöcke und dem Verarbeiten der Datenblöcke bereit. Falls die Verarbeitungsrate der Speichersteuermaschine 108 in Reaktion auf das Empfangen mehrerer ankommenden Datenströme von mehreren Client-Vorrichtungen (z. B. um eine Größenordnung) vergrößert ist, kann der Dateneingangspuffer als ein Warteschlangenplan wirken. Der Dateneingangspuffer 304 kann z. B. einen Warteschlangenplan enthalten, der einen oder mehrere Datenblöcke, die mehreren Client-Vorrichtungen zugeordnet sind, in der Warteschlange anordnet, so dass die Speichersteuermaschine 108 die Datenblöcke basierend auf der entsprechenden Position der Datenblöcke in dem Warteschlangenplan verarbeitet.
  • Die Signaturfingerabdruck-Berechnungsmaschine 306 ist eine Software, ein Code, eine Logik oder Routinen zum Erzeugen und Analysieren der Kennungen der einem Datenstrom zugeordneten Datenblöcke. In einer Ausführungsform ist die Signaturfingerabdruck-Berechnungsmaschine 306 eine Menge von Anweisungen, die durch den Prozessor 204 ausführbar sind. In einer weiteren Ausführungsform ist die Signaturfingerabdruck-Berechnungsmaschine 306 im Speicher 206 gespeichert und durch den Prozessor 204 zugänglich und ausführbar. In beiden Ausführungsformen ist die Signaturfingerabdruck-Berechnungsmaschine 306 für die Zusammenarbeit und die Kommunikation mit dem Prozessor 204 und den anderen Komponenten der Computervorrichtung 200 einschließlich der anderen Komponenten der Datenreduktionseinheit 210 beschaffen.
  • In einer Ausführungsform empfängt die Signaturfingerabdruck-Berechnungsmaschine 306 einen Datenstrom, der einen oder mehrere Datenblöcke enthält, für die Analyse. Die Signaturfingerabdruck-Berechnungsmaschine 306 kann eine Kennung für jeden des einen oder der mehreren Datenblöcke des Datenstroms erzeugen. In einigen Ausführungsformen kann die Signaturfingerabdruck-Berechnungsmaschine 306 eine Bezugskennung für eine Bezugsdatenmenge, die einen oder mehrere Bezugsdatenblöcke enthält, erzeugen. Die Kennung kann Informationen, wie z. B. Fingerabdrücke und/oder digitale Signaturen, die jedem Datenblock des Datenstroms zugeordnet sind, enthalten, ist aber nicht darauf eingeschränkt.
  • Die Signaturfingerabdruck-Berechnungsmaschine 306 kann die Informationen, die den Kennungsinformationen (z. B. den digitalen Signaturen, den Fingerabdrücken usw.) der einem ankommenden Datenstrom zugeordneten Datenblöcke zugeordnet sind, durch das Parsen eines Datenspeichers (z. B. des Datenspeicher-Verwahrungsorts 110, 220) bezüglich eines oder mehrerer Bezugsdatenblöcke und/oder Bezugsdatenmengen (d. h., einer Bezugsdatenmenge, die einen oder mehrere Bezugsdatenblöcke enthält), die den Datenblöcken des ankommenden Datenstroms entsprechen, analysieren, wie hier anderswo erörtert ist. Die Signaturfingerabdruck-Berechnungsmaschine 306 erzeugt z. B. Fingerabdrücke für die Datenblöcke eines ankommenden Datenstroms. Die Signaturfingerabdruck-Berechnungsmaschine 306 analysiert dann die Fingerabdrücke durch das Parsen und Vergleichen der Fingerabdrücke der Datenblöcke des ankommenden Datenstroms mit einem oder mehreren Fingerabdrücken, die mehreren Bezugsdatenblöcken und/oder Bezugsdatenmengen, die in einem Speicher gespeichert sind, und bestimmt, ob eine Übereinstimmung vorhanden ist. In weiteren Ausführungsformen kann die Signaturfingerabdruck-Berechnungsmaschine 306 die Ergebnisse der Analyse für die weitere Verarbeitung an die Abgleichmaschine 308 senden.
  • Die Abgleichmaschine 308 ist eine Software, ein Code, eine Logik oder Routinen zum Identifizieren von Ähnlichkeiten zwischen Daten. In einer Ausführungsform ist die Abgleichmaschine 308 eine Menge von Anweisungen, die durch den Prozessor 204 ausführbar sind. In einer weiteren Ausführungsform ist die Abgleichmaschine 308 in dem Speicher 206 gespeichert und durch den Prozessor 204 zugänglich und ausführbar. In beiden Ausführungsformen ist die Abgleichmaschine 308 für die Zusammenarbeit und die Kommunikation mit dem Prozessor 204 und den anderen Komponenten der Computervorrichtung 200 einschließlich der anderen Komponenten der Datenreduktionseinheit 210 beschaffen. Die Daten können einen oder mehrere Datenblöcke, Bezugsdatenblöcke und/oder Bezugsdatenmengen, die Dateien, Dokumenten und E-Mail-Nachrichten, die über die Client-Vorrichtungen durch die Anwendungen wiedergegeben werden, zugeordnet sein können, enthalten, sind aber nicht darauf eingeschränkt.
  • In einer Ausführungsform wendet die Abgleichmaschine 308 in Zusammenarbeit mit der Signaturfingerdruck-Berechnungsmaschine 306 einen ähnlichkeitsbasierten Algorithmus an, um Ähnlichkeiten zwischen den ankommenden Daten und den vorher im Speicher gespeicherten Daten zu detektieren. In einigen Ausführungsformen identifiziert die Abgleichmaschine 308 die Ähnlichkeit zwischen den ankommenden Daten und den vorher gespeicherten Daten durch das Vergleichen von Ähnlichkeits-Hashes (z. B. Hash-Schemata), die den ankommenden Daten und den vorher im Speicher gespeicherten Daten zugeordnet sind. Ein Ähnlichkeits-Hash kann ein Teil der Informationen sein, die einer durch die Fingerabdruck-Berechnungsmaschine 306 erzeugten Kennung zugeordnet sind.
  • Es kann ein ähnlichkeitsbasierter Algorithmus verwendet werden, um eine Ähnlichkeit zwischen den Ähnlichkeits-Hashes der Datenblöcke eines ankommenden Datenstroms und den Ähnlichkeits-Hashes, die den Bezugsdatenmengen zugeordnet sind, zu detektieren. In weiteren Ausführungsformen kann der Ähnlichkeits-Hash ein Schema des Inhalts widerspiegeln, das dem Datenblock (den Datenblöcken) und/oder einer Bezugsdatenmenge zugeordnet ist. Ein Schema kann z. B. aus den Maximalwerten innerhalb einer Bezugsdatenmenge/des Datenblocks (der Datenblöcke) erzeugt werden, die dazu tendieren, fortzubestehen, falls die Bezugsdatenblöcke der Bezugsdatenmenge und/oder die Menge von Datenblöcken eines ankommenden Datenstroms etwas modifiziert werden. Falls die Datenblöcke eines ankommenden Datenstroms basierend auf den entsprechenden Ähnlichkeits-Hashes (z. B. den Hash-Schemata) zu einer vorhandenen Bezugsdatenmenge ähnlich sind, können sie deshalb zum Codieren der Datenblöcke des ankommenden Datenstroms bezüglich der vorhandenen Bezugsdatenmenge an die Codierermaschine 310 gesendet werden, wie hier anderswo erörtert ist.
  • In anderen Ausführungsformen wendet die Abgleichmaschine 308 einen ähnlichkeitsbasierten Algorithmus auf einen oder mehrere Bezugsdatenblöcke, die im Datenspeicher gespeichert sind, zum Erzeugen einer Bezugsdatenmenge aus den Bezugsdatenblöcken an. Falls z. B. die Bezugsdatenblöcke im Speicher basierend auf einem Kriterium, wie z. B. entsprechenden Ähnlichkeits-Hashes (z. B. Hash-Schemata), untereinander ähnlich sind, können die Bezugsdatenblöcke in einer Bezugsdatenmenge angesammelt werden, wie hier anderswo erörtert ist.
  • Die Codiermaschine 310 ist eine Software, ein Code, eine Logik oder Routinen zum Codieren von Daten. In einer Ausführungsform ist die Codiermaschine 310 eine Menge von Anweisungen, die durch den Prozessor 204 ausführbar ist. In einer weiteren Ausführungsform ist die Codiermaschine 310 im Speicher 206 gespeichert und durch den Prozessor 204 zugänglich und ausführbar. In beiden Ausführungsformen ist die Codiermaschine 310 für die Zusammenarbeit und die Kommunikation mit dem Prozessor 204 und den anderen Komponenten der Computervorrichtung 200 einschließlich der anderen Komponenten der Datenreduktionseinheit 210 beschaffen.
  • In einer Ausführungsform codiert die Codiermaschine 310 die Datenblöcke, die einem Datenstrom zugeordnet sind. Der Datenstrom kann einer Datei zugeordnet sein, wobei die Datenblöcke des Datenstroms inhaltsdefinierte Datenabschnitte der Datei sind. In einigen Ausführungsformen empfängt die Codiermaschine 310 einen Datenstrom, der Datenblöcke enthält, und codiert jeden Datenblock des Datenstroms unter Verwendung einer in einem nichtflüchtigen Datenspeicher, wie z. B. dem Datenspeicher-Verwahrungsort 110, aber nicht auf ihn eingeschränkt, gespeicherten Bezugsdatenmenge.
  • Die Codiermaschine 310 kann in Zusammenarbeit mit einer oder mehreren anderen Komponenten der Computervorrichtung 200 eine Bezugsdatenmenge zum Codieren der Datenblöcke basierend auf einer Ähnlichkeit zwischen den Informationen, die den Kennungen der Bezugsdatenmenge zugeordnet sind, und denen der Datenblöcke bestimmen. Die Kennungsinformationen können Informationen, wie z. B. den Inhalt der Datenblöcke/der Bezugsdatenmenge, die Inhaltsversion (z. B. die Überarbeitungen), die Kalenderdaten, die den Modifikationen des Inhalts zugeordnet sind, die Datengröße usw., enthalten. In weiteren Ausführungsformen kann das Codieren der Datenblöcke eines Datenstroms das Anwenden eines Codierungsalgorithmus auf die Datenblöcke des Datenstroms enthalten. Ein nicht einschränkendes Beispiel eines Codierungsalgorithmus kann z. B. einen Deduplikations-/Kompressionsalgorithmus enthalten, ist aber nicht darauf eingeschränkt. In einer Ausführungsform kann die Codiermaschine 310 die codierten Datenblöcke des Datenstroms an den komprimierten Puffer 316 und/oder den Datenausgangspuffer 318 senden.
  • In anderen Ausführungsformen kann die Codiermaschine 310 eine Menge von Datenblöcken basierend auf einer Bezugsdatenmenge codieren, während sie gleichzeitig eine neue Bezugsdatenmenge erzeugt, die eine Teilmenge der Bezugsdatenblöcke und eine Menge von Datenblöcken, die einem Datenstrom zugeordnet ist, enthält. Die Teilmenge der Bezugsdatenblöcke der neuen Bezugsdatenmenge kann einer entsprechenden Bezugsdatenmenge zugeordnet sein, die gegenwärtig in einem Datenspeicher gespeichert ist, wie hier anderswo erörtert ist.
  • Das Kompressions-Hash-Tabellen-Modul 312 ist eine Software, ein Code, eine Logik oder Routinen zum Aktualisieren der Informationen, die den codierten Datenblöcken zugeordnet sind. In einer Ausführungsform ist das Kompressions-Hash-Tabellen-Modul 312 eine Menge von Anweisungen, die durch den Prozessor 204 ausführbar sind. In einer weiteren Ausführungsform ist das Kompressions-Hash-Tabellen-Modul 312 im Speicher 206 gespeichert und durch den Prozessor 204 zugänglich und ausführbar. In beiden Ausführungsformen ist das Kompressions-Hash-Tabellen-Modul 312 für die Zusammenarbeit und die Kommunikation mit dem Prozessor 204 und den anderen Komponenten der Computervorrichtung 200 einschließlich der anderen Komponenten der Datenreduktionseinheit 210 beschaffen.
  • In einigen Ausführungsformen kann das Kompressions-Hash-Tabellen-Modul 312 Originalspeicherbereichsanordnungen enthalten. Die Originalspeicherbereichsanordnungen können Bereiche der Speicher sein, die den Speichervorrichtungen, wie z. B. dem Flash-Speicher, zugeordnet sind, die Datenblöcke, Bezugsdatenblöcke und Bezugsdatenmengen innerhalb der Originalspeicherbereichsanordnungen speichern. Eine Originalspeicherbereichsanordnung kann eine Anordnung mit einer endlichen Größe sein. In weiteren Ausführungsformen speichert das Kompressions-Hash-Tabellen-Modul 312 die Daten unter Verwendung von Hash-Funktionen. Die Daten können die Datenblöcke eines ankommenden Datenstroms, die Bezugsdatenblöcke einer Bezugsdatenmenge usw. enthalten, sind aber nicht darauf eingeschränkt. Das Kompressions-Hash-Tabellen-Modul 312 verwendet in einer Ausführungsform einen Hash-Funktions-Algorithmus an den Daten zum Speichern der Daten in einer Hash-Tabelle. In anderen Ausführungsformen kann die Hash-Tabelle in einem Speicher, wie z. B. dem Datenspeicher-Verwahrungsort 110, aber nicht auf ihn eingeschränkt, gespeichert, wiedergewonnen und aufrechterhalten werden.
  • In einer Ausführungsform kann das Kompressions-Hash-Tabellen-Modul 312 einen Bezugsdatenzeiger (z. B. eine Kennung) für einen codierten Datenblock erzeugen, wie hier anderswo erörtert ist. Der Bezugsdatenzeiger, der dem codierten Datenblock zugeordnet ist, kann auf eine entsprechende Datenmenge verweisen, die in dem Datenspeicher gespeichert ist, der verwendet wurde, um den Datenblock zu codieren. In weiteren Ausführungsformen kann der (können die) Bezugsdatenzeiger durch eine oder mehrere andere Komponenten des Systems 100 aufrechterhalten werden. Der (die) Bezugsdatenzeiger, der (die) einem oder mehreren codierten Datenblöcken zugeordnet ist (sind), kann (können) später zum Verweisen auf einen entsprechenden Bezugsdatenblock und/oder eine entsprechende Bezugsdatenmenge im Speicher (z. B. dem Datenspeicher-Verwahrungsort 110) und/oder zum Wiedergewinnen eines entsprechenden Bezugsdatenblocks und/oder einer entsprechenden Bezugsdatenmenge von dem Speicher (z. B. dem Datenspeicher-Verwahrungsort 110) verwendet werden und zum Rekonstruieren jedes Datenblocks und/oder jeder Menge von Datenblöcken, der bzw. die einem empfangenen Datenstrom zugeordnet ist, unter Verwendung der Bezugsdatenmenge und/oder des Bezugsdatenblocks verwendet werden.
  • Das Bezugs-Hash-Tabellen-Modul 314 ist eine Software, ein Code, eine Logik oder Routinen zum Aktualisieren der Informationen, die den Bezugsdatenblöcken zugeordnet sind. In einer Ausführungsform ist das Bezugs-Hash-Tabellen-Modul 314 eine Menge von Anweisungen, die durch den Prozessor 204 ausführbar ist. In einer weiteren Ausführungsform ist das Bezugs-Hash-Tabellen-Modul 314 im Speicher 206 gespeichert und durch den Prozessor 204 zugänglich und ausführbar. In beiden Ausführungsformen ist das Bezugs-Hash-Tabellen-Modul 314 zur Zusammenarbeit und Kommunikation mit dem Prozessor 204 und den anderen Komponenten der Computervorrichtung 200 einschließlich der anderen Komponenten der Datenreduktionseinheit 210 ausgelegt.
  • In einigen Ausführungsformen aktualisiert das Bezugs-Hash-Tabellen-Modul 314 eine in dem Datenspeicher-Verwahrungsort 110 gespeicherte Tabelle der Datensätze, wobei die Tabelle der Datensätze die codierten Datenblöcke einer entsprechenden Bezugsdatenmenge zuordnet. In anderen Ausführungsformen aktualisiert die Bezugs-Hash-Tabelle 314 einen Zeiger, der einer Bezugsdatenmenge zugeordnet ist. Der Zeiger, der der Bezugsdatenmenge zugeordnet ist, kann Informationen, wie z. B. globale Informationen über eine Bezugsdatenmenge und eine Gesamtzahl der Datenblöcke, die auf die Bezugsdatenmenge zeigen, enthalten, ist aber nicht darauf eingeschränkt. Zusätzliche Funktionen des Bezugs-Hash-Tabellen-Moduls 314 sind überall in der vorliegenden Offenbarung erörtert.
  • Der komprimierte Puffer 316 ist eine Logik oder Routinen zum vorübergehenden Speichern eines komprimierten Datenstroms. In einer Ausführungsform ist der komprimierte Puffer 316 eine Menge von Anweisungen, die durch den Prozessor 204 ausführbar sind. In einer weiteren Ausführungsform ist der komprimierte Puffer 316 im Speicher 206 gespeichert und durch den Prozessor 204 zugänglich und ausführbar. In beiden Ausführungsformen ist der komprimierte Puffer 316 zur Zusammenarbeit und Kommunikation mit dem Prozessor 204 und den anderen Komponenten der Computervorrichtung 200 einschließlich der anderen Komponenten der Datenreduktionseinheit 210 ausgelegt.
  • In einer Ausführungsform gewinnt das Kompressions-Hash-Tabellen-Modul 312 die codierten (z. B. komprimierten/reduzierten) Bezugsdatenblöcke für die weitere Verarbeitung der codierten Bezugsdatenblöcke von der Codiermaschine 310 wieder. In einigen Ausführungsformen kann die Codiermaschine 310 die codierten Bezugsdatenblöcke für die vorübergehende Speicherung an den komprimierten Puffer 316 senden. Das vorübergehende Speichern der codierten Bezugsdatenblöcke in dem komprimierten Puffer 316 stellt die Systemstabilität zwischen dem Empfangen der codierten Bezugsdatenblöcke und der weiteren Verarbeitung der codierten Bezugsdatenblöcke bereit. In einigen Ausführungsformen codiert die Codiermaschine 310 eine Bezugsdatenmenge, wobei sie die codierte Bezugsdatenmenge an den komprimierten Puffer 316 sendet. In anderen Ausführungsformen codiert die Codiermaschine 310 einen oder mehrere Datenblöcke, die einem Datenstrom zugeordnet sind, wobei sie die codierten Datenblöcke zur vorübergehenden Speicherung an den komprimierten Puffer 316 sendet. Der komprimierte Puffer 316 kann eine Warteschlange sein, die einen oder mehrere Bezugsdatenblöcke, Bezugsdatenmengen und/oder Datenblöcke in der Warteschlange für die Verarbeitung durch eine oder mehrere Komponenten der Computervorrichtung 200 enthalten kann.
  • Der Datenausgangspuffer 318 ist eine Logik oder Routinen zum vorübergehenden Speichern eines verarbeiteten Datenstroms. In einer Ausführungsform ist der Datenausgangspuffer 318 eine Menge von Anweisungen, die durch den Prozessor 204 ausführbar sind. In einer weiteren Ausführungsform ist der Datenausgangspuffer 318 im Speicher 206 gespeichert und durch den Prozessor 204 zugänglich und ausführbar. In beiden Ausführungsformen ist der Datenausgangspuffer 318 zur Zusammenarbeit und Kommunikation mit dem Prozessor 204 und den anderen Komponenten der Computervorrichtung 200 einschließlich der anderen Komponenten der Datenreduktionseinheit 210 ausgelegt.
  • In einer Ausführungsform empfangen das Kompressions-Hash-Tabellen-Modul 312 und/oder das Bezugs-Hash-Tabellen-Modul 314 einen codierten (z. B. komprimierten/reduzierten) Datenstrom von der Codiermaschine 310. In einigen Ausführungsformen kann die Codiermaschine 310 den codierten Datenstrom zur vorübergehenden Speicherung an den Datenausgangspuffer 318 senden. Der codierte Datenstrom kann einen oder mehrere Bezugsdatenblöcke, eine Bezugsdatenmenge(n) und/oder aktuelle Datenblöcke enthalten, ist aber nicht darauf eingeschränkt. Weiterhin liefert das Speichern eines codierten Datenstroms in dem Datenausgangspuffer 318 die Systemaustauschstabilität zwischen dem Empfangen des codierten Datenstroms und der weiteren Verarbeitung des codierten Datenstroms. In einigen Ausführungsformen kann der Datenausgangspuffer 318 ein Warteschlangenplan für die weitere Verarbeitung des einen oder der mehreren Bezugsdatenblöcke, der Bezugsdatenmenge(n) und/oder des Datenblocks (der Datenblöcke) durch eine oder mehrere Komponenten der Computervorrichtung 200 sein.
  • 4 ist ein Ablaufplan eines beispielhaften Verfahrens 400 zum Erzeugen einer Bezugsdatenmenge. Das Verfahren 400 kann durch das Wiedergewinnen 402 der Bezugsdatenblöcke aus einem nichtflüchtigen Datenspeicher beginnen. In einigen Ausführungsformen empfängt das Datenempfangsmodul 208 die Bezugsdatenblöcke von nichtflüchtigen Daten (z. B. einem Flash-Speicher, einem Datenspeicher-Verwahrungsort 110/220).
  • Als Nächstes kann das Verfahren 400 durch das Ansammeln 404 der Bezugsdatenblöcke in einer Menge basierend auf einem Kriterium weitergehen. In einigen Ausführungsformen kann die Datenreduktionseinheit 210 die Bezugsdatenblöcke von dem Datenempfangsmodul 208 empfangen und daher ihre Funktionen ausführen. Ein Kriterium kann einen Grad der Ähnlichkeit zwischen den Bezugsdatenblöcken enthalten, ist aber nicht darauf eingeschränkt. Die Bezugsdatenblöcke können z. B. einer Datei zugeordnet sein, wobei die Datei in inhaltsdefinierte Datenabschnitte unterteilt ist und jeder Bezugsblock der Bezugsdatenblöcke einem inhaltsdefinierten Datenabschnitt zugeordnet ist. In einer Ausführungsform teilen die Bezugsdatenblöcke einen Grad der Ähnlichkeit basierend auf den inhaltsdefinierten Datenabschnitten der Datei zwischen den entsprechenden Bezugsdatenblöcken.
  • In einer Ausführungsform kann ein Grad der Ähnlichkeit einer Kennung, wie z. B. den Ähnlichkeits-Hashes (z. B. den digitalen Signaturen und/oder Fingerabdrücken), die erzeugt und jedem Bezugsdatenblock zugewiesen werden, aber nicht auf sie eingeschränkt, zugeordnet sein. Ein Ähnlichkeits-Hash kann einen Hash-Wert enthalten, der eine aus einer längeren Kette von Daten erzeugte kleine Zahl sein kann. Die Datengröße des Hash-Werts kann signifikant kleiner als die des Bezugsdatenblocks sein. In einigen Ausführungsformen werden die Ähnlichkeits-Hashes durch einen Algorithmus in einer derartigen Weise erzeugt, dass es unwahrscheinlich ist, dass zwei Bezugsdatenblöcke einen exakt übereinstimmenden Hash-Wert aufweisen. Außerdem können die Kennungen, die den Bezugsdatenblöcken zugeordnet sind, in einer Tabelle einer Datenbank, z. B. in dem Datenspeicher-Verwahrungsort 110, gespeichert sein.
  • In weiteren Ausführungsformen kann die Signaturfingerabdruck-Berechnungsmaschine 306 in Zusammenarbeit mit der Abgleichmaschine 308 einen oder mehrere Bezugsdatenblöcke basierend auf dem Kriterium durch das Abfragen eines Datenspeichers und das Vergleichen der Ähnlichkeits-Hashes, die jedem der Bezugsdatenblöcke zugeordnet sind, um zu bestimmen, ob eine Kopie der entsprechenden Ähnlichkeits-Hashes bereits in dem Datenspeicher vorhanden ist, ansammeln. In einigen Ausführungsformen kann die Abgleichmaschine 308 einen oder mehrere Bezugsdatenblöcke, die einen ähnlichen übereinstimmenden Ähnlichkeits-Hash teilen, ansammeln. Einem Dokument können z. B. zwei Bezugsdatenblöcke (z. B. ein Bezugsdatenblock A und ein Bezugsdatenblock B) zugeordnet sein, wobei jedoch der Bezugsdatenblock A eine frühere Version des Dokuments widerspiegelt; während der Bezugsdatenblock B eine spätere Version des Dokuments mit Modifikationen widerspiegelt. Weil der Bezugsdatenblock A und der Bezugsdatenblock B einen Grad der Ähnlichkeit des Inhalts, der dem Dokument zugeordnet ist, teilen, können der Bezugsdatenblock A und der Bezugsdatenblock B in einer Menge angesammelt werden. In einigen Ausführungsformen können die Operationen im Schritt 404 durch die Signaturfingerabdruck-Berechnungsmaschine 306 und die Abgleichmaschine 308 in Zusammenarbeit mit einer oder mehreren anderen Entitäten des Systems 100 ausgeführt werden, wie hier anderswo erörtert ist.
  • Als Nächstes kann das Verfahren 400 durch das Erzeugen 406 einer Bezugsdatenmenge basierend auf einer Menge weitergehen. Eine Menge kann Bezugsdatenblöcke, die einen Grad der Ähnlichkeit zwischen den Ähnlichkeits-Hashes von einem oder mehreren Bezugsdatenblöcken teilen, enthalten, ist aber nicht darauf eingeschränkt. In einer Ausführungsform kann die Codiermaschine 310 die angesammelten Bezugsdatenblöcke empfangen und basierend auf den angesammelten Bezugsdatenblöcken eine Bezugsdatenmenge erzeugen. Die Bezugsdatenblöcke der Bezugsdatenmenge dienen durch das Codieren der künftigen ankommenden Datenblöcke unter Verwendung des Modells, das die Bezugsdatenmenge umfasst, als ein Modell für künftige ankommende Datenblöcke. Diese modellbasierte Herangehensweise kann zu einer Verringerung des Gesamtvolumens führen, das z. B. in den Speichervorrichtungen 112a bis 112n des Datenspeicher-Verwahrungsorts 110 gespeichert ist. In einigen Ausführungsformen können die Operationen im Schritt 406 durch die Signaturfingerabdruck-Berechnungsmaschine 306 und die Abgleichmaschine 308 in Zusammenarbeit mit einer oder mehreren anderen Entitäten des Systems 100 ausgeführt werden, wie hier anderswo erörtert ist.
  • Das Verfahren 400 kann dann durch das Speichern 408 der Bezugsdatenmenge in einem nichtflüchtigen Datenspeicher (z. B. einem Flash-Speicher, dem Datenspeicher-Verwahrungsort 110/220) weitergehen. In einigen Ausführungsformen kann das oben erörterte in Bezug auf einen Datenblock eines ankommenden Datenstroms angewendet werden, was im Folgenden weiter erörtert wird. In einigen Ausführungsformen können die Operationen im Schritt 408 durch die Codiermaschine 310 in Zusammenarbeit mit dem Datenausgangspuffer 318 und/oder einer oder mehreren anderen Entitäten des Systems 100 ausgeführt werden, was hier anderswo erörtert ist.
  • 5 ist ein Ablaufplan eines beispielhaften Verfahrens 500 zum Ansammeln von Datenblöcken in einer Bezugsdatenmenge. Das Verfahren 500 kann durch das Empfangen 502 eines Datenstroms, der eine Menge von Datenblöcken enthält, beginnen. In einigen Ausführungsformen empfängt das Datenempfangsmodul 208 einen Datenstrom von der Client-Vorrichtung 106, wobei es den Datenstrom an den Dateneingangspuffer 304 sendet, um dessen Operationen auszuführen. Der Datenstrom, der die Menge von Datenblöcken enthält, kann einem Dokument, E-Mails, Anwendungen (z. B. Medienanwendungen, Spielanwendungen, Dokumentenbearbeitungsanwendungen usw.), die durch die Client-Vorrichtung 102 ausgeführt und wiedergegeben werden, usw. zugeordnet sein, ist aber nicht darauf eingeschränkt. Der Datenstrom kann z. B. einer Datei zugeordnet sein, wobei die Datenblöcke des Datenstroms inhaltsdefinierte Datenabschnitte der Datei sind. In einigen Ausführungsformen kann die im Schritt 502 ausgeführte Operation durch das Datenempfangsmodul 208 in Zusammenarbeit mit einer oder mehreren anderen Entitäten des Systems 100 ausgeführt werden.
  • Als Nächstes geht das Verfahren 500 durch das Codieren 504 jedes Datenblocks der Menge von Datenblöcken weiter. In einigen Ausführungsformen codiert die Codiermaschine 310 in Zusammenarbeit mit der Signaturfingerabdruck-Berechnungsmaschine 306 und/oder der Abgleichmaschine 308 jeden Datenblock der Menge von Datenblöcken unter Verwendung einer in einem nichtflüchtigen Datenspeicher, wie z. B. dem Datenspeicher-Verwahrungsort 110, aber nicht auf ihn eingeschränkt, gespeicherten Bezugsdatenmenge. Ferner kann das Codieren jedes Datenblocks der Menge von Datenblöcken einen Codierungsalgorithmus enthalten. Ein nichteinschränkendes Beispiel eines Codierungsalgorithmus kann einen proprietären Codierungsalgorithmus enthalten, der die Deduplizierung/Komprimierung implementiert.
  • Die Codiermaschine 310 kann z. B. den Codierungsalgorithmus verwenden, um die Ähnlichkeiten zwischen jedem Datenblock der Menge von Datenblöcken, die dem Datenstrom zugeordnet sind, und der Bezugsdatenmenge, die in einem Datenspeicher (z. B. dem Datenspeicher-Verwahrungsort 110) gespeichert ist, zu identifizieren. Die Ähnlichkeiten können einen Grad der Ähnlichkeit zwischen dem Dateninhalt (z. B. die inhaltsdefinierten Datenabschnitte jedes Datenblocks) und/oder den Kennungsinformationen, die jedem Datenblock der Menge von Datenblöcken und dem Dateninhalt zugeordnet sind, und/oder den Kennungsinformationen, die der Bezugsdatenmenge zugeordnet sind, enthalten, sind aber nicht darauf eingeschränkt.
  • In einigen Ausführungsformen können die Signaturfingerabdruck-Berechnungsmaschine 306 und/oder die Abgleichmaschine 308 einen ähnlichkeitsbasierten Algorithmus verwenden, um die Ähnlichkeits-Hashes (z. B. die Schemata) zu detektieren, die die Eigenschaft aufweisen, dass ähnliche Datenblöcke und Bezugsdatenmengen ähnliche Ähnlichkeits-Hashes (z. B. Schemata) aufweisen. Falls die Menge von Datenblöcken basierend auf den entsprechenden Ähnlichkeits-Hashes (z. B. den Schemata) zu einer vorhandenen Bezugsdatenmenge, die im Speicher gespeichert ist, ähnlich ist, kann sie deshalb bezüglich der vorhandenen Bezugsdatenmenge codiert werden. Die Codiermaschine 310 kann dann die codierten Datenblöcke der Menge von Datenblöcken an den komprimierten Puffer 316 und/oder den Datenausgangspuffer 318 senden. In einigen Ausführungsformen kann die im Schritt 504 ausgeführte Operation durch die Codiermaschine 310 in Zusammenarbeit mit einer oder mehreren anderen Entitäten der Datenreduktionseinheit 210 und/oder des Systems 100 ausgeführt werden.
  • Das Verfahren kann dann durch das Aktualisieren 506 einer Tabelle der Datensätze, die jedem codierten Datenblock der Menge von Datenblöcken eine entsprechende Bezugsdatenmenge zuordnet, weitergehen. In einer Ausführungsform kann die Codiermaschine 310 die codierten Datenblöcke der Menge von Datenblöcken an das Kompressions-Hash-Tabellen-Modul 312 und/oder das Bezugs-Hash-Tabellen-Modul 314 senden, um deren Operationen auszuführen. Das Kompressions-Hash-Tabellen-Modul 312 und/oder das Bezugs-Hash-Tabellen-Modul 314 können die in dem Datenspeicher-Verwahrungsort 110 gespeicherte Tabelle der Datensätze aktualisieren, wobei die Tabelle der Datensätze jeden codierten Datenblock einer entsprechenden Bezugsdatenmenge, die im Speicher (d. h., im Datenspeicher-Verwahrungsort 110) gespeichert ist, zuordnet.
  • In einer Ausführungsform kann das Kompressions-Hash-Tabellen-Modul 312 einen Bezugsdatenzeiger für den codierten Datenblock erzeugen. Der Bezugsdatenzeiger, der dem codierten Datenblock zugeordnet ist, kann auf eine entsprechende Bezugsdatenmenge, die im Datenspeicher gespeichert ist und die verwendet wurde, um den Datenblock zu codieren, verweisen. In einigen Ausführungsformen kann ein Bezugsdatenzeiger zu einer entsprechenden Kennung einer Bezugsdatenmenge, die in einer Tabelle der Datensätze in einem Datenspeicher gespeichert ist, verknüpfen. In weiteren Ausführungsformen können ein oder mehrere codierte Datenblöcke denselben Bezugsdatenzeiger gemeinsam benutzen, der auf eine entsprechende Bezugsdatenmenge verweist, die verwendet wurde, um den einen oder die mehreren codierten Datenblöcke der Menge von Datenblöcken zu codieren. Die im Schritt 506 ausgeführte Operation kann durch die Codiermaschine 310 und/oder das Kompressions-Hash-Tabellen-Modul 312 und/oder das Bezugs-Hash-Tabellen-Modul 314 in Zusammenarbeit mit einer oder mehreren anderen Entitäten der Datenreduktionseinheit 210 und/oder des Systems 100 ausgeführt werden.
  • Das Verfahren 500 kann dann durch das Speichern 508 der codierten Menge von Datenblöcken in einem nichtflüchtigen Datenspeicher (z. B. einem Flash-Speicher, dem Datenspeicher-Verwahrungsort 110/220) weitergehen. Die gespeicherte codierte Menge von Datenblöcken kann in einigen Ausführungsformen eine reduzierte Version (z. B. mit einer kleineren Datengröße) der Bezugsdatenmenge sein, die verwendet wird, um die Datenblöcke der Menge zu codieren. Eine reduzierte Version eines Datenblocks kann z. B. einen Kopf (z. B. einen Bezugszeiger) und einen komprimierten/deduplizierten Dateninhalt, der dem Datenblock zugeordnet ist, enthalten. In einigen Ausführungsformen können die Operationen im Schritt 508 durch die Codiermaschine 310 in Zusammenarbeit mit dem Datenausgangspuffer 318 und/oder einer oder mehreren anderen Entitäten des Systems 100 ausgeführt werden, wie hier anderswo erörtert ist.
  • Die 6A6C sind Ablaufpläne eines beispielhaften Verfahrens zum Ansammeln von Bezugsblöcken in einer Bezugsdatenmenge, wenn sich ein Datenstrom ändert. In 6A kann das Verfahren 600 durch das Empfangen 602 eines Datenstroms, der eine neue Menge von Datenblöcken enthält, beginnen. Eine neue Menge von Datenblöcken kann Inhaltsdaten, wie z. B. ein Dokument, einen E-Mail-Anhang und Informationen, die Anwendungen zugeordnet sind, die durch die Client-Vorrichtungen (die Client-Vorrichtungen 102) ausgeführt und wiedergegeben werden, enthalten, ist aber nicht darauf eingeschränkt. In einer Ausführungsform gibt die neue Menge von Datenblöcken Daten an, die vorher nicht gespeichert und/oder einer aktuellen Bezugsdatenmenge, die in dem Datenspeicher-Verwahrungsort 110 und/oder 220 gespeichert ist, zugeordnet worden sind. In einigen Ausführungsformen kann die im Schritt 602 ausgeführte Operation durch das Datenempfangsmodul 208 in Zusammenarbeit mit dem Dateneingangspuffer 304 und/oder einer oder mehreren anderen Entitäten der Datenreduktionseinheit 210 ausgeführt werden.
  • Als Nächstes kann das Verfahren 600 zum Ausführen 604 einer Analyse an der neuen Menge von Datenblöcken, die dem Datenstrom zugeordnet ist, weitergehen. In einigen Ausführungsformen kann die Analyse durch die Signaturfingerabdruck-Berechnungsmaschine 306 ausgeführt werden. Das Datenempfangsmodul 208 kann z. B. die neue Menge von Datenblöcken an die Signaturfingerabdruck-Berechnungsmaschine 306 senden. Die Signaturfingerabdruck-Berechnungsmaschine 306 kann eine Analyse an dem Inhalt der neuen Menge von Datenblöcken in Reaktion auf das Empfangen des Datenstroms ausführen. Überdies kann die Analyse einen oder mehrere Algorithmen zum Bestimmen eines Inhalts, der den Inhalt der neuen Menge von Datenblöcken in einer Zusammenfassung widerspiegelt, und/oder Erzeugen von Kennungen (z. B. Fingerabdrücken, Hash-Werten) für jeden Datenblock der neuen Menge von Datenblöcken enthalten. Ein nicht einschränkendes Beispiel eines Algorithmus, der den Inhalt von neuen Mengen von Datenblöcken bestimmt, kann einen Algorithmus enthalten, der Sammlungen von Blöcken verwendet, die zwischen entsprechenden Fingerabdrücken wenigstens eine Überschneidung aufweisen, ist aber nicht darauf eingeschränkt. In einer weiteren Ausführungsform kann ein Algorithmus, der den Inhalt neuer Mengen von Datenblöcken bestimmt, die statistische Clusterbildung der Fingerabdrücke der ankommenden Datenblöcke und das Identifizieren eines repräsentativen Datenblocks aus jedem Cluster enthalten.
  • In weiteren Ausführungsformen kann die Fingerabdruck-Berechnungsmaschine 306 eine allgemeine Kennung (z. B. einen allgemeinen Fingerabdruck oder eine allgemeine digitale Signatur) der neuen Menge von Datenblöcken zuweisen. Einer allgemeinen Kennung kann ein Hash-Wert zugeordnet werden, der unter Verwendung eines Hash-Algorithmus erzeugt werden kann. Die Fingerabdruck-Berechnungsmaschine 306 detektiert einen duplizierten Datenabschnitt der Menge von neuen Datenblöcken, sammelt die Duplikatdaten an und weist den angesammelten Duplikatdaten eine allgemeine Kennung in Verbindung mit einem Hash-Wert zu. In einigen Ausführungsformen kann der Hash-Wert ein digitaler Fingerabdruck oder eine digitale Signatur sein, der bzw. die jeden Datenblock der neuen Menge von Datenblöcken exklusiv identifiziert und/oder die Menge (d. h., die neue Menge von Datenblöcken) exklusiv identifiziert. In weiteren Ausführungsformen können die Kennungen, die einem Datenstrom, der die neue Menge von Datenblöcken enthält, zugeordnet sind, in einer Tabelle einer Datenbank, z. B. im Datenspeicher-Verwahrungsort 110, gespeichert sein.
  • Weiterhin können die Ähnlichkeits-Hashes durch die Fingerabdruck-Berechnungsmaschine 306 in Zusammenarbeit mit der Abgleichmaschine 308 zum Analysieren der neuen Menge von Datenblöcken bezüglich einer Redundanz verwendet werden. In einer Ausführungsform wird bestimmt, dass zwei oder mehr Datenblöcke ähnlich sind, falls die Ähnlichkeits-Hashes, die den zwei oder mehr Datenblöcken zugeordnet sind, einem vorgegebenen Bereich (z. B. 0 bis 1) entsprechen. Ein Ähnlichkeits-Hash kann z. B. eine Zahl zwischen 0 und 1 sein, so dass, wenn sich die Ähnlichkeit nah bei 1 befindet, es wahrscheinlich ist, dass der Inhalt zwischen den zwei oder mehr Datenblöcken etwa derselbe ist. In weiteren Ausführungsformen kann ein Ähnlichkeits-Hash ein kleines Schema eines Datenblocks sein, der der neuen Menge von Datenblöcken zugeordnet ist. Ferner kann eine Analyse der neuen Menge von Datenblöcken einen ähnlichkeitsbasierten Abgleichalgorithmus enthalten, der durch die Fingerabdruck-Berechnungsmaschine 306 und/oder die Abgleichmaschine 308 ausgeführt wird und der das Parsen des Datenspeicher-Verwahrungsorts 110 enthält. Das Parsen des Datenspeicher-Verwahrungsorts 110 kann das Vergleichen der Ähnlichkeits-Hashes der neuen Menge von Datenblöcken mit den Ähnlichkeits-Hashes, die einer oder mehreren Bezugsdatenmengen, die in dem Datenspeicher-Verwahrungsort 110 gespeichert sind, zugeordnet sind, enthalten. In einigen Ausführungsformen können die Operationen im Schritt 604 durch die Signaturfingerabdruck-Berechnungsmaschine 306 in Zusammenarbeit mit einer oder mehreren anderen Entitäten der Datenreduktionseinheit 210 ausgeführt werden.
  • Das Verfahren 600 kann dann durch das Identifizieren 606 weitergehen, ob zwischen der neuen Menge von Datenblöcken und wenigstens einer oder mehreren Bezugsdatenmengen eine Ähnlichkeit vorhanden ist. In einigen Ausführungsformen kann die Abgleichmaschine 308 in Zusammenarbeit mit der Signaturfingerabdruck-Berechnungsmaschine 306 basierend auf der Analyse identifizieren, ob zwischen der neuen Menge von Datenblöcken und einer oder mehreren Bezugsdatenmengen, die in einem nichtflüchtigen Datenspeicher gespeichert sind, eine Ähnlichkeit vorhanden ist. Die Abgleichmaschine 308 kann z. B. die Ähnlichkeits-Hashes einer oder mehrerer Bezugsdatenmengen und/oder eines oder mehrerer Segmente der Bezugsdatenmengen, die in einem Datenspeicher, wie z. B. dem Datenspeicher-Verwahrungsort 110, gespeichert sind, mit den Ähnlichkeits-Hashes, die der neuen Menge von Datenblöcken zugeordnet sind, vergleichen. In einigen Ausführungsformen können die Operationen im Schritt 606 durch die Abgleichmaschine 308 in Zusammenarbeit mit einer oder mehreren anderen Entitäten der Datenreduktionseinheit 210 ausgeführt werden. Das Verfahren 600 kann dann zu 608 weitergehen und basierend auf den in 606 ausgeführten Operationen bestimmen, ob eine Ähnlichkeit vorhanden ist.
  • Falls eine Ähnlichkeit vorhanden ist, kann das Verfahren 600 zu 610 weitergehen. Die Abgleichmaschine 308 kann z. B. bestimmen, dass die Ähnlichkeits-Hashes der neuen Menge von Datenblöcken einen Grad der Ähnlichkeit mit einer oder mehreren Bezugsdatenmengen, die in einem Datenspeicher (z. B. dem Datenspeicher-Verwahrungsort 110) gespeichert sind, teilen. Als Nächstes kann das Verfahren 600 jeden Datenblock der neuen Menge von Datenblöcken unter Verwendung einer entsprechenden Bezugsdatenmenge, die in einem Datenspeicher (z. B. einem Flash-Speicher, dem Datenspeicher-Verwahrungsort 110/220) gespeichert ist, basierend auf dem Ähnlichkeits-Hash codieren 610.
  • Die Codiermaschine 310 kann z. B. in Zusammenarbeit mit einer oder mehreren anderen Komponenten von 106 basierend auf den Ähnlichkeits-Hashes bestimmen, dass ein Datenblock der neuen Menge eine Ähnlichkeits-Ähnlichkeit mit einem gespeicherten Datenblock einer Bezugsdatenmenge im Speicher aufweist. Der Ähnlichkeits-Hash kann ein Schema des Datenblocks und ein Schema des Bezugsdatenblocks repräsentieren, wobei basierend auf einem Grad der Ähnlichkeit zwischen den Schemata bestimmt werden kann, ob der Datenblock der neuen Datenmenge und ein Bezugsdatenblock im Speicher im Inhalt ähnlich sind. In einer Ausführungsform sendet die Abgleichmaschine 308 die Informationen, die ähnliche Übereinstimmungen zwischen den Ähnlichkeits-Hashes der neuen Menge von Datenblöcken und den Ähnlichkeits-Hashes einer oder mehrerer Bezugsdatenmengen angeben, an die Codiermaschine 310.
  • Die Codiermaschine 310 kann jeden Datenblock der neuen Menge von Datenblöcken basierend auf den von der Abgleichmaschine 308 empfangenen Informationen codieren 610. In einigen Ausführungsformen kann die neue Menge von Datenblöcken in Datenabschnitte von Datenblöcken segmentiert werden, in denen die Datenabschnitte von Datenblöcken exklusiv codiert werden können. In einer Ausführungsform kann die Codiermaschine 310 jeden Datenblock der neuen Menge von Datenblöcken unter Verwendung eines Codierungsalgorithmus (z. B. eines Deduplizierungs-/Kompressionsalgorithmus) codieren. Ein Codierungsalgorithmus kann eine Deltacodierung, eine Ähnlichkeitscodierung und eine Delta-Selbstkomprimierung enthalten, ist aber nicht darauf eingeschränkt.
  • Überdies kann das Codieren eines Datenblocks, der einen Grad der Ähnlichkeit mit einer Bezugsdatenmenge teilt, enthalten, dass die Codiermaschine 310 einen Zeiger für jeden entsprechenden Datenblock der neuen Menge von Datenblöcken erzeugt und zuweist. Der Zeiger kann durch die Speichersteuermaschine 108 in der Zukunft verwendet werden, um auf einen entsprechenden Datenblock und/oder eine entsprechende Menge von Datenblöcken im Speicher (z. B. im Datenspeicher-Verwahrungsort 110/220) zu verweisen und/oder einen entsprechenden Datenblock und/oder eine entsprechende Menge von Datenblöcken von dem Speicher (z. B. dem Datenspeicher-Verwahrungsort 110/220) für die Regeneration der Datenblöcke wiederzugewinnen. In einer Ausführungsform können ein oder mehrere Datenblöcke denselben Zeiger gemeinsam benutzen. Ein oder mehrere Datenblöcke der neuen Menge von Datenblöcken können z. B. auf dieselbe Bezugsdatenmenge, die in dem Datenspeicher-Verwahrungsort 110/220 gespeichert ist, verweisen, wobei die Codiermaschine 308 eine komprimierte Version des einen oder der mehreren Datenblöcke, die einen Zeiger (z. B. den Bezugsdatenzeiger), der auf dieselbe Bezugsdatenmenge verweist, enthält, speichert, anstatt den einen oder die mehreren Datenblöcke unabhängig in dem Datenspeicher-Verwahrungsort 110/220 zu speichern. In einer weiteren Ausführungsform kann die Codiermaschine 310 ein Delta, das den Unterschied zwischen der Bezugsdatenmenge, von der die neue Menge von Datenblöcken codiert wird, zeigt, speichern, falls die neue Menge von Datenblöcken zu einer vorhandenen Bezugsdatenmenge ähnlich ist. Die Operationen im Schritt 610 können durch die Codiermaschine 306 in Zusammenarbeit mit einem komprimierten Puffer 316 und einer oder mehreren anderen Entitäten der Datenreduktionseinheit 210 ausgeführt werden.
  • Das Verfahren 600 kann dann durch das Aktualisieren 612 einer Tabelle der Datensätze, die jeden codierten Datenblock der neuen Menge von Datenblöcken einem entsprechenden Bezugsdatenblock, der einer Bezugsdatenmenge zugeordnet ist, zuordnet, weitergehen. In einer Ausführungsform empfängt das Kompressions-Hash-Tabellen-Modul 312 die codierten Datenblöcke, wobei es einen oder mehrere Zeiger jedes codierten Datenblocks in einer Tabelle der Datensätze, die in einem Datenspeicher (z. B. dem Datenspeicher-Verwahrungsort 110/220) gespeichert ist, aktualisiert. In anderen Ausführungsformen empfängt das Kompressions-Hash-Tabellen-Modul 312 eine codierte Menge von Datenblöcken, wobei es einen Zeiger, der der codierten Menge von Datenblöcken in der Tabelle der Datensätze, die in einem Datenspeicher (z. B. dem Datenspeicher-Verwahrungsort 110/220) gespeichert ist, zugeordnet ist, aktualisiert. Der (die) Zeiger, der (die) einem oder mehreren codierten Datenblöcken zugeordnet ist (sind), kann (können) später verwendet werden, um auf einen entsprechenden Bezugsdatenblock und/oder eine entsprechende Bezugsdatenmenge im Speicher (z. B. im Datenspeicher-Verwahrungsort 110/220) zu verweisen und/oder einen entsprechenden Bezugsdatenblock und/oder eine entsprechende Bezugsdatenmenge von dem Speicher (z. B. dem Datenspeicher-Verwahrungsort 110/220) wiederzugewinnen, und zum Rekonstruieren jedes Datenblocks und/oder jeder Menge von Datenblöcken, die dem empfangenen Datenstrom zugeordnet sind, verwendet werden.
  • Als Nächstes geht das Verfahren 600 vom Block 612 nach 6A durch das Inkrementieren 622 einer Verwendungszählungsvariable einer Bezugsdatenmenge basierend auf dem Codieren jedes Datenblocks der neuen Menge von Datenblöcken unter Verwendung der Bezugsdatenmenge zum Block 622 nach 6C weiter. In einer Ausführungsform empfängt das Bezugs-Hash-Tabellen-Modul 314 von der Codiermaschine 310 einen Indikator, das eine oder mehrere Bezugsdatenmengen verwendet worden sind, um einen oder mehrere Datenblöcke und/oder Mengen von Datenblöcken, die einem Datenstrom, der die neue Menge von Datenblöcken enthält, zugeordnet sind, zu codieren. Das Bezugs-Hash-Tabellen-Modul 314 kann dann jeden Datenblock und/oder jede Menge von Datenblöcken in einer entsprechenden Bezugsdatenmenge aufzeichnen und eine Verwendungszählungsvariable der entsprechenden Bezugsdatenmenge inkrementieren. Die Verwendungszählungsvariable kann eine Anzahl von Datenblöcken und/oder eine Menge von Datenblöcken angeben, die auf eine spezielle Bezugsdatenmenge im Speicher verweisen (z. B. unter Verwendung des Zeigers auf die Bezugsdatenmenge im Speicher zeigen). In einigen Ausführungsformen können die Operationen im Schritt 622 durch die Codiermaschine 306 in Zusammenarbeit mit dem Bezugs-Hash-Tabellen-Modul 314, dem Aktualisierungsmodul 218 und/oder einer oder mehreren anderen Entitäten der Datenreduktionseinheit 210 ausgeführt werden.
  • Das Verfahren 600 kann durch das Analysieren 624 basierend auf einer Verwendungszählungsvariable, die der Bezugsdatenmenge zugeordnet ist, ob eine Bezugsdatenmenge der Ausmusterung entspricht, weitergehen. In einer Ausführungsform kann das Bezugs-Hash-Tabellen-Modul 314 bestimmen, dass während einer vorgegebenen Dauer nicht durch einen oder mehrere Datenblöcke und/oder Mengen von Datenblöcken auf eine Bezugsdatenmenge verwiesen worden ist. Falls ein Bezugsdatenblock einer Bezugsdatenmenge während einer vorgegebenen Dauer nicht länger für die Regeneration eines Datenblocks abgerufen wird, wird eine Verwendungszählungsvariable, die der Bezugsdatenmenge zugeordnet ist, modifiziert (d. h., dekrementiert). Die vorgegebene Dauer kann einen Schwellenwert enthalten, der durch Vorgabe zugewiesen ist und/oder durch den Manager definiert wird. In einer Ausführungsform wendet das Bezugs-Hash-Tabellen-Modul 314 einen Verwendungszählungs-Ausmusterungsalgorithmus (z. B. einen Datenmüllsammelalgorithmus) auf jede im Speicher gespeicherte Bezugsdatenmenge an. Der Verwendungszählungs-Ausmusterungsalgorithmus kann eine Zählung einer Verwendungszählungsvariable, die einer Bezugsdatenmenge zugeordnet ist, automatisch dekrementieren und/oder inkrementieren, nachdem eine vorgegebene Dauer erfüllt ist und während der vorgegebenen Dauer nicht durch einen oder mehrere Datenblöcke oder Mengen von Datenblöcken, die einem Datenstrom zugeordnet sind, auf die Bezugsdatenmenge verwiesen worden ist. In anderen Ausführungsformen kann der Verwendungszählungs-Ausmusterungsalgorithmus eine Zählung, die der Verwendungszählungsvariable einer Bezugsdatenmenge zugeordnet ist, in Reaktion darauf, dass die Bezugsdatenmenge einem Datenabruf zugeordnet ist, inkrementieren. Ein Datenabruf kann eine Anforderung durch eine Client-Vorrichtung 102 zum Wiedergeben eines Dokuments angeben, das erfordern kann, dass ein oder mehrere Datenblöcke rekonstruiert werden. Die Operationen im Schritt 624 können optional sein und durch das Bezugs-Hash-Tabellen-Modul 314 in Zusammenarbeit mit der Codiermaschine 306 und einer oder mehreren anderen Entitäten der Datenreduktionseinheit 210 ausgeführt werden.
  • Das Verfahren 600 kann dann zu 626 weitergehen und bestimmen, ob eine entsprechende Bezugsdatenmenge der Ausmusterung entspricht. Falls eine Bezugsdatenmenge der Ausmusterung entspricht, kann das Verfahren 600 durch das Ausmustern 628 der Bezugsdatenmenge, die basierend auf der Verwendungszählungsvariable der Ausmusterung entspricht, weitergehen. In einer Ausführungsform bestimmt das Bezugs-Hash-Tabellen-Modul 314, das die Bezugsdatenmenge der Ausmusterung entspricht, basierend auf der Verwendungszählungsvariable, die bis zu einem speziellen Schwellenwert dekrementiert wird. In einigen Ausführungsformen kann eine Bezugsdatenmenge der Ausmusterung entsprechen, wenn eine Zählung der Verwendungszählungsvariable der Bezugsdatenmenge auf null dekrementiert wird. Eine Verwendungszählungsvariable von null kann angeben, dass sich keine Datenblöcke oder Mengen von Datenblöcken auf diese entsprechende Bezugsdatenmenge stützen und/oder beziehen. Es stützen sich z. B. keine Datenblöcke (z. B. komprimierte/deduplizierte Datenblöcke) zum Rekonstruieren einer ursprünglichen Version des Datenblocks auf eine Bezugsdatenmenge. Die Operationen im Schritt 628 können optional sein und durch das Bezugs-Hash-Tabellen-Modul 314 in Zusammenarbeit mit dem Datenausmusterungsmodul 216 und einer oder mehreren anderen Entitäten der Datenreduktionseinheit 210 ausgeführt werden. Dann kann das Verfahren 600 enden.
  • Falls jedoch keine Bezugsdatenmengen im Block 626 der Ausmusterung entsprechen, kann das Verfahren 600 weitergehen, um zu bestimmen 630, ob ein zusätzlicher ankommender Datenstrom vorhanden ist. Falls es einen zusätzlichen ankommenden Datenstrom gibt, kann das Verfahren 600 zum Schritt 602 nach 6A zurückkehren, andernfalls kann das Verfahren 600 enden.
  • Falls zurück im Schritt 608 nach 6A keine Ähnlichkeit vorhanden ist, kann das Verfahren 600 durch das Ansammeln der Datenblöcke der neuen Menge von Datenblöcken basierend auf einem Kriterium in einer Menge zum Block 614 nach 6B weitergehen, wobei sich die Datenblöcke von den gegenwärtig im Speicher (z. B. in dem Datenspeicher-Verwahrungsort 110) gespeicherten Bezugsdatenmengen unterscheiden. Die Datenblöcke, die sich von den Bezugsdatenmengen, die gegenwärtig im Speicher gespeichert sind, unterscheiden, können Datenblöcke enthalten, denen Inhalt zugeordnet ist, der von dem Inhalt abweicht, der den im Speicher gespeicherten Bezugsdatenmengen zugeordnet ist. Ein Kriterium kann den Inhalt, der jedem Datenblock zugeordnet ist, vom Manager definierte Regeln, eine Berücksichtigung der Datengröße für die Datenblöcke und/oder die Mengen von Datenblöcken, eine Zufallsauswahl der Hashes, die jedem Datenblock zugeordnet sind, usw. enthalten, ist aber nicht darauf eingeschränkt. Eine Menge von Datenblöcken kann z. B. basierend auf der Datengröße jedes entsprechenden Datenblocks, die sich innerhalb eines vorgegebenen Bereichs befindet, zusammen angesammelt werden. In einigen Ausführungsformen können ein oder mehrere Datenblöcke basierend auf einer Zufallsauswahl angesammelt werden. In weiteren Ausführungsformen können für die Ansammlung mehrere Kriterien verwendet werden. Die Operationen im Schritt 614 können durch die Abgleichmaschine 308 in Zusammenarbeit mit dem Daten-Clusterbildungs-Modul 214 und einer oder mehreren anderen Entitäten der Computervorrichtung 200 ausgeführt werden.
  • Als Nächstes kann das Verfahren 600 durch das Erzeugen 616 einer neuen Bezugsdatenmenge basierend auf der Menge, die die Datenblöcke der neuen Menge von Datenblöcken, die sich von der Bezugsdatenmenge, die gegenwärtig in einem nichtflüchtigen Datenspeicher (z. B. dem Datenspeicher-Verwahrungsort 110/220) gespeichert ist, unterscheiden, enthält, weitergehen. In einer Ausführungsform sendet die Abgleichmaschine 308 die Menge an die Codiermaschine 310, wobei die Codiermaschine 310 dann eine neue Bezugsdatenmenge erzeugt, die einen oder mehrere Datenblöcke enthalten kann, die einem Kriterium entsprechen. Die neue Bezugsdatenmenge kann z. B. basierend auf einem oder mehreren Datenblöcken, die einer Datengröße, die sich innerhalb eines zugewiesenen vorgegebenen Bereichs befindet, entsprechen, erzeugt werden. In einer Ausführungsform erzeugt die Codiermaschine 310 die neue Bezugsdatenmenge basierend auf dem einen oder den mehreren Datenblöcken, die einen Inhalt teilen, der sich innerhalb eines Grades der Ähnlichkeit zwischen jedem des einen oder der mehreren Datenblöcke befindet. In einigen Ausführungsformen kann in Reaktion auf das Erzeugen der neuen Bezugsdatenmenge die Signaturfingerabdruck-Berechnungsmaschine 306 eine Kennung (z. B. einen Fingerabdruck, einen Hash-Wert usw.) für die neue Bezugsdatenmenge erzeugen. Die Operationen im Schritt 616 können durch die Abgleichmaschine 308 in Zusammenarbeit mit dem Daten-Clusterbildungs-Modul 214 und einer oder mehreren anderen Entitäten der Computervorrichtung 200 ausgeführt werden.
  • Das Verfahren 600 kann dann durch das Zuweisen 618 einer Verwendungszählungsvariable zu der neuen Bezugsdatenmenge weitergehen. In einer Ausführungsform weist die Codiermaschine 310 der neuen Bezugsdatenmenge eine Verwendungszählungsvariable zu. Die Verwendungszählungsvariable der neuen Bezugsdatenmenge kann eine Datenabrufanzahl angeben, die einer Anzahl zugeordnet ist, wie oft die Datenblöcke oder die Mengen von Datenblöcken auf die neue Bezugsdatenmenge verweisen. In weiteren Ausführungsformen kann die Verwendungszählungsvariable ein Teil des Hashes und/oder eines Kopfs, der der Bezugsdatenmenge zugeordnet ist, sein. Die neue Bezugsdatenmenge kann der Ausmusterung entsprechen, wenn eine Zählung der Verwendungszählungsvariable der neuen Bezugsdatenmenge bis zu einem speziellen Wert (z. B. null) dekrementiert wird. In einigen Ausführungsformen kann eine anfängliche Zählung durch einen Manager der Verwendungszählungsvariable zugewiesen werden. Die Operationen im Schritt 618 können durch das Bezugs-Hash-Tabellen-Modul 314 in Zusammenarbeit mit dem Datenausmusterungsmodul 216 und einer oder mehreren anderen Entitäten der Datenreduktionseinheit 210 ausgeführt werden.
  • Als Nächstes kann dann das Verfahren 600 die neue Bezugsdatenmenge in einem nichtflüchtigen Datenspeicher speichern 620. Die Codiermaschine 310 kann z. B. die neue Bezugsdatenmenge erzeugen und sie in dem Datenspeicher-Verwahrungsort 110 und/oder 220 speichern. Das Verfahren 600 kann dann zum Block 630 nach 6C weitergehen und bestimmen, ob ein zusätzlicher ankommender Datenstrom vorhanden ist. Falls es einen zusätzlichen ankommenden Datenstrom gibt, kann das Verfahren 600 zum Schritt 602 nach 6A zurückkehren, andernfalls kann das Verfahren 600 enden.
  • 7 ist ein Ablaufplan eines beispielhaften Verfahrens 700 zum Codieren von Datenblöcken in einer Pipelinearchitektur. Das Verfahren 700 kann durch das Empfangen 702 eines Datenstroms, der eine Menge von Datenblöcken enthält, beginnen. Das Datenempfangsmodul 208 empfängt z. B. den Datenstrom, der die Menge von Datenblöcken enthält, von einer Client-Vorrichtung (z. B. der Client-Vorrichtung 102). In einigen Ausführungsformen können dem Datenstrom Inhaltsdaten, wie z. B. Dokumentdateien und E-Mail-Anhänge, die durch die Client-Vorrichtungen ausgeführt und wiedergegeben werden, zugeordnet sein, sind aber nicht darauf eingeschränkt. In weiteren Ausführungsformen können die Operationen im Schritt 702 durch das Datenempfangsmodul 208 in Zusammenarbeit mit dem Dateneingangspuffer 304 und einer oder mehreren anderen Entitäten des Systems 100 ausgeführt werden, wie hier anderswo erörtert ist.
  • Als Nächstes kann das Verfahren 700 durch das Wiedergewinnen 704 einer Bezugsdatenmenge von einem nichtflüchtigen Datenspeicher weitergehen.
  • In einer Ausführungsform gewinnt die Abgleichmaschine 308 in Reaktion auf das Ausführen einer Analyse an dem Datenstrom eine Bezugsdatenmenge wieder. Die Signaturfingerabdruck-Berechnungsmaschine 306 kann z. B. eine Analyse an dem Inhalt des Datenstroms einschließlich des Inhalts jedes der Datenblöcke der Menge und/oder des Inhalts, der der Menge von Datenblöcken wechselseitig zugeordnet ist, ausführen. In einer Ausführungsform kann die Analyse einen Hash-Werte- und/oder Fingerabdruckabgleichalgorithmus, der durch die Fingerabdruck-Berechnungsmaschine 306 ausgeführt wird und der das Vergleichen der Hash-Werte und/oder des Fingerabdrucks, die dem Datenstrom, der die Menge von Datenblöcken enthält, zugeordnet sind, mit den Hash-Werten und/oder dem Fingerabdruck, die einer oder mehreren Bezugsdatenmengen zugeordnet sind, die in dem Datenspeicher-Verwahrungsort 110 gespeichert sind, enthält, enthalten. In einigen Ausführungsformen identifiziert die Abgleichmaschine 308 eine Ähnlichkeit zwischen dem Datenstrom und den vorher im Speicher gespeicherten Bezugsdatenmengen durch das Vergleichen der Ähnlichkeits-Hashes (z. B. der Schemata), die dem Datenstrom zugeordnet sind, und der vorher im Speicher gespeicherten Bezugsdatenmenge. In weiteren Ausführungsformen können die Operationen im Schritt 704 durch die Signaturfingerabdruck-Berechnungsmaschine 306 in Zusammenarbeit mit der Abgleichmaschine 308 und einer oder mehreren anderen Entitäten der Datenreduktionseinheit 210 ausgeführt werden.
  • Das Verfahren 700 kann durch das Codieren 706 der Menge von Datenblöcken basierend auf der Bezugsdatenmenge weitergehen. Das Codieren kann das Modifizieren der Daten durch das Ausführen eines oder mehrerer einer Deduplizierung, einer Komprimierung usw. an den Daten enthalten, ist aber nicht darauf eingeschränkt. In einigen Ausführungsformen codiert die Codiermaschine 310 die Menge von Datenblöcken basierend auf der Bezugsdatenmenge, während sie gleichzeitig eine neue Bezugsdatenmenge erzeugt, die eine Teilmenge der Bezugsdatenblöcke und eine Menge von Datenblöcken, die dem Datenstrom zugeordnet sind, enthält. In einer Ausführungsform kann die Teilmenge der Bezugsdatenblöcke einer entsprechenden Bezugsdatenmenge zugeordnet sein. Vor dem Codieren der Menge von Datenblöcken kann die Codiermaschine 310 z. B. eine oder mehrere Bezugsdatenmengen, die in dem Datenspeicher 110/220 gespeichert sind, analysieren.
  • In einigen Ausführungsformen kann eine Analyse der Bezugsdatenmengen auf einer oder mehreren vorgegebenen Bedingungen basieren. Eine vorgegebene Bedingung kann z. B. das Identifizieren populärer Bezugsdatenblöcke innerhalb der Bezugsdatenmenge, deren Daten (über einem Schwellenwert) durch wenigstens eine Entität des Systems 100 zum Rekonstruieren eines ursprünglichen Datenblocks (d. h., eines Datenblocks oder einer Menge von Datenblöcken, die zu einem Ursprungszustand umgekehrt werden, bevor sie codiert werden) mehr als in einer Schwellenanzahl von Malen (z. B. pro min, pro Stunden, pro Tag, pro Woche, pro Monat, pro Jahr) abgerufen werden, enthalten. In einigen Ausführungsformen können die populären Bezugsdatenblöcke gekennzeichnet werden oder kann den populären Bezugsdatenblöcken eine Kennung, die eine relative Wichtigkeit angibt, zugewiesen werden. Eine Kennung kann einen Zeiger, einen Kopf, der einem Datenblock zugeordnet ist und der Informationen enthält, die dem Datenblock zugeordnet sind, enthalten, ist aber nicht darauf eingeschränkt. Ferner kann die relative Wichtigkeit angeben, dass ein entsprechender Bezugsdatenblock, der einer Bezugsdatenmenge zugeordnet ist, im Vergleich zu benachbarten Bezugsdatenblöcken, die Teil derselben Bezugsdatenmenge sind, über einem Schwellenwert zum Rekonstruieren von Datenblöcken verwendet wird.
  • Das Verfahren 700 kann dann durch das Codieren 706 einer Menge von Datenblöcken unter Verwendung einer Bezugsdatenmenge, die in einem nichtflüchtigen Datenspeicher gespeichert ist, weitergehen. Die Menge von Datenblöcken, die unter Verwendung der Bezugsdatenmenge codiert werden, teilt einen Grad der Ähnlichkeit zwischen dem Inhalt, der der Menge von Datenblöcken zugeordnet ist, und der Bezugsdatenmenge. In einer Ausführungsform codiert die Codiermaschine 310 eine neue Menge von Datenblöcken basierend auf einer Bezugsdatenmenge, während sie gleichzeitig eine zweite Bezugsdatenmenge erzeugt, die den einen oder die mehreren populären Bezugsdatenblöcke und eine Teilmenge der neuen Datenblöcke des Datenstroms enthält. In weiteren Ausführungsformen umfasst die Teilmenge der Bezugsdatenblöcke eine vorgegebene Menge von Datenblöcken. In anderen Ausführungsformen basiert das Codieren der neuen Menge von Datenblöcken auf einem Grad der Ähnlichkeit zwischen der neuen Menge von Datenblöcken und der Bezugsdatenmenge.
  • Ferner kann die Codiermaschine 310, während sie die Menge von Datenblöcken, die den Grad der Ähnlichkeit mit einer oder mehreren Bezugsdatenmengen, die in dem nichtflüchtigen Datenspeicher gespeichert sind, teilt, codiert, gleichzeitig eine neue Bezugsdatenmenge erzeugen, die Folgendes enthält: 1) die codierten Datenblöcke, die keinen Grad der Ähnlichkeit mit einer oder mehreren Bezugsdatenmengen, die gegenwärtig im Speicher gespeichert sind, teilen; und 2) populäre Bezugsdatenblöcke, die einer oder mehreren Bezugsdatenmengen, die im Speicher gespeichert sind, zugeordnet sind. Folglich umfasst die neue Bezugsdatenmenge sowohl 1) die Datenblöcke, die keinen Grad der Ähnlichkeit mit einer oder mehreren Bezugsdatenmengen, die gegenwärtig gespeichert sind, teilen, und 2) die populären Bezugsdatenblöcke, die einer oder mehreren Bezugsdatenmengen, die im Speicher gespeichert sind, zugeordnet sind. Dies funktioniert, um das System 100 beim aktiven Konstruieren neuer Bezugsdatenmengen für sich ändernde Datenströme zu unterstützen, weil die Bezugsblöcke den Datenstrom in einer Zusammenfassung repräsentieren. Weil die Bezugsdatenblöcke den Datenstrom in einer Zusammenfassung repräsentieren, ändert sich außerdem die Menge der Bezugsdatenblöcke mit der Zeit, wenn sich die Art des Datenstroms ändert, wobei erwartet wird, dass einige Blöcke aufhören, Mitglieder der Bezugsmenge zu sein, während neue Blöcke hinzugefügt werden, was zu einer neuen Bezugsmenge führt. Deshalb ist eine wichtige Metrik zum Bestimmen, ob die Bezugsmenge eine gute Darstellung des ankommenden Datenstroms ist, wichtig, um die Bezugsmenge aktiv zu managen. Andernfalls kann das System alte Daten, die im Speicher gespeichert sind, enthalten und weniger Kapazität aufweisen, um ankommende relevante Daten zu speichern. In einigen Ausführungsformen können die Operationen im Schritt 706 durch die Signaturfingerabdruck-Berechnungsmaschine 306 in Kooperation mit der Abgleichmaschine 308, der Codiermaschine 310 und einer oder mehreren anderen Entitäten der Datenreduktionseinheit 210 ausgeführt werden.
  • Als Nächstes kann das Verfahren 700 die Menge von Datenblöcken und die neue Bezugsdatenmenge in einem nichtflüchtigen Datenspeicher speichern 708.
  • In einer Ausführungsform können das Kompressions-Hash-Tabellen-Modul 312 und das Bezugs-Hash-Tabellen-Modul 314 die entsprechenden Kennungen, die der Menge von Datenblöcken und der neuen Bezugsdatenmenge zugeordnet sind, in einer Tabelle zum Verweisen auf die und das Wiedergewinnen der Menge von Datenblöcken und/oder der neuen Bezugsdatenmenge aktualisieren und/oder speichern. In einigen Ausführungsformen speichert die Codiermaschine 310 in Zusammenarbeit mit dem komprimierten Puffer 316 und dem Datenausgangspuffer 318 die Menge von Datenblöcken und die neue Bezugsdatenmenge in dem Datenspeicher-Verwahrungsort 110/220.
  • Die 8A und 8B sind Ablaufpläne eines beispielhaften Verfahrens zum Erzeugen einer Bezugsdatenmenge in einer Pipelinearchitektur. In 8A kann das Verfahren 800 durch das Empfangen 802 einer Menge von Datenblöcken beginnen. In einer Ausführungsform empfängt das Datenempfangsmodul 208 in Zusammenarbeit mit dem Dateneingangspuffer 304 eine Menge von Datenblöcken von einer oder mehreren Client-Vorrichtungen (z. B. den Client-Vorrichtungen 102). Der Menge von Datenblöcken können Dokumentdateien eines Typs, wie z. B. Word-doc, pdfs, jpegs usw., die durch die Anwendungen der Client-Vorrichtungen (z. B. der Client-Vorrichtungen 102) wiedergegeben werden, zugeordnet sein, sind aber nicht darauf eingeschränkt. Als Nächstes kann das Verfahren 800 durch das Ausführen 804 einer Ähnlichkeitsanalyse der Menge von Datenblöcken weitergehen. In einigen Ausführungsformen kann die Analyse durch die Signaturfingerabdruck-Berechnungsmaschine 306 ausgeführt werden. Das Datenempfangsmodul 208 kann z. B. die Menge von Datenblöcken an die Signaturfingerabdruck-Berechnungsmaschine 306 senden, um ihre jeweiligen Funktionalitäten auszuführen. Die Signaturfingerabdruck-Berechnungsmaschine 306 kann eine Analyse an dem Inhalt der Menge von Datenblöcken ausführen. Die Analyse kann einen oder mehrere Algorithmen zum Bestimmen des Inhalts, der der Menge von Datenblöcken zugeordnet ist, enthalten. In einigen Ausführungsformen kann die Fingerabdruck-Berechnungsmaschine 306 Kennungen für jeden Datenblock der Menge von Datenblöcken basierend auf dem Inhalt jedes Blocks erzeugen.
  • In weiteren Ausführungsformen kann die Fingerabdruck-Berechnungsmaschine 306 eine allgemeine Kennung für die Menge von Datenblöcken zuweisen. Einer Kennung kann ein Hash-Wert, der unter Verwendung eines Hash-Algorithmus erzeugt werden kann, zugeordnet sein. In einigen Ausführungsformen können die Kennungen, die einer Menge von Datenblöcken zugeordnet sind, in einer Datenbank, z. B. in dem Datenspeicher-Verwahrungsort 110, gespeichert sein. In anderen Ausführungsformen können die Kennungen ein digitaler Fingerabdruck oder eine digitale Signatur sein, der bzw. die jeden Datenblock der Menge von Datenblöcken exklusiv klassifiziert und/oder die Menge (d. h., die Menge von Datenblöcken) exklusiv klassifiziert. Die Kennungen können durch die Fingerabdruck-Berechnungsmaschine 306 und/oder die Abgleichmaschine 308 zum Analysieren der Menge von Datenblöcken bezüglich einer Redundanz verwendet werden. Die Analyse kann z. B. das Anwenden eines übereinstimmungsbasierten Algorithmus durch die Fingerabdruck-Berechnungsmaschine 306 enthalten, der das Vergleichen der Kennungen der Menge von Datenblöcken mit den Kennungen, die einer oder mehreren Bezugsdatenmengen, die in dem Datenspeicher-Verwahrungsort 110 gespeichert sind, zugeordnet sind, enthält.
  • Als Nächstes geht das Verfahren 800 durch das Identifizieren 806 weiter, ob zwischen der Menge von Datenblöcken und wenigstens einer oder mehreren Bezugsdatenmengen eine Ähnlichkeit vorhanden ist. In einigen Ausführungsformen kann die Abgleichmaschine 308 in Zusammenarbeit mit der Signaturfingerabdruck-Berechnungsmaschine 306 basierend auf der Analyse identifizieren, ob zwischen der Menge von Datenblöcken und einer oder mehreren Bezugsdatenmengen, die in einem nichtflüchtigen Datenspeicher gespeichert sind, eine Ähnlichkeit vorhanden ist. Die Abgleichmaschine 308 kann z. B. in Reaktion auf das Empfangen der Daten von der Fingerabdruck-Berechnungsmaschine 306, dass zwischen der Menge von Datenblöcken und den im Speicher gespeicherten Bezugsdatenmengen keine exakten Übereinstimmungen identifiziert wurden, die Ähnlichkeits-Hashes für die Menge von Datenblöcken erzeugen. Die Abgleichmaschine 308 kann dann die Ähnlichkeits-Hashes von einer oder mehreren Bezugsdatenmengen, die in einem Datenspeicher, wie z. B. dem Datenspeicher-Verwahrungsort 110, gespeichert sind, mit den Ähnlichkeits-Hashes, die der Menge von Datenblöcken zugeordnet sind, vergleichen. In einer Ausführungsform kann die Abgleichmaschine 308 die Ähnlichkeits-Hashes einer oder mehrerer Bezugsdatenmengen, die in einem Datenspeicher, wie z. B. dem Datenspeicher-Verwahrungsort 110, gespeichert sind, mit den einzelnen Ähnlichkeits-Hashes, die jedem Datenblock der Menge von Datenblöcken zugeordnet sind, vergleichen. In einigen Ausführungsformen können die Operationen im Schritt 806 durch die Abgleichmaschine 308 in Zusammenarbeit mit einer oder mehreren anderen Entitäten der Datenreduktionseinheit 210 ausgeführt werden.
  • Das Verfahren 800 kann dann zu 808 zum Bestimmen, ob eine Ähnlichkeit vorhanden ist, weitergehen. Die Abgleichmaschine 308 kann z. B. basierend auf einer Kennung (z. B. dem Ähnlichkeits-Hash) bestimmen, dass der Inhalt der Menge von Datenblöcken einen Grad der Ähnlichkeit mit einer oder mehreren Bezugsdatenmengen, die in einem Datenspeicher gespeichert sind, teilt. Ein Grad der Ähnlichkeit kann einen Schwellenwert eines ähnlichen Inhalts zwischen einer Menge von Datenblöcken eines ankommenden Datenstroms und dem der im Speicher gespeicherten Bezugsdatenmengen enthalten. In einer Ausführungsform kann ein Grad der Ähnlichkeit durch das Vergleichen der Ähnlichkeits-Hashes (d. h., der Schemata) der Datenblöcke mit denen der Bezugsdatenmengen bestimmt werden. Falls eine Ähnlichkeit vorhanden ist, kann das Verfahren 800 zum Block 810 weitergehen. Als Nächstes kann das Verfahren 800 jeden Datenblock der Menge von Datenblöcken unter Verwendung einer entsprechenden Bezugsdatenmenge, die in einem nichtflüchtigen Datenspeicher gespeichert ist, codieren 810. Eine entsprechende Bezugsdatenmenge kann eine Bezugsdatenmenge sein, die einen Grad der Ähnlichkeit mit einem oder mehreren Datenblöcken eines ankommenden Datenstroms teilt. Die Datenblöcke einer ankommenden Datenmenge können z. B. den überarbeiteten Inhalt eines Dokuments (d. h., die aktuelle Version eines Dokuments) enthalten, das vorher im Speicher gespeichert und durch eine Bezugsdatenmenge zugeordnet war. Die ankommende Datenmenge kann einen Grad der Ähnlichkeit mit der Bezugsdatenmenge (d. h., der vorher gespeicherten Version des Dokuments) darauf basierend, dass er einem Schwellenwert entspricht (d. h., ein Schema der aktuellen Version des Dokuments 'ankommende Datenmenge' sich innerhalb der Ähnlichkeit des Schemas der vorhergehenden Version 'Bezugsdatenmenge' befindet), beibehalten. Die Codiermaschine 308 kann die Bezugsdatenmenge verwenden, falls dem Schwellenwert entsprochen wird, um die ankommende Datenmenge zu codieren (d. h., zu komprimieren und die Dubletten zu entfernen), so dass doppelte Kopien nicht gespeichert sind, sondern stattdessen eine komprimierte Version gespeichert ist). In einigen Ausführungsformen enthält die Menge von Datenblöcken Segmente/Datenabschnitte der Datenblöcke, in denen die Segmente/Datenabschnitte der Datenblöcke exklusiv mit einer Bezugsdatenmenge codiert sein können.
  • Die Abgleichmaschine 308 kann die Informationen, die ähnliche Übereinstimmungen zwischen dem Inhalt der Menge von Datenblöcken und einer oder mehreren Bezugsdatenmengen angeben, an die Codiermaschine 310 senden. Die Codiermaschine 310 kann dann jeden Datenblock der Menge von Datenblöcken basierend auf den von der Abgleichmaschine 308 empfangenen Informationen codieren. In einer Ausführungsform kann die Codiermaschine 310 jeden Datenblock der Menge von Datenblöcken unter Verwendung eines Codierungsalgorithmus, wie z. B. der Deltacodierung, der Ähnlichkeitscodierung und der Delta-Selbstkomprimierung, aber nicht auf diese eingeschränkt, codieren. In einigen Ausführungsformen kann das Codieren eines Datenblocks, der einen Grad der Ähnlichkeit mit einer Bezugsdatenmenge teilt, enthalten, dass die Codiermaschine 310 einen Zeiger für jeden entsprechenden Datenblock der Menge von Datenblöcken erzeugt und zuweist. Der Zeiger kann durch die Speichersteuermaschine 108 verwendet werden, um für spätere Datenabrufe auf einen entsprechenden Bezugsdatenblock und/oder eine entsprechende Menge von Bezugsdatenblöcken im Speicher (z. B. im Datenspeicher-Verwahrungsort 110/220) zu verweisen und/oder einen entsprechenden Bezugsdatenblock und/oder eine entsprechende Menge von Bezugsdatenblöcken von dem Speicher (z. B. dem Datenspeicher-Verwahrungsort 110/220) wiederzugewinnen. In weiteren Ausführungsformen können ein oder mehrere Datenblöcke der Menge von Datenblöcken auf dieselbe Bezugsdatenmenge, die in dem Datenspeicher-Verwahrungsort 110/220 gespeichert ist, verweisen, wobei die Codiermaschine 308 eine komprimierte Version des einen oder der mehreren Datenblöcke, die einen Zeiger (z. B. einen Bezugsdatenzeiger), der auf eine Bezugsdatenmenge verweist, enthält, speichert, anstatt den einen oder die mehreren Datenblöcke unabhängig in dem Datenspeicher-Verwahrungsort 110/220 zu speichern. Die Operationen im Schritt 810 können durch die Codiermaschine 306 in Zusammenarbeit mit einem komprimierten Puffer 316 und einer oder mehreren anderen Entitäten der Datenreduktionseinheit 210 ausgeführt werden.
  • Das Verfahren 800 kann dann durch das Aktualisieren 812 einer Tabelle der Datensätze, die jeden codierten Datenblock der Menge von Datenblöcken einer entsprechenden Bezugsdatenmenge zuordnet, weitergehen. In einer Ausführungsform empfängt das Kompressions-Hash-Tabellen-Modul 312 die codierten Datenblöcke, wobei es einen oder mehrere Zeiger jedes codierten Datenblocks in der Tabelle der Datensätze, die in einem Datenspeicher (z. B. dem Datenspeicher-Verwahrungsort 110/220) gespeichert ist, aktualisiert. In anderen Ausführungsformen empfängt das Kompressions-Hash-Tabellen-Modul 312 eine codierte Menge von Datenblöcken, wobei es einen Zeiger, der der codierten Menge von Datenblöcken in der Tabelle der Datensätze, die in einem Datenspeicher (z. B. dem Datenspeicher-Verwahrungsort 110/220) gespeichert ist, aktualisiert.
  • Das Verfahren 800 kann vom Block 812 nach 8A zum Block 822 nach 8B übergehen, um zu bestimmen 822, ob zusätzliche Datenblöcke ankommen. Falls es zusätzliche ankommende Datenblöcke gibt, kann das Verfahren 800 zum Schritt 802 (nach 8A) zurückkehren, andernfalls kann das Verfahren 800 enden.
  • Falls zurück im Schritt 808 nach 8A keine Ähnlichkeit vorhanden ist, kann das Verfahren 800 durch das Ansammeln der Datenblöcke der Menge von Datenblöcken basierend auf einem Kriterium in einer Menge zum Block 814 nach 8B weitergehen, wobei sich die Datenblöcke von den vorher in dem Speicher (z. B. dem Datenspeicher-Verwahrungsort 110/220) gespeicherten Bezugsdatenmengen unterscheiden. Ein Kriterium kann den jedem Datenblock zugeordneten Inhalt, eine Berücksichtigung der Datengröße für die Datenblöcke und/oder die Mengen von Datenblöcken, eine Zufallsauswahl der jedem Datenblock zugeordneten Hashes usw., enthalten, ist aber nicht darauf eingeschränkt. Eine Menge von Datenblöcken kann z. B. basierend auf der Datengröße jedes entsprechenden Datenblocks, die sich innerhalb eines vorgegebenen Bereichs befindet, zusammen angesammelt werden. Die Operationen im Schritt 814 können durch die Abgleichmaschine 308 in Zusammenarbeit mit dem Daten-Clusterbildungs-Modul 214 und einer oder mehreren anderen Entitäten der Computervorrichtung 200 ausgeführt werden.
  • Als Nächstes kann das Verfahren 800 durch das Identifizieren 816 einer Teilmenge der Bezugsdatenblöcke, die einer oder mehreren Bezugsdatenmengen zugeordnet sind, basierend auf einem oder mehreren vorgegebenen Parametern weitergehen. In einer Ausführungsform kann die Codiermaschine 310 eine Teilmenge der Bezugsdatenblöcke, die einer oder mehreren Bezugsdatenmengen, die in dem Datenspeicher 110/220 gespeichert sind, zugeordnet ist, analysieren und identifizieren. Die Analyse kann das Identifizieren der Bezugsdatenblöcke einer oder mehrerer Bezugsdatenmengen, deren Daten häufig durch eine oder mehrere Entitäten des Systems 100 zum Rekonstruieren eines ursprünglichen Datenblocks (d. h., eines Datenblocks oder einer Menge von Datenblöcken, die in einen Ursprungszustand umgekehrt werden, bevor sie codiert werden) abgerufen werden (d. h., eines Parameters mit einem Schwellenwert und/oder Schwellenbereichen der abgerufenen Daten), enthalten. In einigen Ausführungsformen können die Bezugsblöcke gekennzeichnet werden oder kann den Bezugsbögen eine Kennung, die eine relative Wichtigkeit angibt, zugewiesen werden. Die relative Wichtigkeit kann angeben, dass ein entsprechender Bezugsdatenblock, der einer Bezugsdatenmenge zugeordnet ist, im Vergleich zu anderen benachbarten Bezugsdatenblöcken, die ein Teil derselben Bezugsdatenmenge sind, über einem Schwellenwert zum Rekonstruieren von Datenblöcken verwendet wird. Die Codiermaschine 310 kann dann die Bezugsdatenblöcke, die gekennzeichnet sind oder denen eine Kennung, die eine relative Wichtigkeit angibt, zugewiesen ist, in einer Teilmenge der Bezugsdatenblöcke ansammeln. In einigen Ausführungsformen sind die Bezugsblöcke basierend auf einem Grad der Ähnlichkeit, der dem Inhalt jedes Bezugsdatenblocks zugeordnet ist, in einer Teilmenge gruppiert.
  • Das Verfahren 800 kann dann eine neue Bezugsdatenmenge erzeugen 818, während es gleichzeitig die Datenblöcke der Menge von Datenblöcken, die einen Grad der Ähnlichkeit mit einer oder mehreren Bezugsdatenmengen teilen, codiert. In einer Ausführungsform kann eine neue Bezugsdatenmenge seriell mit einem Datenblock der Menge von Datenblöcken, die einen Grad der Ähnlichkeit mit einer oder mehreren Bezugsdatenmengen teilen, erzeugt werden. In einigen Ausführungsformen erzeugt die Codiermaschine 310 die neue Bezugsdatenmenge, während sie gleichzeitig die Datenblöcke der Menge von Datenblöcken, die einen Grad der Ähnlichkeit mit einer oder mehreren Bezugsdatenmengen teilen, codiert. Die neue Bezugsdatenmenge kann die Teilmenge der Bezugsdatenblöcke von einer oder mehreren Bezugsdatenmengen und die Datenblöcke der Menge von Datenblöcken, die sich von den vorher in dem nichtflüchtigen Datenspeicher (z. B. dem Datenspeicher-Verwahrungsort 110/220) gespeicherten Bezugsdatenmengen unterscheiden, enthalten.
  • Die Codiermaschine 310 kann z. B. eine Menge von Datenblöcken unter Verwendung einer Bezugsdatenmenge codieren, wobei die Menge von Datenblöcken, die unter Verwendung der Bezugsdatenmenge codiert werden, einen Grad eines ähnlichen Inhalts mit der Bezugsdatenmenge teilen. Die Codiermaschine 310 kann, während sie die Menge von Datenblöcken, die den Grad der Ähnlichkeit mit einer oder mehreren Bezugsdatenmengen teilen, codiert, außerdem gleichzeitig eine neue Bezugsdatenmenge erzeugen, was das Codieren der Datenblöcke, die keinen Grad der Ähnlichkeit mit einer oder mehreren Bezugsdatenmengen teilen, (d. h., deren Inhalte sich unterscheiden), und einer Teilmenge der Bezugsdatenblöcke, die einer oder mehreren Bezugsdatenmengen zugeordnet sind, enthält.
  • Folglich umfasst die neue Bezugsdatenmenge sowohl Datenblöcke (d. h., die sich unterscheidenden Inhalt von einer oder mehreren vorher gespeicherten Bezugsdatenmengen umfassen) als auch eine Teilmenge der Bezugsdatenblöcke, die einer oder mehreren Bezugsdatenmengen, die im nichtflüchtigen Datenspeicher gespeichert sind, zugeordnet ist. In einigen Ausführungsformen können die Operationen im Schritt 818 durch die Abgleichmaschine 308, die Codiermaschine 310 und/oder eine oder mehrere andere Entitäten der Datenreduktionseinheit 210 ausgeführt werden.
  • Das Verfahren 800 kann dann durch das Speichern 820 der neuen Bezugsdatenmenge in einem nichtflüchtigen Datenspeicher weitergehen. Der nichtflüchtige Datenspeicher kann den Datenspeicher-Verwahrungsort 110/220 und/oder die einzelnen Speichervorrichtungen 112 enthalten, ist aber nicht auf diese eingeschränkt. In einer Ausführungsform empfängt das Kompressions-Hash-Tabellen-Modul 312 die neue Bezugsdatenmenge, wobei es eine Kennung, die der neuen Bezugsdatenmenge zugeordnet ist, erzeugt. Die Kennung kann in einer Tabelle der Datensätze, die in einem Datenspeicher (z. B. dem Datenspeicher-Verwahrungsort 110/220) gespeichert ist, gespeichert werden oder kann Teil der Bezugsdatenmenge sein. Die Kennung kann verwendet werden, um auf die neue Bezugsdatenmenge im Speicher (z. B. im Datenspeicher-Verwahrungsort 110/220) zu verweisen und/oder die neue Bezugsdatenmenge vom Speicher (z. B. dem Datenspeicher-Verwahrungsort 110/220) wiederzugewinnen, und zum Rekonstruieren der ankommenden Datenblöcke eines Datenstroms verwendet werden. Das Verfahren 800 kann durch das Bestimmen 822, ob zusätzliche Datenblöcke ankommen, weitergehen. Falls es zusätzliche ankommende Datenblöcke gibt, kann das Verfahren 800 zum Schritt 802 zurückkehren, andernfalls kann das Verfahren 800 enden.
  • 9 ist ein Ablaufplan eines beispielhaften Verfahrens 900 zum Verfolgen der Bezugsdatenmengen beim Flash-Speicher-Management. Das Verfahren 900 kann durch das Wiedergewinnen 902 eines oder mehrerer Datenblöcke beginnen. In einer Ausführungsform kann das Datenempfangsmodul 208 einen oder mehrere Datenblöcke von einem nichtflüchtigen Datenspeicher (d. h., dem Datenspeicher-Verwahrungsort 110/220) wiedergewinnen. Der eine oder die mehreren Datenblöcke können Inhaltsdaten, wie z. B. Dokumente, eine dem Spielen zugeordnete Anwendung, E-Mail-Anhänge und zusätzliche Informationen, die Anwendungen zugeordnet sind, die durch die Client-Vorrichtungen (z. B. die Client-Vorrichtungen 102) ausgeführt und wiedergegeben werden, enthalten, sind aber nicht darauf eingeschränkt.
  • Als Nächstes kann das Verfahren 900 durch das Identifizieren 904 der Zuordnungen zwischen einem oder mehreren Datenblöcken und einer oder mehreren Bezugsdatenmengen, die im nichtflüchtigen Datenspeicher (z. B. einem Flash-Speicher) gespeichert sind, weitergehen. In einer Ausführungsform kann die Signaturfingerabdruck-Berechnungsmaschine 306 in Zusammenarbeit mit der Abgleichmaschine 308 den einen oder die mehreren Datenblöcke von dem Datenempfangsmodul 208 empfangen und die Zuordnungen zwischen dem einen oder den mehreren Datenblöcken und einer oder mehreren Bezugsdatenmengen, die in dem Datenspeicher-Verwahrungsort 110/220 (z. B. einem Flash-Sprecher) gespeichert sind, identifizieren. Eine Zuordnung eines oder mehrerer Datenblöcke zu einer oder mehreren Bezugsdatenmengen kann eine gemeinsame Abhängigkeit von einem oder mehreren Datenblöcken von einer oder mehreren Bezugsdatenmengen für den Datenabruf widerspiegeln. Ein Datenabruf kann z. B. einen oder mehrere Datenblöcke eines ankommenden Datenstroms enthalten, die auf eine oder mehrere Bezugsdatenmengen zum Rekonstruieren und/oder Codieren verweisen.
  • Das Verfahren 900 kann durch das Erzeugen 906 eines oder mehrerer Segmente in einem Datenspeicher (z. B. dem Datenspeicher-Verwahrungsort 110/220) einschließlich eines oder mehrerer Datenblöcke, die von einer gemeinsamen Bezugsdatenmenge abhängen, weitergehen. In einer Ausführungsform identifiziert die Abgleichmaschine 308 die Zuordnungen zwischen den Datenblöcken und den Bezugsdatenmengen, die in einem Datenspeicher (z. B. einem Flash-Speicher, dem Datenspeicher-Verwahrungsort 110/220) gespeichert sind, wobei sie die Segmente in dem Datenspeicher (z. B. einem Flash-Speicher, dem Datenspeicher-Verwahrungsort 110/220) erzeugt, der einen oder mehrere Datenblöcke und eine oder mehrere Bezugsdatenmengen, die eine Zuordnung teilen, enthält. Ein Segment bezieht sich auf eine Sammlung/einen Abschnitt des Flash-Speichers, der sequentiell gefüllt und als eine Einheit gelöscht werden kann. Jedem Datenblock kann eine Bezugsdatenmenge (und spezifische Bezugsdatenblöcke innerhalb dieser) zugeordnet sein, auf die sich für einen Abruf gestützt werden kann.
  • In weiteren Ausführungsformen kann ein Segment in einem nichtflüchtigen Datenspeicher eine vorgegebene Speichergröße für einen oder mehrere Datenblöcke, die eine Zuordnung zu einer oder mehreren Bezugsdatenmengen teilen, enthalten, ist aber nicht darauf eingeschränkt. In einigen Ausführungsformen weist jedes Segment einen Segmentkopf auf, der Informationen, wie z. B. eine Kennung, die die Anzahl enthält, wie oft das Segment gelöscht, geschrieben und/oder gelesen worden ist, einen Zeitstempel und eine Datenblock-Informationsanordnung, enthält. Die Datenblock-Informationsanordnung kann Informationen über jeden Datenblock, der dem Segment zugeordnet ist, und/oder Informationen, die für eine Menge von Datenblöcken exklusiv sind, enthalten, ist aber nicht auf diese eingeschränkt. In einigen Ausführungsformen kann einem Segment ein Segmentzusammenfassungskopf zugeordnet sein. Der Segmentzusammenfassungskopf kann Informationen, wie z. B. globale Informationen über das Segment und die gesamten Datenblöcke, die dem Segment zugeordnet sind, enthalten, ist aber nicht darauf eingeschränkt.
  • Als Nächstes kann das Verfahren 900 durch das Verfolgen 908 der Bezugsdatenmenge, die dem Segment zugeordnet ist, für den Datenabruf weitergehen. In einer Ausführungsform kann das Datenverfolgungsmodul 212 die Segmente in den nichtflüchtigen Daten für den Datenabruf durch eine oder mehrere Client-Vorrichtungen 102 verfolgen. Eine Client-Vorrichtung 102 kann z. B. eine oder mehrere Anwendungen ausführen und Zugriffe auf den Inhalt, der einem Segment zugeordnet ist, das die Datenblöcke, die in dem nichtflüchtigen Datenspeicher gespeichert sind, enthält, anfordern, wobei das Datenverfolgungsmodul 212 dann die Anzahl verfolgen kann, wie oft von einem Segment und/oder einer Bezugsdatenmenge etwas zurückgefordert wird, um einen oder mehrere Inhalte, die der Anforderung zugeordnet sind, wiederzugeben. Folglich kann das System 100 die Verwendung eines Bezugsdatenblocks durch eine Menge von Datenblöcken in einem Segment des Speichers in dem nichtflüchtigen Flash-Datenspeicher verfolgen, anstatt die Verwendung einer Bezugsdatenmenge durch jeden Datenblock einzeln zu verfolgen. In einigen Ausführungsformen sendet das Datenverfolgungsmodul 212 die dem Datenabruf zugeordneten Informationen zum Aktualisieren eines Segmentkopfs, der der Bezugsdatenmenge des Segments zugeordnet ist, das dem Datenabruf durch die Client-Vorrichtung 102 zugeordnet ist, an das Aktualisierungsmodul 218. In einer Ausführungsform aktualisiert das Aktualisierungsmodul 218 einen Abschnitt des Segmentkopfs, der die Anzahl enthält, wie oft die Daten des Segments abgerufen worden sind. Die Operationen im Schritt 908 können durch das Datenverfolgungsmodul 212 und das Aktualisierungsmodul 218 und/oder eine oder mehrere andere Entitäten der Computervorrichtung 200 ausgeführt werden.
  • 10 ist ein Ablaufplan eines beispielhaften Verfahrens 1000 zum Aktualisieren der Zählungsvariable, die einer Bezugsdatenmenge zugeordnet sind. Das Verfahren 1000 kann durch das Bestimmen 1002 eines Segments, das ein oder mehrere Bezugsdatenmengen enthält, beginnen. In einer Ausführungsform bestimmt das Daten-Clusterbildungs-Modul 214 einen oder mehrere Datenblöcke, die von einer Bezugsdatenmenge abhängig sind, basierend auf dem einen oder den mehreren Datenblöcken, die einen Grad der Ähnlichkeit zwischen dem Inhalt des einen oder der mehreren Datenblöcke und der Bezugsdatenmengen teilen. In einigen Ausführungsformen bestimmt das Daten-Clusterbildungs-Modul 214 in Zusammenarbeit mit der Abgleichmaschine 308 die Abhängigkeit von einem oder mehreren Datenblöcken von einer oder mehreren Bezugsdatenmengen, die in den Segmenten eines entsprechenden Speichers, wie z. B. eines nichtflüchtigen Flash-Datenspeichers (z. B. eines Flash-Speichers, der eine oder mehrere Speichervorrichtungen 112 sein kann), gespeichert sind. Eine Abhängigkeit von einem oder mehreren Datenblöcken von einer oder mehrerer Bezugsdatenmengen kann eine gemeinsame Rekonstruktions-/Codierungsabhängigkeit eines oder mehrerer Datenblöcke von einer oder mehreren Bezugsdatenmengen eines Segments im Speicher für einen künftigen Datenabruf widerspiegeln.
  • Als Nächstes kann das Verfahren 1000 durch das Erzeugen 1004 eines Kennungsetiketts für eine Bezugsdatenmenge, die einem Segment des Speichers in einem nichtflüchtigen Datenspeicher zugeordnet ist, weitergehen. In einer Ausführungsform erzeugt das Datenverfolgungsmodul 212 ein Kennungsetikett für das Segment, das einen oder mehrere Datenblöcke enthält, die von einer Bezugsdatenmenge abhängig sind, die in einem nichtflüchtigen Datenspeicher (z. B. einem Flash-Speicher, den Speichervorrichtungen 112 usw.) gespeichert ist, wobei es das Kennungsetikett in dem nichtflüchtigen Datenspeicher speichert. Ein Kennungsetikett kann z. B. ein Segmentkopf, der Informationen, wie z. B. die Anzahl, wie oft das Segment gelöscht, geschrieben und/oder gelesen worden ist, einen Zeitstempel und eine Datenblock-Informationsanordnung, enthält, sein, ist aber nicht darauf eingeschränkt. Die Datenblock-Informationsanordnung kann Informationen über jeden Datenblock, der dem Segment zugeordnet ist, und/oder Informationen, die für eine Menge von Datenblöcken des Segments in dem nichtflüchtigen Datenspeicher (d. h., einer Festkörpervorrichtung, einem Flash-Speicher usw.) exklusiv sind, enthalten, ist aber nicht auf diese eingeschränkt. In einigen Ausführungsformen können die Operationen im Schritt 1004 durch das Datenverfolgungsmodul 212 und/oder das Daten-Clusterbildungs-Modul 214 in Zusammenarbeit mit einer oder mehreren anderen Entitäten der Computervorrichtung 200 ausgeführt werden.
  • Das Verfahren 1000 kann durch das Empfangen 1006 einer Datenabrufanforderung für eine Bezugsdatenmenge weitergehen. In einer Ausführungsform empfängt das Datenempfangsmodul 208 eine Anforderung für eine Bezugsdatenmenge, die in einem Segment des nichtflüchtigen Datenspeichers gespeichert sein kann. Die Datenabrufanforderung kann dem Wiedergeben eines oder mehrerer Inhalte, die den in den Client-Vorrichtungen 102 ausgeführten Anwendungen zugeordnet sind, zugeordnet sein. Als Nächstes kann das Verfahren 1000 durch das Zuordnen 1008 der Datenabrufanforderung für die Bezugsdatenmenge zu einem Segment basierend auf dem Kennungsetikett weitergehen. In einer Ausführungsform kann das Datenverfolgungsmodul 212 die Datenabrufanforderung von einer Client-Vorrichtung einer Bezugsdatenmenge eines Segments, das in dem nichtflüchtigen Flash-Datenspeicher gespeichert ist, unter Verwendung des Kennungsetiketts zuordnen. Das Kennungsetikett kann einem Segmentkopf der Bezugsdatenmenge zugeordnet werden, der die Identifikationsinformationen und zusätzliche Daten, wie z. B. die Anzahl, wie oft das Segment gelöscht, geschrieben und/oder gelesen worden ist, enthält.
  • Das Verfahren 1000 kann durch das Ausführen 1010 einer Datenabrufoperation, die dem Segment und der Bezugsdatenmenge zugeordnet ist, weitergehen. In einer Ausführungsform kann die Datenreduktionseinheit 210 die Datenabrufoperation ausführen, die dem Segment zugeordnet ist, das die Bezugsdatenmenge enthält, die in dem nichtflüchtigen Datenspeicher gespeichert ist. Die Datenabrufoperation kann eine Operation, wie z. B. das Rekonstruieren eines oder mehrerer Datenblöcke und/oder das Codieren eines oder mehrerer Datenblöcke eines ankommenden Datenstroms enthalten, ist aber nicht darauf eingeschränkt. In Reaktion auf das Ausführen der Datenabrufoperation kann das Verfahren 1000 durch das Aktualisieren 1012 einer Verwendungszählungsvariable, die der Bezugsdatenmenge zugeordnet ist, weitergehen. Das Datenverfolgungsmodul 212 kann z. B. die Verwendungszählungsvariable, die einem Segment zugeordnet ist, das die in einem nichtflüchtigen Datenspeicher gespeicherte Bezugsdatenmenge enthält, aktualisieren.
  • In einigen Ausführungsformen kann die Verwendungszählungsvariable ein Teil des Segmentkopfs sein, der dem Segment eines nichtflüchtigen Datenspeichers zugeordnet ist, der die Bezugsdatenmenge enthält, die für die Datenabrufoperationen herangezogen wird. Wie überall in der vorliegenden Offenbarung erörtert ist, kann die Verwendungszählungsvariable eine Anzahl der Datenblöcke und/oder eine Menge von Datenblöcken angeben, die auf eine spezielle Bezugsdatenmenge, die einem Segment des Speichers im Speicher (z. B. dem Flash-Speicher) zugeordnet ist, verweisen (z. B. auf die Bezugsdatenmenge im Speicher unter Verwendung eines Zeigers zeigen). In weiteren Ausführungsformen kann die einer Bezugsdatenmenge zugeordnete Verwendungszählungsvariable unabhängig in einer Tabelle der Datensätze in einem Datenspeicher, wie z. B. dem Datenspeicher-Verwahrungsort 110, gespeichert sein.
  • Als Nächstes kann das Verfahren 1000 durch das Bestimmen 1014 weitergehen, ob sich ein zusätzlicher Datenabruf (zusätzliche Datenabrufe) in einer Warteschlange befindet (befinden). Falls in der Warteschlange ein zusätzlicher Datenabruf (zusätzliche Datenabrufe) vorhanden ist (sind), kann das Verfahren 1000 zum Schritt 1006 zurückkehren, andernfalls kann das Verfahren 1000 enden.
  • 11 ist ein Ablaufplan eines beispielhaften Verfahrens 1100 zum Zuweisen codierter Datensegmente zu einem neuen Ort in einem nichtflüchtigen Datenspeicher (z. B. einem Flash-Speicher). Das Verfahren 1100 kann durch das Identifizieren 1102 der den Datenblöcken zugeordneten Segmente beginnen. In einer Ausführungsform identifiziert das Datenempfangsmodul 208 die Segmente des Speichers eines nichtflüchtigen Datenspeichers, der ein oder mehrere Datenblöcke enthält.
  • Als Nächstes geht das Verfahren 1100 durch das Bestimmen 1104 einer Bezugsdatenmenge basierend auf den Datenblöcken, die den Segmenten zugeordnet sind, weiter. In einer Ausführungsform bestimmt das Datenverfolgungsmodul 212 eine Bezugsdatenmenge, die einem Segment des nichtflüchtigen Datenspeichers zugeordnet ist, basierend auf einer Kennung (z. B. einem Segmentkopf) der Bezugsdatenmenge. In Reaktion auf das Bestimmen einer Bezugsdatenmenge kann das Verfahren 1100 durch das Bestimmen 1106 eines Zustands der Bezugsdatenmenge weitergehen. In einer Ausführungsform kann das Datenverfolgungsmodul 212 einen Zustand der Bezugsdatenmenge basierend auf einem vorgegebenen Faktor (z. B. den Segmenten des Speichers, die alte Daten, zur Löschung fällige Daten usw. enthalten) bestimmen. Das Datenverfolgungsmodul 212 kann z. B. einen oder mehrere Datenblöcke von teilweise gefüllten Segmenten basierend auf dem Zustand der Bezugsdatenmenge identifizieren, vergleichen und neu verteilen und ungültige Datenblöcke (d. h., alte Daten, zur Löschung fällige Daten), die Teil der Bezugsdatenmenge sind, löschen, so dass ein Segment und/oder ein Datenblock einer Bezugsdatenmenge neu zugewiesen werden kann. Ein nicht einschränkendes Beispiel eines vorgegebenen Faktors kann eine Bezugsdatenmenge enthalten, die sich auf dem Weg zur Ausmusterung befindet.
  • Als Nächstes kann das Verfahren 1100 durch das Codieren 1108 der Segmente basierend auf der Bezugsdatenmenge weitergehen. In einer Ausführungsform codiert die Codiermaschine 310 die den Datenblöcken zugeordneten Segmente basierend auf der Bezugsdatenmenge.
  • Schließlich kann das Verfahren 1100 durch das Zuweisen 1108 der Segmente, die die Bezugsdatenmenge enthalten, zu einem neuen Ort in dem nichtflüchtigen Flash-Datenspeicher weitergehen. In einer Ausführungsform weist die Codiermaschine 310 in Zusammenarbeit mit dem Ausgangspuffer 318 die Segmente, die die Bezugsdatenmengen enthalten, die einem vorgegebenen Wert, der dem Zustand zugeordnet ist, entsprechen, einem neuen Ort in dem nichtflüchtigen Datenspeicher (z. B. dem Flash-Speicher) zu. Es werden z. B. vier Datenblöcke (A, B, C, D), die eine Bezugsdatenmenge widerspiegeln können, in ein Segment des Speichers in einem nichtflüchtigen Datenspeicher geschrieben. Als Nächstes werden vier neue Datenblöcke (E, F, G, H) und vier Ersatzdatenblöcke (A', B', C', D') in das Segment des Speichers (z. B. des Flash-Speichers) geschrieben. Die ursprünglichen vier Datenblöcke (A, B, C, D) sind nun ungültige Daten (erfüllen z. B. die vorgegebenen Werte, die dem Zustand der ursprünglichen Bezugsdatenmenge zugeordnet sind, nicht), wobei jedoch die ursprünglichen vier Datenblöcke (A, B, C, D) nicht überschrieben werden können, bis das vollständige Segment des Speichers (z. B. des Flash-Speichers) gelöscht wird. Um in das Segment mit den ungültigen Daten (A, B, C, D) zu schreiben, werden alle guten Daten der vier neuen Datenblöcke (E, F, G, H) und der vier Ersatzdatenblöcke (A', B', C', D') gelesen und in ein neues Segment geschrieben, wobei dann das alte Segment gelöscht wird. In einigen Ausführungsformen kann die Codiermaschine 310 einen Algorithmus, wie z. B. einen Datenmüllsammelalgorithmus, aber nicht eingeschränkt darauf, verwenden, um die obigen Schritte des Verfahrens 1100 auszuführen. Die Datenmüllsammelalgorithmen können Bezugszählungsalgorithmen, Markierungs-Auskehr-Sammler-Algorithmen, Markierungskompakt-Sammler-Algorithmen, Kopier-Sammler-Algorithmen usw. enthalten. Die Operationen im Schritt 1108 können durch die Codiermaschine 310 in Zusammenarbeit mit dem Datenverfolgungsmodul 212 und einer oder mehreren anderen Entitäten der Computervorrichtung 200 ausgeführt werden.
  • 12 ist ein Ablaufplan eines beispielhaften Verfahrens 1200 zum Codieren der Datensegmente, die der Integration des Flash-Managements und der Datenmüllsammlung zugeordnet sind. Das Verfahren 1200 kann durch das Empfangen 1202 aktueller Datenblöcke des aktuellen Datenstroms beginnen. In einigen Ausführungsformen können die Operationen im Schritt 1202 durch die Signaturfingerabdruck-Berechnungsmaschine 306 in Zusammenarbeit mit der Abgleichmaschine 308 und einer oder mehreren anderen Entitäten der Computervorrichtung 200 ausgeführt werden.
  • Als Nächstes geht das Verfahren 1200 durch das Bestimmen 1204 einer Bezugsdatenmenge, die den Segmenten des Flash-Speichers zugeordnet ist, basierend auf den aktuellen Datenblöcken weiter. In einer Ausführungsform bestimmt das Datenverfolgungsmodul 212 eine Bezugsdatenmenge, die einem Segment des nichtflüchtigen Flash-Datenspeichers zugeordnet ist, basierend auf einer Kennung (z. B. einem Segmentkopf) der Bezugsdatenmenge. In einer Ausführungsform identifiziert das Datenverfolgungsmodul 212 die Segmente des Speichers eines nichtflüchtigen Flash-Datenspeichers, der die Bezugsdatenmengen enthält. Ein identifiziertes Segment im Speicher des nichtflüchtigen Datenspeichers kann z. B. einen Grad der Ähnlichkeit zwischen den aktuellen Datenblöcken und einer Bezugsdatenmenge, die dem identifizierten Segment zugeordnet ist, widerspiegeln.
  • In Reaktion auf das Bestimmen einer Bezugsdatenmenge kann das Verfahren 1200 durch das Bestimmen 1206 eines Zustands der Bezugsdatenmenge weitergehen. In einigen Ausführungsformen kann das Datenverfolgungsmodul 212 einen Zustand der Bezugsdatenmenge bestimmen. Das Datenverfolgungsmodul 212 kann z. B. einen oder mehrere Datenblöcke von den teilweise gefüllten Segmenten basierend auf dem Zustand der Bezugsdatenmenge vergleichen und neu verteilen und die ungültigen Datenblöcke (d. h., alte Daten, zur Löschung fällige Daten), die ein Teil der Bezugsdatenmenge sind, löschen, so dass ein Segment und/oder ein Datenblock der Bezugsdatenmenge neu zugewiesen werden kann.
  • Das Verfahren 1200 kann durch das Regenerieren 1208 der ursprünglichen Datenblöcke, die einer Bezugsdatenmenge zugeordnet sind, weitergehen. In einer Ausführungsform regeneriert die Codiermaschine 310 die ursprünglichen Datenblöcke, die der Bezugsdatenmenge zugeordnet sind, in Reaktion auf den Zustand der Bezugsdatenmenge, der sich unter einem vorgegebenen Wert befindet. Der Zustand der Bezugsmenge, der sich unter einem vorgegebenen Wert befindet, kann angeben, dass die Bezugsdatenmenge für die Ausmusterung geplant ist. Als Nächstes geht das Verfahren 1200 durch das Codieren 1210 der ursprünglichen Datenblöcke, die der Bezugsdatenmenge, die für die Ausmusterung geplant ist, zugeordnet sind, mit anderen Bezugsdatenmengen, die im Speicher des nichtflüchtigen Datenspeichers gespeichert sind, weiter. Die anderen Bezugsdatenmengen können einen verfügbaren Speicher zum Speichern zusätzlicher Datenblöcke, wie z. B. der ursprünglichen Datenblöcke der Bezugsdatenmenge, die für die Ausmusterung geplant sind, enthalten. In einer Ausführungsform identifiziert das Daten-Clusterbildungs-Modul 214 ein oder mehrere verfügbare Segmente im Speicher eines nichtflüchtigen Datenspeichers zum Speichern der codierten ursprünglichen Datenblöcke. Die Operationen im Schritt 1210 können durch die Codiermaschine 310 in Zusammenarbeit mit dem Datenverfolgungsmodul 212 und einer oder mehreren anderen Entitäten der Computervorrichtung 200 ausgeführt werden.
  • Als Nächstes kann das Verfahren 1200 durch das Codieren 1212 der Segmente, die den aktuellen Datenblöcken eines aktuellen Datenstroms zugeordnet sind, unter Verwendung der anderen Bezugsdatenmengen weitergehen. In einer Ausführungsform identifiziert die Codiermaschine 310 ein oder mehrere andere Segmente, die andere Bezugsdatenmengen enthalten, die im Speicher eines nichtflüchtigen Datenspeichers (z. B. eines Flash-Speichers) gespeichert sind. In einigen Ausführungsformen können die aktuellen Datenblöcke in Datenabschnitte (d. h., Segmente) segmentiert sein, wobei die Codiermaschine 310 die Datenabschnitte mit einer oder mehreren anderen Bezugsdatenmengen der Segmente im Speicher des nichtflüchtigen Datenspeichers unabhängig codieren kann. Die Operationen im Schritt 1212 können durch die Codiermaschine 310 in Zusammenarbeit mit einer oder mehreren anderen Entitäten der Computervorrichtung 200 ausgeführt werden.
  • 13 ist ein Ablaufplan eines beispielhaften Verfahrens 1300 zum Ausmustern einer Bezugsdatenmenge, das dem Flash-Management zugeordnet ist. Das Verfahren 1300 kann durch das Wiedergewinnen 1302 von Bezugsdatenmengen aus dem Speicher des Datenspeichers, wie z. B. des Datenspeicher-Verwahrungsorts 110/220, beginnen. In einer Ausführungsform gewinnt das Datenausmusterungsmodul 216 in Zusammenarbeit mit einer oder mehreren anderen Komponenten der Computervorrichtung 200 eine oder mehrere Bezugsdatenmengen, die im Speicher des nichtflüchtigen Datenspeichers (z. B. des Flash-Speichers) gespeichert sind, wieder. Als Nächstes kann das Verfahren 1300 durch das Bestimmen 1304 einer Verwendungszählungsvariable der Bezugsdatenmengen weitergehen. In einer Ausführungsform bestimmt das Datenausmusterungsmodul 216 in Zusammenarbeit mit dem Datenverfolgungsmodul 212 die Verwendungszählungsvariable, die einer oder mehreren Bezugsdatenmengen zugeordnet sind. Das Datenausmusterungsmodul 216 kann eine Tabelle der Datensätze, die in einem Datenspeicher gespeichert ist, parsen und eine Verwendungszählungsvariable einer Bezugsdatenmenge basierend auf einer Kennung, die der Bezugsdatenmenge zugeordnet ist, identifizieren. Eine Verwendungszählungsvariable kann eine Anzahl von Datenblöcken und/oder eine Menge von Datenblöcken, die auf eine spezielle Bezugsdatenmenge im Speicher eines nichtflüchtigen Datenspeichers (z. B. eines Flash-Speichers) verweisen (z. B. auf die Bezugsdatenmenge im Speicher unter Verwendung eines Zeigers zeigen), angeben.
  • Das Verfahren 1300 kann dann durch das Ausführen 1306 einer statistischen Analyse an der Population der Bezugsdatenblöcke, die den im Speicher des nichtflüchtigen Datenspeichers gespeicherten Bezugsdatenmengen zugeordnet sind, weitergehen. Das Datenverfolgungsmodul 212 kann z. B. eine statistische Analyse an der Population der Bezugsdatenblöcke, die den Bezugsdatenmengen, die im Speicher des nichtflüchtigen Datenspeichers (z. B. des Flash-Speichers) gespeichert sind, zugeordnet sind, ausführen. Die statistische Analyse kann das Identifizieren einer Verwendungszählung der Bezugsdatenmengen, deren Daten über einem vorgegebenen Schwellenwert abgerufen werden, enthalten, ist aber nicht darauf eingeschränkt. In einigen Ausführungsformen bestimmt das Datenausmusterungsmodul 216, ob eine Bezugsdatenmenge der Ausmusterung entspricht, basierend auf der Verwendungszählungsvariable, die der Bezugsdatenmenge zugeordnet ist. Die Operationen im Schritt 1306 können durch das Datenverfolgungsmodul 212 in Zusammenarbeit mit einer oder mehreren anderen Entitäten der Computervorrichtung 200 ausgeführt werden.
  • Als Nächstes kann das Verfahren 1300 durch das Bestimmen 1308, ob die Bezugsdatenmengen einem Ausmusterungskriterium entsprechen, basierend auf der Verwendungszählung weitergehen. Ein Ausmusterungskriterium kann eine Dauer der Verwendung, die einer Datenmenge zugeordnet ist, eine an einer zugeordneten Datenmenge ausgeführte letzte Aktualisierung/Modifikationen, eine während einer Dauer für eine zugeordnete Datenmenge verwendeten Menge des Speichers, den Zeitraum und die Betriebsmittel, die zum Zugreifen auf die im Speicher gespeicherte Datenmenge während der normalen Ausführung erforderlich sind, die Häufigkeit des Lesens/Schreibens, die der Datenmenge zugeordnet ist, usw. enthalten, ist aber nicht darauf eingeschränkt. In einer Ausführungsform kann das Bezugs-Hash-Tabellen-Modul 314 bestimmen, dass ein oder mehrere Datenblöcke und/oder eine oder mehrere Mengen von Datenblöcken während einer vorgegebenen Dauer (z. B. Minuten, Stunden, Tagen, Wochen usw.) nicht auf eine Bezugsdatenmenge verwesen haben. In einigen Ausführungsformen kann das Bezugs-Hash-Tabellen-Modul 314 bestimmen, dass sich eine Bezugsdatenmenge über einer Schwellenhäufigkeit des Lesens/Schreibens, die der Datenmenge zugeordnet ist, befindet und folglich die Ausmusterung erfüllt sein kann, um eine Lebensdauer der Speichervorrichtung (d. h., des Flash-Speichers) zu bewahren. In weiteren Ausführungsformen kann das Bezugs-Hash-Tabellen-Modul 314 basierend auf der in einer Speichervorrichtung (d. h., dem Flash-Speicher) während einer Dauer für eine zugeordnete Datenmenge verwendeten Menge des Speichers bestimmen, dass eine Bezugsdatenmenge der Ausmusterung entspricht. Eine Datenmenge kann z. B. basierend auf den an der Datenmenge ausgeführten Überarbeitungen (z. B. dem Aktualisieren eines Dokuments im Lauf der Zeit, um zusätzliche Informationen einzubeziehen) während einer Dauer im Speicher wachsen. In einigen Ausführungsformen kann die Ausmusterung der Datenmenge erzwungen werden, falls die in der Speichervorrichtung verwendete Menge des Speichers einem Schwellenwert entspricht und während einer Zeitdauer nicht abgerufen worden ist, wobei folglich alte Daten gelöscht werden und Speicherraum für relevante Daten bereitgestellt wird. Das Verfahren 1300 kann durch das Ausführen der Ausmusterung 1310 der Bezugsdatenmengen weitergehen. In einer Ausführungsform kann das Datenausmusterungsmodul 216 das Ausmustern einer oder mehrerer Bezugsdatenmengen, die den Kriterien basierend auf der Verwendungszählung entsprechen, ausführen.
  • In einigen Ausführungsformen wendet das Bezugs-Hash-Tabellen-Modul 314 einen Verwendungszählungs-Ausmusterungsalgorithmus auf jede im Speicher gespeicherte Bezugsdatenmenge an. Der Verwendungszählungs-Ausmusterungsalgorithmus kann eine Zählung einer Verwendungszählungsvariable, die einer Bezugsdatenmenge zugeordnet ist, automatisch dekrementieren, nachdem eine vorgegebene Dauer erfüllt ist und durch einen oder mehrere Datenblöcke oder eine oder mehrere Mengen von Datenblöcken, die einem Datenstrom zugeordnet sind, während der vorgegebenen Dauer nicht auf die Bezugsdatenmenge verwiesen worden ist. In einigen Ausführungsformen kann eine Bezugsdatenmenge der Ausmusterung entsprechen, wenn eine Zählung der Verwendungszählungsvariable der Bezugsdatenmenge auf null dekrementiert wird. Eine Verwendungszählungsvariable von null kann angeben, dass sich keine Datenblöcke oder Mengen von Datenblöcken auf diese entsprechende Bezugsdatenmenge stützen und/oder verweisen. Es stützen sich z. B. keine codierten Datenblöcke (z. B. komprimierte/deduplizierte Datenblöcke) auf eine Bezugsdatenmenge zum Rekonstruieren einer ursprünglichen Version des codierten Datenblocks. In weiteren Ausführungsformen wird ein Anteil der Bezugsdatenmenge basierend auf der statistischen Analyse für die Ausmusterung bestimmt. Das Datenausmusterungsmodul 216 kann dann den Anteil der Bezugsdatenblöcke der Bezugsdatenmenge, der der Ausmusterung entspricht, ausmustern, während es gleichzeitig den Rest der Bezugsdatenblöcke in der Bezugsdatenmenge einem neuen Segment (z. B. einer neuen Bezugsdatenmenge mit verfügbarem Raum für zusätzliche Datenblöcke) des Speichers im Speicher basierend auf einem oder mehreren vorgegebenen Faktoren (z. B. dem Speicherraum, der Größe der Bezugsdatenblöcke, dem Ausmusterungszeitstempel der Bezugsdatenblöcke usw.) zuweist.
  • Das Verfahren 1300 kann durch das Ausführen 1312 der Ausmusterung der Bezugsdatenmengen basierend auf einem Zwangsfaktor weitergehen. In einer Ausführungsform führt das Datenausmusterungsmodul 216 die Ausmusterung einer oder mehrerer Bezugsdatenmengen, die im Speicher eines nichtflüchtigen Datenspeichers (z. B. 110/220) gespeichert sind, basierend auf einem Zwangsfaktor aus. Der Zwangsfaktor kann in einem Algorithmus, wie z. B. einem Datenmüllsammelalgorithmus, aber nicht darauf eingeschränkt, eingebettet sein. Die Operationen im Schritt 1312 können optional sein und durch das Datenausmusterungsmodul 216 in Zusammenarbeit mit einer oder mehreren anderen Entitäten der Computervorrichtung 200 ausgeführt werden.
  • 14A ist ein Blockschaltplan, der ein Beispiel des Standes der Technik zum Komprimieren eines Bezugsdatenblocks veranschaulicht. Wie in 14A dargestellt ist, empfängt ein Kompressionsmodul einen Bezugsblock zur schritthaltenden Kompression der dem Bezugsblock zugeordneten Daten. Die schritthaltende Kompression bedeutet, dass die Daten des Bezugsblocks komprimiert werden (z. B. ihre Größe verringert wird), wenn sie in einer Speicheranordnung gespeichert werden. Der Bezugsblock vor dem Eintreten in das Kompressionsmodul weist eine Datengröße von 4 kB (Kilobytes) auf, wobei die Größe des Bezugsblocks signifikant verringert ist, sobald der Bezugsblock aus dem Kompressionsmodul herauskommt. Der komprimierte Datenstrom wird dann im Speicher gespeichert. Weiterhin kann der komprimierte Datenstrom einen Kopf (z. B. Hdr) enthalten, der Identifikationsinformationen usw. enthält. Der Nachteil des Ausführens der schritthaltenden Kompression ist, dass das Kompressionsmodul die Daten des Bezugsblocks vereinigt, bevor sie in den Speicher geschrieben werden. Zusätzlich werden die Hash-Codierung und der Hash-Vergleich in Echtzeit berechnet, wobei dies einen Leistungsmehraufwand hinzufügen kann. Falls z. B. ein Byte-für-Byte-Vergleich zum Vermeiden von Hash-Kollisionen erforderlich ist, wird ein zusätzlicher Leistungsmehraufwand eingeführt. In den Fällen des Komprimierens der primären Daten der Bezugsblöcke, wenn die Zeit (d. h., Millisekunden) signifikant ist, ist die schritthaltende Kompression im Allgemeinen nicht empfohlen. Folglich ist die schritthaltende Kompression für Datenströme aufgrund der in das System eingeführten gesamten Mehraufwandleistung nicht empfohlen.
  • 14B ist ein Blockschaltplan, der ein Beispiel des Standes der Technik zum Deduplizieren eines Bezugsdatenblocks veranschaulicht. Wie in 14B dargestellt ist, empfängt ein Modul zum Entfernen von Dubletten (Deduplizierungs-Modul) einen Bezugsblock für die schritthaltende Deduplizierung der dem Bezugsblock zugeordneten Daten. Die schritthaltende Deduplizierung ist eine Technik zum Verringern der Speicheranforderungen durch das Eliminieren redundanter Daten. Wie z. B. in 14B dargestellt ist, weist der Bezugsblockpuffer vor dem Eintreten in das Modul zum Entfernen von Dubletten eine Datengröße von 4 kB (Kilobytes) auf, wobei die Größe des Bezugsblocks signifikant verringert ist, sobald der Block aus dem Modul zum Entfernen von Dubletten herauskommt. Der deduplizierte Datenstrom, der einen Kopf (z. B. Hdr) enthält, der Identifikationsinformationen enthält, wird dann im Speicher gespeichert.
  • Weiterhin enthält die schritthaltende Deduplizierung die Deduplizierung der Hash-Berechnungen, die in den Client-Vorrichtungen erzeugt werden, wenn die Bezugsdatenblöcke in Echtzeit in die Client-Vorrichtung eintreten. Falls die Client-Vorrichtung einen Block erkennt, den sie bereits im Speichersystem gespeichert hat, speichert sie den neuen Block nicht, wobei sie stattdessen einfach einen Verweis auf den vorhandenen Bezugsblock herstellt. Der Vorteil der schritthaltenden Deduplizierung ist, dass sie weniger Speicher erfordert, da die Daten nicht dupliziert werden. Weil jedoch die Hash-Berechnungen und die Nachschlagoperationen in einer Hash-Tabelle signifikante Zeitverzögerungen erfahren, die dazu führen, dass die Datenaufnahme signifikant langsamer ist, ist der Wirkungsgrad verringert, da der Sicherungsdurchsatz der Vorrichtung verringert ist.
  • 15 ist eine graphische Darstellung, die eine beispielhafte Deltacodierung veranschaulicht. Wie in 15 dargestellt ist, kann eine Datenmenge 1502 die Datenblöcke (0–7) enthalten, wie veranschaulicht ist. Die Datenmenge 1502 kann z. B. einem ankommenden Datenstrom zugeordnet sein, wobei veranlasst wird, dass er in einem Datenspeicher, wie z. B. dem Datenspeicher-Verwahrungsort 110/220 gespeichert wird. Vor dem Speichern der Datenmenge 1502, die die Datenblöcke (0–7) enthält, kann die Codiermaschine 310 eine Deduplizierung auf Unterblockebene ausführen, die das Vergleichen der Ähnlichkeits-Hashes der Datenblöcke (0–7) mit den gespeicherten Ähnlichkeits-Hashes der entsprechenden (nicht gezeigten) Bezugsdatenmengen, die in einem Datenspeicher gespeichert sind, enthält. Wenn zwischen den Datenblöcken der Datenmenge 1502 und einer oder mehreren vorhandenen (nicht gezeigten) Bezugsdatenmengen, die in dem Datenspeicher gespeichert sind, ähnlichkeitsbasierte Ähnlichkeits-Hashes vorhanden sind, dann kann die Codiermaschine 310 die entsprechenden Datenblöcke, die den ähnlichkeitsbasierten Ähnlichkeits-Hashes zugeordnet sind, unter Verwendung der vorhandenen Bezugsdatenmenge im Speicher codieren, wie in 15 durch die Datenblöcke (0, 2, 3 und 7) dargestellt ist.
  • Die Codiermaschine 310 kann durch einen Deltacodierungsalgorithmus ausgeführt werden. Die Deltacodierungsalgorithmen identifizieren ähnliche Ähnlichkeits-Hashes zwischen den Datenblöcken und einer Bezugsdatenmenge und speichern nur die geänderten Daten. Die codierten Datenblöcke (0, 2, 3 und 7) sind z. B. als eine codierte (z. B. komprimierte) Version des Datenstroms 1504 der ursprünglichen Datenmenge veranschaulicht. Weiterhin kann der codierte Datenstrom 1504 einen Kopf zum Identifizieren des codierten Datenstroms enthalten. Der Kopf kann außerdem Informationen, wie z. B. eine Bezugsblock-ID, einen Deltacodierungs-Bitvektor und eine Anzahl der Körner, die dem codierten Datenstrom zugeordnet ist, enthalten, ist aber nicht darauf eingeschränkt.
  • 16 ist eine graphische Darstellung, die eine beispielhafte Ähnlichkeitscodierung veranschaulicht. Wie in 16 dargestellt ist, kann eine Datenmenge 1602 die Datenblöcke (0–7) enthalten, wie dargestellt ist. Die Datenmenge 1602 kann z. B. einem ankommenden Datenstrom zugeordnet sein, wobei veranlasst wird, dass er in einem Datenspeicher, wie z. B. dem Datenspeicher-Verwahrungsort 110, gespeichert wird. Die Codiermaschine 310 kann die Deduplizierung auf Blockebene ausführen, die das Vergleichen der Ähnlichkeits-Hashes und/oder der digitalen Signaturen/Fingerabdrücke der Datenblöcke (0–7) mit den gespeicherten Ähnlichkeits-Hashes der entsprechenden Bezugsdatenmenge 1604 enthält, wie in 16 veranschaulicht ist. Wenn ähnlichkeitsbasierte Ähnlichkeits-Hashes zwischen den Datenblöcken der Datenmenge 1602 und der Bezugsdatenmenge 1604 vorhanden sind, dann kann die Codiermaschine 310 die entsprechenden Datenblöcke, die den ähnlichkeitsbasierten Ähnlichkeits-Hashes zugeordnet sind, codieren, wie in 16 dargestellt ist. Die Codiermaschine 310 kann die Deduplizierung und Selbstkomprimierung an den entsprechenden Datenblöcken, die den ähnlichkeitsbasierten Ähnlichkeits-Hashes zugeordnet sind, ausführen. Die codierten Datenblöcke 1606 sind als eine codierte (z. B. komprimierte) Version des Datenstroms der ursprünglichen Datenmenge 1602 veranschaulicht. Ferner kann der codierte Datenstrom 1606 außerdem den Kopf zum Identifizieren des codierten Datenstroms enthalten. Der Kopf kann außerdem Informationen, wie z. B. eine Bezugsblock-ID, einen Bitvektor mit alles Nullen und eine Anzahl der Körner, die dem codierten Datenstrom zugeordnet ist, enthalten, ist aber nicht darauf eingeschränkt.
  • 17 ist eine graphische Darstellung, die eine beispielhafte Delta- und Selbstkompression eines Bezugsdatenblocks veranschaulicht. Wie in 17 dargestellt ist, sind eine Bezugsdatenmenge 1702, die die Bezugsdatenblöcke (0–7) enthält, und eine Datenmenge 1704, die die Datenblöcke (0–7) enthält, veranschaulicht. Es ist der Zweck der 17, die Codierung der Datenmenge unter Verwendung eines Delta- und Selbstkompressionsalgorithmus zu veranschaulichen. Eine Codiermaschine 310 kann z. B. die Datenblöcke der Datenmenge 1704 durch das Berechnen der Ähnlichkeits-Hashes 1710, 1712, 1714, 1716 und 1718 verarbeiten. Falls die Ähnlichkeits-Hashes keine ähnliche Übereinstimmung zwischen den Bezugsdatenblöcken der Bezugsdatenmenge 1702 und den Datenblöcken der Datenmenge 1704 aufweisen, kann die Deltakompression ausgeführt werden. Außerdem kann ein Schema der Datenmenge berechnet werden. Das Schema kann basierend auf den Ähnlichkeits-Hashes über jeden Datenblock der Datenmenge 1704 berechnet werden. Falls keine Ähnlichkeitsübereinstimmung für die Datenblöcke der Datenmenge 1704 vorhanden ist, kann das Schema in einem Datenspeicher gespeichert werden, ohne codiert zu werden. Wenn eine ähnliche Übereinstimmung zwischen den Ähnlichkeits-Hashes (z. B. den Schemata) der Datenblöcke der Datenmenge 1704 und den Ähnlichkeits-Hashes (z. B. den Schemata) der Bezugsdatenmenge 1702 vorhanden ist, dann werden die entsprechenden Datenblöcke der Datenmenge 1704, die der ähnlichen Übereinstimmung zugeordnet sind, codiert, wie über 1720 und 1722 gezeigt ist, wobei dies zu Vorteilen des Datenspeicherwirkungsgrads führt.
  • Im Kontext nach 17 sind die Datenblöcke der Datenmenge 1704 einer ähnlichen Übereinstimmung zugeordnet, wobei sie aber einige Unterschiede (z. B. Inhaltsmodifikationen) im Vergleich zu den Bezugsdatenblöcken der Bezugsdatenmenge 1702 aufweisen, wie in fettgedruckten Quadraten gezeigt ist. Die Codiermaschine 310 kann dann einen Unterschied bezüglich der Bezugsdatenblöcke berechnen und sowohl die modifizierten Datenblöcke 1724, 1726 und 1728 als auch einen Hash-Wert in der Bezugsdatenmenge und/oder dem Bezugsdatenblock exklusiv speichern. Ferner kann die codierte Datenmenge 1706 den Kopf zum Identifizieren des codierten Datenstroms enthalten. Der Kopf kann außerdem Informationen, wie z. B. eine Bezugsblock-ID, wie in 17 gezeigt ist (z. B. ref blk: 3,5, 2), einen Bitvektor mit alles Nullen und eine Anzahl der Körner, die dem codierten Datenstrom zugeordnet ist, enthalten, ist aber nicht darauf eingeschränkt.
  • Die 18A und 18B sind graphische Darstellungen, die eine beispielhafte Verfolgung und Ausmusterung von Bezugsblockmengen unter Verwendung der Datenmüllsammlung beim Flash-Management veranschaulichen. In 18A sind eine Tabelle der Bezugsblockmengen und mehrere Segmente des Speichers in Flash-Speichervorrichtungen mit einem entsprechenden Flash-Segment-Kopf veranschaulicht. Wie dargestellt ist, ist ein Anteil der Segmente des Speichers, der der Flash-Speichervorrichtung zugeordnet ist, belegt. Die Anteile der belegten Segmente sind z. B. auf die Anteile bezogen, die (1, 2), (3, 1) und (1, 1) enthalten. Dieser Anteile der Segmente, die der Flash-Speichervorrichtung zugeordnet sind, enthalten einen entsprechenden Flash-Segment-Kopf, der eine Bezugsmenge identifiziert, auf die das Segment zeigt, in Verbindung mit den Bezugsblockmengen und einer zugeordneten Zählung. In der veranschaulichten Ausführungsform spiegelt z. B. der Anteil der belegten Segmente in der Flash-Speichervorrichtung, der durch (3, 1) angegeben ist, wider, dass das Segment eine Bezugsdatenmenge 3 verwendet und die Bezugsdatenmenge 3 eine Menge aufweist, die auf sie zeigt, wie in der Tabelle der Bezugsblockmengen dargestellt ist. Die Tabelle der Bezugsblockmengen enthält außerdem Informationen, die angeben, dass sich Anteile des Speichers in der Speichervorrichtung entweder in Gebrauch, im Bau und/oder noch nicht in Gebrauch befinden.
  • 18B veranschaulicht das Verfolgen und Ausmustern der Bezugsblockmengen unter Verwendung der Datenmüllsammlung beim Flash-Management. Wie vorher in 18A erörtert worden ist, war z. B. ein Anteil der Segmente des Speichers, der der Flash-Speichervorrichtung zugeordnet ist, belegt. Die Abschnitte der belegten Segmente sind z. B. auf die Abschnitte bezogen, die (1, 2), (3, 1) und (1, 1) enthalten. In 18B lautet jedoch der Segmentkopf des Blocks (3, 1) nun (5, 1), was angibt, dass der Block (5, 1) auf eine neue Bezugsdatenmenge im Speicher der Flash-Speichervorrichtung zeigt. Weiterhin ist die Tabelle der Bezugsblockmengen modifiziert worden, die nun zeigt, dass ref#1, die der ID-3 zugeordnet ist, in ref#0 modifiziert worden ist, was angibt, dass keine in den Flash-Speichersegmenten gespeicherten Datenblöcke auf diese entsprechende Bezugsdatenmenge zeigen. Weiterhin weist nun die der ID-5 zugeordnete Bezugsdatenmenge eine ref# von 1 auf, was angibt, dass ein Segment des Flash-Speichers auf die Bezugsdatenmenge zeigt.
  • Im Folgenden werden Systeme und Verfahren zum Implementieren einer effizienten Datenmanagementarchitektur beschrieben. In der obigen Beschreibung wurden für Erklärungszwecke zahlreiche spezifische Einzelheiten dargelegt. Es wird jedoch erkannt, dass die offenbarten Technologien ohne irgendeine gegebene Teilmenge dieser spezifischen Einzelheiten praktiziert werden können. In anderen Fällen sind die Strukturen und die Vorrichtungen in Blockschaltplanform gezeigt. Die offenbarten Technologien sind oben z. B. in einigen Implementierungen bezüglich Anwenderschnittstellen und spezieller Hardware beschrieben worden. Überdies sind die Technologien oben hauptsächlich im Kontext von Online-Diensten offenbart worden, die offenbarten Technologien gelten jedoch für andere Datenquellen und andere Datentypen (z. B. Sammlungen anderer Betriebsmittel, z. B. Bilder, Audio, Web-Seiten).
  • Ein Verweis in der Beschreibung auf ”eine Implementierung” oder ”eine Implementierung” bedeutet, dass ein spezielles Merkmal, eine spezielle Struktur oder eine spezielle Eigenschaft, die im Zusammenhang mit der Implementierung beschrieben ist, in wenigstens einer Implementierung der offenbarten Technologien enthalten ist. Die Auftritte des Ausdrucks ”in einer Implementierung” an verschiedenen Stellen in der Beschreibung beziehen sich nicht notwendigerweise alle auf dieselbe Implementierung.
  • Einige Abschnitte der obigen ausführlichen Beschreibungen wurden hinsichtlich Prozessen und symbolischen Darstellungen der Operationen an Datenbits innerhalb eines Computerspeichers dargestellt. Ein Prozess kann im Allgemeinen als eine selbstkonsistente Folge von Schritten, die zu einem Ergebnis führt, betrachtet werden. Die Schritte können physikalische Beeinflussungen physikalischer Größen umfassen. Diese Größen können die Form elektrischer oder magnetischer Signale annehmen, die gespeichert, übertragen, kombiniert, verglichen und anderweitig beeinflusst werden können. Diese Signale können als in der Form von Bits, Werten, Elementen, Symbolen, Zeichen, Termen, Zahlen oder dergleichen befindlich bezeichnet werden.
  • Diese und ähnliche Begriffe können den geeigneten physikalischen Größen zugeordnet sein und können als Etiketten betrachtet werden, die an diesen Größen angebracht sind. Wenn es nicht spezifisch anders dargelegt ist, wie es aus der vorhergehenden Erörterung offensichtlich ist, wird erkannt, dass sich überall in der Beschreibung die Erörterungen unter Verwendung der Begriffe z. B. ”Verarbeiten” oder ”Rechnen” oder ”Berechnen” oder ”Bestimmen” oder ”Anzeigen” oder dergleichen auf die Vorgänge und Prozesse eines Computersystems oder einer ähnlichen elektronischen Computervorrichtung beziehen können, die die Daten, die als physikalische (elektronische) Größen innerhalb der Register und Speicher des Computersystems dargestellt sind, in andere Daten, die ähnlich als physikalische Größen innerhalb der Speicher oder Register des Computersystems oder anderen derartigen Informationsspeicherungs-, Übertragungs- oder Anzeigevorrichtungen dargestellt sind, beeinflussen und transformieren.
  • Die offenbarten Technologien können sich außerdem auf eine Vorrichtung zum Ausführen der Operationen hier beziehen. Diese Vorrichtung kann für die erforderlichen Zwecke speziell konstruiert sein oder kann einen Universalcomputer, der durch ein in dem Computer gespeichertes Computerprogramm selektiv aktiviert oder rekonfiguriert wird, enthalten. Ein derartiges Computerprogramm kann in einem computerlesbaren Speichermedium, z. B. irgendeinem Typ einer Platte einschließlich Disketten, optischer Platten, CD-ROMs und Magnetplatten, Festwertspeichern (ROMs), Schreib-Lese-Speichern (RAMs), EPROMs, EEPROMs, magnetischen oder optischen Karten, Flash-Speichern einschließlich USB-Schlüsseln mit nichtflüchtigem Speicher oder irgendeinem Typ von Medien, der zum Speichern elektronischer Anweisungen geeignet ist, jedes an einen Computersystembus gekoppelt, gespeichert sein, ist aber nicht darauf eingeschränkt.
  • Die offenbarten Technologien können die Form einer völligen Hardware-Implementierung, einer völligen Software-Implementierung oder einer Implementierung, die sowohl Hardware- als auch Software-Elemente enthält, annehmen. In einigen Implementierungen ist die Technologie in Software implementiert, die Firmware, residente Software, Mikrocode usw. enthält, aber nicht darauf eingeschränkt ist.
  • Weiterhin können die offenbarten Technologien die Form eines Computerprogrammprodukts annehmen, das von einem nichtflüchtigen computerverwendbaren oder computerlesbaren Medium zugänglich ist, das Programmcode für die Verwendung durch einen oder im Zusammenhang mit einem Computer oder irgendeinem Anweisungsausführungssystem bereitstellt. Für die Zwecke dieser Beschreibung kann ein computerverwendbares oder computerlesbares Medium irgendeine Vorrichtung sein, die das Programm für die Verwendung durch das oder im Zusammenhang mit dem Anweisungsausführungssystem, dem Anweisungsausführungsgerät oder der Anweisungsausführungsvorrichtung enthalten, speichern, übertragen, ausbreiten oder transportieren kann.
  • Ein Computersystem oder ein Datenverarbeitungssystem, das zum Speichern und/oder Ausführen von Programmcode geeignet ist, enthält wenigstens einen Prozessor (z. B. einen Hardware-Prozessor), der durch einen Systembus direkt oder indirekt an Speicherelemente gekoppelt ist. Die Speicherelemente können einen lokalen Speicher, der während der tatsächlichen Ausführung des Programmcodes verwendet wird, einen Massenspeicher und Cache-Speichers, die eine vorübergehende Speicherung von wenigstens etwas Programmcode bereitstellen, um die Anzahl zu verringern, wie oft der Code während der Ausführung von dem Massenspeicher wiedergewonnen werden muss, enthalten.
  • An das System können Eingabe-/Ausgabe- oder E-/A-Vorrichtungen (einschließlich Tastaturen, Anzeigen, Zeigevorrichtungen usw., aber nicht eingeschränkt darauf) entweder direkt oder durch dazwischenliegende E-/A-Controller gekoppelt sein.
  • An das System können außerdem Netzadapter gekoppelt sein, um es zu ermöglichen, dass das Datenverarbeitungssystem durch dazwischenliegende private oder öffentliche Netze an andere Datenverarbeitungssysteme oder entfernte Drucker oder Speichervorrichtungen gekoppelt wird. Modems, Kabelmodems und Ethernet-Karten sind nur einige der gegenwärtig verfügbaren Typen von Netzadaptern.
  • Schließlich können die hier dargestellten Prozesse und Anzeigen nicht inhärent auf irgendeinen speziellen Computer oder irgendeine andere Vorrichtung bezogen sein. Es können verschiedene Universalsysteme mit Programmen gemäß den Lehren hier verwendet werden, oder es kann sich als zweckmäßig erweisen, eine weiter spezialisierte Vorrichtung zu konstruieren, um die erforderlichen Verfahrensschritte auszuführen. Die erforderliche Struktur für verschiedene dieser Systeme ergibt sich aus der Beschreibung im Folgenden. Zusätzlich wurden die offenbarten Technologien nicht bezüglich irgendeiner speziellen Programmiersprache beschrieben. Es wird erkannt, dass verschiedene Programmiersprachen verwendet werden können, um die Lehren der Technologien zu implementieren, die hier beschrieben sind.
  • Die vorhergehende Beschreibung der Implementierungen der vorliegenden Techniken und Technologien ist für die Zwecke der Veranschaulichung und Beschreibung dargestellt worden. Es ist nicht vorgesehen, dass sie vollständig ist oder die vorliegenden Techniken und Technologien auf die offenbarte präzise Form einschränkt. Angesichts der obigen Lehren sind viele Modifikationen und Variationen möglich. Es ist vorgesehen, dass der Schutzumfang der vorliegenden Techniken und Technologien nicht durch diese ausführliche Beschreibung eingeschränkt ist. Die vorliegenden Techniken und Technologien können in anderen spezifischen Formen implementiert sein, ohne von ihrem Erfindungsgedanken oder ihren wesentlichen Eigenschaften abzuweichen. Gleichermaßen ist die spezielle Benennung und Unterteilung der Module, Routinen, Merkmale, Attribute, Methodologien und anderen Aspekte nicht verbindlich oder signifikant, wobei die Mechanismen, die die vorliegenden Techniken und Technologien oder ihre Merkmale implementieren, verschiedene Namen, Unterteilungen und/oder Formate aufweisen können. Weiterhin können die Module, Routinen, Merkmale, Attribute, Methodologien und anderen Aspekte der vorliegenden Technologie als Software, Hardware, Firmware oder irgendeine Kombination aus den drei implementiert sein. Wo immer eine Komponente, von der ein Beispiel ein Modul ist, als Software implementiert ist, kann die Komponente außerdem als ein selbstständiges Programm oder als Teil eines größeren Programms, als mehrere separate Programme, als eine statisch oder dynamisch verknüpfte Bibliothek, als ein in den Kern ladbares Modul, als ein Vorrichtungstreiber und/oder in jeder und irgendeiner anderen Weise, die nun oder in der Zukunft in der Computerprogrammierung bekannt ist, implementiert sein. Zusätzlich sind die vorliegenden Techniken und Technologien in keiner Weise auf die Implementierung in irgendeiner spezifischen Programmiersprache oder für irgendein spezifisches Betriebssystem oder irgendeine spezifische Betriebsumgebung eingeschränkt. Entsprechend ist die Offenbarung der vorliegenden Techniken und Technologien als veranschaulichend, aber nicht als einschränkend vorgesehen.

Claims (21)

  1. Verfahren, das Folgendes umfasst: Wiedergewinnen von Bezugsdatenblöcken von einem Datenspeicher; Ansammeln der Bezugsdatenblöcke in einer ersten Menge basierend auf einem Kriterium; Erzeugen einer Bezugsdatenmenge basierend auf einem Anteil der ersten Menge, der die Bezugsdatenblöcke enthält; und Speichern der Bezugsdatenmenge in dem Datenspeicher.
  2. Verfahren nach Anspruch 1, das ferner Folgendes umfasst: Empfangen eines Datenstroms, der eine neue Menge von Datenblöcken enthält; Ausführen einer Analyse an der neuen Menge von Datenblöcken; Codieren der neuen Menge von Datenblöcken basierend auf der Analyse durch das Zuordnen der neuen Menge von Datenblöcken zu der Bezugsdatenmenge; und Aktualisieren einer Tabelle der Datensätze, die jeden codierten Datenblock der neuen Menge von Datenblöcken einem entsprechenden Bezugsdatenblock der Bezugsdatenmenge zuordnet.
  3. Verfahren nach Anspruch 2, wobei die Analyse das Identifizieren enthält, ob zwischen der neuen Menge von Datenblöcken und der Bezugsdatenmenge eine Ähnlichkeit vorhanden ist.
  4. Verfahren nach Anspruch 2, das ferner Folgendes umfasst: Bestimmen der Datenblöcke der neuen Menge, die sich von der Bezugsdatenmenge unterscheiden; Ansammeln der Datenblöcke der neuen Menge, die sich von der Bezugsdatenmenge unterscheiden, in einer zweiten Menge; und Erzeugen einer zweiten Bezugsdatenmenge basierend auf der zweiten Menge, die die Datenblöcke der neuen Menge von Datenblöcken enthält, die sich von der Bezugsdatenmenge unterscheiden.
  5. Verfahren nach Anspruch 4, das ferner Folgendes umfasst: Zuweisen einer Verwendungszählungsvariable zu der zweiten Bezugsdatenmenge; und Speichern der zweiten Bezugsdatenmenge in dem Datenspeicher.
  6. Verfahren nach Anspruch 1, wobei das Kriterium einen vorgegebenen Schwellenwert enthält, der einer Anzahl von Bezugsdatenblöcken für die Einbeziehung in die Bezugsdatenmenge zugeordnet ist.
  7. Verfahren nach Anspruch 1, wobei das Kriterium einen Schwellenwert enthält, der einer Anzahl von Bezugsdatenmengen, die in dem Datenspeicher zu speichern sind, zugeordnet ist.
  8. System, das Folgendes umfasst: einen Prozessor; und einen Speicher, der Anweisungen speichert, die, wenn sie ausgeführt werden, das System veranlassen: Bezugsdatenblöcke von einem Datenspeicher wiederzugewinnen; die Bezugsdatenblöcke basierend auf einem Kriterium in einer ersten Menge anzusammeln; eine Bezugsdatenmenge basierend auf einem Anteil der ersten Menge, der die Bezugsdatenblöcke enthält, zu erzeugen; und die Bezugsdatenmenge in dem Datenspeicher zu speichern.
  9. System nach Anspruch 8, das ferner Folgendes umfasst: Empfangen eines Datenstroms, der eine neue Menge von Datenblöcken enthält; Ausführen einer Analyse an der neuen Menge von Datenblöcken; Codieren der neuen Menge von Datenblöcken basierend auf der Analyse durch das Zuordnen der neuen Menge von Datenblöcken zu der Bezugsdatenmenge; und Aktualisieren einer Tabelle der Datensätze, die jeden codierten Datenblock der neuen Menge von Datenblöcken einem entsprechenden Bezugsdatenblock der Bezugsdatenmenge zuordnet.
  10. System nach Anspruch 9, wobei die Analyse das Identifizieren enthält, ob zwischen der neuen Menge von Datenblöcken und der Bezugsdatenmenge eine Ähnlichkeit vorhanden ist.
  11. System nach Anspruch 9, das ferner Folgendes umfasst: Bestimmen der Datenblöcke der neuen Menge, die sich von der Bezugsdatenmenge unterscheiden; Ansammeln der Datenblöcke der neuen Menge, die sich von der Bezugsdatenmenge unterscheiden, in einer zweiten Menge; und Erzeugen einer zweiten Bezugsdatenmenge basierend auf der zweiten Menge, die die Datenblöcke der neuen Menge von Datenblöcken enthält, die sich von der Bezugsdatenmenge unterscheiden.
  12. System nach Anspruch 11, das ferner Folgendes umfasst: Zuweisen einer Verwendungszählungsvariable zu der zweiten Bezugsdatenmenge; und Speichern der zweiten Bezugsdatenmenge in dem Datenspeicher.
  13. System nach Anspruch 8, wobei das Kriterium einen vorgegebenen Schwellenwert enthält, der einer Anzahl von Bezugsdatenblöcken für die Einbeziehung in die Bezugsdatenmenge zugeordnet ist.
  14. System nach Anspruch 8, wobei das Kriterium einen Schwellenwert enthält, der einer Anzahl von Bezugsdatenmengen, die in dem Datenspeicher zu speichern sind, zugeordnet ist.
  15. Computerprogrammprodukt, das ein nichtflüchtiges computerverwendbares Medium umfasst, das ein computerlesbares Programm enthält, wobei das computerlesbare Programm, wenn es in einem Computer ausgeführt wird, den Computer zu Folgendem veranlasst: Wiedergewinnen von Bezugsdatenblöcken von einem Datenspeicher; Ansammeln der Bezugsdatenblöcke in einer ersten Menge basierend auf einem Kriterium; Erzeugen einer Bezugsdatenmenge basierend auf einem Anteil der ersten Menge, der die Bezugsdatenblöcke enthält; und Speichern der Bezugsdatenmenge in dem Datenspeicher.
  16. Computerprogrammprodukt nach Anspruch 15, das ferner Folgendes umfasst: Empfangen eines Datenstroms, der eine neue Menge von Datenblöcken enthält; Ausführen einer Analyse an der neuen Menge von Datenblöcken; Codieren der neuen Menge von Datenblöcken basierend auf der Analyse durch das Zuordnen der neuen Menge von Datenblöcken zu der Bezugsdatenmenge; und Aktualisieren einer Tabelle der Datensätze, die jeden codierten Datenblock der neuen Menge von Datenblöcken einem entsprechenden Bezugsdatenblock der Bezugsdatenmenge zuordnet.
  17. Computerprogrammprodukt nach Anspruch 16, wobei die Analyse das Identifizieren enthält, ob zwischen der neuen Menge von Datenblöcken und der Bezugsdatenmenge eine Ähnlichkeit vorhanden ist.
  18. Computerprogrammprodukt nach Anspruch 15, das ferner Folgendes umfasst: Bestimmen der Datenblöcke der neuen Menge, die sich von der Bezugsdatenmenge unterscheiden; Ansammeln der Datenblöcke der neuen Menge, die sich von der Bezugsdatenmenge unterscheiden, in einer zweiten Menge; und Erzeugen einer zweiten Bezugsdatenmenge basierend auf der zweiten Menge, die die Datenblöcke der neuen Menge von Datenblöcken enthält, die sich von der Bezugsdatenmenge unterscheiden.
  19. Computerprogrammprodukt nach Anspruch 18, das ferner Folgendes umfasst: Zuweisen einer Verwendungszählungsvariable zu der zweiten Bezugsdatenmenge; und Speichern der zweiten Bezugsdatenmenge in dem Datenspeicher.
  20. Computerprogrammprodukt nach Anspruch 15, wobei das Kriterium einen vorgegebenen Schwellenwert enthält, der einer Anzahl von Bezugsdatenblöcken für die Einbeziehung in die Bezugsdatenmenge zugeordnet ist.
  21. Computerprogrammprodukt nach Anspruch 15, wobei das Kriterium einen Schwellenwert enthält, der einer Anzahl von Bezugsdatenmengen, die in dem Datenspeicher zu speichern sind, zugeordnet ist.
DE102016013248.5A 2015-11-04 2016-11-04 Bezugsblockansammlung in einer Bezugsmenge zur Deduplizierung beim Speichermanagement Pending DE102016013248A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/932,842 US20170123676A1 (en) 2015-11-04 2015-11-04 Reference Block Aggregating into a Reference Set for Deduplication in Memory Management
US14/932,842 2015-11-04

Publications (1)

Publication Number Publication Date
DE102016013248A1 true DE102016013248A1 (de) 2017-05-04

Family

ID=58546121

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102016013248.5A Pending DE102016013248A1 (de) 2015-11-04 2016-11-04 Bezugsblockansammlung in einer Bezugsmenge zur Deduplizierung beim Speichermanagement

Country Status (5)

Country Link
US (1) US20170123676A1 (de)
JP (1) JP6373328B2 (de)
KR (1) KR102007070B1 (de)
CN (1) CN106886367A (de)
DE (1) DE102016013248A1 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220253222A1 (en) * 2019-11-01 2022-08-11 Huawei Technologies Co., Ltd. Data reduction method, apparatus, computing device, and storage medium

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9235577B2 (en) * 2008-09-04 2016-01-12 Vmware, Inc. File transfer using standard blocks and standard-block identifiers
US9582514B2 (en) 2014-12-27 2017-02-28 Ascava, Inc. Performing multidimensional search and content-associative retrieval on data that has been losslessly reduced using a prime data sieve
US11341136B2 (en) 2015-09-04 2022-05-24 Pure Storage, Inc. Dynamically resizable structures for approximate membership queries
KR20170028825A (ko) 2015-09-04 2017-03-14 퓨어 스토리지, 아이앤씨. 압축된 인덱스들을 사용한 해시 테이블들에서의 메모리 효율적인 스토리지 및 탐색
US11269884B2 (en) 2015-09-04 2022-03-08 Pure Storage, Inc. Dynamically resizable structures for approximate membership queries
US10133503B1 (en) * 2016-05-02 2018-11-20 Pure Storage, Inc. Selecting a deduplication process based on a difference between performance metrics
US10437829B2 (en) * 2016-05-09 2019-10-08 Level 3 Communications, Llc Monitoring network traffic to determine similar content
US10191662B2 (en) 2016-10-04 2019-01-29 Pure Storage, Inc. Dynamic allocation of segments in a flash storage system
US10185505B1 (en) 2016-10-28 2019-01-22 Pure Storage, Inc. Reading a portion of data to replicate a volume based on sequence numbers
US10740294B2 (en) * 2017-01-12 2020-08-11 Pure Storage, Inc. Garbage collection of data blocks in a storage system with direct-mapped storage devices
US10282127B2 (en) 2017-04-20 2019-05-07 Western Digital Technologies, Inc. Managing data in a storage system
US10691340B2 (en) 2017-06-20 2020-06-23 Samsung Electronics Co., Ltd. Deduplication of objects by fundamental data identification
JP7013732B2 (ja) * 2017-08-31 2022-02-01 富士通株式会社 情報処理装置、情報処理方法及びプログラム
CN110610450B (zh) * 2018-06-15 2023-05-05 伊姆西Ip控股有限责任公司 数据处理方法、电子设备和计算机可读存储介质
US20220066994A1 (en) * 2018-12-13 2022-03-03 Ascava, Inc. Efficient retrieval of data that has been losslessly reduced using a prime data sieve
CN112544038A (zh) * 2019-07-22 2021-03-23 华为技术有限公司 存储系统数据压缩的方法、装置、设备及可读存储介质
US11663275B2 (en) 2019-08-05 2023-05-30 International Business Machines Corporation Method for dynamic data blocking in a database system
US11409772B2 (en) 2019-08-05 2022-08-09 International Business Machines Corporation Active learning for data matching
CN110704332B (zh) * 2019-08-29 2021-11-09 深圳大普微电子科技有限公司 一种闪存介质优化方法及非易失性存储设备
US11829250B2 (en) * 2019-09-25 2023-11-28 Veritas Technologies Llc Systems and methods for efficiently backing up large datasets
US10938961B1 (en) 2019-12-18 2021-03-02 Ndata, Inc. Systems and methods for data deduplication by generating similarity metrics using sketch computation
US11119995B2 (en) 2019-12-18 2021-09-14 Ndata, Inc. Systems and methods for sketch computation
US11182359B2 (en) * 2020-01-10 2021-11-23 International Business Machines Corporation Data deduplication in data platforms
EP4111591A1 (de) * 2020-03-25 2023-01-04 Huawei Technologies Co., Ltd. Verfahren und system zur differentiellen kompression
WO2021231255A1 (en) * 2020-05-11 2021-11-18 Ascava, Inc. Exploiting locality of prime data for efficient retrieval of data that has been losslessly reduced using a prime data sieve
JP2022099948A (ja) * 2020-12-23 2022-07-05 株式会社日立製作所 ストレージシステムおよびストレージシステムにおけるデータ量削減方法
US11829622B2 (en) * 2022-02-07 2023-11-28 Vast Data Ltd. Untying compression related links to stale reference chunks
US20230334022A1 (en) * 2022-04-14 2023-10-19 The Hospital For Sick Children System and method for processing and storage of a time-series data stream

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9413825B2 (en) * 2007-10-31 2016-08-09 Emc Corporation Managing file objects in a data storage system
EP2342939A1 (de) * 2008-09-29 2011-07-13 Nokia Siemens Networks Oy Verfahren und vorrichtungen zum verarbeiten einer nachricht, die einen parameter für mehr als eine verbindung umfasst
JP5298982B2 (ja) * 2009-03-17 2013-09-25 日本電気株式会社 ストレージシステム
JP5369807B2 (ja) * 2009-03-24 2013-12-18 日本電気株式会社 ストレージ装置
US8874523B2 (en) * 2010-02-09 2014-10-28 Google Inc. Method and system for providing efficient access to a tape storage system
US8260752B1 (en) * 2010-03-01 2012-09-04 Symantec Corporation Systems and methods for change tracking with multiple backup jobs
WO2011133440A1 (en) * 2010-04-19 2011-10-27 Greenbytes, Inc. A method of minimizing the amount of network bandwidth needed to copy data between data deduplication storage systems
US8392376B2 (en) * 2010-09-03 2013-03-05 Symantec Corporation System and method for scalable reference management in a deduplication based storage system
US8533231B2 (en) * 2011-08-12 2013-09-10 Nexenta Systems, Inc. Cloud storage system with distributed metadata
US9910904B2 (en) * 2011-08-30 2018-03-06 International Business Machines Corporation Replication of data objects from a source server to a target server
CN102323958A (zh) * 2011-10-27 2012-01-18 上海文广互动电视有限公司 重复数据删除方法
US9021203B2 (en) * 2012-05-07 2015-04-28 International Business Machines Corporation Enhancing tiering storage performance
US9110815B2 (en) * 2012-05-07 2015-08-18 International Business Machines Corporation Enhancing data processing performance by cache management of fingerprint index
US9411866B2 (en) * 2012-12-19 2016-08-09 Sap Global Ip Group, Sap Ag Replication mechanisms for database environments
KR102100957B1 (ko) * 2013-03-28 2020-04-16 삼성전자주식회사 휴대용 단말기 사이에서 캐쉬 공유를 이용한 정보 송신 방법 및 장치
GB2518158A (en) * 2013-09-11 2015-03-18 Ibm Method and system for data access in a storage infrastructure
US9772907B2 (en) * 2013-09-13 2017-09-26 Vmware, Inc. Incremental backups using retired snapshots

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220253222A1 (en) * 2019-11-01 2022-08-11 Huawei Technologies Co., Ltd. Data reduction method, apparatus, computing device, and storage medium

Also Published As

Publication number Publication date
US20170123676A1 (en) 2017-05-04
JP2017123151A (ja) 2017-07-13
JP6373328B2 (ja) 2018-08-15
KR102007070B1 (ko) 2019-10-01
CN106886367A (zh) 2017-06-23
KR20170054299A (ko) 2017-05-17

Similar Documents

Publication Publication Date Title
DE102016013248A1 (de) Bezugsblockansammlung in einer Bezugsmenge zur Deduplizierung beim Speichermanagement
DE112012005037B4 (de) Verwalten von redundanten unveränderlichen Dateien unter Verwendung von Deduplizierungen in Speicher-Clouds
DE112017002941B4 (de) Arbeitslastoptimierte Datendeduplizierung mittels Phantomfingerabdrücken
US20170293450A1 (en) Integrated Flash Management and Deduplication with Marker Based Reference Set Handling
US10891264B2 (en) Distributed, scalable key-value store
CN104731921B (zh) Hadoop分布式文件系统针对日志型小文件的存储和处理方法
US11182256B2 (en) Backup item metadata including range information
US8799238B2 (en) Data deduplication
DE102013206744A1 (de) Deduplizierende speicherung mit verbesserter erkennung von häufigen blöcken
DE202009019139U1 (de) Asynchron verteilte Deduplizierung für replizierte inhaltsadressierte Speichercluster
DE112019000321T5 (de) Transaktionsoperationen in verteilten Multi-Master-Datenverwaltungssystemen
DE202010018481U1 (de) Asynchroner verteilter Objekt-Upload für replizierte Assoziativspeichercluster
DE102013208930A1 (de) Zusammenfassen von Einträgen in einem Deduplizierungs-lndex
DE112017000167B4 (de) Verteilte Datendeduplizierung in einem Prozessorraster
US20170123678A1 (en) Garbage Collection for Reference Sets in Flash Storage Systems
DE102010053282A1 (de) Modifizierter B+ Baum zum Speichern von Nand-Speicher Umleitungszuordnungen
EP3788505B1 (de) Speichern von datenelementen und identifizierung gespeicherter datenelementen
DE112018003585B4 (de) Verfahren, Computerprogrammprodukt und Speicherbandlaufwerk-Hardwareeinheit zum Verbessern der Deduplizierung eines Bandlaufwerkspeichers
CN106446044B (zh) 存储空间回收方法及装置
US20170123689A1 (en) Pipelined Reference Set Construction and Use in Memory Management
US20170123677A1 (en) Integration of Reference Sets with Segment Flash Management
US10719554B1 (en) Selective maintenance of a spatial index
DE112018000227B4 (de) Verfahren zum teilweisen Aktualisieren von Dateninhalten in einem verteilten Speichernetzwerk
CN107506466B (zh) 一种小文件存储方法及系统
US10515055B2 (en) Mapping logical identifiers using multiple identifier spaces

Legal Events

Date Code Title Description
R082 Change of representative

Representative=s name: MEWBURN ELLIS LLP, DE

R079 Amendment of ipc main class

Free format text: PREVIOUS MAIN CLASS: G06F0017300000

Ipc: G06F0016000000

R012 Request for examination validly filed
R081 Change of applicant/patentee

Owner name: WESTERN DIGITAL TECHNOLOGIES, INC., SAN JOSE, US

Free format text: FORMER OWNER: HGST NETHERLANDS B.V., AMSTERDAM, NL

R082 Change of representative

Representative=s name: MEWBURN ELLIS LLP, DE

R082 Change of representative

Representative=s name: MURGITROYD GERMANY PATENTANWALTSGESELLSCHAFT M, DE