DE202014010924U1 - Nichtflüchtiges Shuffle-System - Google Patents

Nichtflüchtiges Shuffle-System Download PDF

Info

Publication number
DE202014010924U1
DE202014010924U1 DE202014010924.9U DE202014010924U DE202014010924U1 DE 202014010924 U1 DE202014010924 U1 DE 202014010924U1 DE 202014010924 U DE202014010924 U DE 202014010924U DE 202014010924 U1 DE202014010924 U1 DE 202014010924U1
Authority
DE
Germany
Prior art keywords
key
records
data
data stream
consumer
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
DE202014010924.9U
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 DE202014010924U1 publication Critical patent/DE202014010924U1/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5066Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating

Landscapes

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

Abstract

Konkretes, nicht-flüchtiges, computerlesbares Medium, das mit Instruktionen kodiert ist, die einen oder mehrere Prozessoren zur Ausführung von Informationen veranlassen, einschließlich: reagierend auf eine Anfrage das Durchführen einer Shuffle-Operation auf einen Datenstream, wobei die Shuffle-Operation eine Operation ist, die Datensätze mit Schlüsselwerten in dem Datenstream anhand der Schlüsselwerte gruppiert: das Empfang mindestens eines Teils des Datenstreams, wobei der Datenstream eine Vielzahl von Datensätzen und jeder Datensatz einen Schlüsselwert enthält und der Datenstream von einem oder mehreren Writern empfangen wird; das Speichern der Vielzahl von Datensätzen an einem nichtflüchtigen Speicherort aus einem Set von nichtflüchtigen Speicherorten, wobei jeder nichtflüchtige Speicherort einem Schlüsselbereich entsprechend den Schlüsselwerten in der Vielzahl von Datensätzen zugeteilt ist und der nichtflüchtige Speicherort für jeden Datensatz zumindest zum Teil auf Basis des Schlüsselwerts des jeweiligen Datensatzes ausgewählt wird; das Empfangen einer Anfrage von einem Verbraucher für ein Unterset aus der Vielzahl von Datensätzen inklusive eines Schlüsselbereichs; und nach Anfrage des Verbrauchers: das Bereitstellen des Untersets aus der Vielzahl von Datensätzen, inklusive der Schlüsselbereiche von einem oder mehreren der nichtflüchtigen Speicherorte.

