-
Die vorliegende Beschreibung bezieht sich allgemein auf das Neuaufteilen von Daten in einem verteilten Computersystem.
-
Unter Schutz gestellt durch das Gebrauchsmuster und Gegenstand des Gebrauchsmusters sind, in Übereinstimmung mit den Erfordernissen des Gebrauchsmustergesetzes, lediglich Vorrichtungen wie in den Ansprüchen definiert. Für den Fall, dass in der Beschreibung auf Verfahren Bezug genommen wird, dienen diese lediglich der der Erläuterung der Vorrichtung oder der Vorrichtungen, für die mit den beigefügten Ansprüchen Schutz beansprucht wird.
-
Hintergrund
-
Die vorliegende Offenbarung bezieht sich allgemein auf umfangreiche analytische Datenverarbeitung. Eine solche Datenverarbeitung ist in Web-Unternehmen und branchenübergreifend weit verbreitet. Verteilte Datenverarbeitungssysteme benötigen einen Mechanismus, um Daten zuverlässig neu aufzuteilen, um Operationen wie z. B. verteiltes Zusammenfügen und Aggregieren auszuführen.
-
Zusammenfassung
-
Dementsprechend stellen Implementierungen der vorliegenden Offenbarung eine neue Herangehensweise zum Neuaufteilen verteilter Daten bereit, das die Vorteile einseitiger Kommunikation (wie z. B. entfernten Speicherdirektzugriff (RDMA)) nutzt, um sowohl die Ausführungszeit der Aufgabe als auch die Kosten zu reduzieren. Das Optimieren der Datenneuaufteilung, auch als die Verschiebe-Operation [engl: shuffle Operation] bekannt, reduziert die sowohl Ausführungszeit der Datenneuaufteilungsaufgabe als auch die Kosten der Aufgabenausführung erheblich.
-
Ein erfinderischer Aspekt des Gegenstands, der in dieser Spezifikation beschrieben ist, ist in Systemen und Verfahren zum Neuaufteilen von Daten in einem verteilten Computersystem verwirklicht. Das verteilte Computersystem enthält eine oder mehrere Quellen, wobei jede Quelle eine Anfangspartition der Daten enthält; eine oder mehrere Senken, wobei jede Senke eine Endpartition der Daten enthält; und einen transienten Speicher, der eine Datendatei umfasst, wobei der transiente Speicher konfiguriert ist, Daten speicherintern transient zu speichern. In speziellen Implementierungen ist der transiente Speicher ein verteiltes speicherinternes Dateisystem, das Operationen für entfernten Direktspeicherzugriff unterstützt. Die Systeme und Verfahren zum Neuaufteilen von Daten in einem verteilten Computersystem enthalten Zuweisen durch eine Quelle aus der einen oder den mehreren Quellen eines Segments der Datendatei des transienten Speichers für exklusiven Zugriff durch die Quelle und Schreiben durch die Quelle von Daten aus der Anfangspartition in einen oder mehrere Blöcke innerhalb des zugewiesenen Segments der Datendatei des transienten Speichers. Ein Abschnitt der Anfangspartition der Daten wird in einen ersten Block aus dem einen oder den mehreren Blöcken innerhalb des zugewiesenen Segments der Datendatei des transienten Speichers geschrieben. Die Systeme und Verfahren zum Neuaufteilen von Daten in einem verteilten Computersystem enthalten ferner Veröffentlichen durch die Quelle des Segments der Datendatei des transienten Speichers, so dass darauf zum Lesen durch eine oder mehrere Senken zugegriffen werden kann, und Lesen durch eine spezielle Senke aus der einen oder den mehreren Senken eines speziellen Blocks des veröffentlichten Segments der Datendatei des transienten Speichers, wobei der spezielle Block der speziellen Senke zugeordnet ist.
-
In speziellen Implementierungen enthält der transiente Speicher eine Markierungsdatei, die Metadaten enthält, die sich auf jedes Segment in der Datendatei beziehen, wobei die Metadaten Informationen über die Segmentlänge und den Segmentfestschreibungsstatus enthalten, und das Veröffentlichen durch die Quelle des Segments der Datendatei, so dass darauf zum Lesen durch die eine oder die mehreren Senken zugegriffen werden kann, enthält Aktualisieren der Metadaten. In speziellen Implementierungen enthält der transiente Speicher einen Zähler, der verwendet wird, um das Schreiben in die Datendatei zu koordinieren und Platz in der Datendatei exklusiv für jede Quelle zuzuweisen, und das Zuweisen durch eine Quelle aus der einen oder den mehreren Quellen eines Segments der Datendatei des transienten Speichers zum exklusiven Zugriff durch die Quelle enthält das Aktualisieren des Zählers.
-
Diese und andere Implementierungen können jeweils optional eines oder mehrere aus den folgenden Merkmalen enthalten. Beispielsweise werden Blöcke in einem veröffentlichten Segment der Datendatei zu einem permanenten Speicher entleert, und das Lesen durch eine spezielle Senke aus der einen oder den mehreren Senken eines speziellen Blocks des veröffentlichten Segments der Datendatei enthält das Lesen des speziellen Blocks aus dem permanenten Speicher. In speziellen Implementierungen wird die Größe der Datendatei in dem transienten Speicher, um ein vorbestimmtes Schwellenniveau zu erfüllen, durch Entleeren von Blöcken in einem veröffentlichten Segment der Datendatei in den permanenten Speicher, Größenanpassung und Abschneiden der Datendatei in dem transienten Speicher gehalten. Beispielsweise treten das Entleeren, die Größenanpassung und das Abschneiden in vorbestimmten Zeitabständen auf. In speziellen Implementierungen wird ein Fehlerkennzeichen für ein spezielles Segment eingestellt, das einen Fehler beim Schreiben von Daten in das spezielle Segment angibt, basierend auf Metadaten, die in der Markierungsdatei enthalten sind.
-
Andere Implementierungen dieser Aspekte enthalten entsprechende Systeme, Vorrichtungen und Computerprogramme, die konfiguriert sind, die Aktionen der Verfahren, die auf Computerspeichervorrichtungen codiert sind, auszuführen.
-
Die Einzelheiten einer oder mehrerer Implementierungen der Erfindung sind in den begleitenden Zeichnungen und der nachstehenden Beschreibung dargelegt. Andere Merkmale und Vorteile der Erfindung werden aus der Beschreibung, den Zeichnungen und den Ansprüchen offensichtlich.
-
Kurzbeschreibung der Zeichnungen
-
1 bildet ein Beispiel eines Systems zum Neuaufteilen von Daten in einem verteilten Computersystem gemäß Implementierungen der vorliegenden Offenbarung ab.
-
2 bildet ein Beispiel der Organisation von Daten innerhalb eines verteilten Dateisystems im Speicher gemäß Implementierungen der vorliegenden Offenbarung ab.
-
3A bildet ein Beispiel eines Verschiebe-Logs in einem verteilten Dateisystem im Speicher gemäß Implementierungen der vorliegenden Offenbarung ab.
-
3B bildet ein Beispiel einer Datendatei in einem Verschiebe-Log eines verteilten Dateisystems im Speicher gemäß Implementierungen der vorliegenden Offenbarung ab.
-
4 bildet einen Ablaufplan eines Beispiels eines Prozesses zum Neuaufteilen von Daten in einem verteilten Computersystem gemäß Implementierungen der vorliegenden Offenbarung ab.
-
Gleiche Bezugszeichen und Bezeichnungen in den verschiedenen Zeichnungen geben gleiche Elemente an.
-
Ausführliche Beschreibung
-
In einem verteilten Datenverarbeitungssystem wird, um Daten neu aufzuteilen, beispielsweise um Operationen wie z. B. verteiltes Zusammenfügen und Aggregieren auszuführen, eine Verschiebe-Operation erzeugt, und Quellen und Senken werden identifiziert, um Daten als eine Quelle zu schreiben und Daten als eine Senke zu lesen. Daten werden speicherintern transient gespeichert, z. B. eher in einem verteilten speicherinternen Dateisystem, das Operationen für entfernten Direktspeicherzugriff unterstützt, als nur auf einer Platte, und es wird auf verteilte Weise auf sie zugegriffen, um niedrige Latenz zu erreichen. Zusätzlich werden eher einseitige Kommunikationsgrundelemente wie z. B. entfernter Direktspeicherzugriff (RDMA) eingesetzt als doppelseitiger Nachrichtendurchgang, wie z. B. Übertragungssteuerungsprotokoll-(TCP) oder entfernte Prozeduraufruf-(RPC)Kommunikation, um niedrige Latenz, verbesserte Skalierung und niedrigere Kosten für die Ausführung von Aufgaben zu ermöglichen. Die/das spezielle Architektur, Daten-Layout und Protokoll, die nachstehend mit mehr Einzelheiten beschrieben sind, die verwendet werden, um auf verteilten Speicher-Servern zu lesen und zu schreiben, sind der Mechanismus, der speicherinterne Hochleistungs-Datenneuaufteilung ermöglicht. Ferner kann gemäß speziellen Implementierungen eine Platte verwendet werden, wenn nicht genug Platz vorhanden ist, um die Daten im Speicher zu halten.
-
Dementsprechend stellen Implementierungen der vorliegenden Offenbarung eine neue Herangehensweise für das Neuaufteilen verteilter Daten bereit, das die Vorteile einseitiger Kommunikation, wie z. B. RDMA, nutzt, um sowohl die Ausführungszeit für Aufgaben als auch die Kosten zu reduzieren. Wie nachstehend mit mehr Einzelheiten beschrieben reduziert diese neue Herangehensweise die Kosten der Ausführung erheblich, reduziert die Ende-zu-Ende-Latenz und verbessert die Skalierbarkeit im Vergleich zu früheren Herangehensweisen. Beispielsweise bietet verteiltes speicherinternes Speichern niedrige Latenz und hohen Durchsatzzugriff auf Daten ohne Speicherfragmentierung und somit niedrige Speicherkosten. Darüber hinaus bietet speicherinternes Speichern den Vorteil eines schnellen Direktzugriffs auf die Daten, während plattenbasierte Dateisysteme typischerweise schnellen Zugriff nur für sequentielle Zugriffsmuster erreichen. Zusätzlich ermöglicht die einseitige Kommunikation, z. B. durch RDMA-Unterstützung, dass das System Daten ohne CPU-Verwendung auf der Speicherseite in den verteilten Speicher liest und schreibt, was die Betriebsmittelkosten zum Betreiben des Speichersystems sehr preiswert macht.
-
1 bildet ein Beispiel eines Systems 100 zum Neuaufteilen von Daten in einem verteilten Computersystem gemäß Implementierungen der vorliegenden Offenbarung ab. Diese Verschiebe-Infrastruktur stellt einen zuverlässigen Liefermechanismus für eine Gruppe virtueller Datenquellen bereit, um Daten zu einer Gruppe virtueller Datensenken zu übertragen. Das System 100 kann die Quellen 110, 115, die Senken 150, 155, einen oder mehrere Verschiebe-Master 120, einen Verschiebe-Koordinator 125 und eine oder mehrere Leerungseinheiten 140 enthalten. Das System 100 kann auch ein speicherbasiertes verteiltes Dateisystem 130 und ein plattenlaufwerkbasiertes verteiltes Dateisystem 160 enthalten. Die Quellen 110, 115 sind Datenproduzenten, und die Senken 150, 155 sind Datenkonsumenten. In speziellen Implementierungen kann eine Quelle 110, 115 Daten zu irgendeiner der oder allen Senken 150, 155 innerhalb derselben Verschiebe-Operation senden. Im Betrieb können die Daten von den Quellen 110, 115 zu dem speicherbasierten verteilten Dateisystem 130 und dann zu den Senken 150, 155 fließen. In speziellen Implementierungen können im Betrieb Daten von den Quellen 110, 115 zu dem speicherbasierten verteilten Dateisystem 130 und dann zu dem plattenlaufwerkbasierten verteilten Dateisystem 160 über die eine oder die mehreren Leerungseinheiten 140 und dann zu den Senken 150, 155 fließen.
-
Der eine oder die mehreren Verschiebe-Master 120 können die Verwendung des Platzes in dem speicherbasierten verteilten Dateisystem 130 und dem plattenlaufwerkbasierten verteilten Dateisystem 160 managen. Zusätzlich können der eine oder die mehreren Verschiebe-Master 120 steuern, wie Daten von dem speicherbasierten verteilten Dateisystem 130 zu dem plattenlaufwerkbasierten verteilten Dateisystem 160 migriert werden. In speziellen Implementierungen können mehrere Verschiebe-Master 120 innerhalb einer Verschiebe-Gruppe ablaufen, was eine Aufgabe oder Abfrage mit abhängigen Verschiebe-Operationen repräsentieren kann. Der Verschiebe-Koordinator 125 kann die Platzverwendung in dem speicherbasierten verteilten Dateisystem 130 und dem plattenlaufwerkbasierten verteilten Dateisystem 160 koordinieren und verfolgen und kann außerdem einen zentralen Steuerungspunkt für das Verschieben bereitstellen. Eine Verschiebe-Gruppe kann vor dem Starten einer Verschiebe-Operation erzeugt werden. Die Verschiebe-Gruppe kann eine Operation unterstützen, in der alle Quellen in der Verschiebung als fertiggestellt markiert sind, was verwendet werden kann, um allen Senken zu signalisieren, die Daten, die bisher übertragen sind, zu verarbeiten und den Rest der Datenübertragung zu überspringen. Daten, die in der Verschiebe-Operation enthalten sind und die von einer Quelle zu einer Senke übertragen werden sollen, sind als verschobene Daten bezeichnet. Wenn die verschobenen Daten nicht länger benötigt werden, beispielsweise nachdem die verschobenen Daten durch eine Senke gelesen sind, kann eine Operation alle verbrauchten Betriebsmittel bereinigen und die Verschiebe-Gruppe zerstören.
-
Ein Verschiebe-Master 120 kann für die Verschiebe-Operationen gehalten werden und kann den Fortschritt verfolgen und Speicher in dem speicherbasierten verteilten Dateisystem 130 für die Daten, die verschoben werden, verfügbar machen. Nach dem Starten einer Verschiebe-Operation kann der Verschiebe-Master 120 eine Datei, die als ein Verschiebe-Log 135 bezeichnet ist, in dem speicherbasierten verteilten Dateisystem 130 für diese Verschiebe-Operation erzeugen. Das Verschiebe-Log 130 in dem speicherbasierten verteilten Dateisystem 130 kann Daten für alle Senken speichern, jedoch nicht notwendigerweise alle durch Quellen erzeugte Daten. Beispielsweise enthält in speziellen Implementierungen das Verschiebe-Log 135 nur die als letzte verschobenen Daten, während der Rest der produzierten Daten in den Senken-Log-Dateien 170, 175 des plattenlaufwerkbasierten verteilten Dateisystems 160 residieren. Anders als für das Verschiebe-Log 135 kann eine Senken-Log-Datei für jede Senke vorhanden sein – d. h. das Senken-Log A 170, das der Senke A 150 zugeordnet ist, und das Senken-Log B 175, das der Senke B 155 zugeordnet ist. In speziellen Implementierungen kann eine Überlappung zwischen dem Verschiebe-Log 135 des speicherbasierten verteilten Dateisystems 130 und den Senken-Log-Dateien 170, 175 des plattenlaufwerkbasierten verteilten Dateisystems 160 vorhanden sein.
-
Quellen können konzeptionell eine Anzahl geordneter Datenströme aufweisen, einen Strom zu jeder Senke. Jeder Datenstrom kann durch eine Folge von Anforderungen für Daten, die einem gegebenen Senke zugeordnet sind, definiert sein. Wenn die Folge von Anforderungen ausgeführt wird, kann die Quelle Daten in Blöcken pro Senke Puffern. Wenn der Pufferspeicher der Quelle zur Neige geht oder wenn das Verschieben endet, beginnt die Quelle, den Inhalt ihres Puffers an das Verschiebe-Log 135 des speicherbasierten verteilten Dateisystems 130 anzuhängen. Die Quelle kann den Block aus dem Puffer entfernen, sobald das Schreiben in das speicherbasierte verteilte Dateisystem 130 endet.
-
Senken können einen zusammengefassten Datenstrom aus allen Quellen über eine Folge von Anforderungen für Daten empfangen. Der Datenstrom kann durch Lesen des Verschiebe-Logs 135 des speicherbasierten verteilten Dateisystems 130 und der Senken-Log-Datei des plattenlaufwerkbasierten verteilten Dateisystems 160 für die gegebene Senke konstruiert werden. Der konstruierte Datenstrom muss in keiner speziellen Reihenfolge sein, außer dass Portionen, die von einer gegebenen Quelle empfangen werden, in derselben Reihenfolge sein können, wie sie durch diese Quelle produziert werden. Außerdem können Senken, die mit gleichen Parametern erzeugt sind, gleiche Datenströme empfangen.
-
Auf hoher Ebene ist das speicherbasierte verteilte Dateisystem 130 konfiguriert, Daten in dem entfernten Speicher zu speichern und Daten von dem entfernten Speicher abzuholen. Mit anderen Worten ist das speicherbasierte verteilte Dateisystem 130 zum effizienten Lesen und Schreiben in dem entfernten Speicher und zum Suchen von Daten aus diesem entfernten Speicher konfiguriert. Das speicherbasierte verteilte Dateisystem 130 kann verteilten Zugriff eher auf den Speicher, z. B. RAM entfernter Maschinen, als auf Platten bereitstellen. Ein speicherbasiertes Dateisystem kann auch als speicherinternes Dateisystem bezeichnet sein. Somit kann das speicherbasierte verteilte Dateisystem 130 Direktzugriff auf unterschiedliche Speicherbereiche erlauben, was effizienter ist als Plattenzugriff, so dass Produzenten oder Quellen auf unterschiedliche Speicherbereiche schreiben und Konsumenten oder Senken direkt aus diesen Speicherbereichen lesen.
-
Wie vorstehend beschrieben können Quellen Datenportionen in Blöcke Puffern, und Quellen können einen Abschnitt des speicherbasierten verteilten Dateisystems 130 für sich selbst zuweisen und dann den Puffer in diesen spezifischen Ort entladen, der im Speicher zugewiesen worden ist. Die Zuweisung kann unter den unterschiedlichen Quellen koordiniert sein, so dass ein Abschnitt des speicherbasierten verteilten Dateisystems 130 für jede Quelle zum Schreiben von Daten zugewiesen sein kann, und jede Quelle kann periodisch die lokalen Daten, die die Quelle gesammelt hat, z. B. in einem Puffer, in den zugewiesenen Abschnitt des Speichers in dem speicherbasierten verteilten Dateisystem 130 entleeren. Leser oder Senken können Zugriff auf Metadaten besitzen, die den Verschiebe-Daten zugeordnet sind, und die Senken können den Ort in dem Verschiebe-Log 135, an dem Daten, die für die Senke relevant sind, zum Lesen für die Senke gespeichert sind, basierend auf den Metadaten bestimmen. Die Senken können auf jeweilige Datenportionen aus unterschiedlichen Bereichen des Speichers an den bestimmten Orten zugreifen und sie lesen und können Daten, die für die Senke relevant sind, zusammenführen, beispielsweise in Reaktion auf eine Abfrage.
-
2 bildet ein Beispiel der Organisation von Daten innerhalb eines verteilten Dateisystems im Speicher 230 gemäß Implementierungen der vorliegenden Offenbarung ab. Für jede Verschiebe-Operation kann ein Verschiebe-Log 235 in dem speicherbasierten verteilten Dateisystem 230 erzeugt werden, das Daten transient speichert, z. B. in einem verteilten speicherinternen Dateisystem, das Operationen für entfernten Direktspeicherzugriff unterstützt, d. h. einem transienten Speicher. Ein Verschiebe-Log 235 kann eine Datendatei 210, eine Markierungsdatei 215 und eine atomare Zählerdatei 220 enthalten. Die Datendatei 210 kann Verschiebe-Segmente enthalten, die Quellen-Puffer-Dumps sein können, in denen der Puffer, der einer Quelle zugeordnet ist, Daten aus dem Puffer zu dem Verschiebe-Segment überträgt. Die Markierungsdatei 215 kann Metadaten wie z. B. Segmentlänge und Festschreibungsstatus über jedes Segment in der Datendatei enthalten. Die atomare Zählerdatei 220 kann verwendet werden, um Schreiben in die Datendatei 210 und die Markierungsdatei 215 zu koordinieren und Platz in diesen Dateien für Schreiber und Quellen exklusiv zuzuweisen. Jede Quelle kann Daten in ihren Puffer, der Daten für eine oder mehrere Senken enthalten kann, als ein Segment in die Datendatei 210 des Verschiebe-Logs 235 jedes Mal übertragen, wenn der Quellenpuffer voll ist.
-
Diese Architektur erlaubt große Schreibvorgänge, so dass ein Segment in einer einzelnen Schreibtransaktion beschrieben werden kann und das Segment so groß sein kann wie der Quellenpuffer, der beispielsweise 16 MB sein kann. Das ermöglicht große Spurgrößen, die beispielsweise 128 MB sein können, und seltene Größenanpassungen der Datendatei 210.
-
3A bildet ein Beispiel eines Verschiebe-Logs 300 in einem verteilten Dateisystem im Speicher gemäß Implementierungen der vorliegenden Offenbarung ab. Für jedes Segment in der Datendatei 310 kann ein Eintrag in der Markierungsdatei 315 vorhanden sein. Diese Segmentmarkierung in der Markierungsdatei 315 kann den Zustand des Segments, den Startversatz des Segments in der Datendatei 310 oder die Länge des Segments oder irgendeine Kombination daraus enthalten. Der Zustand des Segments kann beispielsweise als eines aus zugewiesen, nicht zugewiesen, veröffentlicht oder verlassen angegeben sein. Zugewiesen kann beispielsweise bedeuten, dass das Segment reserviert worden ist; nicht zugewiesen kann beispielsweise bedeuten, dass das Segment nicht reserviert worden ist; veröffentlicht kann beispielsweise bedeuten, dass das Segment zum Lesen verfügbar ist; und verlassen kann beispielsweise bedeuten, dass ein Fehler aufgetreten ist und das Segment nicht vollständig ist. Jede Segmentmarkierung in der Markierungsdatei 315 kann eine feste Größe aufweisen, die beispielsweise 16 Bytes sein kann. Zusätzlich kann jede Segmentmarkierung in der Markierungsdatei 315 in derselben Reihenfolge wie die Segmente sein, wie in 3A abgebildet ist. Somit kann die erste Segmentmarkierung in der Markierungsdatei 315 dem ersten Segment in der Datendatei 310 entsprechen; die zweite Segmentmarkierung in der Markierungsdatei 315 kann dem zweiten Segment in der Datendatei 310 entsprechen; und so weiter, bis zur letzten Segmentmarkierung in der Markierungsdatei 315, die dem letzten Segment in der Datendatei 310 entsprechen kann. Wie abgebildet kann beispielsweise das erste Segment einem ersten Segment aus der ersten Quelle entsprechen; das zweite Segment kann einem ersten Segment aus der zweiten Quelle entsprechen; das dritte Segment kann einem zweiten Segment aus der zweiten Quelle entsprechen; und das vierte Segment kann einem ersten Segment aus der dritten Quelle entsprechen. Wie vorstehend beschrieben kann irgendeine Anzahl von Quellen vorhanden sein, und jeder Quelle kann irgendeine Anzahl von Segmenten zugeordnet sein. Das Design des Verschiebe-Logs, das insbesondere die Struktur der Markierungsdatei enthält, und das Layout und die logische Anordnung von Daten innerhalb der Datendatei berücksichtigt und nutzt spezielle technische Eigenschaften des zugrundeliegenden speicherbasierten verteilten Dateisystems.
-
3A bildet ein Beispiel einer Datendatei 310 in einem Verschiebe-Log eines verteilten Dateisystems im Speicher gemäß Implementierungen der vorliegenden Offenbarung ab. In der Datendatei 310 kann jedes Segment einen Kopf 325 und einen Blockdatenabschnitt enthalten. Der Segmentkopf 325 kann ein Array von Zeigern auf die einzelnen Datenblöcke innerhalb dieses Segments enthalten. Beispielsweise kann der Segmentkopf 325 beispielsweise eine 64-Bit-Adresse für jeden Block enthalten. Es kann ein Eintrag für jede Senke in der Verschiebung vorhanden sein, selbst wenn das Segment keine Daten für diese Senke enthält. Mit anderen Worten enthält die Datendatei ein oder mehrere Segmente und einen oder mehrere Blöcke innerhalb jedes der Segmente, wobei jeder Block einer speziellen Senke aus einer oder mehreren Senken zugeordnet ist. In einem Beispiel wird ein Abschnitt der Anfangspartition der Daten, der Abschnitt, der durch die Neuaufteilung für eine spezielle Senke bestimmt ist, in einen ersten Block aus dem einen oder den mehreren Blöcken, die der speziellen Senke zugeordnet sind, geschrieben. Somit ist ein Abschnitt der Anfangspartition der Daten, die z. B. in einen ersten Block aus dem einen oder den mehreren Blöcken geschrieben werden, einer speziellen Quelle zugeordnet. Das Design zum Verwenden eines oder mehrerer Blöcke pro Segment in der Datendatei zieht den Vorteil aus der technischen Eigenschaft des speicherbasierten verteilten Dateisystems, die sich auf Direktlesezugriff und Schreibzugriff mit niedriger Latenz bezieht. Das Verwenden eines oder mehrerer Blöcke pro Segment ermöglicht dynamisches Skalieren der Größe der Segmente und effizientes Managen des verfügbaren Speichers in dem speicherbasierten verteilten Dateisystem. Das ist insbesondere vorteilhaft in einem Fall, wenn das speicherbasierte verteilte Dateisystem zum Verarbeiten von mehreren gleichzeitigen Verschiebe-Operationen gemeinsam verwendet wird.
-
Bezug nehmend auf 3A kann die Zählerdatei 320 einen atomaren Doppelzähler repräsentieren, der den aktuellen Segmentindex und den nächsten Versatz, der in der Datendatei zugewiesen sein kann, d. h. den Endversatz der Datendatei, verfolgen kann. Eine Schreiboperation kann durch Erhöhen des Zählers starten. Der Zähler wird um die Größe des Segments inkrementiert und kann bis zu einem Vielfachen der Unterspurlänge, die beispielsweise 8 kB sein kann, gerundet werden. Eine Leseoperation kann das Lesen ab einem Startversatz beginnen und kann höchstens bis zu einem Endversatz lesen. Falls der Endversatz nicht bereitgestellt ist, kann die Leseoperation den aktuellen Zählerwert lesen und kann den aktuellen Zählerwert als den Endversatz verwenden. Gleichzeitiges grobes Lesen kann für die Segmentköpfe 325 der Segmente, die gelesen werden, vorgenommen werden, und dann können die Versatzwerte verwendet werden, um den Verschiebe-Block aus dem Segment zu lesen.
-
Wie vorstehend beschrieben produziert eine Quelle eine Ausgabe in Datenportionen, und die Quelle speichert die Datenportionen in einem temporären Puffer. Wenn der Gesamtspeicher der Quelle, der für ihren Puffer zugewiesen ist, zur Neige geht, kann die Quelle einen Abschnitt des oder den gesamten Puffer auswählen, diese Daten als ein Verschiebe-Segment formatieren und das Segment an das Verschiebe-Log 135 des speicherbasierten verteilten Dateisystems 130 anhängen. Innerhalb eines Verschiebe-Segments können die Datenportionen als Datenblöcke organisiert sein. Dementsprechend greift die Quelle niemals auf das plattenlaufwerkbasierte verteilte Dateisystem 160 zu.
-
Wie vorstehend beschrieben kann eine Senke alle Daten, die von den Quellen zu dieser Senke gesendet werden, lesen und diese Daten beispielsweise zu dem Anwender als Verschiebe-Datenportionen zurückgeben. Es kann eine deterministische Reihenfolge vorhanden sein, wenn eine Senke Datenportionen liest, die mehrere Läufe derselben Senke ermöglichen kann, um dieselben Portionen in derselben Reihenfolge zurückzugeben. Auf diese Weise kann die Senke zum nachfolgenden Agieren als eine Quelle für eine andere Verschiebe-Operation imstande sein. Jede Senke kann die Daten, die für die Senke relevant sind, in Form von Verschiebe-Blöcken aus dem Verschiebe-Log 135 des speicherbasierten verteilten Dateisystems 130 und aus Senken-Log-Dateien 170, 175 des plattenlaufwerkbasierten verteilten Dateisystems 160 lesen. Jede Senke kann dann Daten zu einer Client-Empfangswarteschlange senden, um beispielsweise durch einen Anwender konsumiert zu werden. Die Senke kann die empfangenen Blöcke decodieren und kann die empfangenen Blöcke in Datenportionen umsetzen, und die Senke kann außerdem Datenportionen deduplizieren und entfernen, die nicht in der richtigen Reihenfolge empfangen werden. Ein Senken-Koordinator kann einen aktuellen Leseversatz in der Verschiebe-Logdatei 135 halten und kann periodisch sowohl das speicherbasierte verteilte Dateisystem 130 als auch das plattenlaufwerkbasierte verteilte Dateisystem 160 nach irgendwelchen neuen Daten überprüfen. Beispielsweise kann die Senke mit dem Senken-Koordinator das Verschiebe-Log 135 des speicherbasierten verteilten Dateisystems 130 überprüfen und irgendwelche neuen Datenblöcke lesen, und falls Daten in der Senken-Logdatei 170, 175 des plattenlaufwerkbasierten verteilten Dateisystems 160 nach dem aktuellen Leseversatz vorhanden sind, kann die Senke diese Daten lesen.
-
Im Betrieb, beispielsweise mit dem Ablauf einer Abfrage, kann der Verschiebe-Master 120 als ein zentralisierter Prozess für jede Abfrage dienen, verantwortlich zum Aufrechterhalten der Integrität der Verschiebung, Erzeugen der Verschiebe-Log-Datei 135 nach dem Start einer Verschiebung und Löschen der Verschiebe-Log-Datei 135, wenn die Verschiebung endet. Beispielsweise kann der Verschiebe-Master 120 das Verschiebe-Log 135 überwachen, um sicherzustellen, dass genug Platz in dem Speicher vorhanden ist, und falls Quellenfehler auftreten kann sich der Verschiebe-Master die Fehler berücksichtigen, um sicherzustellen, dass die Verschiebung ohne Fehler läuft. Wenn eine Verschiebung startet, kann der Verschiebe-Master 120 die Verschiebe-Daten und Zählerdatei gleichzeitig erzeugen und in der Größe anpassen. Die Anfangsgröße der Datendatei kann beispielsweise basierend auf der Anzahl von Senken in der Verschiebung bestimmt werden.
-
Wenn eine Quelle einige Daten produziert, um sie in das Verschiebe-Log 135 des speicherbasierten verteilten Dateisystems 130 zu schreiben, kann die Zählerdatei 220 inkrementiert werden, um anzugeben, dass ein Abschnitt des Verschiebe-Logs 135 für die Quelle reserviert oder zugewiesen werden sollte, was sicherstellt, dass keine Konflikte aus anderen Quellen, die auf denselben Speicherort schreiben, vorhanden sind. Dieser Prozess ermöglicht, dass durch mehrere Quellen auf gemeinsam verwendeten Speicher zugegriffen wird, wobei jede Quelle einen eindeutigen Ort reserviert, um alle Daten, die die Quelle gesammelt hat, in einen speziellen Bereich in dem Verschiebe-Log 135 zu schreiben, das auf eine Weise formatiert ist, dass sie die Senken lesen darauf zugreifen können, so dass jede Senke bestimmen kann, welcher Teil des Segments für die Senke relevant ist, und Daten aus diesem speziellen Ort lesen kann.
-
In speziellen Implementierungen können die Senken beginnen zu laufen, während die Quellen laufen. Wie vorstehend beschrieben können die Senken auf das Verschiebe-Log 135 zugreifen, das die Markierungsdatei 215 enthält, die verwendet wird, um den Status unterschiedlicher Segmente in der Datendatei 210 des Verschiebe-Logs 135 anzugeben. Die Senken können die Markierungsdatei 215 periodisch überprüfen, um zu bestimmen, welche Bereiche in der Datendatei 210 veröffentlicht sind, was bedeutet, dass die Bereiche zum Lesen verfügbar sind. Wenn ein neuer Bereich als veröffentlicht detektiert wird, kann die Senke den Indexabschnitt dieses Segments lesen, um zu bestimmen, ob irgendwelche Daten in dem Segment für die Senke relevant sind. Falls Daten in dem Segment vorhanden sind, die für die Senke relevant sind, kann der Versatz dieser Daten bestimmt werden, und die Senke kann diese Daten lesen.
-
In speziellen Implementierungen kann die Verschiebung das Übertragen von Daten erfordern, die weitaus größer sind als das Speicherkontingent des speicherbasierten verteilten Dateisystems 130, das für das System verfügbar ist. Um das zu erreichen, können Daten, die in dem speicherbasierten Dateisystem 130 gespeichert sind, periodisch durch eine oder mehrere Leerungseinheiten 140 aus dem speicherbasierten verteilten Dateisystem 130 in das plattenlaufwerkbasierte verteilte Dateisystem 160 entleert werden. Leeren beinhaltet Lesen eines Abschnitts der Daten in dem speicherbasierten verteilten Dateisystem 130 und ihr Anhängen an die Senken-Log-Datei auf dem plattenlaufwerkbasierten verteilten Dateisystem 160. Nachdem dieser Abschnitt der Daten in das plattenlaufwerkbasierte verteilte Dateisystem 160 geschrieben worden ist, wird die Datei in dem speicherbasierten verteilten Dateisystem 130 abgeschnitten, um die Zuweisung des verwendeten Speichers, der diesem geschriebenen Abschnitt der Daten entspricht, aufzuheben. Um die Leerungs-Effizienz zu maximieren, können größere Leerungs-Anforderungen mit geringerer Häufigkeit angestoßen werden. Somit kann eine Leerungsoperation angestoßen werden, falls beispielsweise die aktuelle Verwendung größer als achtzig Prozent des aktuellen Kontingents ist. Ferner kann, wenn eine Leerung angestoßen wird, die Verwendung beispielsweise auf weniger als fünfzig Prozent des aktuellen Kontingents reduziert werden. Wenn die Leerungsanforderung behandelt wird, kann die Leerungseinheit 140 die spezifizierten Daten nachfolgend verarbeiten und kann alle Daten bis zu einem spezifizierten Endversatz entleeren.
-
Der Verschiebe-Koordinator 125 kann die Speicherkontingente für das speicherbasierte verteilte Dateisystem 130 und das plattenlaufwerkbasierte verteilte Dateisystem 160 managen. Beispielsweise kann der Verschiebe-Koordinator 125 eine vorgegebene Gesamtkontingentgrenze verwenden und kann das Kontingent unter aktiven Abfragen verteilen. Der Verschiebe-Koordinator 125 kann die insgesamt verfügbaren Betriebsmittel zwischen Abfragen unterteilen, unter Berücksichtigung von Abfrageprioritäten, Anwendern und Betriebsmittelreservierungen. Weil mehr als eine Verschiebe-Operation vorhanden sein kann, die innerhalb einer Abfrage abläuft, kann das Abfragekontingent unter allen aktiven Verschiebungen innerhalb dieser Abfrage verteilt sein. Zusätzlich können der eine oder die mehreren Verschiebe-Master 120 das Verschiebe-Kontingent unter Verschiebe-Log-Dateien zuweisen und die Größe der Verschiebe-Log-Dateien durch periodisches Leeren, Größenanpassen und Abschneiden jeder Verschiebe-Log-Datei 135 erhalten.
-
Gemäß speziellen Implementierungen können Quellen und Senken repliziert werden und mehrere Kopien aufweisen, weil Prozesse sterben oder verwaisen könnten und um Umgehen langsamer Maschinen über erneutes Erledigen von Aufgaben zu ermöglichen. In speziellen Implementierungen können Verschiebungen verschachtelt sein, so dass das System imstande ist, eine Funktion der Ausgabe einer Senke in einer Verschiebung in eine Quelle einer weiteren Verschiebung einzuführen. Beispielsweise kann das Verschachteln von Verschiebungen für mehrere Ebenen von Zusammenfügungen auf unterschiedliche Schlüssel verwendet werden, was Aufteilung nach jeder Zusammenfügung erfordert. In speziellen Implementierungen können die Verschiebe-Operation und Architektur Daten-Streaming ermöglichen, so dass eine Senke die erste Datenportion empfangen kann, bevor die letzte Datenportion gesendet wird. Mit anderen Worten ist es keine Anforderung, dass die Quellen fertig sind, bevor die Senken beginnen können, Daten zu empfangen. Somit können Quellen deterministisch wiederholbar sein, so dass eine Quelle die gleichen Ergebnisse in der gleichen Reihenfolge produziert, falls sie mehrere Male ausgeführt wird. In speziellen Implementierungen können die Verschiebe-Operation und Architektur zum Handhaben heterogener Belastung fähig sein, die große Verschiebungen, z. B. in der Größenordnung von zehn Terrabytes bis Petabytes, und auch kleinere Verschiebungen mit niedriger Latenz enthält, in denen z. B. die Latenz in einer Größenordnung des Sendens eines RPC ist. Ferner können in speziellen Implementierungen die Verschiebe-Operation und Architektur das Liefern gesendeter Daten in der Reihenfolge ermöglichen, so dass zwei Datenportionen, die von einer einzigen Quelle zu derselben Senke gesendet werden, in derselben Reihenfolge ankommen, in der sie gesendet werden. Das kann jedoch keine Ordnung unter Datenportionen, die durch unterschiedliche Quelle gesendet werden, oder Datenportionen, die durch verschiedene Senken empfangen werden, implizieren.
-
4 bildet einen Ablaufplan eines Beispiels eines Prozesses 400 zum Neuaufteilen von Daten in einem verteilten Computersystem gemäß Implementierungen der vorliegenden Offenbarung ab. Wie vorstehend beschrieben kann das verteilte Computersystem eine oder mehrere Quellen, eine oder mehrere Senken und einen transienten Speicher enthalten, der ein speicherbasiertes verteiltes Dateisystem 130 sein kann. Bei 410 kann eine Quelle aus der einen oder den mehreren Quellen ein Segment einer Datendatei des transienten Speichers für exklusiven Zugriff durch die Quelle zuweisen. Sobald das Segment der Datendatei der Quelle zugewiesen ist, kann die Quelle bei 420 Daten aus einer Anfangspartition der Quelle in einen oder mehrere Blöcke innerhalb des zugewiesenen Segments der Datendatei des transienten Speichers schreiben. Ein Abschnitt der Anfangspartition der Daten kann in einen ersten Block aus dem einen oder den mehreren Blöcken innerhalb des zugewiesenen Segments der Datendatei des transienten Speichers geschrieben werden.
-
Bei 430 kann die Quelle das Segment der Datendatei des transienten Speichers veröffentlichen, so dass darauf zum Lesen durch eine oder mehrere Senken zugegriffen werden kann. Sobald das Segment der Datendatei für einen Lesezugriff veröffentlicht ist, kann bei 440 eine spezielle Senke aus der einen oder den mehreren Senken einen speziellen Block des veröffentlichten Segments der Datendatei des transienten Speichers lesen. Der spezielle Block des veröffentlichten Segments der Datendatei, den die Senke liest, kann ein spezieller Block sein, der der speziellen Senke zugeordnet ist.
-
In Übereinstimmung mit dem Prozess 400 kann der transiente Speicher ein verteiltes speicherinternes Dateisystem sein, das Operationen für entfernten Direktspeicherzugriff unterstützt. In speziellen Implementierungen enthält der transiente Speicher eine Markierungsdatei, die Metadaten enthält, die sich auf jedes Segment in der Datendatei beziehen, wobei die Metadaten Informationen über die Segmentlänge und den Segmenffestschreibungsstatus enthalten, und dass die Quelle das Segment der Datendatei, so dass darauf zum Lesen durch die eine oder die mehreren Senken zugegriffen werden kann, veröffentlicht, kann bei 430 Aktualisieren der Metadaten enthalten. In speziellen Implementierungen kann der transiente Speicher einen Zähler enthalten, der verwendet wird, um Schreiben in die Datendatei zu koordinieren und Platz in der Datendatei exklusiv für jede Quelle zuzuweisen, und dass eine Quelle aus der einen oder den mehreren Quellen ein Segments der Datendatei des transienten Speichers zum exklusiven Zugriff durch die Quelle zuweist, enthält bei 410 das Aktualisieren des Zählers.
-
Zusätzlich können Blöcke in einem veröffentlichten Segment der Datendatei zu einem permanenten Speicher entleert werden, der das plattenlaufwerkbasierte verteilte Dateisystem 160 sein kann. Dass eine spezielle Senke aus der einen oder den mehreren Senken einen speziellen Block des veröffentlichten Segments der Datendatei liest, kann bei 440 Lesen des speziellen Blocks aus dem permanenten Speicher enthalten. In speziellen Implementierungen kann die Größe der Datendatei in dem transienten Speicher gehalten werden, um ein vorbestimmtes Schwellenniveau zu erfüllen, beispielsweise durch Entleeren von Blöcken in einem veröffentlichten Segment der Datendatei in den permanenten Speicher, Größenanpassung und Abschneiden der Datendatei in dem transienten Speicher. Beispielsweise können das Entleeren, die Größenanpassung und das Abschneiden in vorbestimmten Zeitabständen auftreten. In speziellen Implementierungen kann ein Fehlerkennzeichen für ein spezielles Segment eingestellt sein, das einen Fehler beim Schreiben von Daten in das spezielle Segment angibt, basierend auf Metadaten, die in der Markierungsdatei 215 enthalten sind.
-
Somit erreichen Implementierungen der vorliegenden Offenbarung Vorteile wie z. B. eine niedrigere kleinste Latenz, niedrigere CPU-Gesamtkosten, Verwendung nur der CPU-Betriebsmittel, die aktuell für die Verschiebe-Operation erforderlich sind, und eine effektivere Verwendung des Speichers mit einem niedrigen Speicher-Overhead pro Senke. Ferner enthalten die Vorteile von Implementierungen der vorliegenden Offenbarung einen Verschiebe-Pfad nur im Speicher, der einen effizienten Fehlerwiederherstellungsmechanismus für Daten, die in dem Speicher durch Replizierung verlorengehen, bereitstellt, und DMA-Grundelemente ermöglichen eine Datenübertragung ohne CPU-Kosten auf den Speicher-Hosts, was dazu führt, dass die Verschiebe-Operation einen sehr geringen CPU-Overhead außerhalb der Quellen und Senken aufweist. Dementsprechend reduziert das Optimieren der Neuaufteilung verteilter Daten durch die Verschiebe-Operation, die in der vorliegenden Offenbarung beschrieben ist, erheblich die Ausführungskosten, reduziert die Ende-zu-Ende-Latenz und verbessert die Skalierbarkeit im Vergleich zu früheren Herangehensweisen.
-
Es ist eine Anzahl von Implementierungen beschrieben worden. Nichtsdestotrotz ist zu verstehen, dass verschiedene Modifikationen vorgenommen werden können, ohne vom Geist und Schutzbereich der Offenbarung abzuweichen. Beispielsweise können verschiedene Formen der vorstehend gezeigten Abläufe verwendet werden, wobei die Reihenfolge von Schritten geändert, Schritte hinzugefügt oder entfernt sein können.
-
Implementierungen der Erfindung und aller funktionalen Operationen, die in dieser Spezifikation beschrieben sind, können in einer digitalen elektronischen Schaltungsanordnung oder in Computer-Software, Firmware oder Hardware, die die Strukturen, die in dieser Spezifikation offenbart sind, und ihre strukturellen Äquivalente enthalten, oder in Kombinationen aus einem oder mehreren daraus implementiert sein. Implementierungen der Erfindung können als ein oder mehrere Computerprogrammprodukte implementiert sein, d. h. als ein oder mehrere Module aus Computerprogrammanweisungen, die auf einem computerlesbaren Medium zur Ausführung durch eine oder zur Steuerung des Betriebs einer Datenverarbeitungsvorrichtung codiert sind. Das computerlesbare Medium kann eine maschinenlesbare Speichervorrichtung, ein maschinenlesbares Speichersubstrat, eine Speichervorrichtung, eine Materialzusammensetzung, die ein maschinenlesbares verbreitetes Signal bewirkt, oder eine Kombination aus einem oder mehreren davon sein. Der Begriff ”Datenverarbeitungsvorrichtung” umfasst alle Vorrichtungen, Geräte und Maschinen zur Verarbeitung von Daten, die als Beispiel einen programmierbaren Prozessor, einen Computer oder mehrere Prozessoren oder Computer enthalten. Die Vorrichtung kann zusätzlich zu Hardware Code enthalten, der eine Ausführungsumgebung für das fragliche Computerprogramm erzeugt, z. B. Code, der Prozessor-Firmware, einen Protokoll-Stack, ein Datenbankmanagementsystem, ein Betriebssystem oder eine Kombination aus einem oder mehreren davon bildet. Ein verbreitetes Signal ist ein künstlich erzeugtes Signal, z. B. ein durch eine Maschine erzeugtes elektrisches, optisches oder elektromagnetisches Signal, das erzeugt wird, um Informationen zur Übertragung zu geeigneten Empfängervorrichtungen zu codieren.
-
Obwohl diese Offenbarung viele Spezifika enthält, sollen diese nicht als Einschränkungen für den Schutzbereich der Erfindung oder dessen, was beansprucht sein kann, gedeutet werden, sondern vielmehr als Beschreibungen von Merkmalen, die für spezielle Implementierungen der Erfindung spezifisch sind. Spezielle Merkmale, die in dieser Spezifikation im Kontext getrennter Implementierungen beschrieben sind, können auch in Kombination in einer einzigen Implementierung implementiert sein. Umgekehrt können verschiedene Merkmale, die im Kontext einer einzigen Implementierung beschrieben sind, auch in mehreren Implementierungen getrennt oder in irgendeiner geeigneten Unterkombination implementiert sein. Außerdem können, obwohl Merkmale vorstehend als in speziellen Kombinationen arbeitend beschrieben und sogar anfangs als solche beansprucht sind, ein oder mehrere Merkmale aus einer beanspruchten Kombination in einigen Fällen aus der Kombination herausgenommen sein, und die beanspruchte Kombination kann sich auf eine Unterkombination oder eine Variation einer Unterkombination richten.
-
Ähnlich sollte, obwohl Operationen in den Zeichnungen in einer speziellen Reihenfolge abgebildet sind, das nicht so verstanden werden, dass es erforderlich ist, dass solche Operationen in der speziellen gezeigten Reihenfolge oder in sequentieller Reihenfolge ausgeführt werden oder dass alle dargestellten Operationen ausgeführt werden, um wünschenswerte Ergebnisse zu erreichen. Unter speziellen Umständen können Multitasking und Parallelverarbeitung vorteilhaft sein. Außerdem sollte die Trennung verschiedener Systemkomponenten in den vorstehend beschriebenen Implementierungen nicht so verstanden werden, dass eine solche Trennung in allen Implementierungen erforderlich ist, und es sollte verstanden werden, dass die beschriebenen Programmkomponenten und Systeme im Allgemeinen gemeinsam in einem einzigen Software-Produkt integriert oder in mehrere Software-Produkte paketiert sein können.
-
Weitere Implementierungen sind in den folgenden Beispielen zusammengefasst:
Beispiel 1: Computerimplementiertes Verfahren zum Neuaufteilen von Daten in einem verteilten Computersystem, das enthält: eine oder mehrere Quellen, wobei jede Quelle eine Anfangspartition der Daten umfasst, eine oder mehrere Senken, wobei jede Senke eine Endpartition der Daten umfasst, und einen transienten Speicher, der eine Datendatei enthält, wobei der transiente Speicher konfiguriert ist, Daten speicherintern transient zu speichern, wobei das Verfahren umfasst: Zuweisen durch eine Quelle aus der einen oder den mehreren Quellen eines Segments der Datendatei des transienten Speichers für exklusiven Zugriff durch die Quelle; Schreiben durch die Quelle von Daten aus der Anfangspartition in einen oder mehrere Blöcke innerhalb des zugewiesenen Segments der Datendatei des transienten Speichers, wobei ein Abschnitt der Anfangspartition der Daten in einen ersten Block aus dem einen oder den mehreren Blöcken innerhalb des zugewiesenen Segments der Datendatei des transienten Speichers geschrieben wird; Veröffentlichen durch die Quelle des Segments der Datendatei des transienten Speichers, so dass darauf zum Lesen durch die eine oder die mehreren Senken zugegriffen werden kann; und Lesen durch die spezielle Senke aus der einen oder den mehreren Senken eines speziellen Blocks des veröffentlichten Segments der Datendatei des transienten Speichers, wobei der spezielle Block der speziellen Senke zugeordnet ist.
-
Beispiel 2: Verfahren nach Beispiel 1, wobei der transiente Speicher ein verteiltes speicherinternes Dateisystem ist, das Operationen für entfernten Direktspeicherzugriff unterstützt.
-
Beispiel 3: Verfahren nach Beispiel 1 oder 2, wobei der transiente Speicher eine Markierungsdatei umfasst, die Metadaten enthält, die sich auf jedes Segment in der Datendatei beziehen, wobei die Metadaten Informationen über die Segmentlänge und den Segmentfestschreibungsstatus umfassen, und wobei das Veröffentlichen durch die Quelle des Segments der Datendatei, so dass darauf zum Lesen durch die eine oder die mehreren Senken zugegriffen werden kann, Aktualisieren der Metadaten umfasst.
-
Beispiel 4: Verfahren nach Beispiel 3, wobei ein Fehlerkennzeichen für ein spezielles Segment eingestellt wird, das einen Fehler beim Schreiben von Daten in das spezielle Segment angibt, basierend auf Metadaten, die in der Markierungsdatei enthalten sind.
-
Beispiel 5: Verfahren nach einem der Beispiele 1 bis 4, wobei der transiente Speicher einen Zähler umfasst, der verwendet wird, um Schreiben in die Datendatei zu koordinieren und Platz in der Datendatei exklusiv jeder Quelle zuzuweisen, und wobei das Zuweisen durch eine Quelle aus der einen oder den mehreren Quellen eines Segments der Datendatei des transienten Speichers zum exklusiven Zugriff durch die Quelle das Aktualisieren des Zählers umfasst.
-
Beispiel 6: Verfahren nach einem der Beispiele 1 bis 5, wobei Blöcke in einem veröffentlichten Segment der Datendatei zu einem permanenten Speicher entleert werden, wobei das Lesen durch eine spezielle Senke aus der einen oder den mehreren Senken eines speziellen Blocks des veröffentlichten Segments der Datendatei das Lesen des speziellen Blocks aus dem permanenten Speicher umfasst.
-
Beispiel 7: Verfahren nach Beispiel 6, wobei die Größe der Datendatei in dem transienten Speicher durch Entleeren von Blöcken in einem veröffentlichten Segment der Datendatei zu dem permanenten Speicher, Größenanpassung und Abschneiden der Datendatei in dem transienten Speicher so gehalten wird, dass sie ein vorbestimmtes Schwellenniveau erfüllt, wobei Entleeren, Größenanpassung und Abschneiden in vorbestimmten Zeitabständen auftreten.
-
Beispiel 8: Verteiltes Computersystem, das umfasst: eine oder mehrere Quellen, wobei jede Quelle eine Anfangspartition der Daten umfasst; eine oder mehrere Senken, wobei jede Senke eine Endpartition der Daten enthält; einen transienten Speicher, der eine Datendatei umfasst, wobei der transiente Speicher konfiguriert ist, Daten speicherintern transient zu speichern; einen oder mehrere Prozessoren; und einen Speicher, der Anweisungen speichert, die arbeiten, wenn sie ausgeführt werden, um zu bewirken, dass der eine oder die mehreren Prozessoren Operationen ausführen, die umfassen: Zuweisen durch eine Quelle aus der einen oder den mehreren Quellen eines Segments der Datendatei des transienten Speichers für exklusiven Zugriff durch die Quelle; Schreiben durch die Quelle von Daten aus der Anfangspartition in einen oder mehrere Blöcke innerhalb des zugewiesenen Segments der Datendatei des transienten Speichers, wobei ein Abschnitt der Anfangspartition der Daten in einen ersten Block aus dem einen oder den mehreren Blöcken innerhalb des zugewiesenen Segments der Datendatei des transienten Speichers geschrieben wird; Veröffentlichen durch die Quelle des Segments der Datendatei des transienten Speichers, so dass darauf zum Lesen durch die eine oder die mehreren Senken zugegriffen werden kann; und Lesen durch eine spezielle Senke aus der einen oder den mehreren Senken eines speziellen Blocks des veröffentlichten Segments der Datendatei des transienten Speichers, wobei der spezielle Block der speziellen Senke zugeordnet ist.
-
Beispiel 9: System nach Beispiel 8, wobei der transiente Speicher ein verteiltes speicherinternes Dateisystem ist, das Operationen für entfernten Direktspeicherzugriff unterstützt.
-
Beispiel 10: System nach Beispiel 8 oder 9, wobei der transiente Speicher eine Markierungsdatei umfasst, die Metadaten enthält, die sich auf jedes Segment in der Datendatei beziehen, wobei die Metadaten Informationen über die Segmentlänge und den Segmentfestschreibungsstatus umfassen, und wobei das Veröffentlichen durch die Quelle des Segments der Datendatei, so dass darauf zum Lesen durch die eine oder die mehreren Senken zugegriffen werden kann, Aktualisieren der Metadaten umfasst.
-
Beispiel 11: System nach Beispiel 10, wobei ein Fehlerkennzeichen für ein spezielles Segment eingestellt wird, das einen Fehler beim Schreiben von Daten in das spezielle Segment angibt, basierend auf Metadaten, die in der Markierungsdatei enthalten sind.
-
Beispiel 12: System nach einem der Beispiele 8 bis 11, wobei der transiente Speicher einen Zähler umfasst, der verwendet wird, um das Schreiben in die Datendatei zu koordinieren und Platz in der Datendatei exklusiv für jede Quelle zuzuweisen, und wobei das Zuweisen durch eine Quelle aus der einen oder den mehreren Quellen eines Segments der Datendatei des transienten Speichers für exklusiven Zugriff durch die Quelle das Aktualisieren des Zählers umfasst.
-
Beispiel 13: System nach einem der Beispiele 8 bis 12, wobei Blöcke in einem veröffentlichten Segment der Datendatei zu einem permanenten Speicher entleert werden, wobei das Lesen durch eine spezielle Senke aus der einen oder den mehreren Senken eines speziellen Blocks des veröffentlichten Segments der Datendatei das Lesen des speziellen Blocks aus dem permanenten Speicher umfasst.
-
Beispiel 14: System nach Beispiel 13, wobei die Größe der Datendatei in dem transienten Speicher durch Entleeren von Blöcken in einem veröffentlichten Segment der Datendatei zu dem permanenten Speicher, Größenanpassung und Abschneiden der Datendatei in dem transienten Speicher so gehalten wird, dass sie ein vorbestimmtes Schwellenniveau erfüllt, wobei Entleeren, Größenanpassung und Abschneiden in vorbestimmten Zeitabständen auftreten.
-
Beispiel 15: Computerlesbare Speichervorrichtung, die Anweisungen speichert, die durch einen oder mehrere Prozessoren ausführbar sind, die bei einer solchen Ausführung bewirken, dass der eine oder die mehreren Prozessoren Operationen in einem verteilten Computersystem ausführen, die enthält: eine oder mehrere Quellen, wobei jede Quelle eine Anfangspartition der Daten umfasst, eine oder mehrere Senken, wobei jede Senke eine Endpartition der Daten umfasst, und einen transienten Speicher, der eine Datendatei enthält, wobei der transiente Speicher konfiguriert ist, Daten speicherintern transient zu speichern, wobei die Operationen umfassen: Zuweisen durch eine Quelle aus der einen oder den mehreren Quellen eines Segments der Datendatei des transienten Speichers für exklusiven Zugriff durch die Quelle; Schreiben durch die Quelle von Daten aus der Anfangspartition in einen oder mehrere Blöcke innerhalb des zugewiesenen Segments der Datendatei des transienten Speichers, wobei ein Abschnitt der Anfangspartition der Daten in einen ersten Block aus dem einen oder den mehreren Blöcken innerhalb des zugewiesenen Segments der Datendatei des transienten Speichers geschrieben wird; Veröffentlichen durch die Quelle des Segments der Datendatei des transienten Speichers, so dass darauf zum Lesen durch die eine oder die mehreren Senken zugegriffen werden kann; und Lesen durch eine spezielle Senke aus der einen oder den mehreren Senken eines speziellen Blocks des veröffentlichten Segments der Datendatei des transienten Speichers, wobei der spezielle Block der speziellen Senke zugeordnet ist.
-
Beispiel 16: Computerlesbare Speichervorrichtung nach Beispiel 15, wobei der transiente Speicher ein verteiltes speicherinternes Dateisystem ist, das Operationen für entfernten Direktspeicherzugriff unterstützt.
-
Beispiel 17: Computerlesbare Speichervorrichtung nach Beispiel 15 oder 16, wobei der transiente Speicher eine Markierungsdatei umfasst, die Metadaten enthält, die sich auf jedes Segment in der Datendatei beziehen, wobei die Metadaten Informationen über die Segmentlänge und den Segmenffestschreibungsstatus umfassen, und wobei das Veröffentlichen durch die Quelle des Segments der Datendatei, so dass darauf zum Lesen durch die eine oder die mehreren Senken zugegriffen werden kann, Aktualisieren der Metadaten umfasst.
-
Beispiel 18: Computerlesbare Speichervorrichtung nach Beispiel 17, wobei ein Fehlerkennzeichen für ein spezielles Segment eingestellt wird, das einen Fehler beim Schreiben von Daten in das spezielle Segment angibt, basierend auf Metadaten, die in der Markierungsdatei enthalten sind.
-
Beispiel 19: Computerlesbare Speichervorrichtung nach einem der Beispiele 15 bis 18, wobei der transiente Speicher einen Zähler umfasst, der verwendet wird, um Schreiben in die Datendatei zu koordinieren und Platz in der Datendatei exklusiv für jede Quelle zuzuweisen, und wobei das Zuweisen durch eine Quelle aus der einen oder den mehreren Quellen eines Segments der Datendatei des transienten Speichers für exklusiven Zugriff durch die Quelle das Aktualisieren des Zählers umfasst.
-
Beispiel 20: Computerlesbare Speichervorrichtung nach einem der Beispiele 15 bis 19, wobei Blöcke in einem veröffentlichten Segment der Datendatei zu einem permanenten Speicher entleert werden, wobei das Lesen durch eine spezielle Senke aus der einen oder den mehreren Senken eines speziellen Blocks des veröffentlichten Segments der Datendatei das Lesen des speziellen Blocks aus dem permanenten Speicher umfasst.
-
Beispiel 21: Computerlesbare Speichervorrichtung nach Beispiel 20, wobei die Größe der Datendatei in dem transienten Speicher durch Entleeren von Blöcken in einem veröffentlichten Segment der Datendatei zu dem permanenten Speicher, Größenanpassung und Abschneiden der Datendatei in dem transienten Speicher so gehalten wird, dass sie eine vorbestimmtes Schwellenniveau erfüllt, wobei Entleeren, Größenanpassung und Abschneiden in vorbestimmten Zeitabständen auftreten.
-
Beispiel 22: Verfahren nach einem der Beispiele 1 bis 7, wobei in der Datendatei jedes Segment einen Kopf und einen Blockdatenabschnitt umfasst, wobei der Segmentkopf ein Array von Zeigern auf die einzelnen Datenblöcke innerhalb dieses Segments enthält.
-
Beispiel 23: Verfahren nach Beispiel 22, wobei der Segmentkopf eine Adresse für jeden Block enthält.
-
Beispiel 24: Verfahren nach einem der Beispiele 1 bis 9, wobei dann, wenn Daten aus ihrer Anfangspartition in einen oder mehrere Blöcke innerhalb des zugewiesenen Segments der Datendatei geschrieben werden, jeder Block aus dem einen oder den mehreren Blöcken einer ersten Senke aus der einen oder mehreren Senken zugeordnet ist und ein Abschnitt der Anfangspartition der Daten, wobei der Abschnitt durch die Neuaufteilung für die erste Senke bestimmt ist, in die ersten Blöcke aus dem einen oder den mehreren Blöcken, der/die der ersten Senke zugeordnet ist/sind, geschrieben wird.
-
Die Verfahren nach den Beispielen 22 bis 24 können auch Aspekte des verteilten Computersystems eines der Beispiele 8 bis 14 und/oder Aspekte der computerlesbaren Speichervorrichtung eines der Beispiele 15 bis 21 sein.
-
Somit sind spezielle Implementierungen der vorliegenden Offenbarung beschrieben worden. Andere Implementierungen sind innerhalb des Schutzbereichs der folgenden Ansprüche. Beispielsweise können die Aktionen, die in den Ansprüchen vorgetragen sind, in einer anderen Reihenfolge ausgeführt werden und immer noch wünschenswerte Ergebnisse erreichen. Eine Anzahl von Implementierungen ist beschrieben worden. Nichtsdestotrotz ist zu verstehen, dass verschiedene Modifikationen vorgenommen werden können, ohne vom Geist und Schutzbereich der Offenbarung abzuweichen. Beispielsweise können verschiedene Formen der vorstehend gezeigten Abläufe verwendet werden, wobei die Reihenfolge von Schritten geändert, Schritte hinzugefügt oder entfernt sein können. Dementsprechend sind andere Implementierungen innerhalb des Schutzbereichs der folgenden Ansprüche.