DE202014010898U1 - Hierarchische Stückelung von Objekten in einem dezentralen Speichersystem - Google Patents

Hierarchische Stückelung von Objekten in einem dezentralen Speichersystem Download PDF

Info

Publication number
DE202014010898U1
DE202014010898U1 DE202014010898.6U DE202014010898U DE202014010898U1 DE 202014010898 U1 DE202014010898 U1 DE 202014010898U1 DE 202014010898 U DE202014010898 U DE 202014010898U DE 202014010898 U1 DE202014010898 U1 DE 202014010898U1
Authority
DE
Germany
Prior art keywords
journal
segment
blocks
metadata
stored
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
DE202014010898.6U
Other languages
English (en)
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.)
Google LLC
Original Assignee
Google LLC
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 Google LLC filed Critical Google LLC
Publication of DE202014010898U1 publication Critical patent/DE202014010898U1/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2291User-Defined Types; Storage management thereof
    • 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/0614Improving the reliability of 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/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/065Replication mechanisms
    • 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/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]

Abstract

Computersystem für die Platzierungsverwaltung von Objektreplikaten in einem dezentralen Speichersystem mit einer Vielzahl von Instanzen, wobei jede jeweilige Instanz das Folgende umfasst: einen oder mehrere Prozessoren; Speicher; und ein oder mehrere im Speicher abgelegte Programme, wobei das eine oder die mehreren Programme durch einen oder mehrere Prozessoren ausführbare Instruktionen für die Durchführung der nachfolgenden Schritte umfasst: in einer ersten Instanz des dezentralen Speichersystems, das Verfügen über einen oder mehrere Prozessoren und über Speicher, worin der Speicher ein oder mehrere Programme für die Ausführung durch einen oder mehrere Prozessoren speichert: das Empfangen eines ersten Objekts, das einer Erstplatzierungs-Richtlinie zugewiesen ist, worin die Erstplatzierungs-Richtlinie Kriterien dafür festlegt, wo im dezentralen Speichersystem Replikate des ersten Objekts gespeichert werden; das Spalten eines Objekts in eine Vielzahl von Objektsegmenten und die Spaltung eines ersten Objektsegments in eine Vielzahl von Blöcken; das Speichern der Vielzahl von Blöcken in einem ersten Journal, dessen zugewiesene Platzierungs-Richtlinie mit der Erstplatzierungs-Richtlinie übereinstimmt; das Speichern globaler Metadaten für das erste Objekt, worin die globalen Metadaten eine Liste der Vielzahl von Objektsegmenten beinhaltet und worin die Liste eine jeweilige Kennung für jedes der Objektsegmente beinhaltet; das Speichern lokaler Metadaten für das erste Objektsegment, worin die lokalen Metadaten eine Blockliste beinhalten, die jeden Block einer ersten Vielzahl von Blöcken identifiziert und worin die lokalen Metadaten dem ersten Journal zugewiesen werden; das Replizieren des ersten Journals an eine zweite Instanz des dezentralen Speichersystems in Übereinstimmung mit der Erstplatzierungs-Richtlinie, worin die globalen Metadaten aktualisiert werden, um die Replizierung widerzuspiegeln, wohingegen die lokalen Metadaten durch die Replizierung unverändert bleiben.