Description

  • HINTERGRUND
  • Diese Spezifikation bezieht sich auf Shuffle-Operationen in einem verteilten Datenverarbeitungssystem.
  • Eine Shuffle-Operation ist ein Zwischenschritt in einem verteilten Datenverarbeitungssystem, bei dem von „Writern” (Schreibfunktionen) produzierte Daten nach Schlüsselwerten gruppiert werden, um von „Readern” (Lesefunktionen) aufgenommen werden zu können. Ein Beispiel eines verteilten Datenverarbeitungsalgorithmus, der eine Shuffle-Operation nutzt, ist ein MapReduce-Algorithmus. Die Writer werden in der Map-Phase implementiert, während der parallele Tasks erstellt werden, die Daten verarbeiten, um Zwischenergebnisse zu generieren. In der Shuffle-Phase werden die partiellen Rechenergebnisse der Map-Phase für den Zugriff durch die Reader geordnet, die die Reduce-Funktion implementieren. Während der Reduce-Phase führt jeder Reader einen Reduce-Task aus, der die von der Map-Phase generierten Daten aggregiert. Andere verteilte Datenverarbeitungsalgorithmen sortieren Daten auch mit einer Shuffle-Operation.
  • Die Shuffle-Operation enthält die Gruppierung eines Datensatz-Streams entsprechend den in den Datensätzen enthaltenen Schlüsseln. Die Schlüssel können alphanumerische Strings oder numerische Identifier sein. Die Datensätze können der Shuffle-Operation von einem Set von Shuffle-Writern in beliebiger Reihenfolge geliefert werden. Ein Set von Shuffle-Komponenten kann die Datensätze erhalten und sie entsprechend der in ihnen enthaltenen Schlüssel gruppieren. Die Shuffle-Komponenten können dann die Datensätze, jetzt nach Schlüsselwerten gruppiert, einem Set von Shuffle-Readern bereitstellen.
  • 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.
  • ZUSAMMENFASSUNG
  • Der behandelte Gegenstand dieses Antrags bezieht sich auf die Neukonfiguration einer Shuffle-Operation, wie z. B. durch das Ändern der Zuweisung von Schlüsselweiten, während die Shuffle-Operation aktiv ist. Der behandelte Gegenstand dieses Antrags bezieht sich auch auf die Speicherung der Ergebnisse einer Shuffle-Operation auf nichtflüchtigem Speicher für ein späteres Auslesen.
  • Im Allgemeinen kann ein innovativer Aspekt des in dieser Spezifikation beschriebenen und behandelten Gegenstands in Verfahren verkörpert werden, die die Aktionen der Reaktionsfähigkeit bis zum Erhalt einer Anfrage enthalten, eine Shuffle-Operation auf einen Datenstream auszuführen, wobei die Shuffle-Operation eine Operation ist, die Datensätze mit Schlüsseln in dem Datenstream nach Schlüsseln gruppiert: das Empfangen mindestens eines Teils des Datenstreams, wobei der Datenstream eine Vielzahl von Datensätzen enthält, jeder Datensatz einen Schlüssel enthält und der Datenstream von ein oder mehreren Writern empfangen wird; das Abspeichern jedes der Vielzahl von Datensätzen an einem nichtflüchtigen Speicherort aus einem Set nichtflüchtiger Speicherorte, wobei jeder nichtflüchtige Speicherort einem Schlüsselbereich entsprechend den Schlüsseln in der Vielzahl von Datensätzen zugewiesen ist und der nichtflüchtige Speicherort für jeden Datensatz zumindest zum Teil anhand des Schlüssels des jeweiligen Datensatzes ausgewählt wird; das Empfangen einer Anfrage eines Verbrauchers für ein Unterset der Vielzahl von Datensätzen inklusive eines Schlüsselbereichs; und beim Empfang der Anfrage des Verbrauchers das Bereitstellen des Untersets aus der Vielzahl von Datensätzen inklusive des Schlüsselbereichs von den ein oder mehreren nichtflüchtigen Speicherorten.
  • Weitere Ausführungsformen dieses Aspektes umfassen entsprechende Systeme, Apparate und Computerprogramme, die so konfiguriert sind, dass sie die auf Computerspeichergeräten kodierten Handlungen des Verfahrens ausführen.
  • Indem eine Shuffle-Operation während ihrer Ausführung rekonfiguriert wird, können größere Effizienz und Geschwindigkeit erreicht werden. Zusätzlich kann die Fähigkeit zur Rekonfiguration weg vom anfänglichen Schlüsselbereich speziell dann nützlich sein, wenn unbeschränkte Datenmengen oder Datenmengen von unbekannter Größe behandelt werden, da optimale Schlüsselbereiche zu Beginn der Shuffle-Operation möglicherweise nicht erkennbar sind. Dementsprechend können durch die Erlaubnis solcher Rekonfigurationen Shuffle-Operationen effizient auf potenziell unendliche Datensatz-Streams angewandt werden.
  • Indem die Ergebnisse einer Shuffle-Operation auf nichtflüchtigem Speicher gespeichert werden, kann eine Shuffle-Operation wiederholt werden, ohne dass der Schritt der Bereitstellung der Daten an die Shuffler wiederholt werden muss. Dies kann speziell nützlich sein in Fällen, in denen große Datenmengen von verschiedenen Verbrauchern in verschiedener Form (z. B. sortiert, als Shard etc.) verbraucht werden müssen. Die Nichtflüchtigkeit erlaubt auch das Trennen der Datenproduzenten von den Verbrauchern. Die Produzenten können die Daten produzieren, egal, wann die Daten verbraucht werden. Die gesamte Produktionsphase kann abgeschlossen werden und die Produzenten können sich anderen Aufgaben zuwenden, während die Daten in einem angemessenen Format aufbewahrt werden, um später von Shuffle-Verbrauchern verbraucht zu werden. Die nichtflüchtige Datenmenge kann ebenfalls weiter reorganisiert werden (z. B. sortiert, verschmolzen), um die amortisierten Verarbeitungs- und Speicherkosten zu senken. Zusätzlich kann das Speichern der Daten wie beschrieben eine größere Fehlertoleranz gegenüber früheren Verfahren erlauben, beispielsweise, indem der Shuffle-Operation erlaubt wird, von einem Fehlerpunkt aus fortzufahren, falls der verarbeitende Shuffler fehlschlägt.
  • Die Details einer oder mehrerer Ausführungsformen des in dieser Spezifikation behandelten und beschriebenen Gegenstands sind in den begleitenden Bildern und der Beschreibung unten dargelegt. Andere Merkmale, Aspekte und Vorteile des Gegenstands werden aus der Beschreibung, den Zeichnungen und den Ansprüchen deutlich.
  • KURZBESCHREIBUNG DER ZEICHNUNGEN
  • 1 ist ein Blockdiagramm einer Umgebung, in der eine dynamische Rekonfiguration einer Shuffle-Operation erfolgen kann.
  • 2A ist ein Blockdiagramm einer beispielhaften anfänglichen Shuffler-Konfiguration.
  • 2B ist ein Blockdiagramm einer veränderten Shuffler-Konfiguration nach einer Verschmelzung von Schlüsselbereichen.
  • 3A ist ein Blockdiagramm einer weiteren beispielhaften anfänglichen Shuffler-Konfiguration.
  • 3B ist ein Blockdiagramm einer veränderten Shuffler-Konfiguration nach einer Aufteilung eines Schlüsselbereichs.
  • 4A ist ein Blockdiagramm einer weiteren beispielhaften anfänglichen Shuffler-Konfiguration.
  • 4B ist ein Blockdiagramm einer veränderten Shuffler-Konfiguration nach einer Duplikation eines Schlüsselbereichs.
  • 5 ist ein Flussdiagramm eines beispielhaften Prozesses für die dynamische Rekonfiguration einer Shuffle-Operation.
  • 6 ist ein Flussdiagramm eines beispielhaften Prozesses für die Ausführung einer nichtflüchtigen Shuffle-Operation.
  • 7 ist ein Blockdiagramm eines exemplarischen Rechnergeräts.
  • Entsprechende Referenznummern und Kennzeichnungen in den verschiedenen Zeichnungen zeigen entsprechende Elemente an.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Ein Datenverarbeitungssystem erhält eine Anfrage zur Ausführung einer Shuffle-Operation auf einen Datenstream. Die Shuffle-Operation ist eine Operation, die Datensätze mit Schlüsselwerten aus dem Datenstream anhand ihrer Schlüsselwerte gruppiert. Die erhaltene Anfrage enthält ein Set von anfänglichen Schlüsselbereichen, in die die Datensätze mit Schlüsselwerten während der Shuffle-Operation gruppiert werden sollen. Das System generiert eine Shuffler-Konfiguration, die jedem der anfänglichen Schlüsselbereiche einen Shuffler zuweist. Jeder der Shuffler ist dazu konfiguriert, einen Teil des Datenstreams in Verbindung mit dem zugewiesenen Schlüsselbereich von einem oder mehreren Writern zu erhalten. Jeder Shuffler ist auch dazu konfiguriert, den erhaltenen Teil des Datenstreams an einen oder mehrere Reader weiterzugeben. In manchen Fällen können die Reader Metadaten der Shuffle-Operation nutzen, um zu bestimmen, welche Shuffler sie zum Erhalt eines bestimmten Teils des Datenstreams kontaktieren. Die Reader können auch Teile des Datenstreams direkt von einem nichtflüchtigen Speicher auslesen, nachdem sie dort von den Shufflern hinterlegt wurden.
  • Das System initiiert das Set von Shufflern, um eine Shuffle-Operation auf den Datenstream auszuführen. Jeder der Shuffler produziert während der Shuffle-Operation Metadaten-Statistiken, die seine Belastungsstatistiken beschreiben. Das System analysiert diese Metadaten-Statistiken, um zu bestimmen, ob die Shuffler-Konfiguration aktualisiert werden sollte, um die Shuffle-Operation zu optimieren. Eine Beispieloptimierung ist das Aufteilen der Belastung zwischen den Shufflern. Wenn das System bestimmt, dass die Shuffler-Konfiguration aktualisiert werden soll, verändert das System die Shuffler-Konfiguration so, dass die Zuweisung von Shufflern an Schlüsselbereiche sich von der Zuweisung an Schlüsselbereiche vor der Veränderung unterscheidet. Die Veränderung ist entsprechend der gewünschten Optimierung konfiguriert.
  • Das Datenverarbeitungssystem kann auch eine Anfrage auf Ausführung einer Shuffle-Operation auf einen Datenstream erhalten und in der Folge mindestens einen Teil des Datenstreams von einem oder mehreren Writern erhalten. Der Datenstream enthält eine Vielzahl von Datensätzen, von denen jeder einen Schlüsselwert enthält. Das System kann jeden aus der Vielzahl von Datensätzen an einem nichtflüchtigen Speicherort ablegen. Jeder nichtflüchtige Speicherort ist einem Schlüsselbereich zugeteilt, entsprechend den in der Vielzahl von Datensätzen enthaltenen Schlüsseln, und der genaue nichtflüchtige Speicherort für das Ablegen jedes Datensatzes wird mindestens teilweise basierend auf dem Schlüssel des jeweiligen Datensatzes ausgewählt. Das System kann dann eine Anfrage von einem Verbraucher für ein Unterset aus der Vielzahl von Datensätzen inklusive eines Schlüsselbereichs erhalten. Bei Erhalt der Anfrage stellt das System das Unterset aus der Vielzahl von Datensätzen von einem oder mehreren nichtflüchtigen Speicherorten zur Verfügung und kann, falls die Shuffle-Operation noch andauert, alle weiteren Datensätze, die dem Schlüsselbereich entsprechen, dem anfragenden Reader zur Verfügung stellen.
  • 1 ist ein Blockdiagramm einer Umgebung 100, in der eine dynamische Rekonfiguration einer Shuffle-Operation erfolgen kann. Die Umgebung 100 enthält einen oder mehrere Writer 102, die den Datenstream aus Datensätzen an einen oder mehrere Shuffler 104 weitergeben. In manchen Implementationen können die Writer 102 Computergeräte wie z. B. Server sein, die mit einem Netzwerk verbunden sind und den Datenstream über dieses Netzwerk an die Shuffler 104 weitergeben. Der von den Writern 102 produzierte Datenstream enthält eine Vielzahl von Datensätzen, die jeweils durch einen Schlüsselwert identifizierbar sind. Die Writer 102 können die Datensätze im Datenstream in Brandon-Schlüsselordnung für die Shuffler 104 produzieren.
  • In manchen Implementationen können die Writer 102 Mapper sein, die an einer MapReduce-Operation teilnehmen. Die Writer 102 können auch jede Art von Produzent sein, der an einem Produzent-zu-Verbraucher-Workflow oder irgendeinem anderen Workflow eines verteilten Datenverarbeitungssystems teilnimmt.
  • Die Shuffler 104 erhalten die Datensätze im Datenstream von den Writern 102. Während ihrer Ausführung gruppieren die Shuffler 104 die Datensätze im Datenstream anhand ihres Schlüsselwertes. In manchen Implementationen kann jedem der Shuffler 104 ein Schlüsselbereich zugewiesen werden und er kann verantwortlich für die Gruppierung von Datensätzen im Datenstream anhand von Schlüsselwerten, die in den zugewiesenen Schlüsselbereich fallen, sein. Zum Beispiel wäre ein Shuffler, dem ein Schlüsselbereich von „A” bis „G” zugewiesen wurde, verantwortlich für die Gruppierung eines von den Writern 102 produzierten Datensatzes mit dem Schlüssel „B” verantwortlich.
  • In manchen Implementationen können die Shuffler 104 Computergeräte sein, die auf einem Netzwerk operieren und den Datenstream von den Writern 102 erhalten. Die Shuffler 104 können integrierte oder mit ihnen verbundene Speicherorte für das Abspeichern der von den Writern 102 während der Shuffle-Operation erhaltenen Datensätze enthalten. Die Shuffler 104 können in einem größeren Pool von Shufflern enthalten sein und können mit der Zeit verschiedenen Shuffle-Operationen zugewiesen werden. Zusätzlich können die Shuffler 104 mehrere Shuffle-Operationen zur selben Zeit ausführen.
  • Während ihrer Ausführung können die Shuffler 104 die anhand ihres Schlüsselwertes gruppierten Datensätze des Datenstreams an einen oder mehrere Reader 108 weitergeben. In manchen Implementationen können die ein oder mehreren Reader 108 Reducer sein, die an einer MapReduce-Operation teilnehmen. Die ein oder mehreren Reader 108 können auch Verbraucher sein, die eine Produzent-an-Verbraucher-Operation dissipieren. Die Reader 108 können auch Clients sein, die von den Writern 102 bereitgestellte Datensätze des Datenstreams erhalten.
  • In manchen Implementationen kommunizieren die Writer 102, die Shuffler 104 und die Reader 108 entsprechend einem Application Programming Interface (API) oder Protokoll, wie z. B. dem Hypertext Transfer Protocol (HTTP), dem Simple Object Access Protocol (SOAP) oder jedem anderen passenden API oder Protokoll. Die Writer 102, die Shuffler 104 und die Reader 108 können auch über das (nicht gezeigte) Netzwerk, wie z. B. das Internet Protocol(IP)-Netzwerk miteinander kommunizieren.
  • Wie dargestellt enthält die Umgebung 100 auch einen oder mehrere nichtflüchtige Speicherorte 110. Während der Ausführung der Shuffle-Operation können die Shuffler 104 von den Writern 102 erhaltene Datensätze in den nichtflüchtigen Speicherorten 110 speichern. So kann beispielsweise der Shuffler 104 von den Writern 102 erhaltene Datensätze, die noch nicht von den Readern 108 angefordert wurden, in lokalen Ressourcen wie dem Random Access Memory (RAM) oder auf einer Festplatte ablegen, bis die Daten angefordert werden. Falls der Shuffler 104 jedoch mehr Datensätze erhält, als er in sich und seinen lokalen Ressourcen speichern kann, kann er damit beginnen, die Datensätze in den nichtflüchtigen Speicherorten 110 zu speichern. In manchen Implementationen können die nichtflüchtigen Speicherorte 110 Server sein, die Teile einer verteilten Datenbank, z. B. Shards, enthalten. Die nichtflüchtigen Speicherorte 110 können jede Art von permanentem Speicher enthalten. In manchen Fällen können die nichtflüchtigen Speicherorte 110 Knoten innerhalb eines Storage Area Network (SAN) sein. Die nichtflüchtigen Speicherorte 110 können auch Orte innerhalb eines verteilten Dateisystems sein oder Orte innerhalb eines für jeden nichtflüchtigen Speicherort 110 lokalen Dateisystems.
  • In manchen Implementationen kann die von den Shufflern 104 ausgeführte Shuffle-Operation als nichtflüchtige Shuffle-Operation gekennzeichnet werden, wie unten in mehr Details beschrieben wird. In einem solchen Fall können die Shuffler 104 alle von den Writern 102 erhaltenen Datensätze in nichtflüchtigen Speicherorten 110 speichern, bis sie angewiesen werden, die Datensätze zu löschen. Das Speichern der Datensätze auf diese Weise kann es erlauben, dass mehrere der Reader 108 dasselbe Set von Datensätzen auf verschiedene Art auslesen, wie z. B. sortiert oder nicht sortiert, und kann es erlauben, dass eine Shuffle-Operation wiederholt wird, ohne dass die Writer 102 die Datensätze im Datenstream den Shufflern erneut zur Verfügung stellen müssen.
  • Metadaten 111 können auch von den Shufflern 104 während einer Shuffle-Operation produziert werden. In manchen Fällen werden die Metadaten 111 in den nichtflüchtigen Speicherorten 110 gespeichert. Die Metadaten 111 können auch vom Balancer 112 überwacht werden. In einem solchen Fall können die Metadaten 111 entsprechend einem Netzwerkprotokoll wie dem Simple Network Management Protocol (SNMP) produziert werden.
  • Die Metadaten 111 können Belastungszustände in Verbindung mit einem oder mehreren der Shuffler 104 anzeigen. So kann beispielsweise einer der Shuffler 104 Metadaten 111 produzieren, um anzuzeigen, dass seine Prozessorauslastung zu einer bestimmten Zeit bei 100% liegt, während ein anderer der Shuffler 104 Metadaten 111 produzieren kann, um anzuzeigen, dass seine Prozessorauslastung bei 50% liegt. In einem anderen Beispiel kann einer der Shuffler 104 Metadaten 111 erzeugen, die anzeigen, dass er doppelt so viele Daten wie ein anderer Shuffler bearbeitet, was anzeigen kann, dass eine erneute Ausbalancierung der Schlüsselbereich-Zuweisungen nötig ist.
  • Die Metadaten 111 können von einem Balancer 112 analysiert werden, um zu bestimmen, ob die Shuffle-Operation rekonfiguriert werden sollte, basierend auf der Auslastung eines oder mehrerer der Shuffler 104. Der Balancer 112 kann die Metadaten 111 während der Shuffle-Operation überwachen und eine Rekonfiguration der Shuffler 104 durchführen, falls er feststellt, dass eine Rekonfiguration nötig ist. Diese Feststellung kann auf der Basis von Kriterien durchgeführt werden, die für eine gewünschte Optimierung speziell sind. Falls beispielsweise die Metadaten 111 anzeigen, dass einer der Shuffler 104 eine hohe Auslastung hat, während ein anderer der Shuffler 104 eine niedrige Auslastung hat, kann der Balancer 112 die den Shufflern 104 zugewiesenen Schlüsselbereiche so ändern, dass der Shuffler mit der hohen Auslastung einen kleineren Schlüsselbereich und der Shuffler mit der niedrigen Auslastung einen hohen Schlüsselbereich zugewiesen bekommt. In manchen Implementationen kann der Balancer 112 eine separate Komponente oder ein Set von Komponenten der Shuffler 104 sein. Der Balancer 112 kann Hinweise von den Shufflern 104 und den Metadaten 111 erhalten. Der Balancer 112 kann auch die Metadaten 111 aus den nichtflüchtigen Speicherorten 110 lesen. Die Shuffle-Rekonfiguration wird in mehr Details beschrieben in den 2A, 2B, 3A, 4b, 4A und 4B.
  • Die Metadaten 111 können auch das Mapping des Schlüsselbereichs auf den Speicherort (z. B. Shard) beinhalten, so dass die Reader, die einen bestimmten Schlüsselbereich lesen, bestimmen können, welchen nichtflüchtigen Speicherort sie in einer nichtflüchtigen Shuffle-Operation lesen müssen.
  • Die Metadaten 111 können auch Informationen enthalten, die von den Reader 108 in Bezug auf das Lesen der Datenmenge von den Shufflern 104 erzeugt wurden. So können beispielsweise die Reader 108 jeder einen Metadaten-Datensatz erzeugen, um ihre aktuelle Position in einer Datenmenge anzuzeigen. Solch eine aktuelle Position kann anzeigen, dass ein bestimmter Reader alle Datensätze in der Datenmenge gelesen hat, die der Position vorausgehen. Solche Positionsmetadaten können vom Speicherbereiniger 116 genutzt werden, um zu bestimmen, wann Shuffle-Daten bereinigt werden können, da sie von allen Reader 108 gelesen wurden, die konfiguriert sind, sie zu erhalten.
  • Die nichtflüchtigen Speicherorte 110 enthalten auch Shuffle-Daten 113. In manchen Fällen können die Shuffle-Daten 113 Daten sein, die von den Shufflern 104 erhalten wurden, auf denen die Shuffle-Operation ausgeführt wurde. In einem solchen Fall können die Daten in den nichtflüchtigen Speicherorten 110 in einem „geshuffelten” Zustand gespeichert werden, so dass sie an die Reader 108 weitergegeben werden können. In manchen Implementationen können die Shuffle-Daten 113 in den nichtflüchtigen Speicherorten 110 gespeichert werden, bis sie von jedem Reader 108, der konfiguriert ist, sie zu erhalten, gelesen wurden. Die Shuffle-Daten 113 können auch in den nichtflüchtigen Speicherorten 110 gespeichert werden, bis die damit verbundene Shuffle-Operation beendet wurde.
  • In manchen Fällen können die Reader 108 Shuffle-Daten 113 von den nichtflüchtigen Speicherorten 110 lesen, statt dem oder zusätzlich zum Empfang von Daten von den Shufflern 104. So kann beispielsweise ein Reader 108 die Metadaten 111 konsultieren, um zu ermitteln, welcher der nichtflüchtigen Speicherorte 110 einen bestimmten Teil der Shuffle-Daten 113 enthält. Der Reader 108 kann dann den nichtflüchtigen Speicherort kontaktieren, um Daten zu empfangen, indem er z. B. eine sequenzielle Datei einliest, Daten aus einer Datenbank selektiert, eine API-Anfrage an den nichtflüchtigen Speicherort 110 macht und/oder über andere Mechanismen.
  • Ein Sortierer/Mischer 114 führt Sortier- und Misch-Operationen auf die von den Shufflern 104 gruppierten Datensätze aus. Falls die Shuffle-Operation beispielsweise so konfiguriert ist, dass die Datensätze den Reader 108 sortiert nach Schlüsselwert bereitgestellt werden sollen, können sie Shuffler 104 die Datensätze an den Sortierer/Mischer weitergeben, um diese Operationen auszuführen. In manchen Implementationen erhält der Sortierer/Mischer 114 die Datensätze von den Shufflern 104 und sortiert sie so, wie er sie erhält. Der Sortierer/Mischer 114 kann die Datensätze an die Reader 108 in sortierten Stapeln weitergeben, so dass alle Datensätze innerhalb eines bestimmten Stapels nach ihrem Schlüsselwert sortiert werden. Der Sortierer/Mischer 114 kann auch mehrere sortierte Teile des Datenstreams in ein größeres sortiertes Set kombinieren und dieses sortierte Set an die Reader 108 weitergeben.
  • Der Speicherbereiniger 116 überwacht die verschiedenen Komponenten der Shuffle-Operation und hebt Zuweisungen von Ressourcen in Verbindung mit den Komponenten wieder auf. In manchen Fällen kann der Speicherbereiniger 116 die Zuweisung von Ressourcen aufheben, wenn sie von anderen Komponenten angefordert werden. Der Speicherbereiniger 116 kann auch automatisch den Speicher bereinigen, so z. B. durch die Feststellung, wann eine Ressource nicht mehr länger von irgendeiner mit der Shuffle-Operation verbundenen Komponente genutzt wird, und dem Aufheben der Zuweisung dieser Ressource. So kann beispielsweise der Speicherbereiniger 116 einen Hinweis erhalten, dass ein Teil des Datenstreams von den Reader 108 gelesen wurde. Der Speicherbereiniger 116 kann dann eine Speicherbereinigungsoperation durchführen, um die Zuweisung von Ressourcen aufzuheben, die mit diesem Teil des Datenstreams verbunden sind.
  • 2A ist ein Blockdiagramm einer beispielhaften anfänglichen Shuffler-Konfiguration 200. Solch eine Shuffler-Konfiguration kann erzeugt werden, wenn die Shuffle-Operation initiiert wird. Wie dargestellt enthält die anfängliche Shuffler-Konfiguration 200 einen oder mehrere anfängliche Schlüsselbereiche 204a–c. In manchen Implementationen werden die anfänglichen Schlüsselbereiche 204a–c von einem Programm, einer Entität oder einem Benutzer bereitgestellt, das/die/der die Shuffle-Operation initiiert hat. Eine Vielfalt von angemessenen Schlüsselbereich-Zuweisungsprozessen kann genutzt werden. Die anfänglichen Schlüsselbereiche 204a–c werden jeweils einem der Shuffler 202a–c zugewiesen. In manchen Fällen wird diese anfängliche Zuweisung vom Balancer 112 vorgenommen, beispielsweise durch Aufteilung des Schlüsselraums in gleich große Schlüsselbereiche und der Zuweisung jedes Schlüsselbereichs an einen der Shuffler 104. Statistiken in Bezug auf vorherige Ausführungen können auch genutzt werden, um die anfängliche Aufteilung der Schlüsselbereiche von zukünftigen Ausführungen für den Fall von wiederholten Datenverarbeitungsausführungen über Daten aus derselben Quelle zu bestimmen.
  • 2B ist ein Blockdiagramm einer veränderten Shuffler-Konfiguration 206 nach einer Verschmelzung von Schlüsselbereichen. Wie dargestellt hat der Balancer 112 die Schlüsselbereiche 204b und 204c in einen einzigen Schlüsselbereich 208 verschmolzen, der beide Schlüsselbereiche enthält, und den Schlüsselbereich 208 dem Shuffler 202b zugewiesen. Der verschmolzene Schlüsselbereich 208 enthält eine Vereinigung der Schlüsselbereiche 204b und 204c. Der Shuffler 202c hat nicht mehr länger einen ihm zugewiesenen Schlüsselbereich und daher kann der Balancer ihn aus der Shuffle-Operation entfernen und einem Pool verfügbarer Shuffler hinzufügen. In manchen Fällen kann der Balancer 112 die illustrierte Verschmelzungsoperation als Reaktion auf die Entdeckung vornehmen, dass die Shuffler 202b und 202c unter einem Lastschwellenwert operierten, was anzeigte, dass sie in der Shuffle-Operation nicht voll ausgenutzt wurden. So kann beispielsweise der Balancer 112 feststellen, dass die Shuffler 202b und 202c eine Prozessorauslastung unter einem bestimmten Prozentwert aufweisen, und ermitteln, dass die Shuffler 202b und 202c unter dem Lastschwellenwert operieren. Durch die Verschmelzung der beiden angrenzenden Schlüsselbereiche 204b und 204c in den Schlüsselbereich 204d kann der Balancer 112 die Belastung von Shuffler 202b erhöhen; dem Shuffler 202b ist nun ein größerer Schlüsselbereich zugeteilt und er wird voraussichtlich mehr Datensätze von den Writern 102 erhalten. Obwohl dieses Beispiel zeigt, dass zwei Schlüsselbereiche verschmolzen werden, kann der Balancer 112 drei oder mehr angrenzende Schlüsselbereiche auf einmal verschmelzen. Der Balancer 112 kann auch mehrere Verschmelzungen auf einmal durchführen, wie z. B. die Generierung von zwei Schlüsselbereichen aus fünf originalen Schlüsselbereichen.
  • Zusätzlich zu den obenstehenden Operationen kann der Balancer 112 auch Schlüsselbereiche vervielfältigen, so dass mehrere Shuffler denselben Schlüsselbereich bearbeiten und letztendlich die Last für diesen Schlüsselbereich auf mehrere Shuffler aufgeteilt wird.
  • 3A ist ein Blockdiagramm einer weiteren beispielhaften anfänglichen Shuffler-Konfiguration 300. Solch eine Shuffler-Konfiguration kann erzeugt werden, wenn die Shuffle-Operation initiiert wird. Wie dargestellt enthält die anfängliche Shuffler-Konfiguration 300 einen oder mehrere anfängliche Schlüsselbereiche 304a–c. In manchen Implementationen werden die anfänglichen Schlüsselbereiche 304a–c von einem Programm, einer Entität oder einem Benutzer bereitgestellt, das/die/der die Shuffle-Operation initiiert hat. Die anfänglichen Schlüsselbereiche 304a–c werden jeweils einem der Shuffler 302a–c zugewiesen. In manchen Fällen wird diese anfängliche Zuweisung von Balancer 112 durchgeführt.
  • 3B ist ein Blockdiagramm einer veränderten Shuffler-Konfiguration 306 nach einer Aufteilung eines Schlüsselbereichs. Wie dargestellt hat der Balancer 112 den Schlüsselbereich 304c in zwei neue Schlüsselbereiche 304d und 304e aufgeteilt. Der Balancer 112 hat den neuen Schlüsselbereich 304d dem Shuffler 302c und den neuen Schlüsselbereich 304e dem Shuffler 302d zugewiesen. In manchen Implementationen kann der Balancer 112 zusätzliche Shuffler wie den Shuffler 302d während einer Shuffle-Operation neuen Schlüsselbereichen zuweisen, so wie den durch die Aufteilung erzeugten. Der Balancer 112 kann die dargestellte Aufteilungsoperation als Reaktion auf einen Hinweis durchführen, dass Shuffler 302c eine hohe Last zu tragen hat, wie z. B. eine Prozessorauslastung über einem Schwellenwert. Indem er den Schlüsselbereich 304c in die zwei Schlüsselbereiche 304d und 304e aufteilt, kann der Balancer 112 die Last auf Shuffler 302c auf den Shuffler 302c und den zusätzlichen Shuffler 302d aufteilen, da das Aufteilen des Schlüsselbereichs voraussichtlich auch die Datensätze des Datenstreams zwischen Shuffler 302c und Shuffler 302d aufteilen wird.
  • 4A ist ein Blockdiagramm einer weiteren beispielhaften anfänglichen Shuffler-Konfiguration 400. Solch eine Shuffler-Konfiguration kann erzeugt werden, wenn die Shuffle-Operation initiiert wird. Wie dargestellt enthält die anfängliche Shuffler-Konfiguration 400 einen oder mehrere anfängliche Schlüsselbereiche 404a–c. In manchen Implementationen werden die anfänglichen Schlüsselbereiche 404a–c von einem Programm, einer Entität oder einem Benutzer bereitgestellt, das/die/der die Shuffle-Operation initiiert hat. Die anfänglichen Schlüsselbereiche 404a–c werden jeweils einem der Shuffler 402a–c zugewiesen. In manchen Fällen wird diese anfängliche Zuweisung von Balancer 112 durchgeführt.
  • 4B ist ein Blockdiagramm einer veränderten Shuffler-Konfiguration 406 nach einer Duplikation eines Schlüsselbereichs. Wie dargestellt, hat der Balancer 112 einen zusätzlichen Shuffler 402d zur Verfügung gestellt und den neuen Schlüsselbereich 404c an jeweils den Shuffler 402c und den zusätzlichen Shuffler 402d zugewiesen. In manchen Fällen kann diese Duplikation von Schlüsselbereichen als proaktive Maßnahme genutzt werden, um mit langsamen/fehlgeschlagenen Shufflern umzugehen. Wenn ein Shuffler langsam wird oder fehlschlägt, kann ein Writer auf einen anderen Shuffler zurückfallen, der denselben Schlüsselbereich bearbeitet. Solch eine Anpassung kann vom Writer schneller durchgeführt werden, als der Balancer 112 den langsamen oder fehlgeschlagenen Shuffler entdecken und als Kompensierung den Schlüsselbereich neu zuordnen kann.
  • 5 ist ein Flussdiagramm eines beispielhaften Prozesses 500 für die dynamische Rekonfiguration einer Shuffle-Operation. Der Prozess 500 kann vom Balancer 112 implementiert werden. Der Balancer 112 empfängt eine Anfrage, eine Shuffle-Operation auf einen Datenstream auszuführen, wobei die Anfrage anfängliche Schlüsselbereiche enthält (502). So kann beispielsweise der Balancer 112 eine Anfrage von einer Entität zur Durchführung einer Shuffle-Operation als Teil einer größeren Datenoperation erhalten, wie z. B. MapReduce, eines Produzent-zu-Verbraucher-Workflows oder jeder anderen passenden Operation.
  • Der Balancer 112 generiert die Shuffle-Konfiguration, die jedem der anfänglichen Schlüsselbereiche einen Shuffler aus einem Set von Shufflern 104 zuweist (504). In manchen Implementationen kann der Balancer 112 zwei oder mehr Shuffler einem bestimmten Schlüsselbereich zuweisen, falls solch eine Konfiguration angefordert wird oder falls der Balancer 112 feststellt, dass solch eine Konfiguration nötig ist. In manchen Fällen kann der Balancer 112 die Shuffler-Konfiguration an einem nichtflüchtigen Speicherort 110 speichern.
  • Der Balancer 112 initiiert das Set von Shufflern 104, um eine Shuffle-Operation auf den Datenstream auszuführen (506). In manchen Fällen kann der Balancer 112 eine Netzwerknachricht an jeden der Shuffler 104 mit dem Hinweis auf einen oder mehrere anfängliche Schlüsselbereiche senden oder mit dem Hinweis, dass die Shuffle-Operation beginnt.
  • Der Balancer 112 analysiert die vom Set an Shufflern 104 produzierten Metadaten 111. In manchen Implementationen erhält der Balancer 112 die Metadaten 111 über ein Netzwerk mittels einem Management-Protokoll wie SNMP. Der Balancer 112 kann auch die Metadaten 111 aus den nichtflüchtigen Speicherorten 110 als Metadaten 111 lesen oder auf die nichtflüchtigen Speicherorte 110 geschrieben von den Shufflern 104.
  • Der Balancer 112 bestimmt, ob ein Shuffler-Konfigurationsereignis stattgefunden hat (510). In manchen Fällen kann der Balancer die von den Shufflern 104 produzierten Metadaten 111 mit konfigurierten Schwellenwerten vergleichen, die Belastungswerte anzeigen, unter oder über denen eine Aktualisierung der Shuffler-Konfiguration durchgeführt werden sollte. So kann beispielsweise der Balancer 112 mit einem Schwellenwert konfiguriert werden, der besagt, dass der Shuffler mit einer Prozessorauslastung größer 90% eine Aktualisierung der Shuffler-Konfiguration auslösen sollte.
  • Falls der Balancer 112 feststellt, dass keine Aktualisierung der Shuffler-Konfiguration stattgefunden hat, kehrt der Prozess 500 zu 508 zurück. Falls der Balancer 112 feststellt, dass eine Aktualisierung der Shuffler-Konfiguration stattgefunden hat, fährt der Prozess 500 zu 512 fort, wo der Balancer 112 die Shuffler-Konfiguration basierend zumindest zum Teil auf den Metadaten 111 verändert, um eine veränderte Zuordnung von Shufflern zu Schlüsselbereichen zu erzeugen. In manchen Implementationen kann der Balancer 112 die Schlüsselbereichs-Veränderungsoperationen beschrieben in den 2A, 2B, 3A, 3B, 4A und 4B oder jede passende Kombination dieser Schlüsselbereichs-Veränderungsoperationen durchführen.
  • In manchen Fällen identifiziert der Balancer 112 einen ersten Schlüsselbereich in Verbindung mit einem ersten Shuffler und bestimmt zumindest zum Teil auf Basis der Metadaten 111, dass der erste Shuffler eine zu hohe Belastung trägt. Der Balancer 112 weist den ersten Shuffler einem revidierten Schlüsselbereich zu, der ein Teilstück des ersten Schlüsselbereichs enthält. In manchen Fällen kann der Balancer 112 basierend auf zumindest teilweise den Metadaten-Statistiken feststellen, dass der erste Shuffler eine zu geringe Last trägt, und den ersten Shuffler einem revidierten Schlüsselbereich zuweisen, der den ersten Schlüsselbereich und einen zweiten Schlüsselbereich, verschieden vom ersten Schlüsselbereich, enthält. Der Balancer 112 kann auch revidierte Schlüsselbereiche neu zuweisen, um die in der Shuffle-Operation involvierten Daten gleichmäßig auf die verschiedenen Shuffler verteilt zu halten.
  • In manchen Implementationen kann der Speicherbereiniger 116 einen Hinweis identifizieren, dass ein Teil des Datenstreams von dem einen oder den mehreren Readern 108 gelesen wurde. Der Speicherbereiniger 116 kann dann eine Speicherbereinigungsoperation auf eine oder mehrere Ressourcen ausführen, die mit diesem Teil der Datenmenge verbunden sind.
  • In manchen Fällen kann der Speicherbereiniger 116 Verbrauchs-Metadaten von dem einem oder den mehreren Reader erhalten, wobei die Verbrauchs-Metadaten den Verbrauchsprozess für die Datenmenge für jeden der einen oder der mehreren Reader anzeigen. Die Verbrauchs-Metadaten können auch in einem der nichtflüchtigen Speicherorte 110 gespeichert sein und vom Speicherbereiniger 116 gelesen werden. In manchen Implementationen können die Verbrauchs-Metadaten einen aktuellen Ort innerhalb der Datenmenge oder innerhalb eines Teils der Datenmenge (z. B. einem Shard) anzeigen, bis zu dem ein bestimmter Reader die Daten eingelesen hat. Der Speicherbereiniger 116 kann eine Speicherbereinigungsoperation auf eine oder mehrere Ressourcen durchführen, die mit der Datenmenge in Verbindung stehen, falls die Verbrauchs-Metadaten anzeigen, dass der Teil der Datenmenge, der mit der einen oder den mehreren Ressourcen in Verbindung steht, vollständig eingelesen wurde. Falls beispielsweise alle Reader, die eine Datenmenge einlesen, diese Datenmenge bis hinter einen bestimmten Punkt eingelesen haben, kann der Speicherbereiniger 116 Ressourcen löschen, die mit dem Teil der Datenmenge vor diesem bestimmten Punkt in Verbindung stehen.
  • 6 ist ein Flussdiagramm eines beispielhaften Prozesses 600 für die Ausführung einer nichtflüchtigen Shuffle-Operation. Der Prozess 600 kann von einem Shuffler 104 implementiert werden. Der Shuffler 104 empfängt eine Anfrage zur Ausführung einer Shuffle-Operation auf einen Datenstream (602). In manchen Implementationen kann die Anfrage zur Ausführung der Shuffle-Operation von einer Supervisor-Komponente wie z. B. einem Shuffle-Master empfangen werden.
  • Der Shuffler 104 empfängt mindestens eines Teils des Datenstreams, wobei der Datenstream eine Vielzahl von Datensätzen und jeder Datensatz einen Schlüsselwert enthält (604). In manchen Implementationen empfängt der Shuffler 104 den Teil des Datenstreams von dem einen oder den mehreren Writern 102.
  • Der Shuffler 104 speichert jeden aus der Vielzahl von Datensätzen an einem nichtflüchtigen Speicherort 110 (606). Jeder nichtflüchtige Speicherort 110 ist einem Schlüsselbereich entsprechend den in der Vielzahl der Datensätze enthaltenen Schlüsseln zugewiesen. In manchen Implementationen sind die nichtflüchtigen Speicherorte 110 Shards einer verteilten Datenbank. Die nichtflüchtigen Speicherorte 110 können auch sequenzielle Dateien in einem Dateisystem auf einem Server oder einem Set von Servern sein.
  • Der Shuffler 104 empfängt eine Anfrage von einem Verbraucher für ein Unterset aus der Vielzahl von Datensätzen inklusive eines Schlüsselbereichs (610). In manchen Implementationen kann die Anfrage einen Identifier enthalten, der die gespeicherte nichtflüchtige Shuffle-Operation anzeigt, von der Datensätze entsprechend des Schlüsselbereichs erhalten werden sollen. In manchen Fällen können mehrere nichtflüchtige Shuffle-Operationen auf einmal aktiv sein, was einen solchen Identifier nötig machen würde.
  • Nach Anfrage des Verbrauchers stellt der Shuffler 104 das Unterset der Vielzahl von Datensätzen für den vom Verbraucher angeforderten Schlüsselbereich von einem oder mehreren der nichtflüchtigen Speicherorte 110 bereit (612). In manchen Fällen kann der Shuffler 104 eine Datenbank abfragen, die die Vielzahl von Datensätzen enthält, und die Datensätze an den Verbraucher weitergeben. Der Verbraucher kann einer der ein oder mehreren Reader 108 sein.
  • In manchen Fällen empfängt der Shuffler 104 eine Auswahl eines Datenverbrauchsmodus in Verbindung mit der Shuffle-Operation, die angibt, auf welche Weise dem Verbraucher Datensätze zur Verfügung gestellt werden sollen. Die Auswahl eines Datenverbrauchsmodus kann eine Shard-Modus-Auswahl enthalten, was anzeigen würde, dass die Vielzahl von Datensätzen dem Verbraucher erst nach dem Speichern in einem oder mehreren nichtflüchtigen Speicherorten 110 zur Verfügung gestellt werden sollen. Die Auswahl eines Datenverbrauchsmodus kann eine Shard-Modus-Auswahl enthalten, was anzeigen würde, dass die Vielzahl von Datensätzen dem Verbraucher erst nach dem Speichern in einem oder mehreren nichtflüchtigen Speicherorten 110 zur Verfügung gestellt werden sollen. Die Auswahl eines Datenverbrauchsmodus kann auch eine Sortierter-Modus-Auswahl enthalten, was anzeigen würde, dass die Vielzahl von Datensätzen dem Verbraucher gruppiert und nach Schlüsselwert sortiert zur Verfügung gestellt werden sollen. In solch einem Fall würde der Shuffler 104 mit dem Sortierer/Mischer 114 interagieren, um die Vielzahl von Datensätzen auf diese Weise bereitzustellen. Die Sortierter-Modus-Auswahl kann auch eine bestimmte Sortieranwendung und eine bestimmte Sortierreihenfolge angeben, in der die Datensätze zur Verfügung gestellt werden sollen.
  • In manchen Implementationen kann der Shuffler 104 Metadaten in Verbindung mit der Shuffle-Operation in den nichtflüchtigen Speicherorten 110 speichern. Metadaten können Indexwerte in Verbindung mit der Vielzahl von Datensätzen enthalten. In manchen Implementationen kann der Shuffler 104 den Reader Streampositionsdaten während des Datenlesens zur Verfügung stellen, wodurch die Reader ihren Lesefortschritt verfolgen können. Im Fall, dass ein Reader das Lesen von den Shufflern neu beginnen musste, könnten die Reader diese Positionsdaten nutzen, um den Shufflern mitzuteilen, wo sie mit dem Lesen beginnen sollen. Dies kann den Reader helfen, zu verhindern, am Anfang des Datenstreams neu beginnen zu müssen.
  • In manchen Fällen können der Shuffler 104 oder der Speicherbereiniger 116 eine Anfrage zur Löschung der Shuffle-Operation erhalten. Beim Erhalt der Anfrage zur Löschung der Shuffle-Operation können der Shuffler 104 oder der Speicherbereiniger 116 jeden der Vielzahl von Datensätzen von dem einen oder den mehreren nichtflüchtigen Speicherorten 110 löschen. In manchen Implementationen kann der Speicherbereiniger 116 alle Ressourcen für eine fertige Shuffle-Operation löschen. Der Speicherbereiniger 116 kann auch Ressourcen löschen, die zu bereits verbrauchten Daten gehören, was während eines unendlichen Shuffle wichtig wäre, da Ressourcen freigesetzt werden müssen, um den Shuffle fortführen zu können.
  • Die nichtflüchtigen Speicherorte 110 können einen bestimmten Datensatz zum Speichern an das Ende einer sequenziellen Datei anhängen und sie können eine oder mehrere als nächste zu lesende Orte in der sequenziellen Datei verfolgen, wobei jeder der ein oder mehreren als nächste zu lesenden Orte einen nächsten Datensatz kennzeichnet, der an einen oder mehrere Reader ausgeliefert werden soll. Falls beispielsweise ein erster Reader alle Datensätze bis zum vierten Datensatz in der sequenziellen Datei erhalten hat, wäre der als nächstes zu lesende Ort für den ersten Reader der vierte Datensatz. Wenn der zweite Reader alle Datensätze bis zum siebten Datensatz in der sequenziellen Datei erhalten hat, wäre der als nächstes zu lesende Ort für den zweiten Reader der siebte Datensatz. In manchen Implementationen speichern die nichtflüchtigen Speicherorte 110 diese als nächstes zu lesenden Orte mit der sequenziellen Datei. Die nichtflüchtigen Speicherorte 110 können diese als nächstes zu lesenden Orte auch an einem zentralen Speicherort speichern.
  • 7 ist ein Blockdiagramm der Computergeräte 700, 750, die zur Implementierung der hierin beschriebenen Systeme und Verfahren benutzt werden können, entweder als Client oder als Server oder als eine Vielzahl von Servern. Das Computergerät 700 ist zur Darstellung verschiedener Formen von Digitalcomputern vorgesehen, wie Laptops, Desktops, Workstations, Personal Digital Assistants, Server, Blade-Server, Mainframes und andere geeignete Computer. Das Computergerät 750 soll verschiedene Formen mobiler Geräte repräsentieren, wie Personal Digital Assistants, Mobiltelefone, Smartphones und andere ähnliche Computergeräte. Zusätzlich können die Computer 700 oder 750 ebenfalls USB(Universal Serial Bus)-Laufwerke beinhalten. Die USB-Speichermedien können Betriebssysteme und andere Anwendungen speichern. Die USB-Flashlaufwerke können Eingabe-/Ausgabekomponenten, wie z. B. einen kabellosen Transmitter oder USB-Anschluss enthalten, der in eine USB-Schnittstelle eines anderen Computers eingesteckt werden kann. Die hier gezeigten Komponenten, ihre Verbindungen und Beziehungen und ihre Funktionen sollen nur exemplarisch sein und sollen Implementierungen der in diesem Dokument beschriebenen und/oder beanspruchten Erfindungen nicht einschränken.
  • Das Computergerät 700 beinhaltet einen Prozessor 702, einen Speicher 704, ein Speichergerät 706, eine High-Speed-Schnittstelle 708, die verbunden ist mit Speicher 704, High-Speed-Erweiterungsports 710 und eine Low-Speed-Schnittstelle 712 zum Anschluss an den Low-Speed-Bus 714 und das Speichergerät 706. Alle der Komponenten 702, 704, 706, 708, 710 und 712 sind mithilfe verschiedener Busse miteinander verbunden und können an einer gemeinsamen Hauptplatine oder auf andere Weise, wie geeignet, angebracht sein. Der Prozessor 702 kann Anweisungen für die Ausführung im Computergerät 700 verarbeiten, zum Beispiel Anweisungen, die im Speicher 704 oder Speichergerät 706 gespeichert sind, um grafische Informationen für eine grafische Benutzeroberfläche auf einem externen Eingabe-/Ausgabegerät anzuzeigen, zum Beispiel Display 716, das mit der High-Speed-Schnittstelle 708 gekoppelt ist. In anderen Implementierungen können mehrere Prozessoren und/oder mehrere Busse verwendet sein, wie angemessen, zusammen mit mehreren Speichern und Speichertypen. Außerdem können mehrere Computergeräte 700 verbunden sein, wobei jedes Gerät Teile der benötigten Operationen bereitstellt (z. B. als eine Serverbank, eine Gruppe von Blade-Servern oder ein Multi-Prozessor-System).
  • Der Speicher 704 speichert Informationen innerhalb des Computergeräts 700. In einer Implementierung ist der Speicher 704 aus einer nichtflüchtigen Speichereinheit oder -einheiten ausgebildet. In einer anderen Implementierung ist der Speicher 704 eine nichtflüchtige Speichereinheit oder -einheiten. Der Speicher 704 kann auch eine andere Form von computerlesbarem Medium sein, zum Beispiel ein magnetischer oder optischer Datenträger.
  • Das Speichergerät 706 kann Massenspeicher für das Computergerät 700 bereitstellen. In einer Implementierung kann das Speichergerät 706 ein computerlesbares Medium sein oder beinhalten, wie ein Floppy-Disk-Laufwerk, ein Festplattenlaufwerk, ein Optikplattenlaufwerk, ein Magnetbandlaufwerk, ein Flash-Speicher oder anderes ähnliches Solid-State-Speichergerät oder eine Reihe anderer Geräte, sein, einschließlich Geräten in einem Speichernetzwerk oder anderer Konfigurationen. Ein Computerprogrammprodukt kann konkret in einem Informationsträger ausgeführt sein. Das Computerprogrammprodukt kann auch Anweisungen enthalten, die, wenn sie ausgeführt werden, ein oder mehrere Verfahren ausführen, wie die oben beschriebenen. Der Informationsträger ist ein computer- oder maschinenlesbares Medium, wie der Speicher 704, das Speichergerät 706 oder der Prozessorspeicher 702.
  • Der High-Speed-Controller 708 managt bandbreitenintensiver Operationen für das Computergerät 700, während der Low-Speed-Controller 712 weniger bandbreitenintensive Operationen managt. Eine solche Zuordnung von Funktionen ist nur exemplarisch. In einer Ausführungsform ist der High-Speed-Controller 708 mit Speicher 704, Display 716 (z. B. über einen Grafikprozessor oder -beschleuniger) und mit High-Speed-Erweiterungsanschlüssen 710 gekoppelt, die verschiedene Erweiterungskarten aufnehmen können (nicht dargestellt). In der Implementierung ist Low-Speed-Controller 712 mit Speichergerät 706 und Low-Speed-Erweiterungsanschluss 714 gekoppelt. Der Low-Speed-Erweiterungsanschluss, der verschiedene Kommunikationsanschlüsse (z. B. USB, Bluetooth, Ethernet, Funkethernet) beinhalten kann, kann an ein oder mehrere Eingabe-/Ausgabe-Geräte, wie eine Tastatur, ein Zeigegerät, einen Scanner oder ein Netzwerkgerät, wie einen Switch oder Router, z. B. durch einen Netzwerkadapter gekoppelt sein.
  • Das Computergerät 700 kann in einer Reihe unterschiedlicher Formen implementiert sein, wie in der Figur gezeigt. Es kann zum Beispiel als Standardserver 720 oder mehrmals in einer Gruppe solcher Server implementiert sein. Es kann auch als Teil eines Rackserversystems 724 implementiert sein. Außerdem kann es in einem Personal Computer, wie Laptop-Computer 722, implementiert sein. Alternativ können Komponenten von Computergerät 700 mit anderen Komponenten in einem mobilen Gerät kombiniert sein (nicht dargestellt), z. B. Gerät 750. Jedes solcher Geräte kann eines oder mehrere Computergeräte 700, 750 enthalten, und ein gesamtes System kann aus mehreren Computergeräten 700, 750 bestehen, die miteinander kommunizieren.
  • Das Computergerät 750 beinhaltet unter anderen Komponenten einen Prozessor 752, einen Speicher 764, eine Eingabe-/Ausgabevorrichtung, wie ein Display 754, eine Verbindungsschnittstelle 766, und einen Transceiver 768. Das Gerät 750 kann ebenfalls mit einer Speichervorrichtung z. B. einem Microdrive oder einem anderen Gerät ausgestattet werden, um zusätzlichen Speicher bereitzustellen. Alle der Komponenten 750, 752, 764, 754, 766 und 768 sind mithilfe verschiedener Busse miteinander verbunden und mehrere der Komponenten können an einer gemeinsamen Hauptplatine oder auf andere Weise, wie geeignet, angebracht sein.
  • Der Prozessor 752 kann Anweisungen im Computergerät 750 ausführen, einschließlich im Speicher 764 gespeicherter Anweisungen. Der Prozessor kann als ein Chipsatz von Chips implementiert werden, die separate und mehrere analoge und digitale Prozessoren beinhalten. Zusätzlich dazu kann der Prozessor mit einer beliebigen Anzahl von Architekturen implementiert werden. Der Prozessor 752 kann beispielsweise ein CISC-Prozessor (Complex Instruction Set Computers), ein RISC-Prozessor (Reduced Instruction Set Computer) oder ein MISC-Prozessor (Minimal Instruction Set Computer) sein. Der Prozessor kann zum Beispiel für die Koordination der anderen Komponenten des Geräts 750 sorgen, zum Beispiel die Kontrolle von Benutzeroberflächen, Anwendungen, die vom Gerät 750 ausgeführt werden, und die drahtlose Kommunikation durch Gerät 750.
  • Der Prozessor 752 kann mit einem Benutzer über die Steueroberfläche 758 und die mit einem Display 754 gekoppelte Displayschnittstelle 756 kommunizieren. Das Display 754 kann zum Beispiel ein TFT(Thin-Film-Transistor Liquid Crystal Display)-Display oder ein OLED(Organic Light Emitting Diode)-Display oder eine andere geeignete Displaytechnologie sein. Die Anzeigeschnittstelle 756 kann angemessene Verschaltung zum Treiben der Anzeige 754 umfassen, um einem Benutzer grafische und andere Informationen zu präsentieren. Die Steuerschnittstelle 758 kann Befehle von einem Benutzer empfangen und sie für die Sendung an Prozessor 752 umwandeln. Außerdem kann eine externe Schnittstelle 762 in Kommunikation mit Prozessor 752 bereitgestellt werden, um die Nahbereichskommunikation von Gerät 750 mit anderen Geräten zu ermöglichen. Die externe Schnittstelle 762 kann beispielsweise in manchen Implementierungen eine drahtgestützte Verbindung oder in anderen Implementierungen eine drahtlose Verbindung aufbauen, und es können auch mehrere Schnittstellen zur Anwendung kommen.
  • Der Speicher 764 speichert Informationen innerhalb des Computergeräts 750. Der Speicher 764 kann als ein computerlesbares Medium bzw. als eines von mehreren computerlesbaren Medien, als flüchtiger Speicher bzw. als flüchtige Speicher oder als ein nichtflüchtiger Speicher bzw. als nichtflüchtige Speicher implementiert werden. Erweiterungsspeicher 774 kann ebenfalls bereitgestellt und mit dem Gerät 750 über Erweiterungsschnittstelle 772 verbunden werden, die zum Beispiel eine SIMM(Single In Line Memory Module)-Kartenschnittstelle umfassen kann. Ein solcher Erweiterungsspeicher 774 kann zusätzlichen Speicherplatz für Gerät 750 bereitstellen oder er kann auch Anwendungen oder andere Informationen für Gerät 750 speichern. Insbesondere kann Erweiterungsspeicher 774 Anweisungen zum Ausführen oder Ergänzen der oben beschriebenen Prozesse enthalten und er kann außerdem sichere Informationen enthalten. Somit kann Erweiterungsspeicher 774 zum Beispiel als Sicherheitsmodul für Gerät 750 bereitgestellt werden und er kann mit Anweisungen programmiert sein, die die sichere Verwendung von Gerät 750 erlauben. Zusätzlich dazu können über die SIMM-Cards sichere Anwendungen bereitgestellt werden, zusammen mit zusätzlichen Informationen, wie dem Ablegen von Identifizierungsinformationen auf der SIMM-Card auf eine Weise, die nicht gehackt werden kann.
  • Der Speicher 764 kann zum Beispiel Flashspeicher und/oder NVRAM-Speicher beinhalten, wie unten besprochen. In einer Implementierung, ist ein Computerprogrammprodukt konkret in einem Informationsträger ausgeführt. Das Computerprogrammprodukt enthält Anweisungen, die, wenn sie ausgeführt werden, ein oder mehrere Verfahren ausführen, wie die oben beschriebenen. Der Informationsträger ist ein computer- oder maschinenlesbares Medium, wie der Speicher 764, die Speichererweiterung 774 oder der Prozessorspeicher 752, das beispielsweise über den Transceiver 768 oder die externe Schnittstelle 762 empfangen werden kann.
  • Vorrichtung 750 kann über Kommunikationsschnittstelle 766, die bei Bedarf eine digitale Signalverarbeitungsschaltung beinhalten kann, drahtlos kommunizieren. Die Verbindungsschnittstelle 766 kann Verbindungen mit verschiedenen Kommunikationstypen oder -protokollen aufbauen, darunter GSM-Sprachanrufe, SMS, EMS, oder MMS-Messaging, CDMA, TDMA, PDC, WCDMA, CDMA2000 oder GPRS unter anderen. Eine solche Kommunikation kann zum Beispiel über Funkfrequenzempfänger 768 erfolgen. Zusätzlich kann eine Kurzstreckenkommunikation stattfinden, wie unter Verwendung eines Bluetooth-, WLAN- oder anderen solchen Sende-Empfängern (nicht gezeigt). Außerdem kann GPS(Global Positioning System)-Empfängermodul 770 zusätzliche mit der Navigation und dem Ort verbundene drahtlose Daten für Gerät 750 bereitstellen, die ggf. von Anwendungen verwendet werden können, die auf Gerät 750 ausgeführt werden.
  • Gerät 750 kann ebenfalls unter Verwendung des Audio-Codec 760, der gesprochene Informationen von einem Benutzer empfangen und diese in nutzbare digitale Informationen konvertieren kann, hörbar kommunizieren. Audio-Codec 760 kann ebenfalls akustische Töne für einen Benutzer erzeugen, zum Beispiel durch einen Lautsprecher zum Beispiel in einem Handgerät von Gerät 750. Solche Töne können Töne von Sprachtelefonanrufen beinhalten, können aufgezeichnete Töne (z. B. Sprachnachrichten, Musikdateien usw.) beinhalten und können auch Töne, die von Anwendungen, welche auf Gerät 750 operieren, beinhalten.
  • Das Computergerät 750 kann in einer Reihe unterschiedlicher Formen implementiert sein, wie in der Figur gezeigt. Zum Beispiel kann es als Mobiltelefon implementiert werden 780. Er kann ebenfalls als Bestandteil eines Smartphones 782, eines Personal Digital Assistant oder eines ähnlichen mobilen Geräts implementiert werden.
  • In verschiedenen Ausführungen werden Verfahren, die „als Reaktion auf” oder „als eine Konsequenz von” eines anderen Verfahrens (z. B. einer Bestimmung oder eine Identifizierung) ausgeführt sind, nicht ausgeführt, wenn das vorherige Verfahren nicht erfolgreich war (z. B. wenn die Bestimmung nicht ausgeführt wurde). Verfahren, die „automatisch” durchgeführt werden sind Verfahren, die ohne Eingriff (z. B. eingreifende Benutzereingabe) durchgeführt werden. Gegenstände, die in diesem Dokument unter Verwendung des Konjunktivs beschrieben sind, kann optionale Implementierungen beschreiben. In manchen Beispielen beinhaltet die „Übertragung” von einem ersten Gerät auf ein zweites Gerät die Eingabe von Daten in ein Netz zum Empfang durch das zweite Gerät, aber nicht den Empfang der Daten durch das zweite Gerät. Umgekehrt kann der „Empfang” von einem ersten Gerät den Empfang der Daten aus einem Netz beinhalten, aber nicht die Übertragung der Daten durch das erste Gerät.
  • Das „Bestimmen” durch ein Computersystem kann beinhalten, dass das Computersystem ein anderes Gerät anfordert, um die Bestimmung durchzuführen und die Resultate an das Computersystem zu liefern. Außerdem kann das „Anzeigen” oder das „Präsentieren” durch ein Computersystem beinhalten, dass das Computersystem Daten sendet, um zu veranlassen, dass ein anderes Gerät die referenzierten Informationen anzeigt oder präsentiert.
  • Ausführungsformen des Gegenstands und die in dieser Spezifikation beschriebenen Tätigkeiten können in digitalen elektronischen Schaltungen oder in Computer-Software, Firmware oder Hardware implementiert werden, einschließlich der in dieser Spezifikation offengelegten Strukturen und ihrer strukturellen Entsprechungen oder in Kombinationen von einer oder mehrerer von ihnen. Ausführungsformen des in dieser Spezifikation beschriebenen Gegenstands können als ein oder mehrere Computerprogramme, d. h. als ein oder mehrere Module von Computerprogrammanweisungen implementiert werden, die auf einem Computer-Speichermedium für die Ausführung durch oder die Steuerung des Betriebs des datenverarbeitenden Apparats kodiert werden. Alternativ oder zusätzlich können die Programmanweisungen auf einem künstlich erzeugten propagierten Signal, z. B. einem maschinell erzeugten elektrischen, optischen oder elektromagnetischen Signal künstlich kodiert werden, das erzeugt wird, um Informationen für die Übertragung auf einen geeigneten Empfängerapparat für die Ausführung durch einen datenverarbeitenden Apparat zu kodieren. Bei einem Computer-Speichermedium kann es sich um ein maschinell lesbares Speichergerät, einen maschinell lesbaren Speicherträger, ein zufälliges oder serielles Speicher-Array oder Speichergerät oder um eine Kombination aus einem oder mehreren dieser Geräte handeln oder in ihnen enthalten sein. Außerdem ist ein Computer-Speichermedium zwar kein verbreitetes Signal, aber ein Computer-Speichermedium kann eine Quelle oder ein Bestimmungsort von Computerprogrammanweisungen sein, die in einem künstlich erzeugten verbreiteten Signal kodiert werden. Bei dem Computer-Speichermedium kann es sich auch um eine oder mehrere unterschiedliche physische Komponenten oder Medien (z. B. mehrere CDs, Plattenlaufwerke oder andere Speichergeräte) handeln, bzw. kann das Speichermedium darin enthalten sein.
  • Die in dieser Spezifikation beschriebenen Tätigkeiten können als Tätigkeiten implementiert werden, die von einem datenverarbeitenden Apparat mit Daten durchgeführt werden, die auf einem oder mehreren maschinell lesbaren Speichergeräten gespeichert werden oder von anderen Quellen entgegengenommen werden.
  • Der Begriff „datenverarbeitender Apparat” umfasst alle Arten von Apparaten, Geräten und Maschinen für die Verarbeitung von Daten, einschließlich beispielsweise durch einen programmierbaren Prozessor, einen Computer, ein System auf einem oder mehreren Chips oder Kombinationen des Vorstehenden. Der Apparat kann logische Schaltungen mit einem Sonderzweck, z. B. ein FPGA (Field Programmable Gate Array) oder eine ASIC (anwendungsspezifische integrierte Schaltung) enthalten. Der Apparat kann neben der Hardware auch einen Code einschließen, der eine Ausführungsumgebung für das betreffende Computerprogramm in der Frage erstellt, z. B. einen Code, der Prozessor-Firmware, einen Protokollstapel, ein Datenbank-Managementsystem, ein Betriebssystem, eine plattformunabhängige Laufzeitumgebung, eine virtuelle Maschine oder eine Kombination einer oder mehrerer der genannten darstellt. Der Apparat und die Ausführungsumgebung können verschiedene unterschiedliche Rechnermodell-Infrastrukturen umsetzen, wie Webdienstleistungen, verteilte Rechen- und Grid-Computing-Infrastrukturen.
  • Ein Computerprogramm (auch bezeichnet als Programm, Software, Softwareanwendung, Script oder Code) kann in einer beliebigen Form von Programmiersprache geschrieben sein, einschließlich kompilierter oder interpretierter Sprachen, deklarativer oder verfahrensorientierter Sprachen, und das Programm kann in jeder beliebigen Form eingesetzt sein, darunter als unabhängiges Programm oder als ein Modul, eine Komponente, eine Subroutine, ein Objekt oder eine andere Einheit, die zur Benutzung in einer Rechenumgebung geeignet ist. Ein Computerprogramm kann, muss aber nicht, einer Datei in einem Dateisystem entsprechen. Ein Programm kann in einem Teil einer Datei gespeichert sein, die andere Programme oder Daten enthält (z. B. ein oder mehrere Scripts, die in einem Dokument in Markup-Sprache gespeichert sind), in einer einzelnen Datei speziell für das betreffende Programm oder in mehreren koordinierten Dateien (z. B. Dateien, die ein oder mehrere Module, Unterprogramme oder Teile von Code speichern). Ein Computerprogramm kann auf einem Computer oder mehreren Computern eingerichtet sein oder ausgeführt werden, die an einem Standort angeordnet sind oder über mehrere Standorte verteilt sind und über ein Kommunikationsnetz verbunden sind.
  • Die Verfahren und Logikflüsse, die in dieser Spezifikation beschrieben sind, können durch Handlungen, wie dem Betreiben von Eingabedaten und dem Erzeugen von Ausgaben. durch einen oder mehrere programmierbare Prozessoren, die einen oder mehrere Computerprogramme ausführen, durchgeführt werden. Die Prozesse und die logischen Abläufe können auch durch logische Sonderzweckschaltungen durchgeführt werden, und der Apparat kann als Sonderzweckschaltungen implementiert werden, z. B. ein FPGA (Field Programmable Gate Array) oder eine ASIC (anwendungsspezifische integrierte Schaltung).
  • Prozessoren, die für die Durchführung eines Computerprogramms geeignet sind, schließen beispielsweise sowohl allgemeine und als auch Spezial-Mikroprozessoren sowie alle Arten eines oder mehrerer Prozessoren jeglicher Art Digitalrechner ein. Ganz allgemein nimmt ein Prozessor Befehle und Daten von einem Festwertspeicher oder einem Arbeitsspeicher oder von beiden entgegen. Die wesentlichen Elemente eines Computers sind ein Prozessor für das Durchführen von Handlungen gemäß Anweisungen und ein oder mehr Speichergeräte für das Speichern von Anweisungen und Daten. Ganz allgemein gehören zu einem Computer auch ein oder mehrere Massenspeichergeräte für das Speichern von Daten, z. B. Magnet-, magnetooptische oder optische Disketten, um Daten entgegenzunehmen und/oder zu übertragen, bzw. ist ein Computer operativ an ein solches Speichergerät gekoppelt. Jedoch muss ein Computer solche Geräte nicht haben. Außerdem kann ein Computer in einem anderen Gerät eingebettet sein, z. B. in einem Mobiltelefon, einem Organizer (PDA), einem mobilen Audio- oder Videoplayer, einer Spielkonsole, einem Funknavigationsempfänger oder einem tragbaren Speichergerät (z. B. in einem USB-Stick), um nur einige zu nennen. Geräte, die für das Speichern von Computerprogrammanweisungen und -daten geeignet sind, schließen alle Formen von Dauerspeichern, Medien- und Speichergeräten ein, einschließlich beispielsweise Halbleiter-Speichergeräte, z. B. EPROM, EEPROM und USB-Flash-Speicher; Magnetplatten, z. B. interne Festplatten oder herausnehmbare Platten; magnetooptische Platten; und CD-ROMs und DVD-ROMs. Der Prozessor und der Speicher können durch logische Sonderzweckschaltungen ergänzt werden oder darin eingebaut sein.
  • Um die Interaktion mit einem Benutzer zu ermöglichen, können in dieser Spezifikation beschriebene Ausführungsformen des Gegenstands auf einem Computer mit einem Anzeigegerät implementiert werden, z. B. einem CRT-(Kathodenstrahlröhre) oder LCD-(Flüssigkristallanzeige)Monitor, mit welchem dem Benutzer Informationen angezeigt werden, sowie einer Tastatur und einem Anzeigegerät, z. B. einer Maus oder einem Trackball, mit denen der Benutzer Eingaben in den Computer vornehmen kann. Es können auch andere Arten von Einrichtungen verwendet werden, um für eine Interaktion mit einem Nutzer zu sorgen; beispielsweise kann eine dem Benutzer gelieferte Rückkopplung beliebiger Form von sensorischer Rückkopplung vorliegen, z. B. eine visuelle Rückkopplung, auditive Rückkopplung oder taktile Rückkopplung; und die Eingabe von dem Nutzer kann in beliebiger Form empfangen werden, einschließlich akustischer, Sprach- oder taktiler Eingabe. Zusätzlich kann ein Computer mit einem Benutzer durch das Senden und das Erhalten von Dokumenten von einem Gerät, das von einem Benutzer benutzt wird, wechselwirken; beispielsweise durch das Senden von Webseiten an einen Webbrowser durch ein Benutzergerät des Benutzers als Antwort auf Anforderungen des Webbrowsers.
  • Ausführungen des Themengebietes, die in dieser Spezifikation beschrieben sind, können in einem Computersystem implementiert werden, das eine Backend Komponente beinhaltet, z. B. als ein Datenserver oder der eine Zwischenanwendung Komponente beinhaltet, z. B. ein Anwendungsserver, oder der eine Front-End-Komponente beinhaltet, z. B. ein Computer, der eine grafische Benutzerschnittstelle oder einen Webbrowser hat, durch den ein Benutzer mit einer Implementierung des Themengebietes wechselwirken kann, das in dieser Spezifikation beschrieben ist, oder jede beliebige Kombination von einer oder mehreren solcher Backend, Zwischenanwendung oder Front-End Komponenten. Die Komponenten des Systems können durch eine beliebige Form oder ein beliebiges Medium digitaler Datenkommunikation miteinander verbunden sein, z. B. ein Kommunikationsnetzwerk. Zu Beispielen für Kommunikationsnetzwerke zählen ein lokales Netzwerk („LAN”), ein Fernnetzwerk („WAN”), eine netzübergreifende Verbindung (z. B. das Internet) und Peer-to-Peer Netzwerke (z. B. Ad-Hoc Peer-to-Peer Netzwerke).
  • Das Computersystem kann Benutzer und Server beinhalten. Ein Benutzer und ein Server sind im Allgemeinen voneinander entfernt und wechselwirken normalerweise durch ein Kommunikationsnetzwerk. Die Beziehung des Benutzers und des Servers entsteht aufgrund von Computerprogrammen, die auf den jeweiligen Computern laufen und eine Benutzer-Server Beziehung zueinander haben. In manchen Ausführungen überträgt ein Server Daten (z. B. eine HTML Seite) an ein Benutzergerät (z. B. mit dem Zweck, Daten anzuzeigen und Benutzereingaben von einem Benutzer, der mit dem Benutzergerät wechselwirkt zu erhalten). Daten, die am Benutzergerät erzeugt werden (z. B. das Resultat einer Wechselwirkung mit einem Benutzer) können vom Benutzergerät am Server erhalten werden.
  • Zwar enthält diese Spezifikation viele spezifische Implementierungsdetails, jedoch sollten diese nicht als Beschränkungen des Umfangs oder des Anspruchs ausgelegt werden, sondern vielmehr als Beschreibungen spezifischer Merkmale bestimmter Ausführungsformen bestimmter Erfindungen. Bestimmte Merkmale, die in dieser Spezifikation im Kontext der unterschiedlichen Ausführungsformen beschrieben werden, können auch in Kombination in einer einzelnen Ausführungsform implementiert werden. Andererseits können verschiedene Merkmale, die im Kontext einer einzelnen Ausführungsform beschrieben werden, in mehreren Ausführungsformen oder in jeder geeigneten Unterkombination implementiert werden. Außerdem können ein oder mehrere Merkmale einer beanspruchten Kombination in einigen Fällen aus der Kombination herausgelöst werden, auch wenn die Merkmale vorstehend als in gewissen Kombinationen funktionierend beschrieben oder gar als eine Kombination beansprucht werden, und die beanspruchte Kombination kann an eine Unterkombination oder eine Variation einer Unterkombination verwiesen werden.
  • Ebenso werden Tätigkeiten in den Zeichnungen zwar in einer bestimmten Reihenfolge dargestellt, aber dies sollte nicht als Erfordernis verstanden werden, dass solche Tätigkeiten in der bestimmten gezeigten Reihenfolge oder in einer aufeinanderfolgenden Reihenfolge ausgeführt werden müssen oder dass alle dargestellten Tätigkeiten ausgeführt werden müssen, um erwünschte Ergebnisse zu erzielen. Unter bestimmten Umständen können Multitasking und eine Parallelbearbeitung vorteilhaft sein. Darüber hinaus sollte die Trennung verschiedener Systemkomponenten in den oben beschriebenen Ausführungsformen nicht in allen Ausführungsformen erforderlich aufgefasst werden, und es versteht sich, dass die beschriebenen Programmkomponenten und Systeme im Allgemeinen zusammen in ein einziges Softwareprodukt integriert oder zu mehreren Softwareprodukten verkapselt werden können.
  • Folglich wurden bestimmte Ausführungsformen des Gegenstands beschrieben. Weitere Ausführungsformen gehören zum Umfang der folgenden Ansprüche. In einigen Fällen können die in den Ansprüchen beschriebenen Handlungen in einer anderen Reihenfolge durchgeführt werden und dennoch erwünschte Ergebnisse erzielen. Zusätzlich erfordern die in den beigefügten Figuren dargestellten Prozesse nicht notwendigerweise die bestimmte gezeigte Reihenfolge oder aufeinanderfolgende Reihenfolge, um erwünschte Ergebnisse zu erzielen. In bestimmten Implementierungen können Multitasking und eine Parallelbearbeitung vorteilhaft sein.

