-
HINTERGRUND
-
Großangelegte Datenverarbeitung kann parallele Verarbeitungen enthalten, die im Allgemeinen das gleichzeitige Ausführen einer Operation über jedes Element einer großen Datenmenge beinhaltet. Die Datenmenge kann in kleinere Einheiten, bekannt als „Shards”, aufgeteilt werden und parallel von verschiedenen Prozessen und/oder Geräten bearbeitet werden.
-
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
-
Die vorliegende Offenbarung steht in Zusammenhang mit der dynamischen Anpassung von Shard-Zuweisungen während paralleler Verarbeitungsoperationen.
-
Im Allgemeinen kann ein innovativer Aspekt des in dieser Spezifikation beschriebenen Gegenstands in Methoden verkörpert werden, die Folgendes beinhalten: die Bestimmung einer Zielfertigstellungszeit für die Batch-Verarbeitung einer Eingabedatenmenge, wobei dieser Batch-Verarbeitungsvorgang durch eine Vielzahl an Tasks ausgeführt wird und jeder dieser Tasks einen anderen Eingabeshard bearbeitet, der einen anderen Teil der Eingabedatenmenge enthält; die Identifizierung eines ersten Tasks aus dieser Vielzahl an Tasks, der eine geschätzte Fertigstellungszeit größer der Zielfertigstellungszeit des Batch-Verarbeitungsvorgangs hat, wobei die geschätzte Fertigstellungszeit eine geschätzte Zeit darstellt, nach der der erste Task die Verarbeitung des Teiles der Eingabedatenmenge beendet haben wird, der den ersten Eingabeshard, verarbeitet vom ersten Task, beinhaltet; sowie die Aufteilung des ersten Eingabeshards in einen ersten Teileingabeshard und einen zweiten Teileingabeshard, der sich vom ersten Teileingabeshard unterscheidet, wobei der erste Teileingabeshard einen ersten Teil des ersten Eingabeshards enthält und der zweite Teileingabeshard einen zweiten Teil des ersten Eingabeshards enthält, der sich vom ersten Teil unterscheidet.
-
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.
-
Bestimmte Ausführungsformen des in dieser Spezifikation beschriebenen Gegenstands können so implementiert werden, dass sie einen oder mehrere der folgenden Vorteile verwirklichen. Indem die Zuweisung von Shards während eines Verarbeitungsvorgangs dynamisch erfolgt, kann die Shard-Zuweisung besser optimiert werden, da mehr Informationen über jeden einzelnen Shard zur Verfügung stehen, wie seine Größe, Komplexität, durchschnittliche Verarbeitungsrate und andere Informationen. Die Adaptierung der Shard-Zuweisung auf diese Weise erlaubt auch das Ändern der Zuweisung als Antwort auf beobachtete Umstände, wie einen Task (z. B. eine Rechenressource), der einen Shard langsamer als erwartet verarbeitet, oder das Freiwerden zusätzlicher Rechenressourcen.
-
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.
-
BESCHREIBUNG DER ZEICHNUNGEN
-
1 ist ein Blockdiagramm einer Umgebung, in der eine dynamische Anpassung der Shard-Zuweisung während paralleler Verarbeitungsvorgänge auftreten kann.
-
2A–B sind Blockdiagramme von Systemkonfigurationen vor und nach der Teilung eines Shards.
-
3 ist ein Sequenzdiagramm eines Beispielprozesses zur dynamischen Anpassung der Shard-Zuweisung während eines parallelen Verarbeitungsvorgangs.
-
4 ist ein Flussdiagramm eines Beispielprozesses zur dynamischen Anpassung der Shard-Zuweisung während paralleler Verarbeitungsvorgänge.
-
5 ist ein Blockdiagramm eines exemplarischen Rechnergeräts.
-
Entsprechende Referenznummern und Kennzeichnungen in den verschiedenen Zeichnungen zeigen entsprechende Elemente an.
-
AUSFÜHRLICHE BESCHREIBUNG
-
Anwendungen zur großangelegten parallelen Verarbeitung müssen große Eingabedatenbestände zur Verarbeitung durch eine Basis von Tasks (z. B. Rechenressourcen) verteilen. Dies kann geschehen, indem der Eingabedatenbestand in kleinere Teile oder „Shards” aufgeteilt wird und diese Shards verfügbaren Tasks zugewiesen werden. In Fällen, die heterogene Eingabedatenbestände, Task-Ausführungsumgebungen, Netzwerkbedingungen oder andere verschiedene Faktoren beinhalten, kann es schwierig sein, den Eingabedatenbestand gleichmäßig aufzuteilen, so dass jeder Task seinen zugewiesenen Shard in einem ähnlichen Zeitraum verarbeitet. Große Unterschiede in der Verarbeitungszeit von Shard können dazu führen, dass „Nachzügler”-Shards entstehen, deren Verarbeitung sehr viel länger dauert als die der anderen Shards. Nachzügler-Shards können die Gesamtlaufzeit einer bestimmten Aufgabe dominieren, wenn die Aufgabe voraussetzt, dass vor ihrer Beendigung alle Shards verarbeitet wurden. Des Weiteren können Nachzügler-Shards problematisch sein, wenn die Rechenergebnisse des Tasks nicht auf einem Dauerspeicher, wie z. B. einer externen Festplatte, abgelegt werden. Auf Grund der vorher erwähnten Heterogenität kann die Verarbeitung eines bestimmten Teils des Eingabedatenbestands sehr langsam sein oder mehr Datensätze als erwartet enthalten. Falls der Task, der den Shard verarbeitet, fehlschlägt, bevor seine Ausgaben dauerhaft gespeichert wurden, kann der gesamte Fortschritt verlorengehen. Falls das System wartet, bis ein gesamter Shard verarbeitet wurde, bevor es seine Ergebnisse abspeichert, muss möglicherweise ein großer Teil der Arbeit erneut ausgeführt werden. Erhebliche Shardgrößen können ein solches Problem verschlimmern.
-
Kleine Shardgrößen können ebenfalls zu Problemen führen, wie dem zusätzlichen Overhead beim Zuweisen und Verwalten einer höheren Anzahl von Shards und dem Bedarf an Tasks, um während der Verarbeitung den Beginn jedes Shards zu suchen, statt sequenziell größere Shards einzulesen.
-
Die vorliegende Offenbarung steht in Zusammenhang mit der dynamischen Anpassung von Shard-Zuweisungen während paralleler Verarbeitungsoperationen. Ein Beispiel enthält einen zentralen Datenbehälter von noch nicht zugewiesenen Shards, eine Basis von Tasks und eine Überwachungseinheit. Anfangs zerteilt die Überwachungseinheit einen Eingabedatenbestand in genug Shards, um jeden Task zu beschäftigen. Jeder Task beobachtet dann seinen eigenen Fortschritt bei der Verarbeitung seines Shards. Basierend auf den Beobachtungen eines Tasks veröffentlicht er eine Schätzung, wann er mit der Verarbeitung seines Shards fertig sein wird. Die Überwachungseinheit beobachtet diese Schätzungen. Wenn es keine nicht zugeteilten Shards mehr gibt und mindestens ein Task nicht mehr beschäftigt ist, hat die parallele Verarbeitungsoperation eine „Endphase” erreicht. Wenn dies geschieht, schätzt die Überwachungseinheit in manchen Fällen, wann der Auftrag erledigt sein wird, basierend auf den veröffentlichten Schätzungen der Tasks und unter der Voraussetzung eines perfekten Shard-/Lastausgleichs. Die Schätzung entspricht der Situation, dass jeder Task zur selben Zeit fertig wird, und kann ein Durchschnitt der verbleibenden Zeit jedes Tasks sein, wobei die verbleibende Zeit untätiger Tasks als Null gezählt wird. Die Überwachungseinheit übermittelt diese Schätzung, wann die Operation abgeschlossen sein sollte (die „Deadline” oder Zielfertigstellungszeit), an die Tasks. In manchen Fällen kann die Überwachungseinheit periodisch Schätzungen übermitteln, während die Ausführung läuft, statt in oder zusätzlich zu der Endphase der Operation.
-
Beim Empfang der Zielfertigstellungszeit schätzt jeder Task, einen wie großen Teil seines Shards er bis zum Erreichen der Zielfertigstellungszeit verarbeiten kann. Falls der Task seine Ausführung vor Erreichen der Zielfertigstellungszeit beenden kann, führt er seine Verarbeitung normal weiterhin aus. Falls nicht, schätzt der Task, einen wie großen Teil des Shards er bis zum Erreichen der Zielfertigstellungszeit verarbeiten kann. Zum Beispiel kann der Task annehmen, dass seine durchschnittliche Verarbeitungsrate konstant bleiben wird. Basierend auf dieser Schätzung teilt der Task seinen Shard in einen ersten und einen zweiten Teil auf. Der erste Teil enthält den Teil des Shards, den der Task voraussichtlich bis zum Erreichen der Zielfertigstellungszeit verarbeiten kann. Der zweite Teil enthält den Teil des Shards, den der Task voraussichtlich nicht fertigstellen kann. Der Task gibt den zweiten Teil an die Überwachungseinheit zurück. Untätige Tasks holen sich dann Shards aus den zurückgegebenen zweiten Teilen zur Verarbeitung. Es ist zu beachten, dass eine Operation die „Endphase” während ihrer Ausführung mehrere Male betreten und verlassen kann und dass sich der Zyklus der Bekanntmachung einer geschätzten Fertigstellungszeit und das Aufteilen von Shards durch Tasks während der Ausführung mehrere Male wiederholen kann.
-
Ein anderes Beispiel enthält eine Methode, die die Zielfertigstellungszeit für einen Batch-Verarbeitungsprozess einer Eingabedatenmenge, ausgeführt von einer Vielzahl an Tasks, ermitteln kann. Jeder der vielen Tasks verarbeitet einen Eingabeshard, der jeweils einen anderen Teil der Eingabedatenmenge darstellt. Aus der Vielzahl an Tasks wird ein erster Task identifiziert, der einen ersten Eingabeshard verarbeitet und eine geschätzte Fertigstellungszeit größer der Zielfertigstellungszeit des Batch-Verarbeitungsprozesses hat. Als Antwort darauf wird der erste Eingabeshard in mehrere verschiedene Eingabeshards aufgeteilt, die alle einen Teil des ersten Eingabeshards enthalten. Die verschiedenen Eingabeshards können dann verschiedenen Tasks zur Verarbeitung zugewiesen werden.
-
Diese Merkmale und weitere Merkmale sind nachstehend detaillierter beschrieben.
-
1 ist ein Blockdiagramm einer Umgebung 100, in der eine dynamische Anpassung der Shard-Zuweisung während paralleler Verarbeitungsvorgänge auftreten kann. Wie dargestellt, enthält die Umgebung 100 eine parallele Verarbeitungsoperation 101 inklusive einer Vielzahl von Tasks 102a–n, die die Vielzahl an Shards 104a–n verarbeiten. Die parallele Verarbeitungsoperation 101 wird überwacht von der Überwachungseinheit 108. In der Operation wird eine Eingabedatenmenge 110 in die Shards 104a–n aufgeteilt, um von den Tasks 102a–n verarbeitet zu werden. Die Tasks 102a–n verarbeiten die Shards 104a–n, um die Ausgabedatenmenge 112 zu erzeugen.
-
Die Umgebung 100 enthält eine parallele Verarbeitungsoperation 101. In manchen Implementationen kann die parallele Verarbeitungsoperation 101 ein beliebiger Typ von verteilter Verarbeitungsanwendung sein, wie z. B. eine Abbildungsreduzierung, eine Pipeline, eine verteilte Anfrage oder ein anderer Typ von Anwendung. Die parallele Verarbeitungsoperation 101 kann dazu konfiguriert sein, auf einem oder mehreren Servern ausgeführt zu werden, die durch Netzwerkkommunikation miteinander verbunden sind. In manchen Fällen kann die parallele Verarbeitungsoperation 101 zusätzliche Komponenten außer den für die Aufteilung der Eingabedatenmenge 110 in die Shards 104a–n zur Verarbeitung durch die Tasks 102a–n dargestellten beinhalten. In manchen Fällen kann die Überwachungseinheit 108 diese Operation ausführen. Die Tasks 102a–n können ebenfalls die Aufteilungsoperation durchführen.
-
Die parallele Verarbeitungsoperation 101 enthält die Tasks 102a–n. In der Operation verarbeiten die Tasks 102a–n die ihnen zugehörigen Shards 104a–n. In manchen Fällen können die Tasks 102a–n jeder dieselben Verarbeitungsoperationen auf die jeweiligen Shards 104a–n anwenden. Die Tasks 102a–n können Softwareprozesse sein, die auf einem oder mehreren Server ausgeführt werden. In manchen Fällen kann der Thread der Tasks 102a verschiedene Arten von Komponenten beinhalten, wie z. B. Abbilder, Reduzierer, Mischer, Kombinierer, Pipeline-Objekte oder andere Typen von Komponenten.
-
Die Überwachungseinheit 108 überwacht die parallele Verarbeitungsoperation 101, indem sie mit den Tasks 102a–n kommuniziert. In manchen Implementationen ist die Überwachungseinheit 108 ein Softwareprozess oder ein Set von Softwareprozessen, die auf einem oder mehreren Servern ausgeführt werden. Die Überwachungseinheit 108 kann mit den Tasks 102a–n über ein Netzwerk (nicht dargestellt) kommunizieren. Die Kommunikation kann den Austausch von Statusinformationen von den Tasks 102a–n hin zur Überwachungseinheit 108 enthalten. Die Kommunikation kann außerdem Angaben der Überwachungseinheit 108 bezüglich Statistiken für die parallele Verarbeitungsoperation 101 enthalten, wie etwa die Zielfertigstellungszeit (siehe weiter unten). In manchen Fällen kann die Überwachungseinheit 108 die Operation der Tasks 102a–n kontrollieren, wie z. B. das Pausieren der Tasks 102a–n, das Fortsetzen der Tasks 102a–n, die Zuweisung von Shards an die Tasks 102a–n, das Aufteilen der Tasks 102a–n oder andere Operationen.
-
Wie dargestellt verarbeitet die parallele Verarbeitungsoperation 101 die Eingabedatenmenge 110. Die Eingabedatenmenge 110 kann jede Kombination von strukturierten oder unstrukturierten Daten enthalten, wie z. B. Schlüsselwertpaare, Dateien, Datenbankzeilen, Datenbankspalten oder andere Arten von Daten. Ebenso kann die von der parallelen Verarbeitungsoperation 101 erzeugte Ausgabedatenmenge 112 jede Kombination von strukturierten oder unstrukturierten Daten enthalten, wie z. B. Schlüsselwertpaare, Dateien, Datenbankzeilen, Datenbankspalten oder andere Arten von Daten. In manchen Fällen können die Arten von Daten in der Ausgabedatenmenge 112 die gleichen wie die in der Eingabedatenmenge 110 sein. Die Ausgabedatenmenge 112 kann auch andere Arten von Daten als die Eingabedatenmenge 110 enthalten. In manchen Implementationen kann die parallele Verarbeitungsoperation 101 keine Ausgabedatenmenge erstellen, wie z. B. für Operationen, die eine Operation (z. B. ein Datenbank-Update) für jeden Datensatz in der Eingabedatenmenge 110 durchführen.
-
2A–B sind Blockdiagramme von Systemkonfigurationen vor (200) und nach (210) der Teilung eines Shards. Wie 2A, kommuniziert eine Überwachungseinheit 202 mit einem oder mehreren Tasks 204a–c. Die Tasks 204a–c verarbeiten einen oder mehrere Shards 206a–c. Bei 208 übermitteln die Tasks 204a–c ihre jeweiligen geschätzten Fertigstellungszeiten an die Überwachungseinheit 202. Zum Beispiel übermittelt der Task 204a eine geschätzte Fertigstellungszeit von 4 Minuten an die Überwachungseinheit 202. Der Task 204b übermittelt eine geschätzte Fertigstellungszeit von 3 Minuten an die Überwachungseinheit 202. Der Task 204c übermittelt eine geschätzte Fertigstellungszeit von 13 Minuten an die Überwachungseinheit 202. Wie gezeigt, ist Task 212 untätig (d. h., er verarbeitet keinen Shard) in der Konfiguration 200. Da es einen untätigen Task (212) und noch keine zuzuordnenden Shards gibt, befindet sich der Auftrag in 2A in der Endphase.
-
Als Antwort auf den Erhalt der geschätzten Fertigstellungszeiten von den Tasks 204a–c ermittelt die Überwachungseinheit 202 bei 209 die Zielfertigstellungszeit für die parallele Verarbeitungsoperation bezüglich der Tasks 204a–c. In diesem Fall ermittelt die Überwachungseinheit 202, dass die Zielfertigstellungszeit 5 Minuten beträgt. Die Überwachungseinheit 202 kann eine Zielfertigstellungszeit ermitteln, indem sie den Durchschnitt der geschätzten Fertigstellungszeit für jeden Task 204a–c sowie für den untätigen Task 212, der als Task mit einer geschätzten Fertigstellungszeit von 0 behandelt werden kann, berechnet. In manchen Fällen kann die Überwachungseinheit 202 eine Zielfertigstellungszeit basierend auf einer für die parallele Verarbeitungsoperation, die die Tasks 204a–c sowie 212 enthält, spezifizierten Fertigstellungszeit ermitteln, wie etwa einer Deadline, die von einem Administrator der parallelen Verarbeitungsoperation spezifiziert wurde. In manchen Implementationen repräsentiert die Zielfertigstellungszeit eine erwartete Fertigstellungszeit für die parallele Verarbeitungsoperation dar, unter der Annahme, dass die Tasks 204a–c zur selben Zeit fertig werden. Die Zielfertigstellungszeit kann auch ein gewichtetes Mittel der berichteten Fertigstellungszeiten der Tasks 204a–c und 212 darstellen. Die Zielfertigstellungszeit kann von der Überwachungseinheit 202 auch anhand anderer Prozeduren oder Algorithmen ermittelt werden.
-
In manchen Fällen kann die Kommunikation zwischen den Tasks 204a–c sowie 212 und der Überwachungseinheit 202 bei 208 und 209 über ein (nicht dargestelltes) Netzwerk erfolgen. Die Kommunikation kann anhand eines oder mehrerer Netzwerkprotokolle stattfinden, wie z. B. des Hypertext Transfer Protocol (HTTP), des Simple Network Management Protocol (SNMP), eines Remote Procedure Call (RPC) oder anderen Protokollen.
-
2B zeigt die Systemkonfiguration 210 nach einer Aufteilung des Shards 206c. Bei der Ausführung kann der Task 204c die Zielfertigstellungszeit von der Überwachungseinheit 202 erhalten. Der Task 204c kann die Zielfertigstellungszeit von 5 Minuten mit seiner geschätzten Fertigstellungszeit von 13 Minuten vergleichen und entscheiden, dass er die Verarbeitung von Shard 206c nicht vor Erreichen der Zielfertigstellungszeit beenden wird. Als Reaktion darauf kann der Task 204c den Shard 206c in die Teilshards 214a–b aufteilen, die jeder einen Teil des Shards 206c enthalten. Der Task 204c kann mit der Verarbeitung des Teilshards 214a fortfahren. Der Teilshard 214b kann von dem (vormals untätigen) Task 212 verarbeitet werden. In manchen Fällen kann der Task 204c den Teilshard 214b an die Überwachungseinheit 202 senden. Die Überwachungseinheit 202 kann dann den Shard 214b dem Task 212 zuweisen. Die Überwachungseinheit 202 kann auch den Teilshard 214b an einem Ort hinterlegen, wo ein untätiger Task wie der Task 212 sich selbst den Teilshard 214b zur Verarbeitung abholen kann. In manchen Fällen kann diese Shardteilung von der Überwachungseinheit 202 initiiert werden, indem z. B. eine Nachricht an den Task 204c gesendet wird. Obwohl 2B zeigt, dass der Shard 206c in zwei neue Shards aufgeteilt wird, kann der Shard 206c auch in mehr als zwei Shards aufgeteilt werden.
-
3 ist ein Sequenzdiagramm eines Beispielprozesses 300 zur dynamischen Anpassung der Shard-Zuweisung während eines parallelen Verarbeitungsvorgangs. 3 stellt mehr Details zur Verfügung bezüglich der Operation gezeigt in 2A–B. Bei 305 sendet der Task 204a seine geschätzte Fertigstellungszeit (4 Minuten) an die Überwachungseinheit 202. Bei 310 sendet der Task 204b seine geschätzte Fertigstellungszeit (3 Minuten) an die Überwachungseinheit 202. Bei 315 sendet der Task 204c seine geschätzte Fertigstellungszeit (13 Minuten) an die Überwachungseinheit 202. In manchen Fällen kann diese Kommunikation so stattfinden, wie beschrieben in den 2A–B. Bei 320 ermittelt die Überwachungseinheit 202 eine Zielfertigstellungszeit basierend auf der geschätzten Fertigstellungszeit der Tasks 204a–c. Wiederum kann die Zielfertigstellungszeit so berechnet werden, wie beschrieben in den 2A–B. Bei 325–335 sendet die Überwachungseinheit 202 eine Zielfertigstellungszeit (5 Minuten) an die Tasks 204a–c. Diese Kommunikation kann so stattfinden, wie beschrieben in den 2A–B.
-
Bei 340 ermittelt der Task 204c, dass seine geschätzte Fertigstellungszeit (13 Minuten) größer als die von der Überwachungseinheit 202 empfangene Zielfertigstellungszeit (5 Minuten) ist. Als Reaktion darauf teilt der Task 204c den ihm zugewiesenen Shard 206c (345) auf. Bei 350 sendet der Task 204c den Teilshard 214b an die Überwachungseinheit 202. Bei 355 fährt der Task 204c mit der Verarbeitung des Teilshards 214a fort. Bei 360 weist die Überwachungseinheit 202 den Shard 214b dem Task 212 zu.
-
4 ist ein Flussdiagramm eines Beispielprozesses 400 zur dynamischen Anpassung der Shard-Zuweisung während paralleler Verarbeitungsvorgänge. Bei 405 wird eine Zielfertigstellungszeit für einen Batch-Verarbeitungsprozess einer Eingabedatenmenge ermittelt. Der Batch-Verarbeitungsprozess kann von einer Vielzahl von Tasks ausgeführt werden, die jeder einen Eingabeshard verarbeiten, der jeweils einen anderen Teil der Eingabedatenmenge enthält.
-
Bei 410 wird aus der Vielzahl an Tasks ein erster Task identifiziert, der eine geschätzte Fertigstellungszeit größer der Zielfertigstellungszeit des Batch-Verarbeitungsprozesses hat. In manchen Fällen ist die Zielfertigstellungszeit eine Deadline, die von einem Administrator des Batch-Verarbeitungsprozesses für die Beendigung des Batch-Verarbeitungsprozesses vorgegeben wird. Die geschätzte Fertigstellungszeit für den ersten Task kann eine geschätzte Zeit sein, zu der der erste Task mit der Verarbeitung des Teiles der Eingabedatenmenge im ersten Eingabeshard, verarbeitet vom ersten Task, fertig sein wird. In manchen Fällen enthält jeder der Vielzahl an Tasks eine geschätzte Fertigstellungszeit, die eine Zeit repräsentiert, zu der der Task mit der Verarbeitung seines Eingabeshards fertig sein wird, und die Zielfertigstellungszeit ist ein Durchschnittswert der geschätzten Fertigstellungszeiten für die Vielzahl an Tasks des Batch-Verarbeitungsprozesses. In manchen Fällen können bei der Bestimmung der geschätzten Fertigstellungszeit auch untätige Tasks des Batch-Verarbeitungsprozesses mit einbezogen werden, indem ihnen z. B. eine geschätzte Fertigstellungszeit von Null zugeordnet wird. Die geschätzte Fertigstellungszeit für jeden der Vielzahl an Tasks kann basierend auf folgendem bestimmt werden: zumindest zum Teil auf der Größe eines Teils des Eingabeshards, der von jedem der Vielzahl an Tasks noch verarbeitet werden muss; der Verarbeitungsrate in Verbindung mit jedem der Vielzahl an Tasks für einen Teil des Eingabeshards, der von jedem der Vielzahl an Tasks bereits verarbeitet wurde; oder einer kürzlichen Verarbeitungsrate in Verbindung mit jedem der Vielzahl an Tasks für einen Teil des Eingabeshards, der für jeden der Vielzahl an Tasks innerhalb eines Zeitfensters verarbeitet wurde; oder basierend auf anderen Informationen.
-
Bei 415 wird der erste Eingabeshard in einen ersten Teileingabeshard und einen zweiten, verschiedenen Teileingabeshard aufgeteilt. Jeder der Teileingabeshards enthält einen anderen Teil des ersten Eingabeshards. In manchen Fällen wird der erste Teileingabeshard einem zweiten Task zur Verarbeitung zugewiesen und der zweite Teileingabeshard wird einem dritten Task, der sich vom zweiten Task unterscheidet, zur Verarbeitung zugewiesen. In manchen Implementationen ist der zweite Task der erste Task und der dritte Task ist ein untätiger Task des Batch-Verarbeitungsprozesses.
-
In manchen Fällen werden die Identifizierung des ersten Tasks und die Aufteilung des ersten Eingabeshards vom ersten Task selbst vorgenommen. In einem solchen Fall kann der erste Task die Zielfertigstellungszeit von einem Überwachungsprozess des Batch-Verarbeitungsprozesses erhalten und sie mit seiner geschätzten Fertigstellungszeit vergleichen, um festzustellen, dass er nicht in der Zielfertigstellungszeit fertig werden wird. Der erste Task kann einen Hinweis auf einen Teil des ersten Eingabeshards, den der erste Task nicht bis zur Zielfertigstellungszeit verarbeiten können wird, an den Überwachungsprozess senden und der Überwachungsprozess kann als Reaktion darauf diesen Teil des ersten Eingabeshards einem untätigen Task zur Verarbeitung zuweisen. Die Identifizierung des ersten Tasks und das Aufteilen des ersten Eingabeshards können auch vom Überwachungsprozess vorgenommen werden.
-
In manchen Fällen enthält die Methode 400 die Feststellung eines Endphase-Status des Batch-Verarbeitungsprozesses, bei dem alle noch nicht verarbeiteten Shards der Eingabedatenmenge von einem Task verarbeitet werden und es untätige Tasks gibt, die zur Verarbeitung von Shards zur Verfügung stehen. In diesem Fall können die Identifizierung des ersten Tasks und das Aufteilen des ersten Eingabeshards vorgenommen werden, nachdem festgestellt wurde, dass sich der Batch-Verarbeitungsprozess in der Endphase befindet.
-
5 ist ein Blockdiagramm der Computergeräte 500, 550, 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 500 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 550 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 500 oder 550 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.
-
Computergerät 500 beinhaltet einen Prozessor 502, einen Speicher 504, eine Speichervorrichtung 506, eine High-Speed-Schnittstelle 508, die sich mit Speicher 504 und High-Speed-Erweiterungsanschlüssen 510 verbindet, und eine Low-Speed-Schnittstelle 512, die sich mit dem 514 und Speichervorrichtung 506 verbindet. Jede der Komponenten 502, 504, 506, 508, 510 und 512 sind unter Verwendung verschiedener Busse miteinander verbunden und können auf einem gängigen Motherboard oder gegebenenfalls in anderer Weise angebracht sein. Der Prozessor 502 kann Anweisungen zur Ausführung innerhalb des Computergeräts 500 verarbeiten, die Anweisungen beinhalten, die in dem Speicher 504 oder auf der Speichervorrichtung 506 gespeichert sind, um grafische Informationen für ein GUI auf einer externen Eingabe-/Ausgabevorrichtung, wie Anzeige 516, die mit High-Speed-Schnittstelle 508 verbunden ist, anzuzeigen. In anderen Implementierungen können mehrere Prozessoren und/oder mehrere Busse verwendet sein, wie angemessen, zusammen mit mehreren Speichern und Speichertypen. Es können auch mehrere Computergeräte 500 verbunden sind, wobei jedes Gerät Teile der notwendigen Vorgänge bereitstellt (z. B. als eine Serverbank, eine Gruppe von Blade-Servern oder ein Mehrprozessorsystem).
-
Der Speicher 504 speichert Informationen innerhalb des Computergeräts 500. In einer Implementierung ist der Speicher 504 aus einer nichtflüchtigen Speichereinheit oder -einheiten ausgebildet. In anderen Implementierungen ist der Speicher 504 aus einer nichtflüchtigen Speichereinheit oder -einheiten ausgebildet. Der Speicher 504 kann auch eine andere Form von computerlesbarem Medium sein, zum Beispiel ein magnetischer oder optischer Datenträger.
-
Die Speichervorrichtung 506 ist in der Lage, Massenspeicher für die Computergeräte 500 bereitzustellen. In einer Implementierung kann das Speichergerät 506 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 504, die Speichervorrichtung 506 oder Speicher auf einem Prozessor 502.
-
Die High-Speed-Schnittstelle 508 verwaltet bandbreitenintensive Operationen für das Computergerät 500, während die Low-Speed-Schnittstelle 512 weniger niedrigere bandbreitenintensive Operationen verwaltet. Eine solche Zuordnung von Funktionen ist nur exemplarisch. In einer Implementierung ist die High-Speed-Schnittstelle 508 mit Speicher 504, Anzeige 516 (z. B. über einen Grafikprozessor oder -beschleuniger) und mit High-Speed-Erweiterungsanschlüssen 510, die verschiedene Erweiterungskarten (nicht gezeigt) akzeptieren können, verbunden. In der Implementierung ist Low-Speed-Schnittstelle 512 mit Speichervorrichtung 506 und Low-Speed-Erweiterungsanschlüssen 514 verbunden. Der Low-Speed-Erweiterungsanschluss, der verschiedene Kommunikationsanschlüsse (z. B. USB, B, 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 500 kann in einer Reihe unterschiedlicher Formen implementiert sein, wie in der Figur gezeigt. So kann es beispielsweise als ein Standardserver 520 oder mehrfach in einer Gruppe solcher Server implementiert sein. Es kann außerdem als Teil eines Rack-Serversystems 524 implementiert sein. Zusätzlich kann es in einem Personal Computer wie einem Laptop-Computer 522 implementiert sein. Alternativ können Komponenten von Computergerät 500 mit anderen Komponenten in einem mobilen Gerät kombiniert sein (nicht dargestellt), z. B. Gerät 550. Jede solcher Vorrichtungen kann eine oder mehrere von Computergeräten 500, 550 enthalten und ein gesamtes System kann aus mehreren Computergeräten 500, 550, die miteinander kommunizieren, zusammengesetzt sein.
-
Computergerät 550 beinhaltet neben anderen Komponenten einen Prozessor 552, einen Speicher 564, eine Eingabe-/Ausgabevorrichtung wie eine Anzeige 554, eine Kommunikationsschnittstelle 566 und einen Sender-Empfänger 568. Das Gerät 550 kann ebenfalls mit einer Speichervorrichtung z. B. einem Microdrive oder einem anderen Gerät ausgestattet werden, um zusätzlichen Speicher bereitzustellen. Jede der Komponenten 550, 552, 564, 554, 566 und 568 sind unter Verwendung verschiedener Busse miteinander verbunden und mehrere der Komponenten können auf einem gängigen Motherboard oder gegebenenfalls in anderer Weise angebracht sein.
-
Der Prozessor 552 kann Anweisungen im Computergerät 550 ausführen, einschließlich im Speicher 564 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 552 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 beispielsweise zur Koordinierung der anderen Komponenten der Vorrichtung 550, wie etwa Steuerung von Benutzeroberflächen, Anwendungen, die von Vorrichtung 550 ausgeführt werden, und drahtlose Kommunikation durch Vorrichtung 550 bereitstellen.
-
Prozessor 552 kann mit einem Benutzer über Steuerschnittstelle 558 und Anzeigeschnittstelle 556, die mit einer Anzeige 554 verbunden ist, kommunizieren. Das Display 554 kann beispielsweise ein TFT-Display (Thin-Film-Transistor Liquid Crystal Display) oder ein OLED-Display (Organic Light Emitting Diode) oder aus einer anderen geeigneten Displaytechnologie sein. Die Anzeigeschnittstelle 556 kann angemessene Verschaltung zum Treiben der Anzeige 554 umfassen, um einem Benutzer grafische und andere Informationen zu präsentieren. Die Steuerschnittstelle 558 kann Befehle von einem Benutzer empfangen und sie zur Abgabe an den Prozessor 552 konvertieren. Zusätzlich kann eine externe Schnittstelle 562 in Verbindung mit Prozessor 552 bereitgestellt sein, um Nahbereichskommunikation von Vorrichtung 550 mit anderen Vorrichtungen zu ermöglichen. Die externe Schnittstelle 562 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 564 speichert Informationen innerhalb des Computergeräts 550. Der Speicher 564 kann als ein computerlesbares Medium bzw. als eines von mehreren computerlesbaren Medien, als flüchtiger Speicher bzw. als flüchtige Speicher oder als ein nicht-flüchtiger Speicher bzw. als nicht-flüchtige Speicher implementiert werden. Erweiterungsspeicher 574 kann ebenfalls bereitgestellt und mit dem Gerät 550 über Erweiterungsschnittstelle 572 verbunden werden, die zum Beispiel eine SIMM(Single In Line Memory Module)-Kartenschnittstelle umfassen kann. Ein solcher Erweiterungsspeicher 574 kann zusätzlichen Speicherplatz für Vorrichtung 550 bereitstellen oder kann auch Anwendungen oder andere Informationen für Vorrichtung 550 speichern. Insbesondere kann Erweiterungsspeicher 574 Anweisungen zum Ausführen oder Ergänzen der oben beschriebenen Prozesse enthalten und er kann außerdem sichere Informationen enthalten. Demnach kann Erweiterungsspeicher 574 beispielsweise als ein Sicherheitsmodul für Vorrichtung 550 bereitgestellt sein und kann mit Anweisungen programmiert sein, die eine sichere Benutzung von Vorrichtung 550 ermöglichen. 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 564 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 564, die Speichererweiterung 574 oder der Prozessorspeicher 552, das beispielsweise über den Transceiver 568 oder die externe Schnittstelle 562 empfangen werden kann.
-
Vorrichtung 550 kann über Kommunikationsschnittstelle 566, die bei Bedarf eine digitale Signalverarbeitungsschaltung beinhalten kann, drahtlos kommunizieren. Die Verbindungsschnittstelle 566 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. Solche Kommunikation kann beispielsweise durch Funkfrequenz-Sender-Empfänger 568 stattfinden. 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 570 zusätzliche mit der Navigation und dem Ort verbundene drahtlose Daten für Gerät 550 bereitstellen, die ggf. von Anwendungen verwendet werden können, die auf Gerät 550 ausgeführt werden.
-
Gerät 550 kann ebenfalls unter Verwendung des Audio-Codec 560, der gesprochene Informationen von einem Benutzer empfangen und diese in nutzbare digitale Informationen konvertieren kann, hörbar kommunizieren. Audio-Codec 560 kann ebenfalls akustische Töne für einen Benutzer erzeugen, zum Beispiel durch einen Lautsprecher zum Beispiel in einem Handgerät von Gerät 550. Diese 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 beinhalten, die von laufenden Anwendungen auf Gerät 550 erstellt wurden.
-
Das Computergerät 550 kann in einer Reihe unterschiedlicher Formen implementiert sein, wie in der Figur gezeigt. Zum Beispiel kann es als Mobiltelefon 580 implementiert werden. Er kann ebenfalls als Bestandteil eines Smartphones 582, eines Personal Digital Assistant oder eines ähnlichen mobilen Geräts implementiert sein.
-
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 Durchfü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 werden, der andere Programme oder Daten enthält (z. B. einen oder mehrere Skripte, die in einem Auszeichnungssprachen-Dokument gespeichert sind), in einer einzelnen Datei, die dem betreffenden Programm zugeordnet ist, oder in mehreren koordinierten Dateien (z. B. Dateien, die ein oder mehrere Module, Unterprogramme oder Codeabschnitte speichern). Ein Computerprogramm kann auf einem Computer oder mehreren Computer 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. Im Allgemeinen beinhaltet ein 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, beinhalten alle Formen von Dauerspeichern, Medien- und Speichergeräten, einschließlich beispielsweise Halbleiter-Speichergeräte, z. B. EPROM, EEPROM und USB-Flash-Speicher; Magnetdisketten, z. B. interne Festplatten oder herausnehmbare Disketten; magnetooptische Disketten; 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ührungsformen der in dieser Spezifikation betrachteten Gegenstands können in ein Computersystem implementiert werden, das eine Backend-Komponente (z. B. einen Datenserver), oder eine Middleware-Komponente (z. B. einen Anwendungsserver), oder eine Frontend-Komponente (z. B. einen Client-Computer mit graphischem Benutzerinterface oder Webbrowser) umfasst, worüber der Benutzer mit einer Implementierung der in dieser Spezifikation betrachteten Gegenstands interagieren kann, oder eine beliebige Kombination aus solchen Backend, Middleware- oder Frontend-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.