Description

  • TECHNISCHES GEBIET
  • Die offenbarten Implementierungen beziehen sich im Allgemeinen auf dezentrale Speichersysteme und spezifischer auf die Spaltung von Objekten in Segmente (chunks) und auf die hierarchische Speicherung dieser Segmente. Unter Schutz gestellt werden und Gegenstand des Gebrauchsmusters sind dabei, entsprechend den Vorschriften des Gebrauchsmustergesetzes, lediglich Vorrichtungen wie in den beigefügten Schutzansprüchen definiert, jedoch keine Verfahren. Soweit nachfolgend in der Beschreibung gegebenenfalls auf Verfahren Bezug genommen wird, dienen diese Bezugnahmen lediglich der beispielhaften Erläuterung der in den beigefügten Schutzansprüchen unter Schutz gestellten Vorrichtung oder Vorrichtungen.
  • HINTERGRUND
  • Die Speicherung umfangreicher Datenmengen hat sich von einer zentralisierten Dienst-Architektur auf dezentrale Speichersysteme verlagert. Aus Gebrauchscomputern gebaute dezentrale Speichersysteme bieten Hochperformanz, Verfügbarkeit und Skalierbarkeit zu einem Bruchteil der Kosten monolithischer Disk-Arrays. Daten werden über multiple Instanzen eines dezentralen Speichersystems hinweg an verschiedenen geografischen Standorten repliziert, was ihre Verfügbarkeit erhöht und die Distanz zu Clients im Netzwerk verringert.
  • In einem dezentralen Speichersystem werden Objekte aufgrund von Sachzwängen dynamisch in mehreren Instanzen des dezentralen Speichersystems platziert (d. h. erstellt, gelöscht und/oder bewegt). Es existieren wenige Verfahren für die effiziente Platzierung von Objekten, die in einem weltweiten dezentralen Speichersystem, welches Trillionen von Objekten und Petabytes von Daten speichert und Dutzende über den Planeten verteilte Datenzentren beinhaltet, Gegenstand gewisser Sachzwänge sind.
  • Neue Formen der Visualisierung, Multimedia und andere datenintensive Anwendungen verwenden sehr große Objekte, die hunderte Gigabytes oder größer sein können. Diese großen Objekte zu verwalten schafft zusätzliche Komplexität für ein dezentrales Speichersystem. Zum einen erfolgt der Upload dieses Objekts in ein dezentrales Speichersystem typischerweise in einem Streaming-Modus, indem Objekte in Segmente aufgespalten und jedes Segment individuell geschrieben wird. Dies kann lange Verzögerungen beim Upload verursachen, was durch potentielle Client- und Server-Fehler noch verschärft wird. Darüber hinaus können Segmente zwecks erhöhter operativer Effizienz in größeren Bruchstücken (shards) aggregiert werden. Die Begriffe „Bruchstück” und „Journal” können in diesem Dokument synonym verwendet werden. Folglich ist der effiziente Upload großer Objekte von zunehmender Wichtigkeit für die Speicherindustrie, welche von der Notwendigkeit umfangreicher Systeme vorangetrieben wird, die es Clients erlauben, sich mit jedem zu einer gegebenen Zeit verfügbaren Cluster zu verbinden. Zusätzlich macht das Volumen der Metadaten eines einzelnen Objekts (z. B. 25.000 Segmente für eine 100-Gigabyte-Datei, wobei jedes Segment 4 Megabytes groß ist) die Replizierung und Komprimierung weniger effizient.
  • KURZDARSTELLUNG
  • Offenbarte Implementierungen verteilen den Upload großer Objekte an mehrere Speicherorte gleichzeitig. In diesem Dokument werden Speicherorte als „Bruchstücke”, „aggregierte Bruchstücke” oder „Journals” bezeichnet. Dieses Schema wird implementiert, indem ein großes Objekt in verschiedene Segmente gespalten wird, welche jeweils in einen unterschiedlichen Speicher-Cluster (der an verschiedenen geografischen Standorten liegen kann) hochgeladen werden können. Wenn ein Bruchstück während des Uploads unzugänglich wird (z. B. weil das Bruchstück „voll” ist oder die Instanz, in welcher das Bruchstück gespeichert ist, vom Netz geht), schaltet der Client auf ein neues Bruchstück um, welches sich in einem anderen Cluster befinden kann. Dieses Schema verlangt es nicht, nach Beginn am selben Bruchstück festzuhalten. Ein beendetes Objekt wird durch eine geordnete Liste von Segmentreferenzen dargestellt.
  • In einigen Schemata ist ein Segment die grundlegende Speichereinheit und wird der Standort eines jeden Segments in den globalen Metadaten gespeichert. Für sehr große Objekte resultiert dieses Schema in einer signifikanten Menge an Metadaten für ein einzelnes Objekt, die auf globaler Ebene gespeichert werden. Deshalb benutzen einige Implementierungen ein hierarchisches Stückelungsschema, das die Menge der für jedes Objekt gespeicherten globalen Metadaten verringert. Innerhalb einer hierarchischen Implementierung wird der Begriff „Segment” verwendet, um eine Spaltung auf höchster Ebene zu bezeichnen, welche über auf globaler Ebene gespeicherte, korrespondierende Metadaten verfügt. In diesen Implementierungen wird der Begriff „Block” verwendet, um eine grundlegende tatsächliche Speichereinheit (z. B. 2 Megabytes oder 8 Megabytes) zu beschreiben. Die Blöcke werden lokal für jedes Bruchstück verwaltet. In einem nichthierarchischen System wird die Bezeichnung „Segment” verwendet, um beide Konzepte zu beschreiben, da die grundlegende Speichereinheit die Grundeinheit dafür ist, welche globalen Metadaten gespeichert werden.
  • Hierarchische Stückelung kann auf verschiedene Arten implementiert werden. In einigen Implementierungen umfasst jedes Segment eine Blockliste sogar dann, wenn es nur einen einzigen Block gibt. In diesen Implementierungen existiert immer ein zusätzliches Hierarchielevel für die Suche von Daten, die mit einem Segment korrespondieren. Andere Implementierungen verwenden ein Hybrid-Schema, sodass eine Hierarchie nur dann existiert, wenn sie für große Segmente benötigt wird. In dieser Hybrid-Implementierung können kleine Objekte ein einzelnes Segment umfassen, das mit einem einzelnen Block korrespondiert. Auf der anderen Seite ist dann jedes Segment eines größeren Objekts eine Liste von Blöcken.
  • Die offenbarten hierarchischen Schemata verringern die Menge an globalen Metadaten, was die Kosten der Objektverwaltung oder -verlagerung von einem Speichercluster in einen anderen verringert. Dort wo die Objektsegmente auf globaler Ebene verwaltet werden, werden die Blöcke innerhalb eines Segments auf lokaler Bruckstückebene verwaltet, sodass die Objektmetadaten typischerweise nur eine Segmentreferenz pro Bruchstück enthalten.
  • In einigen Implementierungen erfolgt der Upload-Prozess in den folgenden Schritten: (1) Finde einen verfügbares Bruchstück für den Upload; (2) schreibe Daten in das aktuelle Bruchstück bis entweder das Bruchstück unverfügbar (z. B. voll) ist oder es keine weiteren Daten mehr gibt; (3) füge die aktuelle Segmentreferenz der geordneten Segmentliste hinzu; (4) wenn der Objektupload abgeschlossen ist, schließe das Objekt; (5) wiederhole die Schritte beginnend bei Schritt (1) für den Rest des Objekts.
  • In einigen Implementierungen erfolgt das Auslesen eines Objekts auf dem Speicher in den folgenden Schritten: (1) finde, für das gewünschte Objekt, den Satz von Segmentreferenzen (es gibt immer wenigstens eine); (2) finde aufgrund der Segmentreferenz den Standort des Bruchstücks; (3) lese die Daten aus dem/den Bruchstückstandort/en unter Verwendung der Segmentkennung und der lokalen Bruchstückmetadaten aus; (4) wiederhole die Schritte (2) und (3) für jede Segmentreferenz.
  • Angenommen zum Beispiel, ein Objektupload wurde durch das Beschreiben mit Daten von Bruchstück1 begonnen und dann auf Bruchstück2 umgeschaltet, als Bruchstück1 voll wurde. (Die zwei Bruchstücke Bruchstück1 und Bruchstück1 können in denselben oder unterschiedlichen Instanzen liegen.) Die Objektmetadaten (welche globaler Natur sind) bestehen aus zwei Segmentreferenzen, wohingegen jedes Bruchstück eine lokale Blockliste für jedes Segment verwaltet. Zum Beispiel könnte jedes Bruchstück eine Vielzahl von Blöcken für das Objekt speichern. In diesem Fall ist der Speicher vollständig hierarchisch: Das Objekt wird in Segmente gespalten und jedes Segment wird in Blöcke gespalten. In anderen Implementierungen kann eines der Segmente in eine Vielzahl von Blöcken gespalten werden (dieses Segment wird manchmal als „Super-Segment” bezeichnet), wohingegen ein anderes Segment aus einem einzelnen Block bestehen kann. In letzterem Fall kann die Segmentkennung eine Blockkennung sein.
  • Weil Bruchstück1 und Bruchstück2 voneinander unabhängig sind, können ihre Replikate in verschiedenen Instanzen gespeichert sein. Zum Beispiel kann Bruchstück1 in der Instanz1 und der Instanz2 gespeichert sein, wohingegen Bruchstück2 in der Instanz1 und der Instanz3 gespeichert sein kann.
  • Die offenbarte Methodik verbessert in erheblichem Umfang sowohl die Uploadserviceverfügbarkeit als auch die Speichereffizienz. Diese Methodik unterstützt sowohl fortsetzbare Uploads (z. B. wenn eine Instanz während des Uploads eines großen Objekts vom Netz geht) als auch das Umschalten zu einem neuen Bruchstück mitten im Upload (z. B. wenn ein Bruchstück voll wird). Zusätzlich unterstützt diese Methodik das Schreiben mehrerer Bruchstücke gleichzeitig, was die Performance bei sehr großen Objekten erheblich verbessert. In einigen Implementierungen können Daten für ein einzelnes Objekt auf zwei oder mehr unterschiedliche Bruchstücke in verschiedenen Instanzen gleichzeitig geschrieben werden, ebenso auf zwei oder mehr Bruchstücke in derselben Instanz und sogar innerhalb eines einzigen Journals können zwei oder mehr Prozess-Threads unterschiedliche Datenblöcke in das einzelne Journal schreiben. Natürlich ist ein dezentraler Upload durch die verfügbaren Ressourcen beschränkt. Das dezentrale Speichersystem hat viele verschiedene Clients, die zur selben Zeit Objekte hochladen, daher ist es einem einzelnen sehr großen Objekt eines Clients nicht gestattet, zu viele der verfügbaren Ressourcen zu verbrauchen.
  • Gemäß einiger Implementierungen wird ein Verfahren für die Platzierungsverwaltung von Objektreplikaten in einem dezentralen Speichersystem in einer ersten Instanz des dezentralen Speichersystems durchgeführt. Die erste Instanz hat einen oder mehrere Server, von denen jeder über einen oder mehrere Prozessoren und über Speicherplatz verfügt. Der Speicher speichert ein oder mehrere Programme zur Ausführung durch einen oder mehrere Prozessoren. Die erste Instanz empfängt ein erstes Objekt, das einer Erstplatzierungs-Richtlinie zugewiesen ist. Die Erstplatzierungs-Richtlinie legt Kriterien dafür fest, wo Replikate des ersten Objekts im dezentralen Speichersystem gespeichert werden. In einigen Implementierungen bestimmt jede Platzierungs-Richtlinie eine angestrebte Zahl von Objektreplikaten und Zielorten für diese Replikate. Die erste Instanz spaltet das Objekt in eine Vielzahl von Objektsegmenten und spaltet das erste Objektsegment der Vielzahl von Objektsegmenten in eine Vielzahl an Blöcken. Die erste Instanz speichert die Vielzahl von Blöcken in einem ersten Journal, dessen zugewiesene Platzierungs-Richtlinie mit der Erstplatzierungs-Richtlinie übereinstimmt. Die erste Instanz speichert globale Metadaten für das erste Objekt, das eine Liste der Vielzahl von Objektsegmenten beinhaltet. Die Liste beinhaltet eine jeweilige Kennung für jedes der Objektsegmente. Die erste Instanz speichert lokale Metadaten für das erste Objektsegment, welches eine Blockliste beinhaltet, die jeden Block der Vielzahl von Blöcken eindeutig identifiziert. Die lokalen Metadaten werden dem ersten Journal zugewiesen. Das erste Journal wird anschließend in einer zweiten Instanz des dezentralen Speichersystems in Übereinstimmung mit der Erstplatzierungs-Richtlinie repliziert. Die globalen Metadaten werden aktualisiert, um die Replizierung widerzuspiegeln, wohingegen die lokalen Metadaten durch die Replizierung unverändert bleiben.
  • Gemäß einiger Implementierungen wird ein Verfahren für die Platzierungsverwaltung von Objektreplikaten in einem dezentralen Speichersystem an einer ersten Instanz des dezentralen Speichersystems durchgeführt. Die erste Instanz hat einen oder mehrere Server, von denen jeder über einen oder mehrere Prozessoren und über Speicherplatz verfügt. Der Speicher speichert ein oder mehrere Programme zur Ausführung durch einen oder mehrere Prozessoren. Ein oder mehr Journals werden für die Speicherung von Objektsegmenten geöffnet. Jedem Journal wird eine einzelne Platzierungs-Richtlinie zugewiesen. In einigen Implementierungen bestimmt jede Platzierungs-Richtlinie eine angestrebte Zahl von Objektreplikaten und Zielorten für diese Replikate. Die erste Instanz empfängt ein erstes Objekt, das wenigstens ein erstes Objektsegment umfasst. Das erste Objekt wird einer Erstplatzierungs-Richtlinie zugewiesen. Das erste Objektsegment umfasst eine erste Vielzahl von Blöcken. Die erste Instanz speichert die erste Vielzahl von Blöcken in einem ersten Journal, dessen zugewiesene Platzierungs-Richtlinie mit der Erstplatzierungs-Richtlinie übereinstimmt. Das erste Journal speichert ausschließlich Blöcke von Objekten, deren Platzierungs-Richtlinie mit der Erstplatzierungs-Richtlinie übereinstimmt. Die erste Instanz speichert globale Metadaten für das erste Objekt, welches eine erste Liste von Objektsegmenten beinhaltet, die mit dem ersten Objekt korrespondiert. Die erste Liste beinhaltet eine Kennung für das erste Objektsegment. Die erste Instanz speichert außerdem lokale Metadaten für das erste Objektsegment, welches eine Blockliste beinhaltet, die jeden Block der ersten Vielzahl von Blöcken eindeutig identifiziert. Die lokalen Metadaten werden dem ersten Journal zugewiesen. Für das erste Journal werden die Empfangs- und Speicheroperationen für die erste Vielzahl von Objekten wiederholt, deren zugewiesene Platzierungs-Richtlinien mit der Erstplatzierungs-Richtlinie übereinstimmt, bis dass eine erste Beendigungsbedingung eintritt. In einigen Implementierungen tritt die erste Beendigungsbedingung nach einer zuvor festgelegten Zeitspanne ein, oder nachdem das erste Journal einen zuvor festgelegten Größengrenzwert überschritten hat. Nachdem die erste Beendigungsbedingung eintritt, wird das erste Journal geschlossen, wodurch die Speicherung weiterer Blöcke im ersten Journal verhindert wird. Anschließend wird das erste Journal in einer zweiten Instanz des dezentralen Speichersystems in Übereinstimmung mit der Erstplatzierungs-Richtlinie repliziert. Die globalen Metadaten werden aktualisiert, um die Replizierung widerzuspiegeln, wohingegen die lokalen Metadaten durch die Replizierung unverändert bleiben.
  • KURZBESCHREIBUNG DER ZEICHNUNGEN
  • 1 ist eine konzeptuelle Veranschaulichung eines dezentralen Speichersystems gemäß einiger Implementierungen.
  • 2 ist ein Blockdiagramm, das die Elemente eines dezentralen Speicher systems gemäß einiger Implementierungen veranschaulicht.
  • 3 ist ein Blockdiagramm eines Servers gemäß einiger Implementierungen.
  • 4 ist ein Blockdiagramm eines Instanzenservers gemäß einiger Implementierungen.
  • 5 veranschaulicht die Verwendung eines Journals für die Speicherung von Objektsegmenten in Übereinstimmung mit einigen Implementierungen.
  • 6 veranschaulicht, wie einige Implementierungen die Speicherung eines neuen Objekts bewältigen.
  • 7 veranschaulicht die Struktur eines offenen Journals in Übereinstimmung mit einigen Implementierungen.
  • 8 veranschaulicht, was mit Objektmetadaten und Journalmetadaten geschieht, wenn ein Journal von einer an eine andere Instanz repliziert wird, in Übereinstimmung mit einigen Implementierungen.
  • 9A9C veranschaulichen ein Verfahren der Platzierungsverwaltung von Objektreplikaten in einem dezentralen Speichersystem in Übereinstimmung mit einigen Implementierungen.
  • 10A und 10B veranschaulichen, wie Objektsegmente weiter in Blöcke aufgespalten werden, in Übereinstimmung mit einigen Implementierungen.
  • 11A11D veranschaulichen ein alternatives Verfahren der Platzierungsverwaltung von Objektreplikaten in einem dezentralen Speichersystem in Übereinstimmung mit einigen Implementierungen.
  • 2 veranschaulicht die Speicherung von Segmenten in einem teilweise hierarchischen, dezentralen Speichersystem in Übereinstimmung mit einigen Implementierungen.
  • Gleichnamige Referenzziffern beziehen sich über alle Zeichnungen hinweg auf ihnen entsprechende Bestandteile.
  • BESCHREIBUNG VON IMPLEMENTIERUNGEN
  • Bevor Verfahren für die Platzierungsverwaltung von Objekten in einem dezentralen Speichersystem besprochen werden, ist es lehrreich, ein Musterbeispiel eines Systems vorzustellen, in dem diese Techniken verwendet werden.
  • Überblick dezentraler Speichersysteme
  • Wie in 1 veranschaulicht, beschreiben die offenbarten Implementierungen ein dezentrales Speichersystem. Es existieren multiple Instanzen 102-1, 102-2, ... 102-N an verschiedenen Standorten auf der Erde 100, miteinander verbunden durch Netzwerkkommunikationsverbindungen 104-1, 104-2, ... 104-M. Beachten Sie, dass eine „Instanz” in dieser Patentschrift auch als „Speicherort” bezeichnet wird. Beachten Sie weiterhin, dass eine oder mehre Instanzen (Speicherorte) sich an einem bestimmten physischen Standort (z. B. einem Gebäude, einem Gebäudekomplex innerhalb einer vorgegeben Entfernung voneinander etc.) befinden können. In einigen Implementierungen korrespondiert mit einer Instanz (etwa Instanz 102-1) ein Datenzentrum. In einigen Implementierungen sind verschiedene Instanzen physisch im selben Datenzentrum untergebracht. Eine einzelne Implementierung kann sowohl individuelle Instanzen an verschiedenen geografischen Standorten als auch einen oder mehre Instanzen-Cluster haben, wobei jeder Cluster eine Vielzahl von Instanzen beinhaltet und die Instanzen innerhalb eines jeden Clusters sich an einem einzelnen geografischen Standort befinden.
  • Obwohl das konzeptuelle Diagramm der 1 eine bestimmte Anzahl an Netzwerkkommunikationsverbindungen 104-1 etc. veranschaulicht, können typische Implementierungen über mehr oder weniger Netzwerkkommunikationsverbindungen verfügen. In einigen Implementierungen existieren zwei oder mehr Netzwerkkommunikationsverbindungen zwischen demselben Instanzenpaar. Zum Beispiel stellen die Netzwerkkommunikationsverbindungen 104-5 und 104-6 eine Netzwerkverbindung zwischen den Instanzen 102-2 und 102-6 bereit. In einigen Implementierungen beinhalten die Netzwerkkommunikationsverbindungen eine Glasfaserverkabelung. In einigen Implementierungen verwenden einige der Netzwerkkommunikationsverbindungen kabellose Technologien, wie etwa Mikrowellen. In einigen Implementierungen verfügt jede Netzwerkkommunikationsverbindung über eine spezifische Bandbreite und/oder über spezifische Kosten für die Verwendung dieser Bandbreite. In einigen Implementierungen werden Statistiken betreffend des Datentransfers über eine oder mehrere der Netzwerkkommunikationsverbindungen hinweg gepflegt, einschließlich der Durchgangsrate, Verfügbarkeitszeiten, Verlässlichkeit der Verbindungen etc. Jede Instanz verfügt typischerweise über Datenspeicher und zugewiesene Datenbanken und nutzt eine Servercomputerfarm („Instanzenserver”, wie in 4 veranschaulicht) um alle Aufträge durchzuführen. In einigen Implementierungen verfügen eine oder mehrere Instanzen des dezentralen Speichersystems über eingeschränkte Funktionalität. Zum Beispiel kann die eingeschränkte Funktionalität eine Rolle als Repeater für Datentransmissionen zwischen anderen Instanzen beinhalten. Beachten Sie, dass Instanzen eingeschränkter Funktionalität möglicherweise einige, keine oder alle der Datenzentren beinhalten können.
  • 2 ist ein Blockdiagramm, das Elemente eines dezentralen Speichersystems 200 gemäß einiger Implementierungen veranschaulicht. Das dezentrale Speichersystem 200 beinhaltet die Instanzen 102-1, 102-2, 102-3, 102-4, .... 102-N. Eine entsprechende Instanz 102-1 beinhaltet ein Replikationsmodul 220, das Objektsegmente 238 zwischen Instanzen repliziert. In einigen Implementierungen werden die Objektsegmente 238 in Datenspeichern 224 der entsprechenden Instanz 102-1 gespeichert. Jedes Objektsegment 238 umfasst ein Objekt 226 oder einen Teil eines Objekts 226, wie in 6 veranschaulicht. Die Datenspeicher 224 können dezentrale Datenbanken, Dateisysteme, Sicherungsbänder und jeden anderen Typ von Speichersystem oder -gerät beinhalten, der dazu in der Lage ist, Objekte zu speichern. In einigen Implementierungen verwendet das Replikationsmodul 220 eine oder mehrere Replikationswarteschlangen 222-1, 222-2, ... 222-L, um die Objekte 226 oder die Journals 230 zu replizieren. Replikationsanfragen für zu vervielfältigende Objekte oder Journals werden in der Replikationswarteschlange 222 platziert und die Objekte oder Journals werden repliziert, sobald Ressourcen (z. B. Bandbreite) verfügbar werden. In einigen Implementierungen haben Replikationsanfragen in der Replikationswarteschlange 222 zugewiesene Prioritäten und die Replikationsanfrage mit der höchsten Priorität wird abgearbeitet, sobald Bandbreite verfügbar wird.
  • In einigen Implementierungen erstellt und löscht ein Hintergrund-Replikationsprozess Kopien eines Objekts oder eines Journals auf Grundlage der Platzierungs-Richtlinie 212 und der Zugriffsdaten 210 und/oder des vom Statistik-Server 208 bereit gestellten globalen Zustands 211. Die Platzierungs-Richtlinie 212 bestimmt, wie viele Kopien eines Objekts erwünscht sind, wo die Kopien liegen sollen und in welchem Typ Datenspeicher die Daten gespeichert werden sollen. Unter Verwendung der Platzierungs-Richtlinie 212 gemeinsam mit den Zugriffsdaten 210 (z. B. Daten bezüglich von Speicherstandorten, an denen auf Objektreplikate zugegriffen wurde, Zeiten zu denen auf Objektreplikate an Speicherstandorten zugegriffen wurde, Häufigkeit der Zugriffe auf Objekte an den Speicherstandorten etc.) und/oder dem vom Statistik-Server 208 bereitgestellten globalen Zustand 211 ermittelt ein Standortzuweisungs-Daemon (location assignment daemon, LAD) 206, wo neue Kopien eines Objekts oder Journals erstellt und welche Kopien gelöscht werden können. Sobald neue Kopien erstellt werden, werden Replikationsanfragen in die Replikationswarteschlange 222 eingefügt. In einigen Implementierungen verwaltet der LAD 206 Replikate von Objekten oder Journals auf globaler Ebene für das dezentrale Speichersystem 200. Mit anderen Worten existiert nur ein LAD 206 im dezentralen Speichersystem 200. Die Verwendung der Platzierungs-Richtlinie 212 und der Betrieb des LAD 206 werden weiter unten in größerem Detail beschrieben.
  • Beachten Sie, dass eine entsprechende Platzierungs-Richtlinie 212 allgemein eine Anzahl an zu speichernden Objektreplikaten bestimmen kann, weiterhin in welchen Typen Datenspeichern die Replikate gespeichert werden sollen, Speicherstandorte, an denen die Kopien gespeichert werden sollen etc. In einigen Implementierungen beinhaltet eine entsprechende Platzierungs-Richtlinie 212 aus der Gruppe ausgewählte Kriterien für ein Objekt, bestehend aus einer Mindestanzahl an Objektreplikaten, die im dezentralen Speichersystem vorhanden sein müssen, einer Maximalanzahl an Objektreplikaten, die im dezentralen Speichersystem vorhanden sein dürfen, Typen von Speichergeräten, in denen die Objektreplikate gespeichert werden sollen, Standorte an denen die Objektreplikate gespeichert werden sollen, Standorte an denen die Objektsreplikate nicht gespeichert werden dürfen und ein Altersspektrum für das Objekt, innerhalb dessen die Platzierungs-Richtlinie auf das Objekt Anwendung findet. Zum Beispiel kann eine Erstplatzierungs-Richtlinie bestimmen, dass jedes Objekt in einer Webmail-Anwendung eine Mindestanzahl von 2 Replikaten und eine Höchstanzahl von 5 Replikaten haben muss, worin die Objektreplikate in Datenzentren außerhalb von China gespeichert werden können und mindestens 1 Replikat jedes Objekts auf Band gespeichert werden muss. Eine zweite Platzierungs-Richtlinie für die Webmail-Anwendung kann außerdem bestimmen, dass für jedes Objekt, das älter als 30 Tage ist, eine Mindestanzahl von einem Replikat und eine Höchstanzahl von drei Replikaten im dezentralen Speichersystem 200 gespeichert werden, worin die Objektreplikate in Datenzentren außerhalb von China gespeichert werden können und wenigstens ein Replikat jedes Objekts auf Band gespeichert werden muss.
  • In einigen Implementierungen interagiert ein Anwender 240 mit einem Anwendersystem 242, wobei es sich um ein Computersystem oder ein anderes Gerät handeln kann, das in der Lage dazu ist, einen Webbrowser 244 auszuführen. Eine Benutzeranwendung 246 läuft in einem Webbrowser und greift auf eine Funktionalität zurück, welche der Datenbank-Client 248 bereitstellt, um unter Verwendung eines Netzwerks auf Daten zuzugreifen, welche im dezentralen Speichersystem 200 gespeichert sind. Beim Netzwerk kann es sich um das Internet, ein lokales Netzwerk (LAN), ein Weitverkehrsnetzwerk (WAN), ein kabelloses Netzwerk (WLAN), ein lokales Intranet oder um eine Kombination derselben handeln. In einigen Implementierungen verwendet der Datenbank-Client 248 Informationen in einem globalen Konfigurationsspeicher 204, um eine geeignete Instanz für die Beantwortung der Anfrage zu ermitteln. In einigen Implementierungen läuft die Benutzeranwendung 246 auf dem Anwendersystem 242 ohne einen Webbrowser 244. Exemplarische Benutzeranwendungen beinhalten eine E-Mail-Anwendung und eine Online-Videoanwendung.
  • In einigen Implementierungen speichert jede Instanz Objektmetadaten 228 für jedes der im dezentralen Speichersystem gespeicherten Objekte. Einige Instanzen speichern Objektmetadaten 228 ausschließlich für solche Objekte, deren Replikate in der Instanz gespeichert sind (bezeichnet als „lokale Instanzen”). Einige Instanzen speichern Objektmetadaten 228 für alle Objekte, die irgendwo im dezentralen Speichersystem gespeichert sind (bezeichnet als „globale Instanzen”). Die Objektmetadaten 228 werden mit Bezug auf die 3, 4 und 5 in größerem Detail beschrieben.
  • In einigen Implementierungen speichert jede Instanz Journal-Metadaten 236 für jedes der im dezentralen Speichersystem 200 gespeicherten Journals. Einige Instanzen speichern Journal-Metadaten 236 ausschließlich für Journals, deren Replikate in der Instanz gespeichert sind. Einige Instanzen speichern Journal-Metadaten für alle Journals, die irgendwo im dezentralen Speichersystem gespeichert sind. Die Journal-Metadaten werden unter Bezug auf die 3, 4, 5 und 8 weiter unten in größerem Detail beschrieben.
  • In den Datenspeichern 224 werden mehrere Typen von Journals gespeichert. Die Mehrheit der Journals sind geschlossene Journals 230. Geschlossene Journals 230 speichern keine weiteren Objektsegmente, ihr Inhalt kann aber gelöscht oder komprimiert werden. In einigen Implementierungen können zwei oder mehr kleine geschlossene Journals 230 für dieselbe Platzierungs-Richtlinie 212 in Form eines einzelnen geschlossenen Ersatz-Journals 230 zusammengeheftet werden. Da Daten innerhalb eines geschlossenen Journals 230 gelöscht und komprimiert werden können, können geschlossene Journals 230 mit der Zeit kleiner werden und sich dadurch für das Zusammenheften qualifizieren.
  • Zusätzlich zu den geschlossenen Journals 230 kann eine Instanz 102 über die offenen Journals 232 und 234 verfügen. Wie in 2 gezeigt, werden offene Journals entweder als Haupt-Journals 232 oder als Neben-Journals 234 ausgewiesen. Haupt-Journals 232 und Neben-Journals 234 treten in Paaren auf und befinden sich an unterschiedlichen Instanzen. Wie in größerem Detail weiter unten beschrieben empfängt das Haupt-Journal 232 ein Segment 238 zur Speicherung und überträgt eine Kopie des Segments 238 an die Instanz, wo das korrespondierende Journal 234 gespeichert ist.
  • 3 ist ein Blockdiagramm eines Servers 300 gemäß einiger Implementierungen. Der Server 300 beinhaltet typischerweise einen oder mehre Recheneinheiten (CPUs) 302, eine Uhr 303, welche das gegenwärtige Datum und/oder die Zeit vermeldet, einen oder mehrere Netzwerk- oder andere Kommunikationsoberflächen 304, einen Speicher 314 und einen oder mehrere Kommunikationsbusse 312, um diese Komponenten miteinander zu vernetzen. Die Kommunikationsbusse 312 können (manchmal als Chipset bezeichnete) Schaltkreise beinhalten, welche die Kommunikation zwischen Systemkomponenten ermöglichen und regulieren. In einigen Implementierungen ist die Uhr 303 eine lokale Uhr, die periodisch mit einer Serveruhr synchronisiert wird (z. B. einem Quorum-Uhr-Server oder einem beliebigen anderen Uhr-Server an einem Netzwerk etc.). Der Server 300 kann optionalerweise eine Benutzeroberfläche 306 beinhalten, die ein Anzeigegerät 308 und ein Eingabegerät 310 (z. B. Tastatur, Maus, Touchscreen, Keypads etc.) umfasst. Speicher 314 beinhaltet einen hochtourigen Arbeitsspeicher, wie etwa DRAM, SRAM, DDR RAM oder andere Festkörper-Arbeitsspeichergeräte; und kann nichtflüchtigen Speicher beinhalten, wie etwa eine oder mehrere Magnetplatten-Speichergeräte, optische Plattenspeichergeräte, Flash-Speichergeräte oder andere nichtflüchtige Festkörper-Speichergeräte. Speicher 314 kann optionalerweise einen oder mehrere von der/den CPU(s) 302 entfernt ansässige Speichergeräte beinhalten. Speicher 314 oder alternativ das/die nichtflüchtige(n) Speichergerät(e) in Speicher 314 umfassen ein computerlesbares Speichermedium. In einigen Implementierungen speichert Speicher 314 die folgenden Programme, Module und Datenstrukturen, oder eine Teilmenge daraus:
    • • ein Betriebssystem 316, das Verfahren zur Abwicklung von verschiedenen grundlegenden Systemdienstleistungen und zur Ausführung von Aufgaben, die von der Hardware abhängen;
    • • ein Kommunikationsmodul 318, das der Verbindung anderer Computer zu Server 300 über eine oder mehrere Kommunikationsoberflächen 304 (verkabelt oder kabellos) dient und eine oder mehrere Kommunikationsnetzwerke wie das Internet, andere Weitverkehrsnetzwerke, lokale Netzwerke, breitbandige Ballungsraumnetzwerke usw.;
    • • ein optionales Benutzeroberflächenmodul 320, das Befehle vom Anwender über die Eingabegeräte 310 empfängt und Benutzeroberflächenobjekte auf dem Anzeigegerät 308 erzeugt;
    • • die Konfiguration 204, so wie sie in diesem Dokument beschrieben wird;
    • • den LAD 206, so wie er in diesem Dokument beschrieben wird;
    • • Zugriffsdaten 210, so wie sie in diesem Dokument beschrieben werden;
    • • den globalen Zustand 211, so wie er in diesem Dokument beschrieben wird;
    • • die Platzierungs-Richtlinie 212, so wie sie in diesem Dokument beschrieben wird;
    • • Objektmetadaten 228 für die im dezentralen Speichersystem gespeicherten Objekte. Die Objektmetadaten 228 können eine Objekt-ID 330 beinhalten, welche das Objekt innerhalb des dezentralen Speichersystems eindeutig identifiziert. Die Metadaten 228 können den Verfasser 332 des Objekts beinhalten, wobei es sich um einen Namen und/oder eine Kennung einer Person oder Entität (z. B. Email-Adresse) handeln kann. In einigen Implementierungen ist die Kennung einzigartig. Die Metadaten können einen Datumstempel oder einen Zeitstempel 334 beinhalten, die anzeigen, wann das Objekt erzeugt (z. B. in das dezentrale Speichersystem hochgeladen) wurde. Die Metadaten können die Größe 336 des Objekts beinhalten, die typischerweise in Bytes oder zugewiesenen Blöcken gemessen wird. Die Metadaten beinhalten eine zugewiesene Platzierungs-Richtlinie 338, welche individuell oder aufgrund von anderen Kriterien zugewiesen werden kann (z. B. können alle aus den Vereinigten Staaten hochgeladenen Videos dieselbe Platzierungs-Richtlinie 338 zugewiesen bekommen). Die Verwendung der Platzierungs-Richtlinien wird unter Bezug auf die 56 und 9A9C weiter unten in größerem Detail beschrieben. Die Metadaten 228 beinhalten einen Satz Segment-IDs 346, der das Inhaltssegment für jedes Objekt identifiziert. In einigen Implementierungen ist eine Segment-ID definiert als ein Offset innerhalb eines Objekts. Zum Beispiel hat das erste Segment einen Offset von 0. In einigen Implementierungen werden die Offsets in Megabytes angegeben. In einigen Implementierungen handelt es sich bei den Segment-IDs um einzigartige Kennungen (wie eine GUID). In einigen Implementierungen wird jede Segment-ID durch die Verkettung von Objekt-ID mit dem Offset des Segments gebildet. In einigen Implementierungen wird die Segment-ID unter Verwendung eines Inhalts-Hashs oder einer Kurzfassung des Inhalts gebildet. Mit jeder Segment-ID korrespondiert eine zugewiesene Journal-ID 348, welche anzeigt, in welchem Journal das korrespondierende Segment gespeichert ist; und
    • • die Journal-Metadaten 236 werden für jedes Journal im dezentralen Speichersystem 200 gespeichert. Die Journal-Metadaten 236 beinhalten eine Journal-ID 370 für jedes Journal und einen Satz von Journal-Standorten 372, an denen das Journal gespeichert ist. Die Journal-Standorte 372 bestimmen jede Instanz 102, in der das Journal gespeichert ist und können den Datenspeicher 224 an der Instanz 102 bestimmen, welche das Journal speichert. Die Journal-Metadaten 236 beinhalten außerdem die jedem Journal zugewiesene Platzierungs-Richtlinien-ID 374. Die Platzierungs-Richtlinien-ID 374 identifiziert die dem Journal zugewiesene, einzigartige Platzierungs-Richtlinie 212.
  • Jedes der oben ausgewiesenen Elemente kann in einem oder mehreren der zuvor genannten Speichergeräte gespeichert sein und korrespondiert mit einem Satz an Instruktionen für die Durchführung einer oben beschriebenen Funktion. Der Satz an Instruktionen kann durch einen oder mehrere Prozessoren (z. B. die CPUs 302) ausgeführt werden. Die oben ausgewiesenen Module oder Programme (d. h. Sätze an Instruktionen) müssen nicht als separate Software-Programme, Prozeduren oder Module implementiert werden, sodass diverse Teilmengen dieser Module in diversen Implementierungen kombiniert oder auf andere Weise angeordnet werden können. In einigen Implementierungen kann der Speicher 314 eine Teilmenge der oben ausgewiesenen Module und Datenstrukturen speichern. Des Weiteren kann der Speicher 314 zusätzliche Module und Datenstrukturen speichern, die weiter oben nicht beschrieben wurden.
  • Obwohl 3 einen „Server” zeigt, ist 3 eher als funktionale Beschreibung diverser Merkmale beabsichtigt, die in einem Server-Satz 300 vorhanden sein können, denn als strukturelles Schaubild der in diesem Dokument beschriebenen Implementierungen. In der Praxis, und wie von Fachleuten anerkannt werden wird, könnten die getrennt dargestellten Elemente kombiniert und einzelne Elemente getrennt werden. Zum Beispiel könnten einige der separat in 3 abgebildeten Gegenstände auf einzelnen Servern implementiert werden und vereinzelte Gegenstände könnten auf einem oder mehreren Servern implementiert werden. Die tatsächliche Anzahl an Servern und die Art, wie Merkmale zwischen ihnen verteilt sind, variiert von einer Implementierung zur anderen und kann teilweise vom Umfang des Datenverkehrs abhängen, den das System während Spitzenauslastungszeiten und während durchschnittlicher Auslastungszeiten bewältigen muss. In einigen Implementierungen wird eine Teilmenge des LAD 206, der Zugriffsdaten 210, des globalen Zustands 211 und der Platzierungs-Richtlinie 212 auf separaten Servern gespeichert. Zum Beispiel kann sich der LAD 206 auf einem Server (oder einem Server-Satz) befinden, die Zugriffsdaten 210 und der globale Zustand 211 können sich auf einem Statistik-Server 208 (oder einem Satz Statistik-Server 208) befinden und von diesem gepflegt werden und die Platzierungs-Richtlinie 212 kann sich auf einem weiteren Server (oder einem Satz weiterer Server) befinden.
  • 4 ist ein Blockdiagramm eines Instanzen-Servers 400 für eine Instanz 102, gemäß einiger Implementierungen. Der Instanzen-Server 400 beinhaltet typischerweise eine oder mehrere Prozessoreinheiten (CPUs) 402 für die Ausführung von Modulen, eine das gegenwärtige Datum und/oder die Zeit anzeigende Uhr 403, Programme und/oder Instruktionen, die im Speicher 414 gespeichert sind und deshalb Verarbeitungsoperationen ausführen, eine oder mehrere Netzwerk- oder andere Kommunikationsoberflächen 404, Speicher 414 und einen oder mehrere Kommunikationsbusse 412 zur Vernetzung dieser Komponenten. In einigen Implementierungen ist die Uhr 403 eine lokale Uhr, die periodisch mit einer Serveruhr synchronisiert wird (z. B. einem Quorum-Uhr-Server oder einem beliebigen anderen Uhr-Server an einem Netzwerk etc.). In einigen Implementierungen beinhaltet der Instanzen-Server 400 eine Benutzeroberfläche 406, die sich aus einem Anzeigegerät 408 und einem oder mehreren Eingabegeräten 410 zusammensetzt. In einigen Implementierungen beinhaltet Speicher 414 einen hochtourigen Arbeitsspeicher, wie etwa DRAM, SRAM, DDR RAM oder andere Festkörper-Arbeitsspeichergeräte. In einigen Implementierungen beinhaltet der Speicher 414 einen permanenten Speicher, wie ein oder mehrere Magnetdisketten-Speichergeräte, optische Diskettenspeichergeräte, Flash-Speichergeräte oder andere nichtflüchtige (permanente) Festkörper-Speichergeräte. In einigen Implementierungen beinhaltet der Speicher 414 ein oder mehrere Speichergeräte, die vom/von den Prozessoren 402 entfernt gelegen sind. Speicher 414 oder alternativ das/die nichtflüchtige(n) Speichergerät(e) in Speicher 414 umfassen ein computerlesbares Speichermedium. In einigen Implementierungen speichert Speicher 414 oder das computerlesbare Speichermedium des Speichers 414 die folgenden Programme, Module und Datenstrukturen, oder eine Teilmenge daraus:
    • • ein Betriebssystem 416, das Verfahren zur Abwicklung von verschiedenen grundlegenden Systemdienstleistungen und zur Ausführung von Aufgaben, die von der Hardware abhängen;
    • • ein Kommunikationsmodul 418, das der Verbindung des Instanzen-Servers 400 zu anderen Instanzen-Servern oder Computer über eine oder mehrere Kommunikationsoberflächen 404 (verkabelt oder kabellos) dient und eine oder mehrere Kommunikationsnetzwerke wie das Internet, andere Weitverkehrsnetzwerke, lokale Netzwerke, breitbandige Ballungsraumnetzwerke usw.;
    • • ein optionales Benutzeroberflächenmodul 420, das Befehle vom Anwender über die Eingabegeräte 410 empfängt und Benutzeroberflächenobjekte auf dem Anzeigegerät 408 erzeugt;
    • • ein Replikationsmodul 220 und Replikations-Warteschlangen 222, wie sie in diesem Dokument beschrieben werden;
    • • Datenspeicher 224 (z. B. dezentrale Datenbanken, Dateisysteme, Bandspeicher, Großtabellen etc.), welche die Objektsegmente 238 in den Journals 230, 232 und 234 speichern, wie unter Bezug auf 3 beschrieben;
    • • Objektmetadaten 228 und korrespondierende Metadaten-Elemente 330338, 346 und 348, wie in 3 hinsichtlich Server 300 dargestellt; und
    • • Journal-Metadaten 236 und korrespondierende Journal-Metadaten-Elemente 370, 372 und 374, wie in 3 hinsichtlich Server 300 dargestellt.
  • Jedes der oben ausgewiesenen Elemente kann in einem oder mehreren der zuvor genannten Speichergeräte gespeichert sein und korrespondiert mit einem Satz an Instruktionen für die Durchführung der oben beschriebenen Funktion. Der Satz an Instruktionen kann durch einen oder mehrere Prozessoren (z. B. die CPUs 402) ausgeführt werden. Die oben ausgewiesenen Module oder Programme (d. h. Sätze an Instruktionen) müssen nicht als separate Software-Programme, Prozeduren oder Module implementiert werden, sodass diverse Teilmengen dieser Module in diversen Implementierungen kombiniert oder auf andere Weise angeordnet werden können. In einigen Implementierungen kann der Speicher 414 eine Teilmenge der oben ausgewiesenen Module und Datenstrukturen speichern. Des Weiteren kann der Speicher 414 zusätzliche Module und Datenstrukturen speichern, die weiter oben nicht beschrieben wurden.
  • Obwohl 4 einen „Instanzen-Server” zeigt, ist 4 eher als funktionale Beschreibung diverser Merkmale beabsichtigt, die in einem Server-Satz 400 vorhanden sein können, denn als strukturelles Schaubild der in diesem Dokument beschriebenen Implementierungen. In der Praxis, und wie von Fachleuten anerkannt werden wird, könnten die getrennt dargestellten Elemente kombiniert und einzelne Elemente getrennt werden. Zum Beispiel könnten einige der separat in 4 abgebildeten Gegenstände auf einzelnen Servern implementiert werden und vereinzelte Gegenstände könnten auf einem oder mehreren Servern implementiert werden. Die tatsächliche Anzahl an Servern und die Art, wie Merkmale zwischen ihnen verteilt sind, variiert von einer Implementierung zur anderen und kann teilweise vom Umfang des Datenverkehrs abhängen, den der Server während Spitzenauslastungszeiten und während durchschnittlicher Auslastungszeiten bewältigen muss. Zum Beispiel können sich an einer einzigen Instanz 102 einhundert Instanzen-Server 400 oder gar tausende Instanzen-Server 400 befinden.
  • In einigen Implementierungen wird, um Clients mit schnelleren Reaktionen zu versorgen und Fehlertoleranz bereitzustellen, jedes Programm oder jeder Prozess, der auf einer Instanz abläuft, zwischen mehreren Computer verteilt. Die Anzahl an jedem Programm oder Prozess zugewiesenen Instanzen-Servern 400 kann variieren und hängt von der Arbeitsbelastung ab.
  • 5 veranschaulicht die Verwendung eines Journals für die Speicherung von Objektsegmenten in Übereinstimmung mit einigen Implementierungen. 5 zeigt einen Datenspeicher 224 sowie einen Teil der Objektmetadaten 228 und einen Teil der Journalmetadaten 236 gemeinsam an der Beispielsinstanz 102. Im Datenspeicher 224 werden viele Journals 230, 232 und 234 gespeichert, von daher ist es nützlich, sie visuell in einem zweidimensionalen Gitter darzustellen. (Natürlich ist die visuelle Darstellung irrelevant für den tatsächlich physischen Speicherort der Journals in einem Datenspeicher.) In der Figur werden die Journals in „Reihen” von Journals unterteilt, wobei jede Reihe mit einer einzelnen Platzierungs-Richtlinie 212 korrespondiert. Zum Beispiel korrespondiert die erste Reihe 502-P1 mit der Platzierungs-Richtlinie P1 (212) und beinhaltet die geschlossenen Journals 230, die offenen Haupt-Journals 232 und die offenen Neben-Journals 234. Allen dieser Journals in der ersten Reihe 502-P1 wird die Platzierungs-Richtlinie P1 zugewiesen. Die zweite Reihe 502-P2 korrespondiert mit der Platzierungs-Richtlinie P2 (212) und die letzte Reihe 502-PN korrespondiert mit der Platzierungs-Richtlinie PN (212). Typischerweise ist die Anzahl an Platzierungs-Richtlinien klein, etwa 10, 20, 50 oder vielleicht 100. Wenn die Anzahl an Platzierungs-Richtlinien wächst, wird die Verwaltung von Objektreplikaten weniger effizient.
  • Die Journals im Datenspeicher 224 sind in 5 visuell auch in zwei Spalten unterteilt. Die erste Spalte benennt die geschlossenen Journals 230, welche die Mehrheit der Journals umfasst. Die zweite Spalte beinhaltet die offenen Haupt-Journals 232 und die offenen Neben-Journals 234. Wie von den diversen Rechtecken 238 in jedem Journal veranschaulicht, enthält jedes Journal (ob geschlossenes 230, offenes Haupt- 232 oder offenes Neben-Journal 234) die Objektsegmente 238. Die Objektsegmente können verschiedene Größen haben, aber Implementierungen bestimmen typischerweise eine feste Maximalgröße (z. B. 2 Megabytes, 4 Megabytes oder 8 Megabytes). Die Veranschaulichung der Objektsegmente 238 innerhalb eines Journals vermittelt zutreffenderweise die Tatsache, dass ein Journal viele Objektsegmente verschiedener Größen speichert, aber ist ansonsten nicht repräsentativ für die tatsächliche physische Speicherung der Objektsegmente (z. B. gibt es im Allgemeinen keinen ungenutzten Platz zwischen Objektsegmenten, weil jedes neue Objektsegment 238 am Anfang des unbesetzten Platzes angehängt wird).
  • 5 veranschaulicht, dass diverse Kombinationen offener Journals 232 und 234 für jede Platzierungs-Richtlinie möglich sind. Um die unterschiedlichen Journal-Replikate der hiesigen Figuren und Beschreibungen zu bezeichnen, wird manchmal ein dreiteiliges Label verwendet, wie etwa „232.P4.7”. Der erste Teil (z. B. „232”) bezeichnet den Typ Journal (230 = geschlossen, 232 = offenes Haupt-, 234 = offenes Neben-Journal); der zweite Teil (z. B. „P4”) bezeichnet die Platzierungs-Richtlinie für das Journal; und der dritte Teil (z. B. „7”) bezeichnet lediglich eine fortlaufende Nummer für das Journal (z. B. bezeichnet die „7” in „232.P4.7” das siebte offene Journal der Platzierungs-Richtlinie P4).
  • Wie in 5 veranschaulicht, existiert für die Platzierungs-Richtlinie P1 das einzelne offene Haupt-Journal 232.P1.1 und existieren keine offenen Neben-Journals. Für die Platzierungs-Richtlinie P2 existieren zwei offene Haupt-Journals 232.P2.1 und 232.P2.2.
  • Für die Platzierungs-Richtlinie PN existieren ein offenes Haupt-Journal 232.PN.1 und ein offenes Neben-Journal 234.PN.1. Wie diese Beispiele veranschaulichen, kann die Anzahl an offenen Haupt-Journals 232 und offener Neben-Journals 234 zwischen Platzierungs-Richtlinien variieren und wird die Anzahl typischerweise für jede Richtlinie 212 aufgrund der erwartbaren Anzahl an neuen Objekten 226 für jede Platzierungs-Richtlinie 212 und des erwünschten Standorts für diese Objekte 226 konfiguriert.
  • Jede Instanz 102 speichert außerdem sowohl Objektmetadaten 228 und Journalmetadaten 236, wie zuvor unter Bezug auf 3 beschrieben. Für jedes Objekt 226 beinhalten die Objektmetadaten 228 die Objekt-ID 330 (welche das Objekt auf eindeutige Weise identifiziert), weiterhin einen Satz von einer oder mehrerer Segment-IDs 346, welche die Objekt-Segmente 238 des Objekts identifizieren und eine jedem Segment-ID 236 zugewiesene Journal-ID 348. Wenn ein Objekt über mehrere Segmente 238 verfügt, werden die Segmente 238 nicht notwendigerweise alle im selben Journal gespeichert (z. B. zwecks Lastverteilung), daher müssen die Objektmetadaten 228 die jeder Segment-ID 346 zugewiesene Journal-ID 348 nachverfolgen.
  • Jede Instanz 102 speichert außerdem die Journal-Metadaten 236 für jedes an der Instanz 102 gespeicherte Journal. Die Metadaten 236 beinhalten für jedes Journal eine Journal-ID 370, wie auch einen Satz Standorte 372. In einigen Implementierungen benennt eine Standort-ID eine Instanz; an welcher die Journals gespeichert sind. In einigen Implementierungen benennt eine Standort-ID außerdem einen Datenspeicher an der angegebenen Instanz. In einigen Implementierungen werden eine Instanzenkennung und eine Datenspeicherkennung als separate Attribute für jedes Journal gespeichert. In einigen Implementierungen kann ein Journal in zwei oder mehr Datenspeichern an einer einzelnen Instanz (z. B. einem Dateisystem-Datenspeicher und einem Sicherungsband-Datenspeicher) gespeichert werden. Die Journal-Metadaten 236 beinhalten außerdem eine Platzierungs-Richtlinien-ID 374, welche die mit jedem Journal korrespondierende, eindeutige Platzierungs-Richtlinie 212 festlegt. Jedes Journal speichert ausschließlich solche Objektsegmente 238, deren Platzierungs-Richtlinien 338 mit der Platzierungs-Richtlinie des Journals übereinstimmen.
  • 6 veranschaulicht, wie einige Implementierungen die Speicherung eines neuen Objekts 226 bewerkstelligen. Wie in 6 veranschaulicht, hat jedes neue Objekt sowohl einen Objektinhalt (also das Objekt 226 selbst) als auch eine Objekt-ID 330 (z. B. 58440912) sowie eine zugewiesene Platzierungs-Richtlinie 330 (z. B. P3). Das neue Objekt 226 kann aus vielen verschiedenen Anwendungen 246, etwa einer Online-Email-Anwendung, einer Video-Sharing-Website usw. stammen. Das dezentrale Speichersystem 200 empfängt das neue Objekt 226 und leitet (602) das neue Objekt 226 an eine geeignete Instanz weiter, etwa an die Instanz 102-1. In einigen Implementierungen leitet die Anwendung 246 das neue Objekt 226 an eine bestimmte Instanz 102-1 weiter. Wenn die von der Anwendung 246 ausgewählte Instanz 102-1 nicht ordnungsgemäß ist, leiten einige Implementierungen das Objekt 226 an eine geeignete Instanz weiter (z. B. wenn die Platzierungs-Richtlinie 212 eine Speicherung außerhalb von Europa festlegt und das Objekt 226 an einer Instanz in Europa empfangen wird, kann die Instanz das Objekt 226 an eine andere Instanz weiterleiten).
  • Obwohl die meisten Objekte von moderater Größe sind (z. B. kleiner als 300 Kilobytes), gibt es einige große Objekte. Einige Implementierungen spalten (604) große Objekte in mehrere Segmente 238. Im Allgemeinen bestimmt jede Implementierung eine Segmentgröße oder hat jede Implementierung einen konfigurierbaren Parameter, um die Segmentgröße festzulegen, die typischerweise in Megabytes angegeben wird (z. B. 2, 4, 8, 16 oder 32 Megabytes). Jedes Objekt, das größer als die Segmentgröße ist, wird in mehrere Segmente gespalten und jedes Objekt, dessen Größe gleich groß oder kleiner als die Segmentgröße ist, besteht aus einem einzelnen Segment. In der Veranschaulichung in 6 existieren drei Segmente C1, C2 und C3. In dieser Veranschaulichung hat jedes der Segmente eine sieben Zeichen lange alphanumerische Segment-ID 346, es sind aber viele alternative Segment-ID-Formate möglich, welche die Segmente innerhalb jedes Objekts eindeutig bezeichnen. In einigen Implementierungen wird eine Segment-ID 346 unter Verwendung eines Inhalts-Hashs oder einer Kurzfassung des Inhalts erzeugt.
  • In einigen Implementierungen kann es viele Objektduplikate geben (z. B. einen an eine Gruppe von Menschen versandten Email-Anhang, der an viele verschiedene zusätzliche Menschen weitergeleitet wurde), von daher kann die Löschung von Duplikaten für eine effiziente Speicherung nützlich sein. Daher wird in einigen Ausführungsformen der Inhalt eines jeden neuen Segments 238 mit existierenden Objektsegmenten 238 verglichen (606, z. B. unter Verwendung eines Inhalts-Hashs oder einer Kurzfassung des Inhalts) um ausschließlich „neue” Segmente 238 in einem offenen Haupt-Journal zu speichern (606).
  • Wie in 5 veranschaulicht, ist Segment C2 neu und korrespondiert mit der Platzierungs-Richtlinie P3, deshalb wird C2 in einem mit der Platzierungs-Richtlinie P3 korrespondierenden, offenen Haupt-Journal 232.P3.1 gespeichert. Natürlich ist die Löschung von Duplikaten nur innerhalb des Kontextes einer Platzierungs-Richtlinie sinnvoll. Wenn zwei Segmente identisch, aber zwei unterschiedlichen Platzierungs-Richtlinien zugewiesen sind, werden die zwei Segmente in verschiedenen Journals gespeichert. Anders ausgedrückt, wenn ein neues Segment empfangen wird, wird es nur mit Segmenten derselben Platzierungs-Richtlinie abgeglichen. Ein Segment ist nur dann ein „Duplikat”, wenn es bereits ein identisches gespeichertes Segment derselben Platzierungs-Richtlinie gibt.
  • Ungeachtet dessen, ob das Objektsegment C2 neu ist, speichert (608) die Instanz 102-1 die Objektmetadaten 228 für das Segment 238. Wie zuvor unter Bezug auf die 35 beschrieben, beinhalten die Metadaten 228 die Objekt-ID 330, die Segment-ID 346 und die Journal-ID 348 für das Journal, in dem jedes Segment gespeichert ist. In einigen Implementierungen ist die Segment-ID 346 für ein Objektsegment 238 lediglich der Offset am Anfang eines Segments 238 innerhalb des Objekts. Die in 6 gezeigten Objektmetadaten 228 veranschaulichen außerdem, dass ein Segment für ein Einzelobjekt nicht im selben Journal gespeichert werden muss. Die Segmente C1 und C3 (Segment-IDs C190056 und C098663) befinden sich im selben Journal 232.P3.2 mit der Journal-ID J77298045, wohingegen sich das Segment C2 (Segment-ID C250116) im Journal 232.P3.1 mit der Journal-ID J82117094 befindet.
  • Das Segment C2 wird zur Speicherung in einem Neben-Journal 234.P3.1 an die Instanz 102-2 übertragen (610) und die Segmente C1 und C3 werden zur Speicherung in einem Neben-Journal 234.P3.2 an die Instanz 102-2 übertragen (612).
  • 6 veranschaulicht außerdem, dass ein Haupt-Journal 232 physisch nicht identisch mit seinem korrespondierenden Neben-Journal sein muss. Zuerst sehen wir, dass die Segmente C1 und C3 in einer Reihenfolge im Haupt-Journal 232.P3.2 gespeichert sind, wohingegen diese Segmente im Neben-Journal 234.P3.2 in der umgekehrten Reihenfolge gespeichert sind. Während ein Journal offen ist, können die individuellen Segmente 238 unabhängig voneinander repliziert werden, unterschiedliche Netzwerkpfade beschreiten, oder von unterschiedlichen Prozessoren 402 verarbeitet werden, sodass es keine Garantie gibt, dass sie in derselben Reihenfolge in das Neben-Journal 234.P3.2 geladen werden. Die Tatsache, dass es unterschiedliche Reihenfolgen geben kann, wird, wie weiter unten mit Bezug auf 7 beschrieben, durch den Segmentindex gehandhabt. Zusätzlich zeigt das Haupt-Journal 232.P3.1 das Vorhandensein eines Abfall-„segments” 620 an, das in der Figur als „G” (garbage) bezeichnet wird. Manchmal kann es während eines Uploads einen Fehler oder Aussetzer geben, der Platz beansprucht. Zum Beispiel wird während eines Uploads möglicherweise der Platz für ein Objekt zugewiesen, aber das Segment tatsächlich nicht angehängt. Die Software versucht den Upload aufs Neue, was neuen Platz für das Segment zuweist. Dies kann Löcher oder Abfall innerhalb eines Journals 232 belassen. In diesem Fall wird der Abfall 620 nicht in das Neben-Journal übertragen, sodass sich das Haupt-Journal physisch vom Neben-Journal unterscheidet.
  • 7 veranschaulicht die Struktur eines offenen Journals in Übereinstimmung mit einigen Implementierungen. Obwohl 7 ein offenes Haupt-Journal 232 beschreibt, wäre die Struktur oder ein offenes Neben-Journal 234 ähnlich oder identisch. Ein Journal 232 verfügt über einen Header 702 und einen Block an Speicherplatz 714. Der Speicherplatz 714 beinhaltet einen gefüllten Teil 710, der die Objektsegmente 238 bereits speichert und einen leeren Teil 712, der gegenwärtig ungenutzt ist. Diese Deskriptoren sind aus einigen Gründen nicht vollständig akkurat. Erstens kann der „gefüllte” Platz 710 die Abfallteile 620 beinhalten, die keinen nützlichen Inhalt haben. Zweitens wird der ungenutzte Platz nicht notwendigerweise zur selben Zeit in Gänze zugewiesen. Einige Implementierungen weisen den gesamten Platz für das Journal zu einer Zeit zu und schließen das Journal, wenn es voll ist (was potentiell eine kleine Menge ungenutzten Platzes am Ende übrig lässt). In anderen Implementierungen aber werden, wenn notwendig, Blöcke zusätzlichen Platzes zugewiesen, bis das Journal ein bestimmtes Größenlimit erreicht, oder eine bestimmte Menge Zeit (z. B. ein Tag) vergangen ist.
  • Der Header 702 des Journals enthält wichtige interne Informationen über das Journal 232. Der Header 702 beinhaltet ein Feld 704, das bestimmt, wo der ungenutzte Platz 712 des Journals beginnt. Jedes Mal, dass ein neues Segment 238 ans Ende eines gefüllten Platzes 710 angehängt wird, erhöht sich der Offset 704 um die Größe des Segments 238, sodass das Journal 232 darauf vorbereitet ist, das nächste Segment abzuspeichern.
  • Der Header 702 beinhaltet außerdem einen Segmentindex 706. Der Segmentindex 706 für ein Journal 232 bestimmt sowohl, wo sich jedes Segment 238 innerhalb des Journals 232 befindet, als auch seine Größe, was ein rasches Auslesen der Segmentdaten (ob aus nichtflüchtigem Speicher oder dem Cache) ermöglicht. Der Schlüssel für das Segmentindex 706 ist die Segment-ID 346, welche das Segment eindeutig identifiziert. Beachten Sie, dass sich mehrere unterschiedliche Objekt-IDs 330 auf dieselben physischen Segmente beziehen können. Um einen übergroßen Segmentindex 704 mit vielen Einträgen, die auf dasselbe Objektsegment 238 verweisen, zu vermeiden, verwenden Implementierungen typischerweise eine einzelne Segment-ID, um sich auf denselben physischen Inhalt zu beziehen. Zum Beispiel kann es sich bei der Segment-ID 346 um einen Inhalts-Hash oder um eine Kurzfassung eines Inhalts (oder um eine Kombination derselben) handeln. Für jede Segment-ID 346 bestimmt der Segmentindex 720 ein Offset 720 und eine Größe 722 für das Segment 238 innerhalb des Speicherplatzes 714. Der Offset 720 kann entweder als Offset am Anfang des Journals 232 oder als Offset am Anfang des gefüllten Platzes 710 festgelegt werden. In einigen Implementierungen enthält der Segmentindex zusätzliche Informationen wie etwa einen Löschmarker, der später verwendet wird, wenn die Segmente gelöscht wurden und der gefüllte Platz 710 komprimiert wurde.
  • Der Header 702 kann sowohl weitere Journaldaten 708 als auch Adressenimplementierungsdetails enthalten. Zum Beispiel können die weiteren Journaldaten 708 den Offset vom Anfang des Journals zum Anfang des gefüllten Speicherplatzes 714 (d. h. der Größe des Headers) bestimmen. In einigen Implementierungen beinhalten die anderen Journaldaten einen „Lebenszeit”-Parameter für Journals, die dazu bestimmt sind, eine kurze Lebensspanne zu haben.
  • Obwohl die Struktur des Journals in 7 die eines offenen Haupt-Journals 232 ist, findet dieselbe grundlegende Struktur Anwendung auf offene Neben-Journals 234 und auch auf die geschlossenen Journals 230.
  • 8 veranschaulicht, was mit den Objektmetadaten 228 und den Journalmetadaten 236 passiert, wenn ein Journal von einer Instanz in die andere repliziert wird, in Übereinstimmung mit einigen Implementierungen. In dieser Veranschaulichung wird das geschlossene Journal 230 mit der Journal-ID J82117094 (820) von der Instanz 102-1 (mit Instanz-ID = 723) in die Instanz 102-4 (mit der Instanz-ID 428) bewegt. Weil das Journal 230 selbst als Einheit repliziert wird, wird der gesamte Inhalt exakt repliziert. Zum Beispiel befindet sich Segment C8 (mit der Segment-ID C408335) an exakt derselben Position innerhalb des Journals. Natürlich handhaben die Instanzen 102-1 und 102-4 nach der Replizierung unabhängig voneinander Löschungen und Komprimierung, sodass ihre physischen Strukturen einander nach der Replizierung nicht unbedingt entsprechen.
  • 8 zeigt außerdem einen Teil der Objektmetadaten 228 und Journal-Metadaten 236, sowohl vor als auch nach der Replizierung 820. Wie angegeben, bleiben die Aufzeichnungen 802814 in den Objektmetadaten 228 durch die Replizierung 820 unverändert. Jedes Objekt 226 verfügt über dieselben Segmente 238 und die Segmente 238 werden im selben Journal 230 gespeichert. Zum Beispiel bleibt das Segment mit der Segment-ID C408335 (in Reihe 804) unverändert. Auf der anderen Seite verändern sich die Journal-Metadaten 236 für das Journal 230 mit der Journal-ID J82117094 (370-1) durchaus. Der Satz von Journalstandorten 372 verändert sich von 372-1(A) zu 372-1(B), was den neuen Standort 428 (für die Instanz 102-4) beinhaltet.
  • 9A9C veranschaulichen ein Verfahren 900 der Verwaltung (902) der Platzierung von Objektreplikaten in einem dezentralen Speichersystem 200 gemäß einiger Implementierungen. Das Verfahren wird in einer ersten Instanz 102 des dezentralen Speichersystems durchgeführt (904), die über einen oder mehrere Prozessoren und einen Speicher verfügt. Der Speicher speichert (906) eine Vielzahl von Objekten. Der Speicher speichert (908) außerdem ein oder mehrere Programme für die Ausführung durch einen oder mehrere Prozessoren. In einigen Implementierungen wird das Verfahren 900 insgesamt oder teilweise durch den Standortzuweisungs-Daemon 206 ausgeführt. In einigen Implementierungen verfügt (910) das dezentrale Speichersystem über eine Vielzahl von Instanzen. In einigen Implementierungen befindet (910) sich wenigstens eine Teilmenge der Instanzen an verschiedenen geografischen Standorten. In einigen Implementierungen korrespondiert jede Instanz mit einem Datenzentrum. In einigen Implementierungen umfasst jedes Datenzentrum eine oder mehrere Instanzen.
  • In der ersten Instanz werden eine oder mehrere Journals 232 für die Speicherung von Objektsegmenten geöffnet (912). Jedem Journal wird eine einzelne jeweilige Platzierungs-Richtlinie 212 zugewiesen (914). In einigen Implementierungen bestimmt (926) jede Platzierungs-Richtlinie eine Zielanzahl an Objektreplikaten und einen Zielsatz an Standorten für die Objektreplikate. In einigen Implementierungen kann eine Platzierungs-Richtlinie 212 festlegen, welche Typen von Datenspeichern 224 in einigen der Instanzen verwendet werden sollen (z. B. auf Festplatte oder auf Band). In einigen Implementierungen beinhaltet (918) das dezentrale Speichersystem 200 die Objektmetadaten 228, die bestimmen, in welchem Journal jedes Objektsegment 238 gespeichert wird. Dies wurde zuvor unter Bezug auf die 35 beschrieben. In einigen Implementierungen beinhaltet (920) jedes jeweilige Journal einen Segmentindex 706, der den Standort jedes im jeweiligen Journal gespeicherten Objekts bestimmt. Dies wurde in größerem Detail in 7 beschrieben. Insbesondere wird der Standort jedes Segments in einem Journal im Verhältnis zum Journal selbst identifiziert, sodass der Segmentindex 706 ungeachtet dessen richtig ist, wo das Journal gespeichert ist. Zum Beispiel kann durch die Definierung der Segmentstandorte innerhalb eines Journals als Offsets auf die Segmente durch relative Adressierung zugegriffen werden.
  • Die offenbarten Implementierungen beinhalten (922) typischerweise die Journalmetadaten 236, welche die Standorte 372 bestimmen, an denen jedes Journal gespeichert wird. Dies wurde zuvor in den 35 und 8 beschrieben.
  • Die Verteilung der offenen Haupt-Journals 232 und der offenen Neben-Journal 234 hängt von vielen Faktoren ab, einschließlich der verfügbaren Instanzen 102, der Platzierungs-Richtlinie 212, der erwartbaren Verteilung neuer Objekte 226 mit den Platzierungs-Richtlinien 212, des Orts von dem aus neue Objekte hochgeladen werden (z. B. Europa, Nordamerika, Asien), der Ressourcenverarbeitung an jeder der verfügbaren Instanzen 102 und der Netzwerkbandbreite zwischen den diversen Instanzen. Zum Beispiel werden, wenn viele Objekte mit einer bestimmten Platzierungs-Richtlinie an einer bestimmten Instanz hochgeladen werden, mehrere Journals für dieselbe Platzierungs-Richtlinie an dieser Instanz geöffnet (924). In einigen Szenarien können 5, 10 oder mehr offene Journals für dieselbe Platzierungs-Richtlinie 212 an einer einzelnen Instanz 102 existieren, wenn dies für die Lastverteilung erforderlich ist.
  • Wie zuvor unter Bezug auf die 5 und 6 beschrieben, senden (916) einige Implementierungen eine Nachricht an eine dritte Instanz des dezentralen Speichersystems 200, die sie anweist, die mit den an der ersten Instanz geöffneten Journals korrespondierenden Journals zu öffnen. In diesem Szenario werden die an der ersten Instanz geöffneten Journals 232 als Haupt-Journals und die an der dritten Instanz geöffneten Journals 234 als Neben-Journals bezeichnet. (Natürlich könnte die erste Instanz auch über Neben-Journals und könnte die dritte Instanz über Haupt-Journals verfügen.)
  • An der ersten Instanz 102 wird ein erstes Objekt 226 empfangen (928), das mindestens ein erstes Objektsegment umfasst (928). Dies wurde oben unter Bezug auf die 6 beschrieben. Das erste Objekt 226 wird einer Erstplatzierungs-Richtlinie 212 zugewiesen, wodurch alle Objektsegmente 238, die das Objekt 226 umfasst, der Erstplatzierungs-Richtlinie 212 zugewiesen werden. Das erste Objektsegment 238 wird in einem ersten Journal 232 gespeichert (930), dessen zugewiesene Platzierungs-Richtlinie mit der Erstplatzierungs-Richtlinie 212 übereinstimmt. Das erste Journal 232 speichert ausschließlich (932) Objektsegmente für Objekte, deren Platzierungs-Richtlinie mit der Erstplatzierungs-Richtlinie übereinstimmt. In einigen Implementierungen wird jedes im ersten Journal 232 gespeicherte Objektsegment 238 an die dritte Instanz übertragen (934), um dort in einem dritten Journals 234 gespeichert zu werden.
  • Wenn das empfangene Objekt größer als die Segmentgröße ist, wird das Objekt in mehrere Segmente 238 gespalten. In diesem Fall umfasst (936) das erste Objekt 226 zwei oder mehr Objektsegmente. Typischerweise unterscheidet sich (936) das zweite Objektsegment vom ersten Objektsegment. (Das Vorhandensein zweier identischer Segmente innerhalb eines einzigen Objekts ist selten, kann aber vorkommen, zum Beispiel wenn ein Objekt einen sehr großen Anteil leeren Platzes hatte.) In bestimmten Fällen wird das zweite Objektsegment in einem zweiten, vom ersten Journal unterschiedlichen Journal 232 gespeichert (938), dessen zugewiesene Platzierungs-Richtlinie mit der Erstplatzierungs-Richtlinie übereinstimmt. Das zweite Journal speichert ausschließlich (938) Objektsegmente für Objekte, deren Platzierungs-Richtlinie mit der Erstplatzierungs-Richtlinie übereinstimmt. Auf diese Weise könnte ein Objekt, das viele Segmente umfasst, die Segmente über viele verschiedene Journals verteilt haben.
  • Dieser Vorgang des Empfangens von Objekten 226 und der Speicherung der Segmente 238 im ersten Journal 232 wird für eine Vielzahl von Objekten 226, deren zugewiesene Platzierungs-Richtlinie 338 mit der Erstplatzierungs-Richtlinie 212 übereinstimmt, solange wiederholt (940), bis dass eine erste Beendigungsbedingung eintrifft. In einigen Implementierungen tritt die erste Beendigungsbedingung ein, wenn (942) die Größe des ersten Journals einen zuvor festgelegten Grenzwert überschreitet. In einigen Implementierungen tritt die erste Beendigungsbedingung ein, wenn (944) das erste Journal für eine zuvor festgelegte Zeitspanne offen gewesen ist. Einige Implementierungen verbinden Größe und Zeit auf verschiedene Arten und Weisen. Zum Beispiel bestimmen einige Implementierungen sowohl eine Zeitspanne als auch ein Größenlimit und die Beendigungsbedingung ist diejenige, welche als erstes eintritt.
  • Nachdem die erste Beendigungsbedingung eintritt, wird das erste Journal geschlossen (946), wodurch die Speicherung weiterer Objektsegmente im ersten Journal 232 verhindert wird. Im Allgemeinen versichern sich Implementierungen, dass die anderen Journals 232 derselben Platzierungs-Richtlinie weiterhin offen sind (oder ein neues geöffnet wird) bevor sie das erste Journal schließen. Da Objekte zu jeder Zeit ankommen können, ist es wichtig, offene Journals für die Speicherung bereit zu halten. Wenn ein korrespondierendes Neben-Journal 234 an einer anderen Instanz existiert, sendet (948) die erste Instanz eine Nachricht an die andere Instanz, die sie anweist, das korrespondierende Neben-Journal zu schließen, sobald die erste Beendigungsbedingung eintritt.
  • Nachdem das erste Journal 232 geschlossen wurde, unterliegt das Journal seiner Platzierungs-Richtlinie. Die Erfüllung der Platzierungs-Richtlinie 212 kann das Bewegen eines Journalreplikats, die Erstellung einer neuen Kopie eines Journalreplikats, oder die Löschung eines Journalreplikats erfordern. In bestimmten Fällen wird das erste Journal 232 in einer zweiten Instanz 102 des dezentralen Speichersystems 200 in Übereinstimmung mit der Platzierungs-Richtlinie 212 repliziert (950). (In anderen Fällen wird ein Replikat des ersten Journals gelöscht.) In Implementierungen, die über offene Haupt- und Neben-Journals 232 und 234 verfügen, werden, sobald sie geschlossen wurden, zwei einander entsprechende geschlossene Journals 230 existieren. Folglich könnte jedes der Replikate als Ausgangspunkt für die Replizierung 950 verwendet werden. Während des Replizierungsvorgangs 950 (d. h. als Teil der Transaktion) werden die Journalmetadaten 236 für das erste Journal aktualisiert (952), um anzuzeigen, dass es an der zweiten Instanz eine Kopie des Journals gibt. Dies wurde oben unter Bezug auf die 8 beschrieben.
  • Nachdem ein Journal 230 geschlossen wurde, können die Objektsegmente 238 gelöscht werden. Zum Beispiel kann mit einem Objekt ein Email-Anhang korrespondieren. Wenn der Empfänger einer Email die Email löscht, kann der für den Anhang verwendete Speicher gelöscht werden. Nach einem gewissen Zeitraum entstehen durch die Löschungen Löcher innerhalb jedes Journals und ist es daher nützlich, das Journal zu komprimieren, um verschwendeten Platz zu entfernen. Dies ist vergleichbar mit der Fragmentierung flüchtigen Speichers und mit dem Defragmentierungsprozess, um ungenutzten Platz in größeren, fortlaufenden Blöcken zu verdichten.
  • Da ein gespeichertes Objektsegment mit vielen (z. B. hunderten, tausenden oder Millionen) unterschiedlichen Objekten korrespondieren kann, kann ein Objektsegment in einem Journal nur dann gelöscht werden, wenn keine Verweise darauf mehr existieren. Folglich ermittelt (956) der Prozess 900, sobald ein erstes geschlossenes Journal 230 ausgewählt (954) wurde, ein oder mehrere im ersten geschlossenen Journal 230 gespeicherte Objektsegmente, bezüglich derer in den Objektmetadaten 228 keine Verweise existieren. Bezüglich dieser ermittelten Segmente 238 wird der Segmentindex 706 aktualisiert (958), um die korrespondierenden Aufzeichnungen zu entfernen. In einigen Implementierungen wird der zuvor den ermittelten Objektsegmenten zugewiesene Platz überschrieben (z. B. wird jedes Byte auf ASCII 0 gesetzt), während in anderen Implementierungen der Platz einfach nicht länger referenziert wird. In einigen Implementierungen wird der freigegebene Speicherplatz als Teil der anderen Journaldaten 708 nachgehalten. Zum Beispiel pflegen einige Implementierungen eine Liste freigegebenen Speicherplatzes (z. B. Offset und Größe) und halten den frei gewordenen Platz als verbundene Liste nach.
  • In einigen Implementierungen läuft periodisch ein Abfallsammlungsalgorithmus, um jedes der geschlossenen Journals zu komprimieren (960). Der Komprimierungsvorgang verdichtet (960) die gespeicherten Objektsegmente in einem fortlaufenden Block, was die Größe des Journals 230 verringert. Mit der Zeit können die Journals 230 dadurch klein werden, dass mehr und mehr Objektsegmente gelöscht werden. Die Verwaltung vieler kleiner Journals bedeutet einen Mehraufwand vergleichbar der Verwaltung individueller Objekte, wodurch der Nutzen eines Journalspeichers abnimmt. Um mit dieser Problematik umzugehen heften (962) einige Implementierungen zwei oder mehr geschlossene Journals zusammen, um ein einziges Ersatzjournal zu bilden, und aktualisieren (962) die Objektmetadaten 228, um anzuzeigen, dass die zuvor in den zwei oder mehr Journals gespeicherten Objektsegmente nun im Ersatzjournal gespeichert werden. Da ein Zusammenheftungsvorgang der Bildung eines vollkommen neuen Journals und der Aktualisierung der Metadaten für alle involvierten Objekte bedarf, wird die Zusammenheftung üblicherweise auf ein Szenario beschränkt, in dem die Journals relativ klein geworden sind.
  • 10A und 10B veranschaulichen zwei Implementierungen für die Speicherung von Objekten und zugewiesener Metadaten in einem dezentralen Speichersystem. Die in 10A veranschaulichte Implementierung ist vollständig hierarchisch: Jedes Objekt wird in ein oder mehrere Segmente gespalten und jedes Segment wird in einen oder mehrere Blöcke gespalten. Beachten Sie, dass die Struktur sogar dann hierarchisch ist, wenn nur ein Segment oder nur ein Block existiert. Auf der anderen Seite ist die in 10B veranschaulichte Implementierung nur teilweise hierarchisch. In dieser Implementierung handelt es sich bei einigen Segmenten um „Super-Segmente”, was sich auf Listen von Blöcken bezieht. Zum Beispiel kann ein Super-Segment über eine Blockliste von 100 Blöcken, 1000 Blöcken oder sogar mehr verfügen. Ein Segment, das kein Super-Segment ist, ist lediglich ein Block. Beziehungsweise bezieht sich die Segmentkennung vielmehr auf einen tatsächlichen Speicher von Objektdaten, anstatt auf eine Blockliste. Dieser Hybrid-Ansatz kann in einem dezentralen Speichersystem nützlich sein, welches sowohl kleine Objekte (für die keine Hierarchie nötig ist) als auch sehr große Objekte umfasst, wo eine Speicherhierarchie sehr viel effizienter ist.
  • Die globalen Metadaten 1002 beinhalten die Objektmetadaten 228 und die Journalmetadaten 236, wie in den 24 veranschaulicht. In einigen Implementierungen wird jeder Segment-ID 346 ein Entschlüsselungsschlüssel 1040 zugewiesen, der zur Entschlüsselung der Daten für das Segment verwendet wird. In diesen Implementierungen würde derselbe Entschlüsselungsschlüssel auf alle Blöcke in einem Segment Anwendung auf solche Segmente finden, die in mehrere Blöcke gespalten werden. Jedes Segment hat seinen eigenen Entschlüsselungsschlüssel 1040, der im Endeffekt einzigartig ist. Einige Implementierungen garantieren die Einzigartigkeit, wenn neue Schlüssel generiert werden, aber einige Implementierungen generieren Schlüssel zufällig, was die Wiederholung von Schlüsseln höchst unwahrscheinlich macht. Der Entschlüsselungsschlüssel 1040 korrespondiert mit einem Verschlüsselungsschlüssel, der verwendet wird, um neue Objekte während der Speicherung zu verschlüsseln. Weil der Entschlüsselungsschlüssel 1040 benötigt wird, um auf jedes neue Objektsegment zuzugreifen, kann die Löschung des Entschlüsselungsschlüssels als „weiche” Löschung eines Objektsegments verwendet werden. Wenn der Entschlüsselungsschlüssel entfernt wurde, handelt es sich bei dem verschlüsselten Speicher um „Abfall” und kann auf die tatsächlichen Daten nicht zugegriffen werden. Dies kann dem Abfallsammlungsalgorithmus mehr Zeit zwischen Komprimierungen gewähren und der Abfallsammlungsvorgang kann, wenn er abläuft, größere Mengen an Speicherplatz zurückgewinnen.
  • Außerdem in 10A veranschaulicht werden das Journal 232 (welches als offen angezeigt wird) und die damit korrespondierenden lokalen Metadaten 1004. In einigen Implementierungen werden die lokalen Metadaten 1004 für das Journal 232 im Journal selbst als Teil des Headers 702 gespeichert. In anderen Implementierungen werden die lokalen Metadaten 1004 für ein Journal als eine separate Datei (oder in einer Datenbank etc.) gespeichert und einem Journal zugewiesen. Die Struktur eines Journals 232 für eine nichthierarchische Speicherung wurde oben unter Bezug auf 7 veranschaulicht. In dieser Implementierung ist, anstelle der Speicherung von Segmenten, die Grundeinheit der Speicherung der Block 1016, wie etwa die Blöcke 1016-1, 1016-2, ..., 1016-N. Jede Implementierungen bestimmt typischerweise eine maximale Blockgröße, wie etwa 2 Megabytes, 4 Megabytes, 8 Megabytes oder 16 Megabytes.
  • Wie oben bemerkt, können die lokalen Metadaten 1004 im Header 702 des Journals 232 oder separat davon gespeichert werden. Für jede Segmentkennung 346 existiert eine korrespondierende Blockliste 1006 (typischerweise eine einzigartige Blockliste), die einen oder mehrere Blockkennungen 1008 umfasst. Für ein kleines Segment kann die Blockliste 1006 eine einzelne Blockkennung 1008 enthalten. Die lokalen Metadaten 1004 beinhalten außerdem einen Blockindex 1010, der festlegt, wo sich jeder Block innerhalb des Journals 232 aufhält. In einigen Implementierungen wird der Standort eines Blocks durch einen Offset und eine Größe bestimmt. Der Block-Offset 1012 ist in einigen Implementierungen der Offset am Anfang des Speicherplatzes 714 oder der Offset am Anfang der Journaldatei 232. Typischerweise wird die Blockgröße 1014 in Bytes angegeben, andere Implementierungen verwenden aber alternative Grundeinheiten für die Größe (z. B. 2 Bytes, 4 Bytes oder 8 Bytes). Ein Aspekt der lokalen Metadaten ist, dass sie sich nicht verändern, wenn ein Journal bewegt oder an einer anderen Instanz repliziert wird: Die Blockliste 1006 für ein Segment bleibt dieselbe, die Block-IDs 1008 bleiben dieselben, die Block-Offsets 1012 innerhalb des Journals bleiben dieselben und die Blockgröße bleibt dieselbe.
  • 10B ist ähnlich der 10A, veranschaulicht aber eine teilweise hierarchische Struktur. In der teilweise hierarchischen Struktur von 10B beinhalten die globalen Metadaten 1002 ein „Super-Segment”-Feld 1020, das anzeigt, ob es sich bei einem Segment um einen gewöhnlichen Block handelt oder es sich auf eine Blockliste bezieht (d. h., dass es sich um ein Super-Segment handelt). In einigen Implementierungen sind die meisten Objekte klein und bestehen aus einem einzelnen Segment. In diesem Fall identifiziert die Segment-ID 346 einen Block unmittelbar im Segment-/Blockindex 1024. Das heißt, dass es sich bei der Segment-ID 346 um eine Segment-/Block-ID 1026 handelt. Somit gilt für Segmente, bei denen es sich nicht um Super-Segmente handelt, dass die Segment-ID 346 verwendet werden kann, um die entsprechende Aufzeichnung im Segment-/Blockindex 1024 nachzuschlagen und so das Offset 1028 und die Größe 1030 für den korrespondierenden Block 1016 im Journal 232 zu finden.
  • Im Falle von Super-Segmenten handelt es sich bei der Segment-ID 346 um eine (Super-)Segment-ID 1022, welche in den lokalen Metadaten 1004 gesucht werden kann. Mit der Super-Segment-ID 1022 korrespondiert eine Blockliste 1006, welche einen Satz an Block-IDs 1008 umfasst. In diesem Fall kann jede der Block-IDs im Segment-/Blockindex 1024 nachgeschlagen werden, um den Offset 1028 und die Größe 1030 für jede der Block-IDs 1026 in der Blockliste 1006 mit der Super-Segment-ID 1022 zu ermitteln. Wie zuvor identifizieren die Offsets 1028 und die Größe 1030 den Standort des tatsächlichen Blockspeichers im Speicherplatz 714 des Journals 232. Super-Segmente haben somit ein zusätzliches Hierarchielevel, verringern aber die Menge an in den globalen Metadaten 1002 gespeicherten Segmentmetadaten. Dies macht es einfacher und effizienter, ein Bruchstück von einer Instanz an eine andere zu bewegen.
  • 11A11D veranschaulichen ein Verfahren 1100 der Verwaltung (1102) der Platzierung von Objektreplikaten in einem dezentralen Speichersystem 200 gemäß einiger Implementierungen. Das Verfahren wird in einer ersten Instanz 102 des dezentralen Speichersystems durchgeführt (1104), die über einen oder mehrere Prozessoren und einen Speicher verfügt. Der Speicher speichert (1106) ein oder mehrere Programme für die Ausführung durch einen oder mehrere Prozessoren. In einigen Implementierungen wird das Verfahren 1100 insgesamt oder teilweise durch den Standortzuweisungs-Daemon 206 ausgeführt. In einigen Implementierungen verfügt (1108) das dezentrale Speichersystem über eine Vielzahl von Instanzen. In einigen Implementierungen befindet (1108) sich wenigstens eine Teilmenge der Instanzen an verschiedenen geografischen Standorten. In einigen Implementierungen korrespondiert jede Instanz mit einem Datenzentrum. In einigen Implementierungen umfasst jedes Datenzentrum eine oder mehrere Instanzen.
  • In der ersten Instanz werden eine oder mehrere Journals 232 für die Speicherung von Objektsegmenten geöffnet (1110). Jedem Journal wird eine einzelne jeweilige Platzierungs-Richtlinie 212 zugewiesen (1112). In einigen Implementierungen bestimmt (1122) jede Platzierungs-Richtlinie eine Zielanzahl an Objektreplikaten und einen Zielsatz an Standorten für die Objektreplikate. In einigen Implementierungen kann eine Platzierungs-Richtlinie 212 festlegen, welche Typen von Datenspeichern 224 in einigen der Instanzen verwendet werden sollen (z. B. auf Festplatte oder auf Band). In einigen Implementierungen beinhaltet (1114) das dezentrale Speichersystem 200 die Objektmetadaten 228 (Teil der globalen Metadaten 1002), die bestimmen, in welchem Journal jedes Objektsegment 238 gespeichert wird. Dies wurde zuvor unter Bezug auf die 35, 10A und 10B beschrieben. In einigen Implementierungen beinhaltet (1116) jedes jeweilige Journal einen Blockindex 1010 oder 1026, der den Standort jedes im jeweiligen Journal gespeicherten Blocks bestimmt. Dies wurde in größerem Detail in den 7 (nicht-hierarchisch), 10A und 10B beschrieben. Insbesondere wird der Standort jedes Blocks 1016 in einem Journal 232 im Verhältnis zum Journal selbst identifiziert, sodass der Blockindex 1010 oder 1026 ungeachtet dessen richtig ist, wo das Journal 232 gespeichert ist. Zum Beispiel kann durch die Definierung der Blockstandorte 1016 innerhalb eines Journals 232 als Offsets auf die Blöcke 1016 durch relative Adressierung zugegriffen werden.
  • Die offenbarten Implementierungen beinhalten (1118) typischerweise die Journalmetadaten 236 (Teil der globalen Metadaten 1002), welche die Standorte 372 bestimmen, an denen jedes Journal gespeichert wird. Dies wurde zuvor in den 35 und 8 beschrieben.
  • Die Verteilung der offenen Haupt-Journals 232 und der offenen Neben-Journal 234 hängt von vielen Faktoren ab, einschließlich der verfügbaren Instanzen 102, der Platzierungs-Richtlinie 212, der erwartbaren Verteilung neuer Objekte 226 mit den Platzierungs-Richtlinien 212, des Orts von dem aus neue Objekte hochgeladen werden (z. B. Europa, Nordamerika, Asien), der Ressourcenverarbeitung an jeder der verfügbaren Instanzen 102 und der Netzwerkbandbreite zwischen den diversen Instanzen. Zum Beispiel werden, wenn viele Objekte mit einer bestimmten Platzierungs-Richtlinie an einer bestimmten Instanz hochgeladen werden, mehrere Journals für dieselbe Platzierungs-Richtlinie an dieser Instanz geöffnet (1120). In einigen Szenarien können 5, 10 oder mehr offene Journals für dieselbe Platzierungs-Richtlinie 212 an einer einzelnen Instanz 102 existieren, wenn dies für die Lastverteilung erforderlich ist.
  • An der ersten Instanz 102 wird ein erstes Objekt 226 empfangen (1124), das mindestens ein erstes Objektsegment umfasst (1124). Dies wurde oben unter Bezug auf die 6 beschrieben. Das erste Objekt 226 wird einer Erstplatzierungs-Richtlinie 212 zugewiesen (1124), wodurch alle Objektsegmente 238, die das Objekt 226 umfassen, der Erstplatzierungs-Richtlinie 212 zugewiesen werden. Das erste Objektsegment umfasst (1126) eine erste Vielzahl von Blöcken, wie es oben unter Bezug auf die 10A und 10B beschrieben wurde. In einigen Implementierungen empfängt (1124) der Prozess 1100 das bereits in Segmente und Blöcke unterteilte Objekt 238. Zum Beispiel kann die Zerspaltung durch das Client-Gerät durchgeführt werden, welches das Objekt hochlädt. In anderen Implementierungen empfängt der Prozess 1100 ein Objekt als Stream und spaltet das Objekt gemäß gespeicherter Kriterien (z. B. Block- und Segment-Zielgröße, verfügbare offene Journals, verfügbare Instanzen, verfügbare Bandbreite etc.) in Segmente und Blöcke auf. In einigen Implementierungen erfolgt eine dynamische Zuweisung von Segmenten bereits während noch Objektdaten empfangen werden, wohingegen andere Implementierungen ein Objekt erst dann in Segmente und Blöcke aufspalten, nachdem das gesamte Objekt empfangen wurde.
  • Die Hierarchie von Segmenten und Blöcken kann auf verschiedene Arten und Weisen gebildet werden und basiert auf verschiedenen Faktoren, wie etwa der Größe des Objekts. In einigen Implementierungen wird die Hierarchie dynamisch während des Upload-Vorgangs gebildet. Zum Beispiel wird ein erstes Objektsegment erzeugt und der Datenstrom wird dann in Blöcke aufgespalten, die dem ersten Objektsegment zugewiesen werden, bis dass dem Segment eine Grenzwertanzahl an Blöcken zugewiesen wurde. Zu diesem Zeitpunkt wird ein zweites Segment erzeugt und die Blöcke werden dem zweiten Segment hinzugefügt. In einer anderen Implementierung wird der Datenstrom zuerst als Speicherblöcke gespeichert und, wenn es keine weiteren Blöcke mehr gibt, werden die Blöcke in Segmenten gruppiert.
  • In einigen Implementierungen umfasst (1128) jedes Objektsegment 238 einen oder mehrere Blöcke. Dies wurde oben unter Bezug auf die 10A veranschaulicht. In einigen Implementierungen beinhalten (1130) die globalen Metadaten 1002 ein Feld 1020, das bestimmt, ob jedes Objektsegment 238 ein Block oder eine Blockliste ist. Dies ist oben in 10B veranschaulicht. In einigen Instanzen ist (1132) das erste Objektsegment eine Blockliste (d. h. ein Super-Segment), wohingegen es sich bei dem zweiten Segment (1132) um einen gewöhnlichen Block (kein Super-Segment) handelt.
  • Die erste Vielzahl von Blöcken 1016 wird in einem ersten Journal 232 gespeichert (1134), dessen zugewiesene Platzierungs-Richtlinie mit der Erstplatzierungs-Richtlinie 212 übereinstimmt. Das erste Journal 232 speichert ausschließlich (1136) Blöcke von Objekten, deren Platzierungs-Richtlinie mit der Erstplatzierungs-Richtlinie übereinstimmt.
  • Wenn das empfangene Objekt größer als eine festgelegte Größe (z. B. die Segment- oder Blockgröße) ist, wird das Objekt in mehrere Segmente 238 und/oder mehrere Blöcke 1016 gespalten. In einigen Instanzen umfasst (1138) das erste Objekt 226 zwei oder mehr Objektsegmente. Typischerweise unterscheidet sich (1138) das zweite Objektsegment vom ersten Objektsegment. (Das Vorhandensein zweier identischer Segmente innerhalb eines einzigen Objekts ist selten, kann aber vorkommen, zum Beispiel wenn ein Objekt einen sehr großen Anteil leeren Platzes hatte.) In bestimmten Fällen wird das zweite Objektsegment in einem zweiten, vom ersten Journal unterschiedlichen Journal 232 gespeichert (1140), dessen zugewiesene Platzierungs-Richtlinie mit der Erstplatzierungs-Richtlinie übereinstimmt. Das zweite Journal speichert ausschließlich (1140) Objektsegmente für Objekte, deren Platzierungs-Richtlinie mit der Erstplatzierungs-Richtlinie übereinstimmt. Auf diese Weise könnte ein Objekt, das viele Segmente umfasst, die Segmente über viele verschiedene Journals verteilt haben.
  • In einigen Implementierungen verschlüsselt (1142) der Prozess die Daten für jedes Objektsegment und speichert (1142) einen Entschlüsselungsschlüssel für jedes Objektsegment in den globalen Metadaten. Dies wurde oben in den 10A und 10B veranschaulicht. In einigen Implementierungen wird, wenn ein Segment in mehrere Blöcke gespalten wird, jeder der Blöcke innerhalb des Segments mit demselben Verschlüsselungsschlüssel verschlüsselt und kann somit mit demselben Entschlüsselungsschlüssel entschlüsselt werden. In anderen Implementierungen verfügt jeder Block über seinen eigenen Entschlüsselungsschlüssel, welcher als Teil des Blockindexes 1010 oder 1026 gespeichert werden kann. In Implementierungen, die den Entschlüsselungsschlüssel 1040 in den globalen Metadaten 1002 speichern, kann ein Segment de facto schlicht durch Löschen (1144) des Entschlüsselungsschlüssel gelöscht werden. Auf das Segment kann nicht zugegriffen werden, da es keinen Weg gibt, die Daten für das ursprüngliche Segment wiederherzustellen. Dies hat einige Vorteile. Erstens ist das Löschen eines Segments schnell und effektiv. Zweitens, da es kein reales Risiko gibt, dass auf die gelöschten Daten zugegriffen werden könnte, kann ein effizienterer Abfallsammlungsprozess implementiert werden. Insbesondere kann die Abfallsammlung auf geeignete Intervalle terminiert werden und die physische Löschung der Daten von der Festplatte stapelweise erfolgen. Da Komprimierung ein ressourcenintensiver Vorgang ist, kann die Möglichkeit, viele Löschungen stapelweise zu verarbeiten, die Effizienz drastisch erhöhen. Drittens erfordern einige Implementierungen keine physische Löschung von Speicherplatz, weil der verschlüsselte „Unsinn” nicht zurück in bedeutsame Inhalte konvertiert werden kann.
  • Der Prozess 1100 speichert (1146) globale Metadaten für das erste Objekt. Dies wurde oben in den 35, 10A und 10B veranschaulicht. Die globalen Metadaten 1002 beinhalten (1148) eine erste Liste an Objeksegmenten, die mit dem ersten Objekt korrespondiert. Insbesondere beinhaltet (1150) die erste Liste eine Objektkennung 330 für das erste Objektsegment 238. Die globalen Metadaten 1002 identifizieren ebenfalls das Journal, in dem jedes Segment gespeichert wird, außerdem die Standorte für jedes der Journals.
  • Zusätzlich zu den globalen Metadaten 1002, werden für jedes Journal 232 lokale Metadaten 1004 gespeichert. In einigen Implementierungen werden die lokalen Metadaten 1004 für jedes Journal im Header 702 des Journals 232 selbst gespeichert. In anderen Implementierungen werden die lokalen Metadaten 1004 separat vom Journal gespeichert. Bei der separaten Speicherung können die lokalen Metadaten 1004 für jedes Journal separat gespeichert werden (z. B. in einer unterschiedlichen, mit jedem Journal korrespondieren Metadatendatei), oder die lokalen Metadaten können gemeinsam gruppiert werden (z. B. in einer Datenbank).
  • Die erste Instanz speichert (1152) lokale Metadaten 1004 für das erste Objektsegment 238. Die lokalen Metadaten 1004 beinhalten (1154) eine Blockliste, welche jeden Block in der Vielzahl von Blöcken identifiziert. Beachten Sie, dass die Blockliste in den lokalen Metadaten 1004, nicht in den globalen Metadaten 1002 gespeichert wird. Die in den lokalen Metadaten 1004 gespeicherte Blockliste 1006 hält nach, wie die Blöcke innerhalb jedes Journals zugeteilt werden. Die lokalen Metadaten für das erste Journal 232 werden dem ersten Journal 232 zugewiesen (1156). In einigen Implementierungen wird die Zuweisung der lokalen Metadaten zu einem Journal durchgeführt, indem die lokalen Metadaten im Journal gespeichert werden, was bedeutet, dass das Journal in sich geschlossener ist. In einigen Implementierungen werden die lokalen Metadaten für das Journal 232 separat gespeichert (z. B. in einer separaten Datei) und dem Journal zugewiesen (z. B. indem die Journal-ID 370 im Namen des Journal und im Namen der zugewiesenen Metadatendatei beinhaltet werden). In Implementierungen, welche die lokalen Metadaten in einer Datenbank speichern, ist die Journal-ID 370 typischerweise Teil des Hauptschlüssels für die Metadatentabellen.
  • Dieser Vorgang des Empfangens von Objekten 226 und der Speicherung der Segmente 238 im ersten Journal 232 wird für eine Vielzahl von Objekten 226, deren zugewiesene Platzierungs-Richtlinie 338 mit der Erstplatzierungs-Richtlinie 212 übereinstimmt, solange wiederholt (1158), bis dass eine erste Beendigungsbedingung eintrifft. In einigen Implementierungen tritt die erste Beendigungsbedingung ein, wenn (1160) die Größe des ersten Journals einen zuvor festgelegten Grenzwert überschreitet. In einigen Implementierungen tritt die erste Beendigungsbedingung ein, wenn (1162) das erste Journal für eine zuvor festgelegte Zeitspanne offen gewesen ist. Einige Implementierungen verbinden Größe und Zeit auf verschiedene Arten und Weisen. Zum Beispiel bestimmen einige Implementierungen sowohl eine Zeitspanne als auch ein Größenlimit und die Beendigungsbedingung ist diejenige, welche als erstes eintritt.
  • Nachdem die erste Beendigungsbedingung eintritt, wird das erste Journal geschlossen (1164), wodurch die Speicherung weiterer Blöcke im ersten Journal 232 verhindert wird. Im Allgemeinen versichern sich Implementierungen, dass die anderen Journals 232 derselben Platzierungs-Richtlinie weiterhin offen sind (oder ein neues geöffnet wird) bevor sie das erste Journal schließen. Da Objekte zu jeder Zeit ankommen können, ist es wichtig, offene Journals für die Speicherung bereit zu halten.
  • Nachdem das erste Journal 232 geschlossen wurde, unterliegt das Journal seiner Platzierungs-Richtlinie. Die Erfüllung der Platzierungs-Richtlinie 212 kann das Bewegen eines Journalreplikats, die Erstellung einer neuen Kopie eines Journalreplikats, oder die Löschung eines Journalreplikats erfordern. In bestimmten Fällen wird das erste Journal 232 in einer zweiten Instanz 102 des dezentralen Speichersystems 200 in Übereinstimmung mit der Platzierungs-Richtlinie 212 repliziert (1166). (In anderen Fällen wird ein Replikat des ersten Journals gelöscht.) In Implementierungen, die über offene Haupt- und Neben-Journals 232 und 234 verfügen, werden, sobald sie geschlossen wurden, zwei einander entsprechende geschlossene Journals 230 existieren. Folglich könnte jedes der Replikate als Ausgangspunkt für die Replizierung 1166 verwendet werden. Während des Replizierungsvorgangs 1166 (z. B. als Teil der Transaktion) werden die globalen Metadaten 1002 für das erste Journal aktualisiert (1168), um anzuzeigen, dass es an der zweiten Instanz eine Kopie des Journals gibt. Auf der anderen Seite bleiben die lokalen Metadaten 1004 durch die Replizierung unverändert (1168). Dies wurde oben unter Bezug auf die 8, 10A und 10B beschrieben.
  • Nachdem ein Journal 230 geschlossen wurde, können die Objektsegmente 238 gelöscht werden. Zum Beispiel kann mit einem Objekt ein Email-Anhang korrespondieren. Wenn der Empfänger einer Email die Email löscht, kann der für den Anhang verwendete Speicher gelöscht werden. Nach einem gewissen Zeitraum entstehen durch die Löschungen Löcher innerhalb jedes Journals und ist es daher nützlich, das Journal zu komprimieren, um verschwendeten Platz zu entfernen. Dies ist vergleichbar mit der Fragmentierung flüchtigen Speichers und mit dem Defragmentierungsprozess, um ungenutzten Platz in einem größeren, fortlaufenden Speicher zu verdichten.
  • Da ein gespeichertes Objektsegment mit vielen (z. B. hunderten, tausenden oder Millionen) unterschiedlichen Objekten korrespondieren kann, kann ein Objektsegment in einem Journal nur dann gelöscht werden, wenn keine Verweise darauf mehr existieren. Folglich ermittelt (1172) der Prozess 1100, sobald ein erstes geschlossenes Journal 230 ausgewählt (1170) wurde, ein oder mehrere im ersten geschlossenen Journal 230 gespeicherte Objektsegmente, bezüglich derer in den Objektmetadaten 228 keine Verweise existieren. In einigen Implementierungen läuft periodisch ein Abfallsammlungsalgorithmus, um jedes der geschlossenen Journals zu komprimieren (1174). Der Komprimierungsvorgang verdichtet (1174) die gespeicherten Blöcke in einem fortlaufenden Speicher, was die Größe des Journals 230 verringert.
  • Mit der Zeit können die Journals 230 dadurch klein werden, dass mehr und mehr Objektsegmente gelöscht werden. Die Verwaltung vieler kleiner Journals bedeutet einen Mehraufwand vergleichbar der Verwaltung individueller Objekte, wodurch der Nutzen eines Journalspeichers abnimmt. Um mit dieser Problematik umzugehen heften (1176) einige Implementierungen zwei oder mehr geschlossene Journals zusammen, um ein einziges Ersatzjournal zu bilden, und aktualisieren (1176) die Objektmetadaten 228, um anzuzeigen, dass die zuvor in den zwei oder mehr Journals gespeicherten Objektsegmente nun im Ersatzjournal gespeichert werden. Da ein Zusammenheftungsvorgang der Bildung eines vollkommen neuen Journals und der Aktualisierung der Metadaten für alle involvierten Objekte bedarf, wird die Zusammenheftung üblicherweise auf ein Szenario beschränkt, in dem die Journals relativ klein geworden sind.
  • 12 veranschaulicht eine Beispielspeicherung von Segmenten in einem dezentralen Speichersystem in Übereinstimmung mit einigen Implementierungen, wie zuvor unter Bezug auf 10B veranschaulicht. In diesem Beispiel werden die zwei Segmente 238-1 und 238-2 gezeigt. Segment 238-1 ist ein gewöhnliches Segment (d. h. kein Super-Segment) mit der Segment-ID 346-1. Da es sich bei dem Segment 238-1 um ein gewöhnliches Segment handelt, kann es unmittelbar im Segment-/Block-Index 1024 nachgeschlagen werden. In dieser Veranschaulichung wird der Segment-/Blockindex 1024 im Header 702 des Journals 232 gespeichert, in dem die Daten gespeichert werden. Für dieses Segment/diesen Block beträgt der Offset 1028 „y” (1028-y). Unter Verwendung dieses Offsets kann der korrespondierende Block B 1016-B im Speicherplatz 714 gefunden werden.
  • Bei Segment 238-2 handelt es sich indes um ein Super-Segment mit der (Super-)Segment-ID 346-2. Wie hier veranschaulicht verweist das Super-Segment 238-2 auf einen Eintrag in der Blocklistentabelle 1006. Für jede Super-Segment-ID 1022 existiert eine Vielzahl von korrespondierenden Block-IDs 1008. 12 veranschaulicht zwei korrespondierende Blöcke 1008-1 und 1008-2, aber für sehr große Objekte könnte eine sehr große Anzahl an Blöcken für ein einzelnes Segment existieren. Die Block-IDs 1008-1 und 1008-2 werden dann im Segment-/Blockindex 1024 nachgeschlagen, um die Offsets 1028-x und 1028-z für die Blöcke zu finden. Zuletzt befinden sich die korrespondierenden Blöcke 1016-A und 1016-C unter Verwendung der Offsets 1028-x und 1028-z im Speicherplatz 714. In diesem Beispiel sind die zwei Blöcke nicht fortlaufend und tatsächlich trennt der Block 1016-B von Segment 238-1 die zwei Blöcke von Segment 238-2. Natürlich wird außerdem die Größe jedes Blocks verwendet, sodass nur die eigentlichen Daten jedes Blocks gelesen werden. Dies wurde oben unter Bezug auf die 10B beschrieben.
  • Implementierungen, die keine gewöhnlichen Segmente (wie etwa Segment 238-1) erlauben, sind vollständig hierarchisch. Beachten Sie außerdem, dass die Zuweisung zwischen Segmenten und Blöcken aufgrund der Implementierung oder aufgrund von anderen dynamischen Faktoren variiert. Zum Beispiel könnte dasselbe Objekt als ein einzelnes Segment mit 100 Blöcken oder als vier Segmente mit jeweils 25 Blöcken gespeichert werden. Einige Implementierungen variieren die Anzahl an Segmenten aufgrund von empirischer Rückmeldungen von der tatsächlichen Verwendung.
  • Die vorstehende Beschreibung erfolgte zum Zweck der Erklärung unter Bezugnahme auf spezifische Implementierungen. Jedoch sollen die oben stehenden veranschaulichenden Erörterungen nicht erschöpfend sein oder die Erfindung auf die genauen offenbarten Formen beschränken. Angesichts der oben stehenden Lehren sind viele Modifikationen und Abwandlungen möglich. Die Implementierungen wurden ausgewählt und beschrieben, um so gut wie möglich die Prinzipien der Erfindung und deren praktische Anwendungen zu erklären, um dadurch andere Fachkräfte zu befähigen, die Erfindung und unterschiedliche Implementierungen mit verschiedenen Modifizierungen wie für den besonderen in Betracht gezogenen Nutzen so gut wie möglich einsetzen zu können.