Claims (10)

  1. Konkretes, nicht-flüchtiges, computerlesbares Medium, das mit Instruktionen kodiert ist, die einen oder mehrere Prozessoren zur Ausführung von Informationen veranlassen, einschließlich: reagierend auf eine Anfrage das Durchführen einer Shuffle-Operation auf einen Datenstream, wobei die Shuffle-Operation eine Operation ist, die Datensätze mit Schlüsselwerten in dem Datenstream anhand der Schlüsselwerte gruppiert: das Empfang mindestens eines Teils des Datenstreams, wobei der Datenstream eine Vielzahl von Datensätzen und jeder Datensatz einen Schlüsselwert enthält und der Datenstream von einem oder mehreren Writern empfangen wird; das Speichern der Vielzahl von Datensätzen an einem nichtflüchtigen Speicherort aus einem Set von nichtflüchtigen Speicherorten, wobei jeder nichtflüchtige Speicherort einem Schlüsselbereich entsprechend den Schlüsselwerten in der Vielzahl von Datensätzen zugeteilt ist und der nichtflüchtige Speicherort für jeden Datensatz zumindest zum Teil auf Basis des Schlüsselwerts des jeweiligen Datensatzes ausgewählt wird; das Empfangen einer Anfrage von einem Verbraucher für ein Unterset aus der Vielzahl von Datensätzen inklusive eines Schlüsselbereichs; und nach Anfrage des Verbrauchers: das Bereitstellen des Untersets aus der Vielzahl von Datensätzen, inklusive der Schlüsselbereiche von einem oder mehreren der nichtflüchtigen Speicherorte.
  2. Computerlesbares Medium nach Anspruch 1, weiterhin umfassend das Sortieren der Vielzahl von Datensätzen nach Schlüsselwerten während der Shuffle-Operation.
  3. Computerlesbares Medium nach Anspruch 2, weiterhin umfassend das Empfangen einer Auswahl eines Datenverbrauchsmodus vom Verbraucher, wobei der Datenverbrauchsmodus die Art bezeichnet, in der das Unterset der Vielzahl von Datensätzen inklusive der Schlüsselbereiche dem Verbraucher zur Verfügung gestellt werden sollen.
  4. Computerlesbares Medium nach Anspruch 3, worin das Empfangen der Auswahl eines Datenverbrauchsmodus vom Verbraucher eine Streaming-Modus-Auswahl enthält, die anzeigt, dass die Vielzahl von Datensätzen inklusive des Schlüsselbereichs dem Verbraucher sofort zur Verfügung gestellt werden sollen.
  5. Computerlesbares Medium nach Anspruch 3, worin das Empfangen der Auswahl eines Datenverbrauchsmodus vom Verbraucher eine Shard-Modus-Auswahl enthält, die anzeigt, dass die Vielzahl von Datensätzen inklusive des Schlüsselbereichs dem Verbraucher erst nach dem Speichern in dem einen oder den mehreren nichtflüchtigen Speicherorten zur Verfügung gestellt werden sollen.
  6. Computerlesbares Medium nach Anspruch 3, worin das Empfangen der Auswahl eines Datenverbrauchsmodus vom Verbraucher eine Sortiermodus-Auswahl enthält, die anzeigt, dass die Vielzahl von Datensätzen inklusive des Schlüsselbereichs dem Verbraucher gruppiert und nach Schlüsselwert sortiert zur Verfügung gestellt werden sollen.
  7. Computerlesbares Medium nach Anspruch 1, die Operationen weiterhin umfassend das Speichern von zur Shuffle-Operation gehörender Metadaten in dem einen oder den mehreren nichtflüchtigen Speicherorten, worin die Metadaten Indexwerte in Verbindung mit der Vielzahl von Datensätzen enthalten.
  8. Computerlesbares Medium nach Anspruch 1, die Operationen weiterhin umfassend: das Empfangen einer Anfrage zur Löschung der Shuffle-Operation; und beim Erhalt der Anfrage zur Löschung der Shuffle-Operation das Löschen jedes der Vielzahl von Datensätzen von dem einen oder den mehreren nichtflüchtigen Speicherorten.
  9. Computerlesbares Medium nach Anspruch 1, worin das Speichern jedes der Vielzahl von Datensätzen an einem nichtflüchtigen Speicherort das Anfügen des jeweiligen Datensatzes an das Ende einer sequenziellen Datei enthält, die an dem nichtflüchtigen Speicherort gespeichert ist.
  10. System, das Folgendes umfasst: Speicher zur Speicherung von Daten; und ein oder mehrere Prozessoren, fähig zur Ausführung von Operationen, umfassend: reagierend auf eine Anfrage das Durchführen einer Shuffle-Operation auf einen Datenstream, wobei die Shuffle-Operation eine Operation ist, die Datensätze mit Schlüsselwerten in dem Datenstream anhand der Schlüsselwerte gruppiert: das Empfang mindestens eines Teils des Datenstreams, wobei der Datenstream eine Vielzahl von Datensätzen und jeder Datensatz einen Schlüsselwert enthält und der Datenstream von einem oder mehreren Writern empfangen wird; das Speichern der Vielzahl von Datensätzen an einem nichtflüchtigen Speicherort aus einem Set von nichtflüchtigen Speicherorten, wobei jeder nichtflüchtige Speicherort einem Schlüsselbereich entsprechend den Schlüsselwerten in der Vielzahl von Datensätzen zugeteilt ist und der nichtflüchtige Speicherort für jeden Datensatz zumindest zum Teil auf Basis des Schlüsselwerts des jeweiligen Datensatzes ausgewählt wird; das Empfangen einer Anfrage von einem Verbraucher nach einem Unterset der Vielzahl von Datensätzen inklusive eines Schlüsselbereichs; und nach Anfrage des Verbrauchers: die Bereitstellung des Untersets aus der Vielzahl von Datensätzen, inklusive der Schlüsselbereiche von einem oder mehreren der nichtflüchtigen Speicherorte.