Claims (34)

  1. Computersystem für die Platzierungsverwaltung von Objektreplikaten in einem dezentralen Speichersystem mit einer Vielzahl von Instanzen, wobei jede jeweilige Instanz das Folgende umfasst: einen oder mehrere Prozessoren; Speicher; und ein oder mehrere im Speicher abgelegte Programme, wobei das eine oder die mehreren Programme durch einen oder mehrere Prozessoren ausführbare Instruktionen für die Durchführung der nachfolgenden Schritte umfasst: in einer ersten Instanz des dezentralen Speichersystems, das Verfügen über einen oder mehrere Prozessoren und über Speicher, worin der Speicher ein oder mehrere Programme für die Ausführung durch einen oder mehrere Prozessoren speichert: das Empfangen eines ersten Objekts, das einer Erstplatzierungs-Richtlinie zugewiesen ist, worin die Erstplatzierungs-Richtlinie Kriterien dafür festlegt, wo im dezentralen Speichersystem Replikate des ersten Objekts gespeichert werden; das Spalten eines Objekts in eine Vielzahl von Objektsegmenten und die Spaltung eines ersten Objektsegments in eine Vielzahl von Blöcken; das Speichern der Vielzahl von Blöcken in einem ersten Journal, dessen zugewiesene Platzierungs-Richtlinie mit der Erstplatzierungs-Richtlinie übereinstimmt; das Speichern globaler Metadaten für das erste Objekt, worin die globalen Metadaten eine Liste der Vielzahl von Objektsegmenten beinhaltet und worin die Liste eine jeweilige Kennung für jedes der Objektsegmente beinhaltet; das Speichern lokaler Metadaten für das erste Objektsegment, worin die lokalen Metadaten eine Blockliste beinhalten, die jeden Block einer ersten Vielzahl von Blöcken identifiziert und worin die lokalen Metadaten dem ersten Journal zugewiesen werden; das Replizieren des ersten Journals an eine zweite Instanz des dezentralen Speichersystems in Übereinstimmung mit der Erstplatzierungs-Richtlinie, worin die globalen Metadaten aktualisiert werden, um die Replizierung widerzuspiegeln, wohingegen die lokalen Metadaten durch die Replizierung unverändert bleiben.
  2. Computersystem nach Anspruch 1, worin die globalen Metadaten ein Feld beinhalten, das festlegt, ob es sich bei jedem Objektsegment um einen Block oder eine Liste von Blöcken handelt und worin ein zweites Objektsegment ein Block und das erste Objektsegment eine Liste von Blöcken ist.
  3. Computersystem nach Anspruch 1, worin die globalen Metadaten festlegen, in welchem Journal jedes Objektsegment gespeichert wird und jedes jeweilige Journalreplikat einen Blockindex beinhaltet, der den Standort eines jeden Blocks festlegt, der im jeweiligen Journalreplikat gespeichert ist.
  4. Computersystem nach jedem der Ansprüche 1–3, welches weiterhin an der ersten Instanz umfasst: das Auswählen eines Replikats eines ersten geschlossenen Journals; das Identifizieren eines oder mehrerer im Replikat gespeicherter Objektsegmente, auf welche in den globalen Metadaten keine Verweise existieren; und das Komprimieren des Replikats, wodurch die im Replikat gespeicherten Blöcke in einem fortlaufenden Speicher verdichtet werden.
  5. Computersystem nach jedem der Ansprüche 1–3, worin das dezentrale Speichersystem über eine Vielzahl von Instanzen an geografisch unterschiedlichen Standorten verfügt.
  6. Computersystem nach jedem der Ansprüche 1–3, worin Daten für jedes Objektsegment verschlüsselt und ein Entschlüsselungsschlüssel für jedes Objektsegment in den globalen Metadaten gespeichert wird, Verfahren weiterhin umfassend das de facto Löschen eines Objektsegments durch die Löschung des korrespondierenden Entschlüsselungsschlüssels aus den globalen Metadaten, wodurch der Zugriff auf die Daten des Objekts unmöglich wird.
  7. Computersystem für die Platzierungsverwaltung von Objektreplikaten in einem dezentralen Speichersystem mit einer Vielzahl von Instanzen, wobei jede jeweilige Instanz das Folgende umfasst: einen oder mehrere Prozessoren; Speicher; und ein oder mehrere im Speicher abgelegte Programme, wobei das eine oder die mehreren Programme durch einen oder mehrere Prozessoren ausführbare Instruktionen für die Durchführung der nachfolgenden Schritte umfasst: in einer ersten Instanz des dezentralen Speichersystems, das Verfügen über einen oder mehrere Prozessoren und über Speicher, worin der Speicher ein oder mehrere Programme für die Ausführung durch einen oder mehrere Prozessoren speichert: das Öffnen eines oder mehrerer Journals für die Speicherung von Objektsegmente, worin jedes jeweilige Journal einer einzelnen jeweiligen Platzierungs-Richtlinie zugewiesen wird; das Empfangen eines ersten Objekts, welches wenigstens ein erstes Objektsegment umfasst, worin das erste Objekt einer Erstplatzierungs-Richtlinie zugewiesen wird und worin das erste Objektsegment eine Vielzahl von Blöcken umfasst; das Speichern einer ersten Vielzahl von Blöcken in einem ersten Journal, dessen zugewiesene Platzierungs-Richtlinie mit der Erstplatzierungs-Richtlinie übereinstimmt, worin das erste Journal ausschließlich Blöcke für Objekte speichert, deren Platzierungs-Richtlinien mit der Erstplatzierungs-Richtlinie übereinstimmen; das Speichern globaler Metadaten für das erste Objekt, worin die globalen Metadaten eine erste Liste von Objektsegmenten beinhalten, die mit dem ersten Objekt korrespondieren und worin die erste Liste eine Kennung für die ersten Objektsegmente beinhaltet; das Speichern lokaler Metadaten für das erste Objektsegment, worin die lokalen Metadaten eine Blockliste beinhalten, die jeden Block einer ersten Vielzahl von Blöcken identifiziert und worin die lokalen Metadaten dem ersten Journal zugewiesen werden; das Wiederholen, für das erste Journal, der Empfangs- und Speicheroperationen für die erste Vielzahl von Objekten, deren zugewiesene Platzierungs-Richtlinien mit der Erstplatzierungs-Richtlinie übereinstimmen, bis eine erste Beendigungsbedingung eintritt; das Schließen des ersten Journals, nachdem die erste Beendigungsbedingung eintritt, wodurch die Speicherung weiterer Blöcke im ersten Journal verhindert wird; und das Replizieren des ersten Journals an eine zweite Instanz des dezentralen Speichersystems in Übereinstimmung mit der Erstplatzierungs-Richtlinie, worin die globalen Metadaten aktualisiert werden, um die Replizierung widerzuspiegeln, wohingegen die lokalen Metadaten durch die Replizierung unverändert bleiben.
  8. Computersystem nach Anspruch 7, worin jedes Objektsegment einen oder mehrere Blöcke umfasst.
  9. Computersystem nach Anspruch 7, worin die globalen Metadaten ein Feld beinhalten, das bestimmt, ob jedes Objektsegment ein Block oder eine Liste von Blöcken ist.
  10. Computersystem nach Anspruch 9, worin ein zweites Objektsegment ein Block und das erste Objektsegment eine Liste von Blöcken ist.
  11. Computersystem nach jedem der Ansprüche 7–10, worin das erste Objekt zwei oder mehr Objektsegmente umfasst, einschließlich eines zweiten, vom ersten Objektsegment unterschiedlichen Objektsegments und worin das zweite Objektsegment in einem zweiten, vom ersten Journal unterschiedlichen Journal gespeichert ist, dessen zugewiesene Platzierungs-Richtlinie mit der Erstplatzierungs-Richtlinie übereinstimmt.
  12. Computersystem nach jedem der Ansprüche 7–10, worin die globalen Metadaten festlegen, in welchem Journal jedes Objektsegment gespeichert wird und jedes jeweilige Journalreplikat einen Blockindex beinhaltet, der den Standort eines jeden Blocks festlegt, der im jeweiligen Journalreplikat gespeichert ist.
  13. Computersystem nach jedem der Ansprüche 7–10, welches weiterhin an der ersten Instanz das Folgende umfasst: das Auswählen eines Replikats eines ersten geschlossenen Journals; das Identifizieren eines oder mehrerer im Replikat gespeicherter Objektsegmente, auf welche in den globalen Metadaten keine Verweise existieren; und das Komprimieren des Replikats, wodurch die im Replikat gespeicherten Blöcke in einem fortlaufenden Speicher verdichtet werden.
  14. Computersystem nach jedem der Ansprüche 7–10, worin jede Platzierungs-Richtlinie eine Zielanzahl an Objektreplikaten und eine Zielanzahl an Standorten für die Objektreplikate bestimmt.
  15. Computersystem nach jedem der Ansprüche 7–10, worin das dezentrale Speichersystem über eine Vielzahl von Instanzen an geografisch unterschiedlichen Standorten verfügt.
  16. Computersystem nach jedem der Ansprüche 7–10, worin Daten für jedes Objektsegment verschlüsselt werden und ein Entschlüsselungsschlüssel für jedes Objektsegment in den globalen Metadaten gespeichert wird.
  17. Computersystem nach Anspruch 16, welches weiterhin das de facto Löschen eines Objektsegments durch das Löschen des korrespondierenden Entschlüsselungsschlüssels aus den globalen Metadaten umfasst, wodurch der Zugriff auf die Daten des Objekts unmöglich wird.
  18. Nicht-flüchtiges computerlesbares Speichermedium mit darauf gespeicherten Programmen für die Platzierungsverwaltung von Objektreplikaten in einem dezentralen Speichersystem, das über eine Vielzahl von Instanzen verfügt, wobei jede jeweilige Instanz einen oder mehrere Prozessoren und Speicher beinhaltet; wobei das eine oder die mehreren Programme durch den einen oder die mehreren Prozessoren ausführbare Instruktionen für die Durchführung der nachfolgenden Schritte beinhalten: in einer ersten Instanz des dezentralen Speichersystems, das Verfügen über einen oder mehrere Prozessoren und über Speicher, worin der Speicher ein oder mehrere Programme für die Ausführung durch einen oder mehrere Prozessoren speichert: das Empfangen eines ersten Objekts, das einer Erstplatzierungs-Richtlinie zugewiesen ist, worin die Erstplatzierungs-Richtlinie Kriterien dafür festlegt, wo im dezentralen Speichersystem Replikate des ersten Objekts gespeichert werden; das Spalten eines Objekts in eine Vielzahl von Objektsegmenten und die Spaltung eines ersten Objektsegments in eine Vielzahl von Blöcken; das Speichern der Vielzahl von Blöcken in einem ersten Journal, dessen zugewiesene Platzierungs-Richtlinie mit der Erstplatzierungs-Richtlinie übereinstimmt; das Speichern globaler Metadaten für das erste Objekt, worin die globalen Metadaten eine Liste der Vielzahl von Objektsegmenten beinhaltet und worin die Liste eine jeweilige Kennung für jedes der Objektsegmente beinhaltet; das Speichern lokaler Metadaten für das erste Objektsegment, worin die lokalen Metadaten eine Blockliste beinhalten, die jeden Block einer ersten Vielzahl von Blöcken identifiziert und worin die lokalen Metadaten dem ersten Journal zugewiesen werden; das Replizieren des ersten Journals an eine zweite Instanz des dezentralen Speichersystems in Übereinstimmung mit der Erstplatzierungs-Richtlinie, worin die globalen Metadaten aktualisiert werden, um die Replizierung widerzuspiegeln, wohingegen die lokalen Metadaten durch die Replizierung unverändert bleiben.
  19. Nicht-flüchtiges computerlesbares Speichermedium nach Anspruch 18, worin die globalen Metadaten ein Feld beinhalten, das festlegt, ob es sich bei jedem Objektsegment um einen Block oder eine Liste von Blöcken handelt und worin ein zweites Objektsegment ein Block und das erste Objektsegment eine Liste von Blöcken ist.
  20. Nicht-flüchtiges computerlesbares Speichermedium nach Anspruch 18, worin die globalen Metadaten festlegen, in welchem Journal jedes Objektsegment gespeichert wird und jedes jeweilige Journalreplikat einen Blockindex beinhaltet, der den Standort eines jeden Blocks festlegt, der im jeweiligen Journalreplikat gespeichert ist.
  21. Nicht-flüchtiges computerlesbares Speichermedium nach jedem der Ansprüche 18–20, welches weiterhin an der ersten Instanz umfasst: das Auswählen eines Replikats eines ersten geschlossenen Journals; das Identifizieren eines oder mehrerer im Replikat gespeicherter Objektsegmente, auf welche in den globalen Metadaten keine Verweise existieren; und das Komprimieren des Replikats, wodurch die im Replikat gespeicherten Blöcke in einem fortlaufenden Speicher verdichtet werden.
  22. Nicht-flüchtiges computerlesbares Speichermedium nach jedem der Ansprüche 18–20, worin das dezentrale Speichersystem über eine Vielzahl von Instanzen an geografisch unterschiedlichen Standorten verfügt.
  23. Nicht-flüchtiges computerlesbares Speichermedium nach jedem der Ansprüche 18–20, worin Daten für jedes Objektsegment verschlüsselt und ein Entschlüsselungsschlüssel für jedes Objektsegment in den globalen Metadaten gespeichert wird, Verfahren weiterhin umfassend das de facto Löschen eines Objektsegments durch die Löschung des korrespondierenden Entschlüsselungsschlüssels aus den globalen Metadaten, wodurch der Zugriff auf die Daten des Objekts unmöglich wird.
  24. Nichttransitorisches computerlesbares Speichermedium mit darauf gespeicherten Programmen für die Platzierungsverwaltung von Objektreplikaten in einem dezentralen Speichersystem, das über eine Vielzahl von Instanzen verfügt, wobei jede jeweilige Instanz einen oder mehrere Prozessoren und Speicher beinhaltet; wobei das eine oder die mehreren Programme durch den einen oder die mehreren Prozessoren ausführbare Instruktionen für die Durchführung – der nachfolgenden Schritte beinhalten: in einer ersten Instanz des dezentralen Speichersystems, das Verfügen über einen oder mehrere Prozessoren und über Speicher, worin der Speicher ein oder mehrere Programme für die Ausführung durch einen oder mehrere Prozessoren speichert: das Öffnen eines oder mehrerer Journals für die Speicherung von Objektsegmente, worin jedes jeweilige Journal einer einzelnen jeweiligen Platzierungs-Richtlinie zugewiesen wird; das Empfangen eines ersten Objekts, welches wenigstens ein erstes Objektsegment umfasst, worin das erste Objekt einer Erstplatzierungs-Richtlinie zugewiesen wird und worin das erste Objektsegment eine Vielzahl von Blöcken umfasst; das Speichern einer ersten Vielzahl von Blöcken in einem ersten Journal, dessen zugewiesene Platzierungs-Richtlinie mit der Erstplatzierungs-Richtlinie übereinstimmt, worin das erste Journal ausschließlich Blöcke für Objekte speichert, deren Platzierungs-Richtlinien mit der Erstplatzierungs-Richtlinie übereinstimmen; das Speichern globaler Metadaten für das erste Objekt, worin die globalen Metadaten eine erste Liste von Objektsegmenten beinhalten, die mit dem ersten Objekt korrespondieren und worin die erste Liste eine Kennung für die ersten Objektsegmente beinhaltet; das Speichern lokaler Metadaten für das erste Objektsegment, worin die lokalen Metadaten eine Blockliste beinhalten, die jeden Block einer ersten Vielzahl von Blöcken identifiziert und worin die lokalen Metadaten dem ersten Journal zugewiesen werden; das Wiederholen, für das erste Journal, der Empfangs- und Speicheroperationen für die erste Vielzahl von Objekten, deren zugewiesene Platzierungs-Richtlinien mit der Erstplatzierungs-Richtlinie übereinstimmen, bis eine erste Beendigungsbedingung eintritt; das Schließen des ersten Journals, nachdem die erste Beendigungsbedingung eintritt, wodurch die Speicherung weiterer Blöcke im ersten Journal verhindert wird; und das Replizieren des ersten Journals an eine zweite Instanz des dezentralen Speichersystems in Übereinstimmung mit der Erstplatzierungs-Richtlinie, worin die globalen Metadaten aktualisiert werden, um die Replizierung widerzuspiegeln, wohingegen die lokalen Metadaten durch die Replizierung unverändert bleiben.
  25. Nichttransitorisches computerlesbares Speichermedium nach Anspruch 24, worin jedes Objektsegment einen oder mehrere Blöcke umfasst.
  26. Nichttransitorisches computerlesbares Speichermedium nach Anspruch 24, worin die globalen Metadaten ein Feld beinhalten, das bestimmt, ob jedes Objektsegment ein Block oder eine Liste von Blöcken ist.
  27. Nichttransitorisches computerlesbares Speichermedium nach Anspruch 26, worin ein zweites Objektsegment ein Block und das erste Objektsegment eine Liste von Blöcken ist.
  28. Nichttransitorisches computerlesbares Speichermedium nach jedem der Ansprüche 24–27, worin das erste Objekt zwei oder mehr Objektsegmente umfasst, einschließlich eines zweiten, vom ersten Objektsegment unterschiedlichen Objektsegments und worin das zweite Objektsegment in einem zweiten, vom ersten Journal unterschiedlichen Journal gespeichert ist, dessen zugewiesene Platzierungs-Richtlinie mit der Erstplatzierungs-Richtlinie übereinstimmt.
  29. Nichttransitorisches computerlesbares Speichermedium nach jedem der Ansprüche 24–27, worin die globalen Metadaten festlegen, in welchem Journal jedes Objektsegment gespeichert wird und jedes jeweilige Journalreplikat einen Blockindex beinhaltet, der den Standort eines jeden Blocks festlegt, der im jeweiligen Journalreplikat gespeichert ist.
  30. Nichttransitorisches computerlesbares Speichermedium nach jedem der Ansprüche 24–27, welches weiterhin an der ersten Instanz das Folgende umfasst: das Auswählen eines Replikats eines ersten geschlossenen Journals; Objektsegmente, auf welche in den globalen Metadaten keine Verweise existieren; und das Komprimieren des Replikats, wodurch die im Replikat gespeicherten Blöcke in einem fortlaufenden Speicher verdichtet werden.
  31. Nichttransitorisches computerlesbares Speichermedium nach jedem der Ansprüche 24–27, worin jede Platzierungs-Richtlinie eine Zielanzahl an Objektreplikaten und eine Zielanzahl an Standorten für die Objektreplikate bestimmt.
  32. Nichttransitorisches computerlesbares Speichermedium nach jedem der Ansprüche 24–27, worin das dezentrale Speichersystem über eine Vielzahl von Instanzen an geografisch unterschiedlichen Standorten verfügt.
  33. Nichttransitorisches computerlesbares Speichermedium nach jedem der Ansprüche 24–27, worin Daten für jedes Objektsegment verschlüsselt werden und ein Entschlüsselungsschlüssel für jedes Objektsegment in den globalen Metadaten gespeichert wird.
  34. Nichttransitorisches computerlesbares Speichermedium nach Anspruch 33, welches weiterhin das de facto Löschen eines Objektsegments durch das Löschen des korrespondierenden Entschlüsselungsschlüssels aus den globalen Metadaten umfasst, wodurch der Zugriff auf die Daten des Objekts unmöglich wird.
DE202014010898.6U 2013-12-27 2014-12-24 Hierarchische Stückelung von Objekten in einem dezentralen Speichersystem Active DE202014010898U1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/142,706 2013-12-27
US14/142,706 US9158472B2 (en) 2013-06-25 2013-12-27 Hierarchical chunking of objects in a distributed storage system

Publications (1)

Publication Number Publication Date
DE202014010898U1 true DE202014010898U1 (de) 2017-01-13

Family

ID=53479702

Family Applications (1)

Application Number Title Priority Date Filing Date
DE202014010898.6U Active DE202014010898U1 (de) 2013-12-27 2014-12-24 Hierarchische Stückelung von Objekten in einem dezentralen Speichersystem

Country Status (8)

Country Link
US (2) US9158472B2 (de)
EP (1) EP3087513B1 (de)
JP (1) JP6479020B2 (de)
CN (1) CN105940396B (de)
AU (1) AU2014369830B2 (de)
CA (1) CA2935215C (de)
DE (1) DE202014010898U1 (de)
WO (1) WO2015100416A1 (de)

Families Citing this family (166)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8589640B2 (en) 2011-10-14 2013-11-19 Pure Storage, Inc. Method for maintaining multiple fingerprint tables in a deduplicating storage system
US9158472B2 (en) * 2013-06-25 2015-10-13 Google Inc. Hierarchical chunking of objects in a distributed storage system
US9367243B1 (en) 2014-06-04 2016-06-14 Pure Storage, Inc. Scalable non-uniform storage sizes
US11068363B1 (en) 2014-06-04 2021-07-20 Pure Storage, Inc. Proactively rebuilding data in a storage cluster
US9218244B1 (en) 2014-06-04 2015-12-22 Pure Storage, Inc. Rebuilding data across storage nodes
US10574754B1 (en) 2014-06-04 2020-02-25 Pure Storage, Inc. Multi-chassis array with multi-level load balancing
US11652884B2 (en) 2014-06-04 2023-05-16 Pure Storage, Inc. Customized hash algorithms
US9836234B2 (en) 2014-06-04 2017-12-05 Pure Storage, Inc. Storage cluster
US9003144B1 (en) 2014-06-04 2015-04-07 Pure Storage, Inc. Mechanism for persisting messages in a storage system
US11960371B2 (en) 2014-06-04 2024-04-16 Pure Storage, Inc. Message persistence in a zoned system
US9613078B2 (en) 2014-06-26 2017-04-04 Amazon Technologies, Inc. Multi-database log with multi-item transaction support
US11886308B2 (en) 2014-07-02 2024-01-30 Pure Storage, Inc. Dual class of service for unified file and object messaging
US11604598B2 (en) 2014-07-02 2023-03-14 Pure Storage, Inc. Storage cluster with zoned drives
US8868825B1 (en) 2014-07-02 2014-10-21 Pure Storage, Inc. Nonrepeating identifiers in an address space of a non-volatile solid-state storage
US9836245B2 (en) 2014-07-02 2017-12-05 Pure Storage, Inc. Non-volatile RAM and flash memory in a non-volatile solid-state storage
US9021297B1 (en) 2014-07-02 2015-04-28 Pure Storage, Inc. Redundant, fault-tolerant, distributed remote procedure call cache in a storage system
US9811677B2 (en) 2014-07-03 2017-11-07 Pure Storage, Inc. Secure data replication in a storage grid
US9747229B1 (en) 2014-07-03 2017-08-29 Pure Storage, Inc. Self-describing data format for DMA in a non-volatile solid-state storage
US10853311B1 (en) 2014-07-03 2020-12-01 Pure Storage, Inc. Administration through files in a storage system
US9495255B2 (en) 2014-08-07 2016-11-15 Pure Storage, Inc. Error recovery in a storage cluster
US9483346B2 (en) 2014-08-07 2016-11-01 Pure Storage, Inc. Data rebuild on feedback from a queue in a non-volatile solid-state storage
US9082512B1 (en) 2014-08-07 2015-07-14 Pure Storage, Inc. Die-level monitoring in a storage cluster
US10983859B2 (en) 2014-08-07 2021-04-20 Pure Storage, Inc. Adjustable error correction based on memory health in a storage unit
US10079711B1 (en) 2014-08-20 2018-09-18 Pure Storage, Inc. Virtual file server with preserved MAC address
US9799017B1 (en) 2014-09-19 2017-10-24 Amazon Technologies, Inc. Cross-data-store operations in log-coordinated storage systems
US10025802B2 (en) 2014-09-19 2018-07-17 Amazon Technologies, Inc. Automated configuration of log-coordinated storage groups
US10303796B2 (en) * 2015-01-09 2019-05-28 Ariba, Inc. Updating distributed shards without compromising on consistency
US9904722B1 (en) 2015-03-13 2018-02-27 Amazon Technologies, Inc. Log-based distributed transaction management
US9940234B2 (en) 2015-03-26 2018-04-10 Pure Storage, Inc. Aggressive data deduplication using lazy garbage collection
US10191914B2 (en) * 2015-03-31 2019-01-29 EMC IP Holding Company LLC De-duplicating distributed file system using cloud-based object store
US9916458B2 (en) 2015-03-31 2018-03-13 EMC IP Holding Company LLC Secure cloud-based storage of data shared across file system objects and clients
US10178169B2 (en) 2015-04-09 2019-01-08 Pure Storage, Inc. Point to point based backend communication layer for storage processing
US9672125B2 (en) 2015-04-10 2017-06-06 Pure Storage, Inc. Ability to partition an array into two or more logical arrays with independently running software
US10846275B2 (en) 2015-06-26 2020-11-24 Pure Storage, Inc. Key management in a storage device
US11599520B1 (en) 2015-06-29 2023-03-07 Amazon Technologies, Inc. Consistency management using query restrictions in journal-based storage systems
US11609890B1 (en) 2015-06-29 2023-03-21 Amazon Technologies, Inc. Schema management for journal-based storage systems
US10866865B1 (en) 2015-06-29 2020-12-15 Amazon Technologies, Inc. Storage system journal entry redaction
US10866968B1 (en) 2015-06-29 2020-12-15 Amazon Technologies, Inc. Compact snapshots of journal-based storage systems
US10983732B2 (en) 2015-07-13 2021-04-20 Pure Storage, Inc. Method and system for accessing a file
US10031935B1 (en) * 2015-08-21 2018-07-24 Amazon Technologies, Inc. Customer-requested partitioning of journal-based storage systems
US10108355B2 (en) 2015-09-01 2018-10-23 Pure Storage, Inc. Erase block state detection
US11341136B2 (en) 2015-09-04 2022-05-24 Pure Storage, Inc. Dynamically resizable structures for approximate membership queries
US10229142B2 (en) * 2015-09-14 2019-03-12 International Business Machines Corporation Method and system for handling binary large objects
US10762069B2 (en) 2015-09-30 2020-09-01 Pure Storage, Inc. Mechanism for a system where data and metadata are located closely together
US9768953B2 (en) 2015-09-30 2017-09-19 Pure Storage, Inc. Resharing of a split secret
US9843453B2 (en) 2015-10-23 2017-12-12 Pure Storage, Inc. Authorizing I/O commands with I/O tokens
US10007457B2 (en) 2015-12-22 2018-06-26 Pure Storage, Inc. Distributed transactions with token-associated execution
US9971822B1 (en) 2015-12-29 2018-05-15 Amazon Technologies, Inc. Replicated state management using journal-based registers
CN105677250B (zh) 2016-01-04 2019-07-12 北京百度网讯科技有限公司 对象存储系统中的对象数据的更新方法和更新装置
US10261690B1 (en) 2016-05-03 2019-04-16 Pure Storage, Inc. Systems and methods for operating a storage system
US10838620B2 (en) 2016-05-26 2020-11-17 Nutanix, Inc. Efficient scaling of distributed storage systems
CN107622067B (zh) * 2016-07-13 2020-11-20 杭州海康威视数字技术股份有限公司 一种对多个多媒体文件的存储、读取和显示方法及装置
US11861188B2 (en) 2016-07-19 2024-01-02 Pure Storage, Inc. System having modular accelerators
US10768819B2 (en) 2016-07-22 2020-09-08 Pure Storage, Inc. Hardware support for non-disruptive upgrades
US9672905B1 (en) 2016-07-22 2017-06-06 Pure Storage, Inc. Optimize data protection layouts based on distributed flash wear leveling
US11604690B2 (en) 2016-07-24 2023-03-14 Pure Storage, Inc. Online failure span determination
US11734169B2 (en) 2016-07-26 2023-08-22 Pure Storage, Inc. Optimizing spool and memory space management
US11886334B2 (en) 2016-07-26 2024-01-30 Pure Storage, Inc. Optimizing spool and memory space management
US10366004B2 (en) 2016-07-26 2019-07-30 Pure Storage, Inc. Storage system with elective garbage collection to reduce flash contention
US10203903B2 (en) 2016-07-26 2019-02-12 Pure Storage, Inc. Geometry based, space aware shelf/writegroup evacuation
US11797212B2 (en) 2016-07-26 2023-10-24 Pure Storage, Inc. Data migration for zoned drives
US11422719B2 (en) 2016-09-15 2022-08-23 Pure Storage, Inc. Distributed file deletion and truncation
US9747039B1 (en) 2016-10-04 2017-08-29 Pure Storage, Inc. Reservations over multiple paths on NVMe over fabrics
US10866945B2 (en) 2016-10-10 2020-12-15 AlphaPoint User account management via a distributed ledger
US11550481B2 (en) 2016-12-19 2023-01-10 Pure Storage, Inc. Efficiently writing data in a zoned drive storage system
US10209901B2 (en) * 2017-01-04 2019-02-19 Walmart Apollo, Llc Systems and methods for distributive data storage
US11307998B2 (en) 2017-01-09 2022-04-19 Pure Storage, Inc. Storage efficiency of encrypted host system data
US11955187B2 (en) 2017-01-13 2024-04-09 Pure Storage, Inc. Refresh of differing capacity NAND
US9747158B1 (en) 2017-01-13 2017-08-29 Pure Storage, Inc. Intelligent refresh of 3D NAND
US10481988B2 (en) * 2017-01-24 2019-11-19 Zerto Ltd. System and method for consistency verification of replicated data in a recovery system
US10552341B2 (en) * 2017-02-17 2020-02-04 International Business Machines Corporation Zone storage—quickly returning to a state of consistency following an unexpected event
CN113468232A (zh) * 2017-02-27 2021-10-01 分秒库公司 用于查询时间序列数据的可扩展数据库系统
US11360942B2 (en) 2017-03-13 2022-06-14 Wandisco Inc. Methods, devices and systems for maintaining consistency of metadata and data across data centers
US10528488B1 (en) 2017-03-30 2020-01-07 Pure Storage, Inc. Efficient name coding
US11016667B1 (en) 2017-04-05 2021-05-25 Pure Storage, Inc. Efficient mapping for LUNs in storage memory with holes in address space
US10141050B1 (en) 2017-04-27 2018-11-27 Pure Storage, Inc. Page writes for triple level cell flash memory
US10516645B1 (en) 2017-04-27 2019-12-24 Pure Storage, Inc. Address resolution broadcasting in a networked device
US10701154B2 (en) 2017-05-22 2020-06-30 Microsoft Technology Licensing, Llc Sharding over multi-link data channels
US11782625B2 (en) 2017-06-11 2023-10-10 Pure Storage, Inc. Heterogeneity supportive resiliency groups
US10425473B1 (en) 2017-07-03 2019-09-24 Pure Storage, Inc. Stateful connection reset in a storage cluster with a stateless load balancer
US10761743B1 (en) 2017-07-17 2020-09-01 EMC IP Holding Company LLC Establishing data reliability groups within a geographically distributed data storage environment
US11016937B2 (en) * 2017-07-17 2021-05-25 Microsoft Technology Licensing, Llc Updateable distributed file framework
US10817388B1 (en) 2017-07-21 2020-10-27 EMC IP Holding Company LLC Recovery of tree data in a geographically distributed environment
US10402266B1 (en) 2017-07-31 2019-09-03 Pure Storage, Inc. Redundant array of independent disks in a direct-mapped flash storage system
US11210211B2 (en) 2017-08-21 2021-12-28 Western Digital Technologies, Inc. Key data store garbage collection and multipart object management
US10824612B2 (en) 2017-08-21 2020-11-03 Western Digital Technologies, Inc. Key ticketing system with lock-free concurrency and versioning
US11055266B2 (en) 2017-08-21 2021-07-06 Western Digital Technologies, Inc. Efficient key data store entry traversal and result generation
US11210212B2 (en) 2017-08-21 2021-12-28 Western Digital Technologies, Inc. Conflict resolution and garbage collection in distributed databases
US10880040B1 (en) 2017-10-23 2020-12-29 EMC IP Holding Company LLC Scale-out distributed erasure coding
US10572191B1 (en) 2017-10-24 2020-02-25 EMC IP Holding Company LLC Disaster recovery with distributed erasure coding
US10884919B2 (en) * 2017-10-31 2021-01-05 Pure Storage, Inc. Memory management in a storage system
US10496330B1 (en) 2017-10-31 2019-12-03 Pure Storage, Inc. Using flash storage devices with different sized erase blocks
US10545687B1 (en) 2017-10-31 2020-01-28 Pure Storage, Inc. Data rebuild when changing erase block sizes during drive replacement
US10860475B1 (en) 2017-11-17 2020-12-08 Pure Storage, Inc. Hybrid flash translation layer
US10740306B1 (en) * 2017-12-04 2020-08-11 Amazon Technologies, Inc. Large object partitioning system
US11507313B2 (en) * 2017-12-20 2022-11-22 Telefonaktiebolaget Lm Ericsson (Publ) Datafall: a policy-driven algorithm for decentralized placement and reorganization of replicated data
US10382554B1 (en) * 2018-01-04 2019-08-13 Emc Corporation Handling deletes with distributed erasure coding
CN110058790B (zh) * 2018-01-18 2022-05-13 伊姆西Ip控股有限责任公司 用于存储数据的方法、设备和计算机程序产品
US10976948B1 (en) 2018-01-31 2021-04-13 Pure Storage, Inc. Cluster expansion mechanism
US10467527B1 (en) 2018-01-31 2019-11-05 Pure Storage, Inc. Method and apparatus for artificial intelligence acceleration
US11036596B1 (en) 2018-02-18 2021-06-15 Pure Storage, Inc. System for delaying acknowledgements on open NAND locations until durability has been confirmed
US10817374B2 (en) 2018-04-12 2020-10-27 EMC IP Holding Company LLC Meta chunks
US11385792B2 (en) 2018-04-27 2022-07-12 Pure Storage, Inc. High availability controller pair transitioning
US10579297B2 (en) 2018-04-27 2020-03-03 EMC IP Holding Company LLC Scaling-in for geographically diverse storage
US10594340B2 (en) 2018-06-15 2020-03-17 EMC IP Holding Company LLC Disaster recovery with consolidated erasure coding in geographically distributed setups
US10936196B2 (en) 2018-06-15 2021-03-02 EMC IP Holding Company LLC Data convolution for geographically diverse storage
US11023130B2 (en) 2018-06-15 2021-06-01 EMC IP Holding Company LLC Deleting data in a geographically diverse storage construct
US10885054B2 (en) * 2018-07-03 2021-01-05 Mastercard International Incorporated Tracking metadata changes in multiple data stores and generating alerts for detected data impacts
US11354058B2 (en) 2018-09-06 2022-06-07 Pure Storage, Inc. Local relocation of data stored at a storage device of a storage system
US11868309B2 (en) 2018-09-06 2024-01-09 Pure Storage, Inc. Queue management for data relocation
US11500570B2 (en) 2018-09-06 2022-11-15 Pure Storage, Inc. Efficient relocation of data utilizing different programming modes
US10922142B2 (en) 2018-10-31 2021-02-16 Nutanix, Inc. Multi-stage IOPS allocation
US11436203B2 (en) * 2018-11-02 2022-09-06 EMC IP Holding Company LLC Scaling out geographically diverse storage
US10691378B1 (en) * 2018-11-30 2020-06-23 International Business Machines Corporation Data replication priority management
US10901635B2 (en) 2018-12-04 2021-01-26 EMC IP Holding Company LLC Mapped redundant array of independent nodes for data storage with high performance using logical columns of the nodes with different widths and different positioning patterns
US11119683B2 (en) 2018-12-20 2021-09-14 EMC IP Holding Company LLC Logical compaction of a degraded chunk in a geographically diverse data storage system
US10931777B2 (en) 2018-12-20 2021-02-23 EMC IP Holding Company LLC Network efficient geographically diverse data storage system employing degraded chunks
US10892782B2 (en) 2018-12-21 2021-01-12 EMC IP Holding Company LLC Flexible system and method for combining erasure-coded protection sets
US11023331B2 (en) 2019-01-04 2021-06-01 EMC IP Holding Company LLC Fast recovery of data in a geographically distributed storage environment
US10942827B2 (en) 2019-01-22 2021-03-09 EMC IP Holding Company LLC Replication of data in a geographically distributed storage environment
CN109885539A (zh) * 2019-01-28 2019-06-14 南京邮电大学 一种日志文件管理方法
US10846003B2 (en) 2019-01-29 2020-11-24 EMC IP Holding Company LLC Doubly mapped redundant array of independent nodes for data storage
US10866766B2 (en) 2019-01-29 2020-12-15 EMC IP Holding Company LLC Affinity sensitive data convolution for data storage systems
US10942825B2 (en) 2019-01-29 2021-03-09 EMC IP Holding Company LLC Mitigating real node failure in a mapped redundant array of independent nodes
US10936239B2 (en) 2019-01-29 2021-03-02 EMC IP Holding Company LLC Cluster contraction of a mapped redundant array of independent nodes
US11029865B2 (en) 2019-04-03 2021-06-08 EMC IP Holding Company LLC Affinity sensitive storage of data corresponding to a mapped redundant array of independent nodes
US10944826B2 (en) 2019-04-03 2021-03-09 EMC IP Holding Company LLC Selective instantiation of a storage service for a mapped redundant array of independent nodes
US11099986B2 (en) 2019-04-12 2021-08-24 Pure Storage, Inc. Efficient transfer of memory contents
US11113146B2 (en) 2019-04-30 2021-09-07 EMC IP Holding Company LLC Chunk segment recovery via hierarchical erasure coding in a geographically diverse data storage system
US11119686B2 (en) 2019-04-30 2021-09-14 EMC IP Holding Company LLC Preservation of data during scaling of a geographically diverse data storage system
US11121727B2 (en) 2019-04-30 2021-09-14 EMC IP Holding Company LLC Adaptive data storing for data storage systems employing erasure coding
US11748004B2 (en) 2019-05-03 2023-09-05 EMC IP Holding Company LLC Data replication using active and passive data storage modes
KR20220140639A (ko) * 2019-05-22 2022-10-18 묘타, 인크. 보안, 복원, 및 제어가 강화된 분산된 데이터 스토리지를 위한 방법 및 시스템
US11281394B2 (en) 2019-06-24 2022-03-22 Pure Storage, Inc. Replication across partitioning schemes in a distributed storage system
US11209996B2 (en) 2019-07-15 2021-12-28 EMC IP Holding Company LLC Mapped cluster stretching for increasing workload in a data storage system
US11023145B2 (en) 2019-07-30 2021-06-01 EMC IP Holding Company LLC Hybrid mapped clusters for data storage
US11449399B2 (en) 2019-07-30 2022-09-20 EMC IP Holding Company LLC Mitigating real node failure of a doubly mapped redundant array of independent nodes
US11228322B2 (en) 2019-09-13 2022-01-18 EMC IP Holding Company LLC Rebalancing in a geographically diverse storage system employing erasure coding
US11449248B2 (en) 2019-09-26 2022-09-20 EMC IP Holding Company LLC Mapped redundant array of independent data storage regions
US11893126B2 (en) 2019-10-14 2024-02-06 Pure Storage, Inc. Data deletion for a multi-tenant environment
US11288139B2 (en) 2019-10-31 2022-03-29 EMC IP Holding Company LLC Two-step recovery employing erasure coding in a geographically diverse data storage system
US11435910B2 (en) 2019-10-31 2022-09-06 EMC IP Holding Company LLC Heterogeneous mapped redundant array of independent nodes for data storage
US11119690B2 (en) 2019-10-31 2021-09-14 EMC IP Holding Company LLC Consolidation of protection sets in a geographically diverse data storage environment
US11435957B2 (en) 2019-11-27 2022-09-06 EMC IP Holding Company LLC Selective instantiation of a storage service for a doubly mapped redundant array of independent nodes
US11704192B2 (en) 2019-12-12 2023-07-18 Pure Storage, Inc. Budgeting open blocks based on power loss protection
US11847331B2 (en) 2019-12-12 2023-12-19 Pure Storage, Inc. Budgeting open blocks of a storage unit based on power loss prevention
US11416144B2 (en) 2019-12-12 2022-08-16 Pure Storage, Inc. Dynamic use of segment or zone power loss protection in a flash device
US11144220B2 (en) 2019-12-24 2021-10-12 EMC IP Holding Company LLC Affinity sensitive storage of data corresponding to a doubly mapped redundant array of independent nodes
US11231860B2 (en) 2020-01-17 2022-01-25 EMC IP Holding Company LLC Doubly mapped redundant array of independent nodes for data storage with high performance
US11188432B2 (en) 2020-02-28 2021-11-30 Pure Storage, Inc. Data resiliency by partially deallocating data blocks of a storage device
US11507308B2 (en) 2020-03-30 2022-11-22 EMC IP Holding Company LLC Disk access event control for mapped nodes supported by a real cluster storage system
US11474986B2 (en) 2020-04-24 2022-10-18 Pure Storage, Inc. Utilizing machine learning to streamline telemetry processing of storage media
US11288229B2 (en) 2020-05-29 2022-03-29 EMC IP Holding Company LLC Verifiable intra-cluster migration for a chunk storage system
US11868407B2 (en) * 2020-09-24 2024-01-09 Dell Products L.P. Multi-level data structure comparison using commutative digesting for unordered data collections
US11693983B2 (en) 2020-10-28 2023-07-04 EMC IP Holding Company LLC Data protection via commutative erasure coding in a geographically diverse data storage system
US11620214B2 (en) * 2020-10-30 2023-04-04 Nutanix, Inc. Transactional allocation and deallocation of blocks in a block store
US11487455B2 (en) 2020-12-17 2022-11-01 Pure Storage, Inc. Dynamic block allocation to optimize storage system performance
US11614880B2 (en) 2020-12-31 2023-03-28 Pure Storage, Inc. Storage system with selectable write paths
US11847324B2 (en) 2020-12-31 2023-12-19 Pure Storage, Inc. Optimizing resiliency groups for data regions of a storage system
US11847141B2 (en) 2021-01-19 2023-12-19 EMC IP Holding Company LLC Mapped redundant array of independent nodes employing mapped reliability groups for data storage
US11625174B2 (en) 2021-01-20 2023-04-11 EMC IP Holding Company LLC Parity allocation for a virtual redundant array of independent disks
US11507597B2 (en) 2021-03-31 2022-11-22 Pure Storage, Inc. Data replication to meet a recovery point objective
US11449234B1 (en) 2021-05-28 2022-09-20 EMC IP Holding Company LLC Efficient data access operations via a mapping layer instance for a doubly mapped redundant array of independent nodes
US11354191B1 (en) 2021-05-28 2022-06-07 EMC IP Holding Company LLC Erasure coding in a large geographically diverse data storage system
WO2023147842A1 (en) * 2022-02-01 2023-08-10 Huawei Technologies Co., Ltd. Data storage and methods of deduplication of data storage, storing new file and deleting file
CN114567503A (zh) * 2022-03-04 2022-05-31 南京联成科技发展股份有限公司 一种集中管控的可信的数据采集的加密方法

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7085789B1 (en) 2001-07-30 2006-08-01 Microsoft Corporation Compact garbage collection tables
US7574699B1 (en) 2003-03-19 2009-08-11 Sun Microsystems, Inc. Compact type format data system and method
US8180742B2 (en) 2004-07-01 2012-05-15 Emc Corporation Policy-based information management
US7778984B2 (en) 2004-11-19 2010-08-17 Microsoft Corporation System and method for a distributed object store
US7464247B2 (en) 2005-12-19 2008-12-09 Yahoo! Inc. System and method for updating data in a distributed column chunk data store
US7647329B1 (en) 2005-12-29 2010-01-12 Amazon Technologies, Inc. Keymap service architecture for a distributed storage system
US7856437B2 (en) 2007-07-31 2010-12-21 Hewlett-Packard Development Company, L.P. Storing nodes representing respective chunks of files in a data store
US8103628B2 (en) 2008-04-09 2012-01-24 Harmonic Inc. Directed placement of data in a redundant data storage system
BRPI0922542B1 (pt) 2008-12-22 2020-10-13 Google Llc Método realizado por um dispositivo de pluralidade de dispositivos num sistema distribuído de replicação de dados, sistema e memória legível em computador
US8301671B1 (en) 2009-01-08 2012-10-30 Avaya Inc. Method and apparatus providing removal of replicated objects based on garbage collection
US8171202B2 (en) * 2009-04-21 2012-05-01 Google Inc. Asynchronous distributed object uploading for replicated content addressable storage clusters
US8560639B2 (en) 2009-04-24 2013-10-15 Microsoft Corporation Dynamic placement of replica data
US20100306171A1 (en) 2009-06-02 2010-12-02 Microsoft Corporation Timeline Experience for Restore User Interface
US8868508B2 (en) 2010-02-09 2014-10-21 Google Inc. Storage of data in a distributed storage system
US8341118B2 (en) 2010-02-09 2012-12-25 Google Inc. Method and system for dynamically replicating data within a distributed storage system
US8886602B2 (en) 2010-02-09 2014-11-11 Google Inc. Location assignment daemon (LAD) for a distributed storage system
WO2011100365A1 (en) * 2010-02-09 2011-08-18 Google Inc. Method and system for dynamically replicating data within a distributed storage system
JP5569074B2 (ja) * 2010-03-19 2014-08-13 日本電気株式会社 ストレージシステム
US8898798B2 (en) 2010-09-01 2014-11-25 Apixio, Inc. Systems and methods for medical information analysis with deidentification and reidentification
JP5639871B2 (ja) * 2010-12-13 2014-12-10 日清工業有限公司 電子閃光装置
US8380681B2 (en) 2010-12-16 2013-02-19 Microsoft Corporation Extensible pipeline for data deduplication
US8874515B2 (en) 2011-04-11 2014-10-28 Sandisk Enterprise Ip Llc Low level object version tracking using non-volatile memory write generations
CN103931156B (zh) * 2011-05-14 2019-01-01 比特卡萨公司 具有用户不可知加密文件的服务器侧去重的云文件系统
JP2013025742A (ja) * 2011-07-26 2013-02-04 Nippon Telegr & Teleph Corp <Ntt> 分散ファイル管理装置、分散ファイル管理方法及びプログラム
EP2780834B1 (de) 2011-11-14 2020-07-08 Google LLC Verarbeiten von datenänderungen für verteilte replizierte datenbanken
KR20150021117A (ko) 2012-06-18 2015-02-27 액티피오 인크. 강화형 데이터 관리 가상화 시스템
KR102050723B1 (ko) 2012-09-28 2019-12-02 삼성전자 주식회사 컴퓨팅 시스템 및 그 데이터 관리 방법
US20140201151A1 (en) 2013-01-11 2014-07-17 Commvault Systems, Inc. Systems and methods to select files for restoration from block-level backup for virtual machines
US8775485B1 (en) 2013-03-15 2014-07-08 Joyent, Inc. Object store management operations within compute-centric object stores
US9600558B2 (en) 2013-06-25 2017-03-21 Google Inc. Grouping of objects in a distributed storage system based on journals and placement policies
US9158472B2 (en) * 2013-06-25 2015-10-13 Google Inc. Hierarchical chunking of objects in a distributed storage system