DE202014010924.9U 2013-10-03 2014-10-03 Nichtflüchtiges Shuffle-System Active DE202014010924U1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/045,517 2013-10-03
US14/045,517 US9928263B2 (en) 2013-10-03 2013-10-03 Persistent shuffle system

Publications (1)

Publication Number Publication Date
DE202014010924U1 true DE202014010924U1 (de) 2017-01-18

Family

ID=51842835

Family Applications (1)

Application Number Title Priority Date Filing Date
DE202014010924.9U Active DE202014010924U1 (de) 2013-10-03 2014-10-03 Nichtflüchtiges Shuffle-System

Country Status (5)

Country Link
US (4) US9928263B2 (de)
EP (1) EP3053037A1 (de)
CN (1) CN105765537A (de)
DE (1) DE202014010924U1 (de)
WO (1) WO2015051249A1 (de)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9274835B2 (en) 2014-01-06 2016-03-01 International Business Machines Corporation Data shuffling in a non-uniform memory access device
US9652295B2 (en) * 2015-06-26 2017-05-16 International Business Machines Corporation Runtime fusion of operators based on processing element workload threshold and programming instruction compatibility
US9558049B1 (en) 2015-10-12 2017-01-31 International Business Machines Corporation Shuffle optimization in map-reduce processing
WO2017087001A1 (en) * 2015-11-20 2017-05-26 Hewlett Packard Enterprise Development Lp Distributed data shuffling
US10268521B2 (en) * 2016-01-22 2019-04-23 Samsung Electronics Co., Ltd. Electronic system with data exchange mechanism and method of operation thereof
CN107220069B (zh) * 2017-07-03 2020-06-05 中国科学院计算技术研究所 一种针对非易失性内存的Shuffle方法
US9934287B1 (en) 2017-07-25 2018-04-03 Capital One Services, Llc Systems and methods for expedited large file processing

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6285996B1 (en) * 1997-07-10 2001-09-04 International Business Machines Corp. Run-time support for user-defined index ranges and index filters
CN101300775B (zh) * 2005-10-31 2012-12-19 松下电器产业株式会社 安全处理装置、安全处理方法、加密信息嵌入方法、程序、存储介质和集成电路
US8239847B2 (en) 2009-03-18 2012-08-07 Microsoft Corporation General distributed reduction for data parallel computing
US8935266B2 (en) * 2009-04-08 2015-01-13 Jianqing Wu Investigative identity data search algorithm
US8510538B1 (en) 2009-04-13 2013-08-13 Google Inc. System and method for limiting the impact of stragglers in large-scale parallel data processing
DE102010041298A1 (de) * 2010-09-24 2012-03-29 Carl Zeiss Smt Gmbh EUV-Mikrolithographie-Projektionsbelichtungsanlage mit einer Heizlichtquelle
US9325757B2 (en) 2010-11-30 2016-04-26 Adello Inc. Methods and systems for fault-tolerant distributed stream processing
US8499222B2 (en) * 2010-12-14 2013-07-30 Microsoft Corporation Supporting distributed key-based processes
US20120246158A1 (en) 2011-03-25 2012-09-27 Microsoft Corporation Co-range partition for query plan optimization and data-parallel programming model
US8954967B2 (en) * 2011-05-31 2015-02-10 International Business Machines Corporation Adaptive parallel data processing
US9286414B2 (en) * 2011-12-02 2016-03-15 Microsoft Technology Licensing, Llc Data discovery and description service
US20130219394A1 (en) * 2012-02-17 2013-08-22 Kenneth Jerome GOLDMAN System and method for a map flow worker
US20130297613A1 (en) * 2012-05-04 2013-11-07 Monmouth University Indexing based on key ranges
US20130297624A1 (en) * 2012-05-07 2013-11-07 Microsoft Corporation Interoperability between Map-Reduce and Distributed Array Runtimes
US8972986B2 (en) * 2012-05-25 2015-03-03 International Business Machines Corporation Locality-aware resource allocation for cloud computing
US20140059552A1 (en) * 2012-08-24 2014-02-27 International Business Machines Corporation Transparent efficiency for in-memory execution of map reduce job sequences
US9424271B2 (en) * 2012-08-30 2016-08-23 International Business Machines Corporation Atomic incremental load for map-reduce systems on append-only file systems
JP5939123B2 (ja) * 2012-10-09 2016-06-22 富士通株式会社 実行制御プログラム、実行制御方法および情報処理装置
CN103023805A (zh) * 2012-11-22 2013-04-03 北京航空航天大学 一种MapReduce系统
CN102999633A (zh) * 2012-12-18 2013-03-27 北京师范大学珠海分校 网络信息的云聚类提取方法
US9354938B2 (en) * 2013-04-10 2016-05-31 International Business Machines Corporation Sequential cooperation between map and reduce phases to improve data locality
US9483509B2 (en) * 2013-10-02 2016-11-01 Google Inc. Dynamic shuffle reconfiguration
US20210406993A1 (en) * 2020-06-29 2021-12-30 Dell Products L.P. Automated generation of titles and descriptions for electronic commerce products
US11809969B2 (en) * 2020-06-30 2023-11-07 Adobe Inc. Dynamically integrating interactive machine learning multi-models