Also Published As

Publication number Publication date
CN105940396B (zh) 2019-07-26
EP3087513B1 (de) 2020-11-18
EP3087513A1 (de) 2016-11-02
AU2014369830B2 (en) 2019-01-17
US20150186043A1 (en) 2015-07-02
US9400828B2 (en) 2016-07-26
US20160034549A1 (en) 2016-02-04
JP2017500670A (ja) 2017-01-05
EP3087513A4 (de) 2017-08-09
CA2935215C (en) 2019-12-31
JP6479020B2 (ja) 2019-03-06
AU2014369830A1 (en) 2016-07-14
WO2015100416A1 (en) 2015-07-02
US9158472B2 (en) 2015-10-13
CA2935215A1 (en) 2015-07-02
CN105940396A (zh) 2016-09-14

Similar Documents

Publication Publication Date Title
DE202014010898U1 (de) Hierarchische Stückelung von Objekten in einem dezentralen Speichersystem
DE112018004178B4 (de) Mehrstufige speicherung in einem verteilten dateisystem
DE202014010953U1 (de) Gruppierung von Objekten in einem verteilten Datenspeichersystem basierend auf Protokollen und Platzierungsrichtlinien
DE112018000193B4 (de) Daten sequenziell in Zonen in einem verstreuten Speichernetzwerk speichern
US9396202B1 (en) Weakly synchronized garbage collection and compaction for aggregated, replicated object stores
DE60131900T2 (de) Verfahren und system zur verwaltung von verteilten inhalten und verwandten metadaten
DE202019005483U1 (de) Datenreplikation und Datenausfallsicherung in Datenbanksystemen
DE202009019149U1 (de) Asynchron verteilte Speicherbereinigung für replizierte Speichercluster
DE112011101109B4 (de) Übertragung von Map/Reduce-Daten auf der Grundlage eines Speichernetzwerkes oder eines Speichernetzwerk-Dateisystems
US8271455B2 (en) Storing replication requests for objects in a distributed storage system
DE112017005868T5 (de) Verwaltung von e/a-abläufen für datenobjekte in einem speichersystem
DE202020005680U1 (de) Abfragen über externe Tabellen in Datenbanksystemen
US20090216796A1 (en) Relational objects for the optimized management of fixed-content storage systems
DE102018002884A1 (de) Komponentenbasierte Synchronisierung von Digitalassets
DE112012005037T5 (de) Verwalten von redundanten unveränderlichen Dateien unter Verwendung von Deduplizierungen in Speicher-Clouds
DE112012002762T5 (de) Replikationen von Datenobjekten von einem Quellserver auf einen Zielserver
DE102013215009A1 (de) Verfahren und System zur Optimierung der Datenübertragung
DE112011101793T5 (de) Gemeinsame Datennutzung bei Dateiklonen
DE112017000167B4 (de) Verteilte Datendeduplizierung in einem Prozessorraster
DE112012000282T5 (de) Anwendungswiederherstellung in einem Dateisystem
DE112018000227B4 (de) Verfahren zum teilweisen Aktualisieren von Dateninhalten in einem verteilten Speichernetzwerk
DE112017002497T5 (de) Systeme und verfahren zur aggregation von cloud-speicher
DE202023102700U1 (de) Datenaufnahmereplizierung und Notfallwiederherstellung
DE112017000530T5 (de) Konsistentes Speichern von Daten in einem verstreuten Speichernetzwerk
DE112020004493T5 (de) Zwischenspeicherfähigkeit von single-page-anwendungen

Legal Events

Date Code Title Description
R207 Utility model specification
R150 Utility model maintained after payment of first maintenance fee after three years
R081 Change of applicant/patentee

Owner name: GOOGLE LLC (N.D.GES.D. STAATES DELAWARE), MOUN, US

Free format text: FORMER OWNER: GOOGLE INC., MOUNTAIN VIEW, CALIF., US

R082 Change of representative

Representative=s name: BETTEN & RESCH PATENT- UND RECHTSANWAELTE PART, DE

R151 Utility model maintained after payment of second maintenance fee after six years
R152 Utility model maintained after payment of third maintenance fee after eight years