Also Published As

Publication number Publication date
US11269847B2 (en) 2022-03-08
EP3053037A1 (de) 2016-08-10
CN105765537A (zh) 2016-07-13
US10515065B2 (en) 2019-12-24
US20220261392A1 (en) 2022-08-18
US20200110737A1 (en) 2020-04-09
US20180196840A1 (en) 2018-07-12
US20150100592A1 (en) 2015-04-09
WO2015051249A1 (en) 2015-04-09
US9928263B2 (en) 2018-03-27
US11966377B2 (en) 2024-04-23

Similar Documents

Publication Publication Date Title
DE202014010940U1 (de) Dynamische Shuffle-Rekonfiguration
DE202014010924U1 (de) Nichtflüchtiges Shuffle-System
DE202015009298U1 (de) Dynamische Anpassung von Shard-Zuweisungen
DE102013207049B4 (de) Überwachen der Datenstrompufferung zur Optimierung der Operatorverarbeitung
DE112013000752B4 (de) Verwalten von Verarbeitungselementen in einem Streaming-Datensystem
DE202015009254U1 (de) Automatisch erzeugende ausführungssequenzen für workflows
DE112013000865B4 (de) Konsolidieren von unterschiedlichen Cloud-Dienst-Daten und -Verhaltensweisen auf der Grundlage von Vertrauensbeziehungen zwischen Cloud-Diensten
DE102018006894A1 (de) Technologien zum Auslagern von Beschleunigungsaufgaben-Ablaufplanungsoperationen an Beschleunigerschlitten
DE112012004747B4 (de) Verborgenes automatisiertes Spiegeln von Daten für native Schnittstellen in verteilten virtuellen Maschinen
DE102012216029B4 (de) Ein skalierbares anpassungsfähiges map-reduce-rahmenwerk mit verteilten daten
DE112012005030T5 (de) Dynamisch konfigurierbare Platzierungs-Engine
DE212017000042U1 (de) Datenstruktur-Pooling von sprachaktivierten Datenpaketen
DE112017000169T5 (de) Gerätekennungsabhängige vorgangsverarbeitung von paketbasierter datenkommunikation
DE112011104787B4 (de) Nutzung von Inhalten über persönliche Clouds
DE202012013432U1 (de) Speichern von Daten auf Speicherknoten
DE112010003144T5 (de) Erweiterbare Grundstruktur zur Unterstützung verschiedener Einsatzarchitekturen
DE102016104478A1 (de) Kryptographische Verfahren, die Arbeitsnachweise in Systemen untereinander verbundener Knoten realisieren
DE112012005533T5 (de) Unterstützende Abfrage und ein Abfragen
DE202017105977U1 (de) Virtueller Router mit dynamischer Flussauslagerungsfähigkeit
DE112012002631T5 (de) Stream-Verarbeitung unter Verwendung einer Client-Server-Architektur
DE112014007090T5 (de) Verfahren und systeme zum automatischen tagging anhand von software-ausführungs-traces
DE102020110143A1 (de) Standortbasierte virtualisierungs-workload-platzierung
DE112017003294T5 (de) Technologien für ein skalierbares Senden und Empfangen von Paketen
DE102012224492A1 (de) Auslösen von Fensterbedingungen unter Verwendung einer Ausnahmebehandlung
DE202013012478U1 (de) Kompression der datenkarte

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