DE202017105367U1 - Abfrageneustartfähigkeit - Google Patents

Abfrageneustartfähigkeit Download PDF

Info

Publication number
DE202017105367U1
DE202017105367U1 DE202017105367.9U DE202017105367U DE202017105367U1 DE 202017105367 U1 DE202017105367 U1 DE 202017105367U1 DE 202017105367 U DE202017105367 U DE 202017105367U DE 202017105367 U1 DE202017105367 U1 DE 202017105367U1
Authority
DE
Germany
Prior art keywords
computer
data
query
results
response
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
DE202017105367.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 DE202017105367U1 publication Critical patent/DE202017105367U1/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • 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/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • 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/24Querying
    • G06F16/242Query formulation
    • G06F16/2425Iterative querying; Query formulation based on the results of a preceding query
    • 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/24Querying
    • G06F16/245Query processing
    • 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/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24534Query rewriting; Transformation
    • G06F16/24535Query rewriting; Transformation of sub-queries or views
    • 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/24Querying
    • G06F16/245Query processing
    • G06F16/2458Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
    • G06F16/2471Distributed queries

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Computational Linguistics (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Fuzzy Systems (AREA)
  • Probability & Statistics with Applications (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Mobile Radio Communication Systems (AREA)

Abstract

System, das umfasst: eine Datenverarbeitungsvorrichtung; und ein nicht transitorisches computerlesbares Speichermedium in Datenkommunikation mit der Datenverarbeitungsvorrichtung, das Befehle speichert, die durch die Datenverarbeitungsvorrichtung ausführbar sind und bei einer solchen Ausführung veranlassen, dass die Datenverarbeitungsvorrichtung Operationen ausführt, die umfassen: Senden einer bestimmten Abfrage an einen Computer; und für jedes aktuelle Ergebnis in mehreren Ergebnissen in Antwort auf die bestimmte Abfrage: Empfangen einer Nachricht von dem Computer, die a) erste Daten für das jeweilige aktuelle Ergebnis und b) zweite Daten für ein Neustart-Token, das Operationen repräsentiert, die durchgeführt werden, um die mehreren aktuell von dem System empfangenen Ergebnisse einschließlich des jeweiligen aktuellen Ergebnisses zu bestimmen, und das verwendet werden kann, um ein neues Ergebnis in Antwort auf die bestimmte Abfrage zu bestimmen, das nicht in den mehreren Ergebnissen enthalten war, enthält.

Description

  • Hintergrund
  • Ein System kann eine Abfrage von einer Vorrichtung, z. B. einer Clientvorrichtung, empfangen. Das System kann Arbeit für die Abfrage oder einen Teil der Abfrage an einen bestimmten Computer, z. B. einen Server, der in dem System enthalten ist, delegieren. Wenn das System eine parallele Verarbeitung zulässt, kann das System Nachrichten an mehrere Computer liefern, wobei jede Nachricht eine Aufgabe für die Abfrage angibt, und Antworten von den Computern erhalten. Das System kann Daten aus den Antworten kombinieren, um Daten zu bestimmen, die an die Vorrichtung gesendet werden sollen.
  • Zum Beispiel können jedem Computer bestimmte Abschnitte von Daten für eine zu verwaltende Datenbank zugeordnet werden. Diese einzelnen Abschnitte der Datenbank können als ”Tablets” (deutsch ”kleine Tabellen”) oder ”Shards” (deutsch ”Scherben”, im Sinne von Fragmenten) bezeichnet werden und können einen Abschnitt der Daten aus einer Tabelle oder Tabellen in einer verteilten Datenbank enthalten. Wenn eine Vorrichtung eine Operation an bestimmten Daten in der verteilten Datenbank anfordert (z. B. Lesen der bestimmten Daten oder Schreiben der bestimmten Daten), wird die Shard (oder in einigen Fällen Shards), die die bestimmten Daten enthält, identifiziert und dem Computer, dem die Shard zugeordnet ist, wird befohlen, die angeforderte Operation an den Daten in der Shard auszuführen.
  • Manchmal kann ein System mehrere Antworten erzeugen, die jeweils Teilergebnisse in Antwort auf eine Abfrage enthalten. Das System kann die mehreren Antworten an die Vorrichtung fließen lassen, von dem das System die Abfrage erhalten hat.
  • Zusammenfassung
  • 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. In einigen Implementierungen kann ein System, das eine Abfrage verarbeitet, ein Neustart-Token für Ergebnisse in Antwort auf die Abfrage erzeugen, und zwar z. B. dann, wenn die Ergebnisse nicht alle Daten in dem System in Antwort auf die Abfrage enthalten. Die Ergebnisse können eine Charge von Ergebnissen oder ein einzelnes Ergebniselement, z. B. Daten für eine einzelne Zeile aus einer Datenbank, enthalten. Das System kann eine Nachricht erstellen, die sowohl das Neustart-Token als auch das Ergebnis enthält. Die Nachricht kann ein Neustart-Token enthalten, das an das Ergebnis angehängt ist, oder kann ein Neustart-Token enthalten, das an ein letztes Element in einer Charge von Ergebnissen angehängt ist. Das System kann die Nachricht an eine Clientvorrichtung liefern, von der das System die Abfrage erhalten hat.
  • Wenn eine Verbindung zwischen dem System und der Clientvorrichtung verloren geht, z. B. aufgrund eines Netzfehlers, eines Neustarts des Computers, eines Computerabsturzes oder einer Verschiebung von Daten von einem ersten Computer auf einen zweiten Computer in dem System, liefert die Clientvorrichtung die Abfrage und das Neustart-Token an das System, um zu veranlassen, dass ein Computer in dem System die Verarbeitung der Abfrage fortsetzt. In ähnlicher Weise kann dann, wenn eine Verbindung zwischen zwei Computer in einem System verloren geht, ein primärer Computer die Abfrage und das Neustart-Token an einen sekundären Computer liefern, um den sekundären Computer dazu zu veranlassen, die Verarbeitung der Abfrage fortzusetzen. Der sekundäre Computer kann derselbe Computer, der zuvor die Abfrage verarbeitet hat, ein anderer Computer oder beides sein.
  • Das Neustart-Token erlaubt dem System oder dem sekundären Computer, die Verarbeitung einer Abfrage neu zu starten und Daten für ein nächstes Ergebnis in Antwort auf die Abfrage zu bestimmen, ohne eines der Zwischenergebnisse zu bestimmen, die zuvor an eine anfordernde Vorrichtung, z. B. eine Clientvorrichtung, geliefert wurden. Wenn das System das Neustart-Token und die Abfrage empfängt, kann das System bestimmen, welche Ergebnisse, einschließlich eines jüngsten Ergebnisses, das an die anfordernde Vorrichtung gesendet und für das das Neustart-Token erstellt worden ist, bereits an die anfordernde Vorrichtung gesendet worden sind und das nächste Ergebnis bestimmen, das an die anfordernde Vorrichtung gesendet werden soll. Wenn die Antwortdaten durch Schlüssel dargestellt werden, kann das Neustart-Token einen Schlüssel für die letzten an die anfordernde Vorrichtung gesendeten Daten oder einen Schlüssel für die nächsten Daten, die an die anfordernde Vorrichtung gesendet werden sollen, enthalten.
  • In einigen Beispielen kann das Neustart-Token ein Abfrageparameter sein, der die von einer anfordernden Vorrichtung empfangenen Ergebnisse verändert, indem Ergebnisse weggelassen werden, die die abfragende Vorrichtung bereits empfangen hat. Zum Beispiel kann eine anfordernde Vorrichtung die ersten fünf Ergebnisse in Antwort auf eine bestimmte Abfrage von einem Computer in einem System anfordern. Nachdem die anfordernde Vorrichtung die ersten fünf Ergebnisse empfangen hat, kann die anfordernde Vorrichtung die fünf Ergebnisse verarbeiten, z. B. Daten aus den Ergebnissen zur Präsentation in eine Anwenderschnittstelle importieren. Die anfordernde Vorrichtung kann dann eine neue Anforderung für die bestimmte Abfrage erstellen, die ein Neustart-Token enthält, das die ersten fünf Ergebnisse repräsentiert, so dass der Computer die ersten fünf Ergebnisse nicht als zusätzliche Ergebnisse, die von der anfordernden Vorrichtung in Antwort auf die neue Anforderung empfangen werden, einbezieht. Der Parameter, der das Neustart-Token identifiziert, kann in einem Kopfabschnitt der neuen Anforderung, einem Körperabschnitt der neuen Anforderung oder einem anderen geeigneten Abschnitt der neuen Anforderung enthalten sein.
  • Im Allgemeinen kann ein innovativer Aspekt des in dieser Patentschrift beschriebenen Gegenstands in Verfahren verkörpert sein, die die folgenden Aktionen umfassen: Empfangen einer bestimmten Abfrage durch einen Computer von einer anfordernden Vorrichtung; Bestimmen eines aktuellen Ergebnisses in Antwort auf die bestimmte Abfrage unter Verwendung eines Datenspeichersystems; Erzeugen eines Neustart-Tokens unter Verwendung des aktuellen Ergebnisses in Antwort auf die bestimmte Abfrage, das Operationen repräsentiert, die durchgeführt werden, um mehrere Ergebnisse in Antwort auf die bestimmte Abfrage einschließlich des aktuellen Ergebnisses in Antwort auf die bestimmte Abfrage zu bestimmen und das verwendet werden kann, um ein neues Ergebnis in Antwort auf die bestimmte Abfrage zu bestimmen, das nicht in den mehreren Ergebnissen in Antwort auf die bestimmte Abfrage enthalten war; und Liefern einer Nachricht an die anfordernde Vorrichtung, die enthält: a) erste Daten für das Neustart-Token, das zum Bestimmen der mehreren Ergebnissen in Antwort auf die bestimmte Abfrage ausgeführte Operationen repräsentiert, und b) zweite Daten für das aktuelle Ergebnis in Antwort auf die bestimmte Abfrage. Andere Ausführungsformen dieses Aspekts umfassen entsprechende Computersysteme, Vorrichtungen und in einem oder mehreren Computerspeichervorrichtungen aufgezeichnete Computerprogramme, die jeweils dazu ausgelegt sind, die Aktionen der Verfahren durchzuführen. Ein System aus einem oder mehreren Computern kann dazu ausgelegt sein, bestimmte Operationen oder Aktionen auszuführen, wobei Software, Firmware, Hardware oder eine Kombination davon in dem System installiert sind, die im Betrieb das System dazu veranlasst oder veranlassen, die Aktionen auszuführen. Ein oder mehrere Computerprogramme können dazu ausgelegt sein, bestimmte Operationen oder Aktionen auszuführen, indem sie Befehle enthalten, die dann, wenn sie durch eine Datenverarbeitungsvorrichtung ausgeführt werden, veranlassen, dass die Vorrichtung die Aktionen ausführt.
  • Im Allgemeinen kann ein innovativer Aspekt des in dieser Patentschrift beschriebenen Gegenstands in Verfahren verkörpert sein, die die folgenden Aktionen umfassen: Senden einer bestimmten Abfrage an einen Computer; und für jedes aktuelle Ergebnis mehrerer Ergebnissen in Antwort auf die bestimmte Abfrage: Empfangen einer Nachricht von dem Computer, die enthält: a) erste Daten für ein aktuelles Ergebnis in Antwort auf die bestimmte Abfrage und b) zweite Daten für ein Neustart-Token, das Operationen repräsentiert, die durchgeführt werden, um die mehreren Ergebnisse, die aktuell von dem System empfangen werden und das aktuelle Ergebnis enthalten, zu bestimmen und das dazu verwendet werden kann, ein neues Ergebnis in Antwort auf die bestimmte Abfrage zu bestimmen, das nicht in den mehreren Ergebnissen enthalten war. Andere Ausführungsformen dieses Aspekts umfassen entsprechende Computersysteme, Vorrichtungen und in einem oder mehreren Computerspeichervorrichtungen aufgezeichnete Computerprogramme, die jeweils dazu ausgelegt sind, die Aktionen der Verfahren durchzuführen. Ein System aus einem oder mehreren Computern kann dazu ausgelegt sein, bestimmte Operationen oder Aktionen auszuführen, indem Software, Firmware, Hardware oder eine Kombination davon in dem System installiert sind, die im Betrieb das System dazu veranlasst oder veranlassen, die Aktionen auszuführen. Ein oder mehrere Computerprogramme können dazu ausgelegt sein, bestimmte Operationen oder Aktionen auszuführen, indem sie Befehle enthalten, die dann, wenn sie durch eine Datenverarbeitungsvorrichtung ausgeführt werden, veranlassen, dass die Vorrichtung die Aktionen ausführt.
  • Die vorstehende und andere Ausführungsformen können jeweils wahlweise eines oder mehrere der folgenden Merkmale allein oder in Kombination umfassen. Das Erzeugen des Neustart-Tokens, das zum Bestimmen der mehreren Ergebnisse in Antwort auf die bestimmte Abfrage einschließlich des aktuellen Ergebnisses in Antwort auf die bestimmte Abfrage ausgeführte Operationen repräsentiert, unter Verwendung des aktuellen Ergebnisses in Antwort auf die bestimmte Abfrage kann ein Erzeugen des Neustart-Tokens, das Operationen repräsentiert, die durchgeführt werden, um die mehreren Ergebnisses in Antwort auf die bestimmte Abfrage einschließlich i) des aktuellen Ergebnisses in Antwort auf die bestimmte Abfrage und ii) eines oder mehrerer früherer Ergebnisse in Antwort auf die bestimmte Abfrage, die früher an die anfordernde Vorrichtung geliefert wurden, zu bestimmen, unter Verwendung des aktuellen Ergebnisses in Antwort auf die bestimmte Abfrage umfassen. Das Bestimmen des aktuellen Ergebnisses in Antwort auf die bestimmte Abfrage unter Verwendung des Datenspeichersystems kann ein Bestimmen einer oder mehrerer aktueller Zeilen in Antwort auf die bestimmte Abfrage unter Verwendung des Datenspeichersystems umfassen. Das Erzeugen des Neustart-Tokens kann umfassen: Bestimmen, dass die eine oder die mehreren aktuellen Zeilen auf die bestimmte Abfrage, die in dem Datenspeichersystem gespeichert sind, durch einen Schlüssel sortiert sind; und Bestimmen eines Indexes für die eine oder die mehreren aktuellen Zeilen in Antwort auf die bestimmte Abfrage in Antwort auf das Bestimmen, dass die eine oder die mehreren aktuellen Zeilen in Antwort auf die bestimmte Abfrage, die in dem Datenspeichersystem gespeichert sind, durch einen Schlüssel sortiert sind. Das Liefern der Nachricht an die anfordernde Vorrichtung, die a) die ersten Daten für das Neustart-Token, das zum Bestimmen der mehreren Ergebnisse in Antwort auf die bestimmte Abfrage ausgeführte Operationen repräsentiert, und b) die zweiten Daten für das aktuelle Ergebnis in Antwort auf die bestimmte Abfrage enthält, kann ein Liefern der Nachricht an die anfordernde Vorrichtung umfassen, die a) die ersten Daten für den Index für die eine oder die mehreren aktuellen Zeilen in Antwort auf die bestimmte Abfrage und b) die zweiten Daten, die einen Inhalt der einen oder mehreren aktuellen Zeilen in Antwort auf die bestimmte Abfrage identifizieren, enthält. Das Bestimmen des Indexes für die eine oder die mehreren aktuellen Zeilen in Antwort auf die bestimmte Abfrage kann ein Bestimmen eines Indexes für eine letzte Zeile in der einen oder den mehreren aktuellen Zeilen in Antwort auf die bestimmte Abfrage enthalten.
  • In einigen Implementierungen kann das Bestimmen des aktuellen Ergebnisses in Antwort auf die bestimmte Abfrage unter Verwendung des Datenspeichersystems ein Bestimmen einer oder mehrerer aktueller Zeilen in Antwort auf die bestimmte Abfrage unter Verwendung des Datenspeichersystems umfassen. Das Erzeugen des Neustart-Tokens kann umfassen: Bestimmen, dass die eine oder die mehreren Zeilen in Antwort auf die bestimmte Abfrage, die in dem Datenspeichersystem gespeichert sind, nicht durch einen bestimmten Schlüssel sortiert sind; und Identifizieren mehrerer deterministischer Entscheidungen, die zum Bestimmen der einen oder mehreren aktuellen Zeilen in Antwort auf die bestimmte Abfrage vorgenommen worden sind, in Antwort auf das Bestimmen, dass die eine oder die mehreren Zeilen in Antwort auf die bestimmte Abfrage, die in dem Datenspeichersystem gespeichert sind, nicht durch einen bestimmten Schlüssel sortiert sind. Die mehreren deterministischen Entscheidungen können es einem System ermöglichen, die mehreren Ergebnisse in Antwort auf die Abfrage einschließlich des aktuellen Ergebnisses in Antwort auf die bestimmte Abfrage zu bestimmen. Das Liefern der Nachricht, die a) die ersten Daten für das Neustart-Token, das zum Bestimmen der mehreren Ergebnissen in Antwort auf die bestimmte Abfrage ausgeführte Operationen repräsentiert, und b) die zweiten Daten für das aktuelle Ergebnis in Antwort auf die bestimmte Abfrage enthält, an die anfordernde Vorrichtung kann ein Bereitstellen der Nachricht, die a) die ersten Daten, die jede der mehreren deterministischen Entscheidungen identifizieren, die zum Bestimmen der einen oder mehreren aktuellen Zeilen in Antwort auf die bestimmte Abfrage vorgenommen worden sind, und b) die zweiten Daten, die den Inhalt der einen oder der mehreren aktuellen Zeilen in Antwort auf die bestimmte Abfrage identifizieren, enthält, an die anfordernde Vorrichtung umfassen. Das Verfahren kann umfassen: Bestimmen durch den Computer, dass zwei oder mehr bestimmte Operationen zur Erzeugung von Ergebnissen für die bestimmte Abfrage parallel durchgeführt werden können; Erzeugen, für mindestens zwei der zwei oder mehr bestimmten Operationen, einer jeweiligen Unterabfrage; und, für jede der Unterabfragen, Zuweisen der jeweiligen Unterabfrage zu einem Iterator, der die jeweilige bestimmte Operation ausführen wird, um zu veranlassen, dass zwei oder mehr der Iteratoren jeweilige Unterabfragen parallel verarbeiten. Das Bestimmen, dass die eine oder die mehreren Zeilen in Antwort auf die bestimmte Abfrage, die in dem Datenspeichersystem gespeichert sind, nicht durch einen bestimmten Schlüssel sortiert sind, kann ein Bestimmen, dass zwei oder mehr der Iteratoren jeweilige Unterabfragen parallel verarbeiten, umfassen.
  • In einigen Implementierungen kann das Erzeugen des Neustart-Tokens ein Erzeugen des Neustart-Tokens, ohne das Neustart-Token in dem dauerhaften Speicher zu speichern, umfassen. Das Erzeugen des Neustart-Tokens kann ein Speichern des Neustart-Tokens in einem flüchtigen Speicher, ohne das Neustart-Token in einem nichtflüchtigen Speicher zu speichern, umfassen. Das Verfahren kann umfassen: Empfangen der bestimmten Abfrage und des Neustart-Tokens, das zum Bestimmen der mehreren Ergebnisse in Antwort auf die bestimmte Abfrage ausgeführte Operationen repräsentiert und das verwendet werden kann, um ein neues Ergebnis in Antwort auf die bestimmte Abfrage zu bestimmen, das nicht in der mehreren Ergebnissen in Antwort auf die bestimmte Abfrage enthalten war, von der anfordernden Vorrichtung nach Liefern der Nachricht an die anfordernde Vorrichtung; Bestimmen eines zweiten Ergebnisses als Antwort auf die bestimmte Abfrage, das nicht in den mehreren Ergebnissen in Antwort auf die bestimmte Abfrage enthalten war, unter Verwendung eines zweiten Datenspeichersystems und des Neustarttokens; Bestimmen eines zweiten Neustart-Tokens, das die Operationen repräsentiert, die zum Bestimmen des zweiten Ergebnisses in Antwort auf die bestimmte Abfrage und der mehreren Ergebnisse in Antwort auf die bestimmte Abfrage durchgeführt werden; und Liefern einer zweiten Nachricht an die anfordernde Vorrichtung, die a) dritte Daten für das zweite Neustart-Token, das die Operationen repräsentiert, die zum Bestimmen des zweiten Ergebnisses in Antwort auf die bestimmte Abfrage und der mehreren Ergebnisse in Antwort auf die bestimmte Abfrage durchgeführt werden, und b) vierte Daten für das zweite Ergebnis in Antwort auf die bestimmte Abfrage enthält.
  • In einigen Implementierungen kann das Empfangen der Nachricht von dem Computer, die a) die ersten Daten für das aktuelle Ergebnis in Antwort auf die bestimmte Abfrage und b) die zweiten Daten für das Neustart-Token, die Operationen zum Bestimmen der mehreren Ergebnisse, die aktuell von dem System empfangen werden und das aktuelle Ergebnis umfassen, enthält, ein Empfangen der Nachricht von dem Computer umfassen, die a) die ersten Daten für das aktuelle Ergebnis in Antwort auf die bestimmte Abfrage und b) die zweiten Daten, die einen bestimmten Zustand des Computers zum Bestimmen der mehreren Ergebnisse identifizieren, die aktuell von dem System empfangen werden, enthält. Die zweiten Daten können einen Index enthalten, der mehreren Ergebnisse identifiziert, die aktuell von dem System empfangen werden. Die zweiten Daten können zweite Daten enthalten, die einen oder mehrere deterministische Schritte identifizieren, die von dem Computer durchgeführt werden, um die mehreren Ergebnisse zu bestimmen, die aktuell von dem System empfangen werden.
  • In einigen Implementierungen kann das Senden der bestimmten Abfrage an den Computer ein Senden der bestimmten Abfrage über eine Verbindung an den Computer umfassen. Das Verfahren kann umfassen: nach dem Empfangen der Nachricht für jedes der mehreren Ergebnisse in Antwort auf die bestimmte Abfrage, Bestimmen eines jüngsten von dem Computer empfangenen Neustart-Tokens, das verwendet werden kann, um ein neues Ergebnis in Antwort auf die bestimmte Abfrage zu bestimmen, das nicht in den mehreren Ergebnissen in Antwort auf die bestimmte Abfrage enthalten ist; Liefern der bestimmten Abfrage und des jüngsten Neustart-Tokens an einen zweiten Computer; und Empfangen einer Nachricht von dem zweiten Computer, die dritte Daten für ein zweites Ergebnis in Antwort auf die bestimmte Abfrage, das nicht in den mehreren Ergebnissen in Antwort auf die bestimmte Abfrage enthalten war, und vierte Daten für ein zweites Neustart-Token, das Operationen repräsentiert, die zum Bestimmen des zweiten Ergebnisses in Antwort auf die bestimmte Abfrage und der mehreren Ergebnisse durchgeführt werden, enthält. Das Verfahren kann umfassen: nach dem Empfangen der Nachricht für jedes der mehreren Ergebnisse in Antwort auf die bestimmte Abfrage, Bestimmen, dass eine Verbindung mit dem Computer nicht mehr existiert. Das Bestimmen des jüngsten Neustart-Tokens, das von dem Computer empfangen worden ist, kann in Antwort auf das Bestimmen, dass die Verbindung mit dem Computer nicht mehr existiert, erfolgen. Das Verfahren kann umfassen: nach dem Empfangen der Nachricht für jedes der mehreren Ergebnisse in Antwort auf die bestimmte Abfrage, Bestimmen, zusätzliche Ergebnisse für die bestimmte Abfrage von dem Computer anzufordern. Das Bestimmen des jüngsten Neustart-Tokens, das von dem Computer empfangen worden ist, kann in Antwort auf das Bestimmen, zusätzliche Ergebnisse für die bestimmte Abfrage anzufordern, erfolgen.
  • In einigen Implementierungen kann das Verfahren umfassen: Empfangen der bestimmten Abfrage von einer anfordernden Vorrichtung vor dem Senden der bestimmten Abfrage an den Computer. Das Senden der bestimmten Abfrage an den Computer kann umfassen: Senden einer ersten Unterabfrage, die einen ersten Teil von Operationen für die bestimmte Abfrage repräsentiert, an den Computer in Antwort auf das Empfangen der bestimmten Abfrage von der anfordernden Vorrichtung; Senden einer zweiten Unterabfrage, die einen zweiten Teil von Operationen für die bestimmte Abfrage repräsentiert, an einen zweiten Computer; für jedes zweite aktuelle Ergebnis in mehreren zweiten Ergebnissen in Antwort auf die bestimmte Abfrage: Empfangen einer zweiten Nachricht von dem zweiten Computer, die dritte Daten für ein zweites aktuelles Ergebnis in Antwort auf die bestimmte Abfrage und vierte Daten für ein zweites Neustart-Token, das Operationen repräsentiert, die unter Verwendung der zweiten Unterabfrage durchgeführt werden, um die mehreren zweiten Ergebnisse zu bestimmen, die aktuell von dem System empfangen werden und das zweite aktuelle Ergebnis umfassen, enthält; Bestimmen eines jüngsten aktuellen Ergebnisses und eines jüngsten zweiten aktuellen Ergebnisses; und Senden einer Antwort an die anfordernde Vorrichtung, die i) das jüngste aktuelle Ergebnis und ein entsprechendes Neustart-Token und ii) das jüngste zweite aktuelle Ergebnis und ein entsprechendes zweites Neustart-Token identifiziert. Das Verfahren kann umfassen: Bestimmen, dass die zweite Unterabfrage, die den zweiten Teil von Operationen für die bestimmte Abfrage repräsentiert, dem zweiten Computer zugewiesen wird; und vordem Senden der zweiten Unterabfrage, die den zweiten Teil von Operationen für die bestimmte Abfrage repräsentiert, an den zweiten Computer: Bestimmen, dass kein zweites aktuelles Ergebnis von dem zweiten Computer empfangen worden ist; Bestimmen, dass ein aktuelles Ergebnis und ein entsprechendes Neustart-Token von dem Computer empfangen worden sind; und Senden einer ersten Antwort an die anfordernde Vorrichtung, die das aktuelle Ergebnis und das entsprechende Neustart-Token identifiziert. Das Senden der zweiten Unterabfrage, die den zweiten Teil der Operationen für die bestimmte Abfrage repräsentiert, an den zweiten Computer kann nach dem Senden der ersten Antwort, die das aktuelle Ergebnis und das entsprechende Neustart-Token identifiziert, an die anfordernde Vorrichtung erfolgen. In einigen Implementierungen kann ein System den Computer enthalten. Das System kann den zweiten Computer enthalten.
  • Der in dieser Beschreibung beschriebene Gegenstand kann in bestimmten Ausführungsformen implementiert werden und kann zu einem oder mehreren der folgenden Vorteile führen. In einigen Implementierungen kann ein System Zustandsinformationen für eine Abfrage in ein Neustart-Token einbeziehen, um die Speicherung von Zustandsinformationen in einem Protokoll zu reduzieren oder zu beseitigen, um einen kleinen Neustartzustand zu erhalten, oder beides. In einigen Implementierungen kann ein System, das Neustart-Token verwendet, skalierbar sein, z. B. ohne Speicherplatz zum Speichern von Neustartinformationen zu benötigen. Zum Beispiel kann das System ein Neustart-Token verwenden, ohne Neustartinformationen in einem dauerhaften Speicher zu speichern. In einigen Implementierungen kann ein System, das Neustart-Token verwendet, einen Arbeitsaufwand, der nach einer verlorenen Verbindung wiederholt wird, minimieren, eine Lieferung von doppelter Information an ein anforderndes System reduzieren oder beseitigen oder beides. In einigen Implementierungen können die unten beschriebenen Systeme und Verfahren die Latenz für Abfrageneustarts reduzieren, Abfrageneustarts für Systeme mit niedriger Latenz ermöglichen, Abfragen ermöglichen, die über längere Zeiträume laufen, einem anfordernden System ohne Paging-System ermöglichen, eine Abfrage neuzustarten, ohne doppelte Ergebnisse zu erhalten, eine Anzahl von Transaktionsabbrüchen aufgrund vorübergehender Fehler verringern, oder eine Kombination von zwei oder mehr davon. Beispielsweise kann ein Abfrage-Neustart-Token, z. B. ein Abfrage-Neustart-Token mit niedriger Latenzzeit, dabei helfen, die Latenzzeit, die z. B. durch die Notwendigkeit, die Abfrage bei einem Fehler erneut auszuführen, zu minimieren, kann ein Programmiermodell vereinfachen, indem die Notwendigkeit einer Wiederholungsschleife in dem Code, z. B. Clientcode, vereinfachen oder beides. Das vereinfachte Programmiermodell kann für Nur-Lese-Transaktionen verwendet werden, die keine Sperren annehmen, wie beispielsweise Transaktionen, die eine Momentaufnahmenisolation verwenden. In einigen Beispielen kann ein Abfrage-Neustart-Token eine Verarbeitung für eine Abfrage in einem System ermöglichen, wenn die Wahrscheinlichkeit eines Scheiterns ohne Neustart hoch ist, z. B. wenn die Fehlerwahrscheinlichkeit eine Schwellenwahrscheinlichkeit überschreitet, sich einhundert Prozent nähert oder beides. In einigen Implementierungen kann ein System oder ein Verfahren, das ein Abfrage-Neustart-Token verwendet, in der Lage sein, eine einzelne lang laufende Abfrage zu verarbeiten, z. B. ohne eine Verwendung mehrerer Abfragen zu erfordern, von denen jede für eine Charge der Ergebnisse in Antwort auf die einzelne Abfrage zuständig ist, ohne eine Analyse von Daten in Antwort auf jede der mehreren Abfragen bezüglich Konsistenz, oder beides.
  • Die Einzelheiten einer oder mehrerer Implementierungen des Gegenstands sind in den begleitenden Zeichnungen und der nachstehenden Beschreibung dargelegt. Andere Merkmale, Aufgaben und Vorteile des Gegenstands sind aus der Beschreibung, den Zeichnungen und den Ansprüchen ersichtlich.
  • Kurzbeschreibung der Zeichnungen
  • 1 ist ein Beispiel einer Umgebung, in der Computer Neustart-Token mit Abfrageergebnischargen enthalten.
  • 2 ist ein Ablaufdiagramm eines Prozesses zum Erzeugen einer Nachricht, die einen Ergebnischargen in Antwort auf eine Abfrage und ein Neustarttoken enthält.
  • 3 ist ein Blockdiagramm eines Computersystems, das in Verbindung mit in diesem Dokument beschriebenen computerimplementierten Verfahren verwendet werden kann.
  • Gleiche Bezugszeichen und Bezeichnungen in den verschiedenen Zeichnungen kennzeichnen gleiche Elemente.
  • Genaue Beschreibung
  • 1.0 Übersicht
  • In einigen Implementierungen speichern die nachstehend beschriebenen Systeme und Verfahren Daten, die einen Fortschritt der Arbeit an einer Abfrage in einem Neustart-Token repräsentieren und streamen ein Abfrage-Neustart-Token mit jedem Ergebnis für eine Abfrage. Das Ergebnis ist eines von mehreren Ergebnissen, von denen jedes eine Antwort auf die Abfrage repräsentiert und in einer separaten Nachricht an eine anfordernde Vorrichtung enthalten ist. Das Ergebnis kann in einer Charge von Teilergebnissen enthalten sein, die jeweils eine Antwort auf die Abfrage darstellen, z. B. in einer Charge von zwei oder mehr Ergebnissen, oder als ein einzelnes Ergebnis vorliegen, das Teil eines an eine anfordernde Vorrichtung gelieferten Stroms von Ergebnissen ist. Die nachfolgend beschriebenen Beispiele beziehen sich im Allgemeinen auf eine Charge von Ergebnissen. Die gleichen Systeme und Verfahren können für ein einzelnes Ergebnis verwendet werden, das ein Teilergebnis für eine Abfrage ist. Das System kann ein Neustart-Token für jede Nachricht enthalten, die mindestens ein Ergebnis enthält, z. B. ein einzelnes Ergebnis oder eine Charge von Ergebnissen.
  • Ein System kann einen Neustartzustand für jede Charge von Ergebnissen erzeugen und den Neustartzustand als ein Neustart-Token in einer Nachricht mit Daten, die die Charge von Ergebnissen repräsentieren, bereitstellen. Wenn das System einen Ausfall erfährt und Zustandsinformationen für die Abfrage verliert, verwendet das System den Neustartzustand, z. B. aus der letzten Charge von Ergebnissen, die von einer anfordernden Vorrichtung empfangen wird, um das Streamen von Ergebnissen nach dem Ausfall fortzusetzen.
  • Zum Beispiel kann ein System jeder Charge von Ergebnissen, die an eine anfordernde Vorrichtung gesendet wird, ein Neustart-Token hinzufügen. Die Chargen von Ergebnissen können für Teilabfragen verwendet werden, wenn eine Suchoperation für die Abfrage in Teile aufgeteilt wird und jeder Teil der Suchoperation als separate Unterabfrage bearbeitet wird. Das System kann die Suchoperation in Teile aufteilen, die auf Shards basieren, die Daten in Antwort auf die Abfrage enthalten, so dass jede Unterabfrage für einen bestimmten Shard ist. Das System liefert für jede Charge von Ergebnissen ein entsprechendes Neustart-Token mit den Daten für die jeweilige Charge von Ergebnissen an die anfordernde Vorrichtung, von der das System die Abfrage erhalten hat, z. B. ob die Abfrage die ursprüngliche Abfrage oder eine Unterabfrage ist.
  • Wenn das System keine Daten in Antwort auf eine Abfrage mehr empfängt und zusätzliche Antwortdaten erforderlich sind, verwendet das System ein Abfrage-Neustart-Token aus einer Charge von Ergebnissen, um die Arbeit an der Abfrage fortzusetzen. Das System empfängt möglicherweise keine Daten in Antwort auf die Abfrage mehr, weil das System nur eine bestimmte Anzahl von Ergebnissen angefordert hat oder weil das System eine Verbindungsunterbrechung erfährt, z. B. zwischen dem System und der anfordernden Vorrichtung oder zwischen mehreren Computern in dem System. Wenn beispielsweise eine Verbindung zwischen einem ersten Computer in dem System und der anfordernden Vorrichtung unterbrochen wird, empfängt ein zweiter Computer in dem System eine Anforderung von der anfordernden Vorrichtung für die Abfrage, die das Neustart-Token aus einer Charge von Ergebnissen enthält, die zuvor von dem System an die anfordernde Vorrichtung geliefert worden ist, z. B. der jüngsten Charge von Ergebnissen, um das System dazu zu veranlassen, die Bearbeitung der Abfrage fortzusetzen. Wenn eine Verbindung zwischen zwei in dem System enthaltenen Computern unterbrochen ist, z. B. wenn ein erster der beiden Computer ein primärer Computer ist, der Arbeit an einen sekundären Computer delegiert, der Teilergebnisse für die Abfrage abruft, kann der primäre Computer ein Neustart-Token, das von dem sekundären Computer mit einer Charge von Ergebnissen empfangen worden ist, verwenden, um den sekundären Computer oder einen anderen Computer in dem System dazu zu veranlassen, weiterhin Ergebnisse für die Abfrage zu erzeugen. Die Unterbrechung der Verbindung kann durch einen Netzausfall, einen Neustart des Computers, einen Computerabsturz, eine Verschiebung von Daten von einem Computer zu einem anderen Computer oder eine Kombination von zwei oder mehr davon verursacht werden.
  • In einigen Beispielen kann ein Computer, der die Abfrage verarbeitet hat, die Verarbeitung der Abfrage beenden, da Daten in Antwort auf die Abfrage auf einen anderen Computer verschoben worden sind, die Daten beschädigt sind oder der Computer überlastet ist. Der Computer kann die Verarbeitung der Abfrage beenden, wenn die Daten in Antwort auf die Abfrage auf mehreren Computern repliziert sind. Zum Beispiel kann der Computer anfänglich eine Shard-Replik hosten, die Daten in Antwort auf die Abfrage enthält. Wenn der Computer bestimmt, dass die Shard-Replik auf einen anderen Computer verschoben wurde und der Computer keinen Zugriff mehr auf die Shard-Replik hat, beendet der Computer die Verarbeitung der Abfrage. Der Computer kann eine Nachricht an die anfordernde Vorrichtung liefern, die angibt, dass der Computer die Abfrage nicht mehr verarbeitet. In einigen Implementierungen liefert der Computer keine Nachricht, die angibt, dass der Computer die Abfrage nicht mehr verarbeitet, an die anfordernde Vorrichtung.
  • Wenn ein System, z. B. ein einzelner Computer oder mehrere Computer, Chargen von Ergebnissen in Antwort auf eine Abfrage bestimmt, kann das System ein Neustart-Token erzeugen, indem es einen Zustand von Laufzeitstrukturen, z. B. zustandsbehaftete Laufzeitstrukturen, erfasst, die die Abfrage ausführen, nachdem das System eine letzte Zeile in einer Chargen von Ergebnissen erzeugt hat. Die Laufzeitstrukturen des Systems, z. B. der Laufzeitzustand, können mehrere Zustände von Iteratoren umfassen, die in einem Iteratorbaum, z. B. von beliebiger Größe oder Tiefe oder beidem, organisiert sind.
  • Der Iteratorbaum kann einen Laufzeitabfrageplan zum Verarbeiten einer Abfrage darstellen. Jeder der Knoten in dem Iteratorbaum kann einen einzelnen Iterator darstellen, der einen Teil von Operationen für die Abfrage verarbeitet, z. B. eine Unterabfrage der Abfrage. Ein Computer kann den Teil der Operationen für die Abfrage durchführen, der durch einen Iterator in der Iterator-Baumstruktur dargestellt wird. Ein Iterator kann null, einen oder mehrere Eingabewerte haben. Jeder der Eingabewerte kann ein Tupel sein. Ein Iterator kann eine Ausgabe haben, z. B. ein Ausgabetupel. Das Ausgabetupel kann ein Ergebnis für eine Abfrage repräsentieren, z. B. als Teil einer Charge von Ergebnissen oder als einzelnes Ergebnis.
  • In einigen Beispielen kann das System eine Abfrageanforderung während einer Abfragekompilierung in einen Iteratorbaum transformieren und einen Zustand des Iteratorbaums verwenden, um ein Neustart-Token zu generieren. Die Form des Iteratorbaums und die bestimmten Daten, die gerade verarbeitet werden, können die Reihenfolge steuern, in der das System eine Steuerung an die Iteratoren in dem Iteratorbaum übergibt.
  • Das System kann den Iteratorbaum verwenden, um ein Neustart-Token zu erzeugen. Zum Beispiel kann das System den Zustand aller Iteratoren, die an der Erzeugung einer letzten Zeile in einer bestimmten Ergebnischarge beteiligt waren, verwenden, um das Neustart-Token für die bestimmte Ergebnischarge zu erzeugen. Das System kann einen Tiefe-zuerst-Durchlauf des Iteratorbaums verwenden, um Daten für das Neustart-Token zu bestimmen. Zum Beispiel kann das System einen ersten Iteratorknoten in jedem Zweig bestimmen, der Zustandsinformationen enthält, und die bestimmten Zustandsinformationen verwenden, um ein Neustart-Token zu erzeugen.
  • In einigen Implementierungen kann das System ein Neustart-Token unter Verwendung einer Reihenfolge, in der die Iteratoren Operationen durchgeführt haben, erzeugen. Zum Beispiel kann das System die Iteratoren dazu veranlassen, Zustandsinformationen für eine bestimmte Ergebnischarge in derselben Reihenfolge zu erzeugen, in der die Iteratoren Daten für die bestimmte Ergebnischarge erzeugten. Das System kombiniert die Zustandsinformationen in der Reihenfolge, in der die Iteratoren die Zustandsinformationen erzeugen, wenn ein Neustart-Token erzeugt wird, z. B. so, dass später ein Neustart-Token verwendet wird, um die Schritte zum Erzeugen der bestimmten Ergebnischarge in der gleichen Reihenfolge durchzuführen.
  • Wenn ein System ein Neustart-Token verwendet, um die Arbeit an einer Abfrage neu zu starten, z. B. in demselben Computer, der ursprünglich Ergebnisse für die Abfrage in dem System erzeugt hat oder einem anderen Computer, erzeugt das System eine Iteratorstruktur und versieht die Iteratoren in dem Iteratorbaum aus dem Neustart-Token mit ihrem Neustartzustand. Das System kann die Iteratoren nur dann mit ihrem Neustartzustand versehen, wenn die Iteratoren die Steuerung zum Erzeugen von Daten erhalten. Zum Beispiel liefert das System eine Charge von Ergebnissen in Antwort auf eine bestimmte Abfrage mit einem bestimmten Neustart-Token an eine anfordernde Vorrichtung. Das System stoppt das Verarbeiten der Abfrage, z. B. erfährt das System einen Laufwerksausfall und stürzt ab oder stoppt anderweitig das Verarbeiten der Abfrage. Das System, z. B. ein anderer Computer oder derselbe Computer, empfängt die bestimmte Abfrage und das bestimmte Neustart-Token von der anfordernden Vorrichtung und erzeugt einen Iteratorbaum für die bestimmte Abfrage. Das System verwendet Daten aus dem bestimmten Neustart-Token, um Zustandsinformationen für die Iteratoren in dem Iteratorbaum zu aktualisieren.
  • Wenn ein aktueller Iterator Daten aus seinem Neustartzustand verwendet, kann das System den Iterator dazu veranlassen, dieselben Werte wie vor dem Neustart zu setzen, z. B. beim Erstellen der Zeilen zum Erzeugen zusätzlicher Ergebnischargen. Zum Beispiel kann das Neustart-Token den aktuellen Iterator dazu veranlasse, die gleichen Eingabewerte zu sehen, die der aktuelle Iterator vor dem Neustart gesehen hat.
  • In einigen Beispielen kann ein System von jedem der aktuellen Iteratoren für die letzte Zeile in einer bestimmten Ergebnischarge Variablen empfangen, die einen Zustand des entsprechenden Iterators beschreiben. Die Variablen enthalten möglicherweise keine Daten aus dem Ergebnischarge.
  • Der Zustand für jeden der aktuellen Iteratoren kann weniger als einige wenige Bytes umfassen. Zum Beispiel kann der Zustand für alle aktuellen Iteratoren Dutzende Bytes umfassen, damit das System ein Neustart-Token erstellen kann, das mehrere Dutzend Bytes, z. B. weniger als einhundert Bytes, umfasst.
  • In einigen Implementierungen sind die Daten, auf die das System zugreift, deterministische Daten. Wie in dieser Beschreibung verwendet sind deterministische Daten Daten, die ein System bei Vorgabe einer bestimmten Abfrage in einer bestimmten Reihenfolge bestimmt, so dass das System die gleichen deterministischen Daten in der bestimmten Reihenfolge immer dann bestimmt, wenn das System die bestimmte Abfrage empfängt. Zum Beispiel bestimmt das System bei Vorgabe der bestimmten Abfrage, dass die deterministischen Daten in Antwort auf die bestimmte Abfrage durch einen bestimmten Schlüssel sortiert sind. In einigen Beispielen können die Daten nach einer Zeilennummer, einer Datenkennung oder einem anderen geeigneten Wert sortiert sein. In diesen Implementierungen kann ein Neustart-Token den bestimmten Schlüssel für die letzten Daten, die in einer Ergebnischarge enthalten sind, enthalten. Ein Neustart-Token kann den bestimmten Schlüssel für die nächsten Daten, die in eine neue Ergebnischarge aufgenommen werden sollen, enthalten.
  • In einigen Implementierungen kann ein System deterministische Daten bestimmen, indem es immer die gleichen Abfolgen von Operationen durchführt, um Daten in Antwort auf eine bestimmte Abfrage zu identifizieren, z. B. wenn keine anderen Operationen zum Bestimmen der deterministischen Daten verfügbar sind. In einigen Implementierungen kann ein System deterministische Daten bestimmen, indem es eine Abfolge von Operationen der Reihe nach durchführt, um die deterministischen Daten zu bestimmen.
  • In einigen Beispielen kann das System deterministische Daten in Antwort auf eine bestimmte Abfrage bestimmen, die mehr Daten in Antwort auf die bestimmte Abfrage enthalten, als zuvor identifiziert worden sind, z. B. basierend auf neuen Daten, die zu einer Datenbank hinzugefügt worden sind. Eine Teilmenge der deterministischen Daten, die zuvor identifiziert wurde, wird in der gleichen Reihenfolge wie zuvor identifiziert vorliegen und wird durch das System vor einer anderen Teilmenge der deterministischen Daten, die zuvor nicht identifiziert wurde, identifiziert, z. B. werden die neuen Daten Kennungen sequentiell nach Kennungen für die alten Daten aufweisen.
  • In einigen Implementierungen sind die Daten, auf die das System zugreift, nichtdeterministische Daten. Wie in dieser Beschreibung verwendet sind nichtdeterministische Daten Daten, die ein System bei Vorgabe einer bestimmten Abfrage in einer von mehreren verschiedenen Reihenfolgen bestimmen kann, und zwar in Abhängigkeit von einer Folge von Operationen, z. B. nicht-deterministischen Schritten, die von dem System durchgeführt werden, wenn die nichtdeterministische Bestimmung bestimmt wird. Daten. In einigen Beispielen kann ein System nichtdeterministische Daten bestimmen, wenn eine oder mehrere Operationen parallel ausgeführt werden, um die nicht-deterministischen Daten zu bestimmen. Wenn beispielsweise ein System eine Suchoperation für eine bestimmte Abfrage in Teile, z. B. Unterabfragen, zerlegt, jede Unterabfrage einem bestimmten Computer in einer Gruppe von Computern zuweist und mehrere Computer aus der Gruppe von Computern, die Operationen für ihre entsprechende Unterabfrage durchführen, aufweist, kann das System nichtdeterministische Daten erzeugen.
  • Wenn ein System nichtdeterministische Schritte ausführt, um Ergebnisse in Antwort auf eine Abfrage zu bestimmen, z. B. wenn Ergebnisse nicht durch einen bestimmten Schlüssel sortiert werden, kann das System Verlaufsdaten in einen Neustart-Token aufnehmen. Die Verlaufsdaten können Daten enthalten, die deterministische Schritte repräsentieren, die vorgenommen werden, um die Ergebnisse in Antwort auf die Abfrage zu identifizieren. Das System kann die Verlaufsdaten bei einem Neustart verwenden, um die Schritte zu bestimmen, die vorgenommen worden sind, um die zuvor an eine anfordernde Vorrichtung gelieferten Daten zu identifizieren, um z. B. sicherzustellen, dass nur Daten, die zuvor nicht an die anfordernde Vorrichtung gesendet wurden, bei dem Neustart an die anfordernde Vorrichtung geliefert werden.
  • 2.0 Beispielhafte Arbeitsumgebung
  • 1 ist ein Beispiel einer Umgebung 100, in der ein Abfragesystem 103 Neustart-Token mit Abfrageergebnischargen enthält. Zum Beispiel kann eine Clientvorrichtung 102, z. B. als anfordernde Vorrichtung, in der Umgebung 100 während der Zeitspanne TA eine Abfrage an einen Computer 104 in dem Abfragesystem 103, der Daten anfordert, senden. Als Antwort empfängt die Clientvorrichtung 102 während der Zeitspanne TE eine Antwort, die Teilergebnisse in Antwort auf die Abfrage und ein Neustart-Token 104 enthält, von dem Computer. Die Clientvorrichtung 102 kann später das Neustart-Token verwenden, um zusätzliche Ergebnisse in Antwort auf die Abfrage anzufordern, wenn z. B. die Clientvorrichtung 102 von dem Computer 104 getrennt wird oder auf andere Weise keine zusätzlichen Ergebnisse von dem Computer 104 erhält.
  • Zum Beispiel kann der Computer 104 die Abfrage während der Zeitspanne TA empfangen. Wenn der Computer Chargen von Ergebnissen in Antwort auf die Abfrage bestimmt, ohne Daten von anderen Computern zu empfangen, bestimmt der Computer eine erste Ergebnischarge und ein entsprechendes erstes Neustart-Token für die erste Ergebnischarge. Das erste Neustart-Token kann einen Zustand des Computers 104, z. B. einen oder mehrere Iteratoren auf dem Computer 104, die zum Bestimmen der ersten Ergebnischarge verwendet werden, repräsentieren.
  • Während der Zeitspanne TE liefert der Computer 104 die erste Ergebnischarge und das erste Neustart-Token an die Clientvorrichtung 102. Der Computer 104 kann die erste Ergebnischarge in eine Nachricht mit dem ersten Neustart-Token einbeziehen. Der Computer 104 kann mehrere Datenpakete an die Clientvorrichtung 102 senden, die die Nachricht mit der ersten Ergebnischarge und dem ersten Neustart-Token repräsentieren. Der Computer 104 kann ein einzelnes Datenpaket an die Clientvorrichtung 102 senden, das die Nachricht mit der ersten Ergebnischarge und dem ersten Neustart-Token repräsentiert.
  • Der Computer 104 kann eine Datenbank, z. B. ein Datenspeichersystem oder einen Abschnitt einer Datenbank wie z. B. eine Shard, mit mehreren Ergebnissen in Antwort auf die Abfrage enthalten. Der Computer 104 kann jede geeignete Technologie verwenden, um die Datenbank zu implementieren. Der Computer 104 fragt die Datenbank ab, um Chargen von Ergebnissen in Antwort auf die von der Clientvorrichtung 102 empfangene Abfrage zu bestimmen. Zum Beispiel kann der Computer 104 eine erste Abfrage verwenden, um eine erste Charge von Ergebnissen zu bestimmen, eine zweite Abfrage verwenden, um eine zweite Charge von Ergebnissen zu bestimmen, und so weiter. Der Computer 104 kann die erste Abfrage und die zweite Abfrage als Unterabfragen für die von der Clientvorrichtung 102 empfangene Abfrage erzeugen.
  • Der Computer 104 kann mehrere Chargen von Ergebnissen an die Clientvorrichtung 102 liefern, so dass die Clientvorrichtung 102 mit der Verarbeitung von Daten beginnen kann, die in jeder der Ergebnischargen enthalten sind, wenn die Ergebnisse bestimmt werden. Zum Beispiel kann der Computer 104 Teil eines Suchsystems sein, das Suchergebnisse in Antwort auf eine Abfrage bereitstellt. Der Computer 104 kann Chargen von Ergebnissen, die z. B. spezifisch für eine bestimmte Abfrage sind, an die Clientvorrichtung 102 liefern, um die Clientvorrichtung 102 dazu zu veranlassen, einige der Suchergebnisse in einer Anwenderschnittstelle für Suchergebnisse anzuzeigen, z. B. möglicherweise nach Anreichern der Suchergebnisse mit aus einem anderen System erhaltenen Daten. Die Clientvorrichtung 102 kann eine erste Suchergebnisseite erstellen, wenn die Clientvorrichtung 102 die Chargen von Ergebnissen von dem Computer 104 empfängt. Wenn die Clientvorrichtung 102 eine weitere Gruppe von Ergebnissen empfängt, kann die Clientvorrichtung 102 Inhalt zu der ersten Suchergebnisseite hinzufügen, Ergebnisse aus der anderen Charge von Ergebnissen zur Erzeugung einer zweiten Suchergebnisseite puffern, z. B. ohne dass mehrere Anforderungen an den Computer 104 gesendet werden müssen, oder beides. Die Clientvorrichtung 102 kann Ergebnisse für die zweite Suchergebnisseite puffern, ohne zu bestimmen, wie Daten in der zweiten Suchergebnisseite mit der ersten Suchergebnisseite konsistent gemacht werden sollen, weil die Ergebnisse z. B. in Antwort auf dieselbe Abfrage sind.
  • Wenn der Computer 104 ein primärer Computer ist, der mehreren sekundären Computern 106a–b Unterabfragen zuweist, kann der Computer 104, z. B. als abfragende Vorrichtung, während der Zeitspanne TB jedem der sekundären Computer 106a–b eine Unterabfrage zuweisen. Zum Beispiel kann der Computer 104 mehrere Shards von Daten bestimmen, die Daten in Antwort auf die Abfrage enthalten. Der Computer 104 kann bestimmen, dass jeder der sekundären Computer 106a–b eine der bestimmten Shards speichert. Der Computer 104 bestimmt eine Unterabfrage für jede der jeweiligen Shards und sendet die Unterabfrage an den entsprechenden sekundären Computer 106a–b, z. B. in einer Nachricht.
  • Die sekundären Computer 106a–b führen jeweils eine oder mehrere Operationen durch, während sie die jeweilige Unterabfrage verarbeiten, um eine Charge von Ergebnissen in Antwort auf die Abfrage zu bestimmen. Die sekundären Computer 106a–b bestimmen jeweils einen entsprechenden Zustand des jeweiligen sekundären Computers, der verwendet wird, um die Daten in den Chargen von Daten zu erzeugen, und nehmen Daten für den Zustand in ein jeweiliges Neustart-Token auf. Zum Beispiel kann ein erster sekundärer Computer 106a einen Iterator verwenden, um eine erste Chargen von Daten als Antwort auf die Abfrage zu bestimmen. Der erste sekundäre Computer 106a kann einen Zustand des Iterators als ein Neustart-Token oder einen Teil eines Neustart-Tokens verwenden. Der erste sekundäre Computer 106a kann Zustandsinformationen für eine beliebige geeignete Anzahl von Iteratoren verwenden, um das Neustart-Token zu bestimmen.
  • Während der Zeitspanne TC empfängt der Computer 104 Chargen von Ergebnissen und entsprechende Neustart-Token von den sekundären Computern 106a–b. Zum Beispiel kann der Computer 104 eine Nachricht von jedem der sekundären Computer 106a–b empfangen, die in einem oder mehreren Paketen gesendet werden, die Daten für die Charge von Ergebnissen und Daten für das entsprechende Neustart-Token für den bestimmten sekundären Computer 106a–b enthalten.
  • Der Computer 104 kombiniert während der Zeitspanne TD die Chargen von Ergebnissen und die Neustart-Token. Zum Beispiel kann der Computer 104 Daten, die jede der Chargen von Ergebnissen aus den sekundären Computern 106a–b repräsentieren, verketten. Der Computer 104 kann in dem Speicher einen globalen Iteratorbaum speichern, der die Neustart-Token für die sekundären Computer 106a–b repräsentiert. Jeder der lokalen Iteratorknoten in dem globalen Baum kann ein Neustart-Token für einen der sekundären Computer 106a–b speichern. Der Computer 104 kann den globalen Baum verwenden, um ein globales Neustart-Token für die Chargen von Ergebnissen zu erzeugen, die aktuell auf dem Computer 104 gespeichert sind und nicht an die Client-Vorrichtung 102 gesendet worden sind, z. B. die kombinierten Chargen von Ergebnissen, die von den sekundären Computern 106a–b empfangen worden sind.
  • Der Computer 104 liefert während der Zeitspanne TE die kombinierten Chargen von Ergebnissen und die kombinierten Neustart-Token an die Clientvorrichtung 102. Beispielsweise sendet der Computer 104 eine Nachricht an die Clientvorrichtung 102, die Daten enthält, die die verketteten Chargen von Ergebnissen und Daten für das globale Neustart-Token repräsentieren.
  • In einigen Beispielen kann der Computer 104 ein globales Neustart-Token erzeugen, das Zustandsinformationen für ein oder mehrere Chargen von Ergebnissen enthält, die zuvor an die Clientvorrichtung 102 gesendet worden sind und für die während der Zeitspanne TE keine Daten an die Clientvorrichtung 102 gesendet werden. Zum Beispiel kann der Computer 104 drei sekundären Computern (nicht gezeigt) Unterabfragen zuweisen. Der Computer 104 kann von jedem der drei sekundären Computer entsprechende erste Ergebnischargen und erste Neustart-Token empfangen. Der Computer 104 liefert eine erste globale Ergebnischarge, die die ersten Ergebnischargen von den drei sekundären Computern repräsentiert, und ein erstes globales Neustart-Token, das die ersten Neustart-Token repräsentiert, an die Clientvorrichtung 102, beispielsweise während der Zeitspanne T0. Der Computer 104 empfängt zweite Ergebnischargen von einem ersten Sekundärcomputer und einem zweiten Sekundärcomputer und entsprechende Neustart-Token, z. B. während der Zeitspanne T1 nach der Zeitspanne T0. Der Computer empfängt keinen zweiten Ergebnischarge von dem dritten sekundären Computer, z. B. wurde der dritte sekundäre Computer neu gestartet und arbeitet nicht länger an der Unterabfrage, die zuvor dem dritten sekundären Computer zugewiesen wurde.
  • Der Computer 104 bestimmt, dass der dritte sekundäre Computer keine zweite Ergebnischarge liefern wird und erzeugt unter Verwendung der zwei zweiten Ergebnischargen aus dem ersten und dem zweiten sekundären Computer eine zweite globale Ergebnischarge. Der Computer 104 erzeugt ein zweites globales Neustart-Token unter Verwendung der zweiten Neustart-Token, die von dem ersten und dem zweiten sekundären Computer empfangen werden, und des ersten Neustart-Tokens, das von dem dritten sekundären Computer empfangen wird. Der Computer 104 liefert während der Zeitspanne TE, z. B. nach der Zeitspanne T1, die zweite globale Ergebnischarge und das zweite globale Neustart-Token an die Clientvorrichtung 102, z. B. in einer Nachricht. Der Computer 104 kann bestimmen, dass eine Verbindung mit dem dritten sekundären Computer verloren gegangen ist, z. B. der dritte sekundäre Computer abgestürzt ist oder neu gestartet worden ist. Der Computer 104 kann den dritten sekundären Computer oder einen anderen Computer mit der dritten Unterabfrage, die zuvor dem dritten sekundären Computer zugewiesen wurde, zusammen mit dem ersten Neustart-Token, das von dem dritten sekundären Computer empfangen wurde, versehen.
  • Der Computer 104 liefert weiterhin Ergebnischargen und entsprechende Neustart-Token an die Clientvorrichtung 102, bis keine zusätzlichen Daten in Antwort auf die Abfrage bestimmt werden. Der Computer 104 kann in einer endgültigen Ergebnischarge, die an die Clientvorrichtung 102 gesendet wird, Daten aufnehmen, die angeben, dass kein Neustart-Token in der endgültigen Ergebnischarge enthalten ist, z. B. dass keine zusätzlichen Daten von der Clientvorrichtung 102 für die Abfrage empfangen werden werden.
  • In einigen Beispielen kann der Computer 104 Ergebnischargen und entsprechende Neustart-Token an die Clientvorrichtung 102 liefern, bis der Computer 104 eine Stopp-Anforderung von der Client-Vorrichtung 102 empfängt, die angibt, dass der Computer 104 keine Ergebnischargen mehr an die Clientvorrichtung 102 senden soll. In einigen Implementierungen kann der Computer 104 Ergebnischargen und entsprechende Neustart-Token an die Client-Vorrichtung 102 liefern, bis eine vorbestimmte Zeitspanne nach dem Empfang der Abfrage verstrichen ist, bis eine vorbestimmte Anzahl von Ergebnischargen an die Clientvorrichtung 102 geliefert worden ist oder bis eine andere geeignete Stoppbedingung erfüllt ist.
  • Wenn die Clientvorrichtung 102 keine Ergebnischargen mehr von dem Computer 104 empfängt, und zwar z. B. basierend auf der Stoppbedingung oder dann, wenn eine Verbindung zwischen der Clientvorrichtung 102 und dem Computer 104 getrennt wird, kann die Clientvorrichtung 102 ein jüngstes empfangenes Neustart-Token und die ursprüngliche Abfrage verwenden, um zusätzliche Ergebnischargen von dem Computer 104 anzufordern, so dass z. B. die Clientvorrichtung 102 keine Ergebnischargen von dem Computer 104 empfängt, die die Clientvorrichtung 102 bereits empfangen hat.
  • Die Zeitspannen TA, TB, TC, TD und TE können irgendeine geeignete Länge aufweisen. In einigen Beispielen können sich eine oder mehrere der Zeitspannen TA, TB, TC, TD und TE überlappen. Beispielsweise kann der Computer 104 die Neustart-Token kombinieren und eine globale Ergebnischarge und ein entsprechendes globales Neustart-Token z. B. während der Zeitspannen TD und TE bereitstellen, während weiterhin Ergebnischargen und entsprechende Neustart-Token von den sekundären Computern 106a–b empfangen werden, z. B. während der Zeitspanne TC.
  • In einigen Implementierungen kann eine bestimmte globale Ergebnischarge mehrere Ergebnischargen von einem einzelnen sekundären Computer 106a–b enthalten. Zum Beispiel kann der Computer 104 eine globale Ergebnischarge mit zwei Ergebnischargen von einem ersten sekundären Computer 106a und einem Ergebnischarge von einem zweiten sekundären Computer 106b erstellen.
  • Die Clientvorrichtung 102 kann irgendeine geeignete Vorrichtung sein. Zum Beispiel kann die Clientvorrichtung 102 einen Personalcomputer, eine mobile Kommunikationsvorrichtung oder eine andere Vorrichtung, die Daten über ein Netz 108 senden und empfangen kann, umfassen. Das Netz 108, beispielsweise ein lokales Netz (LAN), ein Weitbereichsnetz (WAN), das Internet oder eine Kombination davon, verbindet die Clientvorrichtung 102 und die Computer in dem Abfragesystem 103. Das Netz 108 oder ein anderes Netz kann den Computer 104 und die sekundären Computer 106a–b in dem Abfragesystem 103 verbinden. Obwohl ein einzelner Computer 104 beschrieben ist, können in einigen Implementierungen der Umgebung 100 ein einzelner Computer 104 oder mehrere Computer 104 verwendet werden, die miteinander zusammenarbeiten, einschließlich beispielsweise eines Satzes von entfernten Computern, die als Cloud-Rechendienst eingesetzt werden.
  • Der Computer 104 und die sekundären Computer 106a–b können jeweils physische Computer oder virtuelle Computer, die auf physischen Computern ausgeführt werden, sein. Zum Beispiel kann der Computer 104 eine erste virtuelle Maschine sein, die auf einem physischen Computer ausgeführt wird, ein erster sekundärer Computer 106a kann eine zweite virtuelle Maschine sein, die auf einem physischen Computer ausgeführt wird, und ein zweiter sekundärer Computer 106b kann eine dritte virtuelle Maschine sein, die auf einem physischen Computer ausgeführt wird. Eine oder mehrere der virtuellen Maschinen können auf demselben physischen Computer ausgeführt werden. Die Computer 104 und 106a–b können eine beliebige geeignete Kombination von physischen Computern und Software, die auf physischen Computern ausgeführt wird, sein.
  • In einigen Implementierungen können einer oder mehrere der Computer 104 und 106a–b ein Container, der auf einem Betriebssystem ausgeführt wird, sein. Zum Beispiel kann ein erster sekundärer Computer 106a ein erster Container sein, der auf eine erste Shard von in dem Speicher der zugrundeliegenden physischen Hardware gespeicherten Daten zugreift, und ein zweiter sekundärer Computer 106b kann ein zweiter Container sein, der auf eine zweite Shard von in dem Speicher der zugrundeliegenden physischen Hardware gespeicherten Daten zugreift. Der erste Container und der zweite Container können auf derselben Betriebssysteminstanz ausgeführt werden, auf demselben physischen Computer ausgeführt werden oder beides. In einigen Beispielen können der erste Container und der zweite Container auf verschiedenen Betriebssysteminstanzen, z. B. vom gleichen Betriebssystemtyp oder von unterschiedlichen Betriebssystemtypen, ausgeführt werden, auf verschiedenen physischen Computern ausgeführt werden oder beides.
  • 3.0 Beispielhafter Prozessablauf
  • 2 ist ein Ablaufdiagramm eines Prozesses 200 zum Erzeugen einer Nachricht, die eine Ergebnischarge und ein Neustart-Token in Antwort auf eine Abfrage enthält. Zum Beispiel kann der Prozess 200 von dem Computer 104 oder einem der sekundären Computer 106a–b aus der Umgebung 100 verwendet werden.
  • Ein Computer empfängt eine bestimmte Abfrage (202). Zum Beispiel kann der Computer die bestimmte Abfrage von einer anfordernden Vorrichtung empfangen. Die anfordernde Vorrichtung kann ein primärer Computer sein, wenn der Computer ein sekundärer Computer, eine Clientvorrichtung oder eine andere geeignete Vorrichtung ist. Die bestimmte Abfrage kann eine anfängliche Abfrage sein, die z. B. von einer Clientvorrichtung empfangen wird, oder eine Unterabfrage sein, die z. B. von einem anderen Computer empfangen wird.
  • Der Computer bestimmt unter Verwendung eines Datenspeichersystems eine aktuelle Charge von Ergebnissen in Antwort auf die bestimmte Abfrage (204). Der Computer kann Daten aus den auf dem Computer enthaltenen Shards verwenden, z. B. den Shards, die zu dem Computer gehören, um die Ergebnisse in Antwort auf die bestimmte Abfrage zu bestimmen. Zum Beispiel kann der Computer eine Datenbank enthalten, die Daten speichert, die Daten in Antwort auf die bestimmte Abfrage umfassen. Der Computer kann auf die Datenbank zugreifen, um die aktuelle Charge von Ergebnissen zu bestimmen.
  • Der Computer bestimmt, ob die aktuelle Charge von Ergebnissen in Antwort auf die Abfrage deterministische Daten enthält (206). Der Computer kann bestimmen, ob ein bestimmter Schlüssel zum Sortieren der Daten verwendet wird, ob mehrere Computer gleichzeitig Unterabfragen verarbeiten, die Suchoperatoren für die Abfrage identifizieren, z. B. wenn jede der Unterabfragen für eine Shard zuständig ist, ob mehrere nichtdeterministische Schritte durchgeführt werden, um die Daten zu sortieren, oder eine Kombination aus zwei oder mehr davon. Wenn der Computer bestimmt, dass ein bestimmter Schlüssel zum Sortieren der Daten verwendet wird, kann der Computer bestimmen, dass die aktuelle Charge von Ergebnissen deterministische Daten enthält. Wenn der Computer bestimmt, dass kein bestimmter Schlüssel zum Sortieren der Daten verwendet wird, kann der Computer bestimmt, dass die aktuelle Charge von Ergebnissen keine deterministischen Daten enthält.
  • Als Antwort auf das Bestimmen, dass die aktuelle Charge von Ergebnissen in Antwort auf die Abfrage keine deterministischen Daten enthält, erzeugt der Computer ein Neustart-Token, das Operationen repräsentiert, die zum Bestimmen mehrerer Chargen von Ergebnissen in Antwort auf die bestimmte Abfrage einschließlich der aktuellen Charge von Ergebnissen durchgeführt werden (208). Zum Beispiel bestimmt der Computer Zustandsinformationen, die die Schritte repräsentieren, die von dem Computer ausgeführt werden, um die aktuelle Charge von Ergebnissen zu erzeugen. Die Zustandsinformationen ermöglichen es dem Computer oder einem anderen Computer, den Prozess zu wiederholen, z. B. eine Folge von ausgeführten Operationen, die verwendet werden, um die aktuelle Charge von Ergebnissen so zu erzeugen, dass z. B. keines der Ergebnisse in der aktuellen Charge von Ergebnissen in einer anderen Charge von Ergebnissen an eine anfordernde Vorrichtung geliefert wird. Wenn beispielsweise der Computer die Zustandsinformationen nicht erhalten hat, kann der Computer Ergebnisse aus der aktuellen Charge von Ergebnissen an die anfordernde Vorrichtung liefern, z. B. kann die anfordernde Vorrichtung einige Ergebnisse mehrere Male empfangen. Vorausgesetzt, dass die Daten nicht deterministisch sind und abhängig von einer Folge von Operationen, die zum Bestimmen der Daten durchgeführt werden, in verschiedenen Reihenfolgen bestimmt werden können, kann der Computer die Zustandsinformationen verwenden, um sicherzustellen, dass die Folge von Operationen in der gleichen Reihenfolge durchgeführt wird. In einigen Beispielen kann der Computer das Neustart-Token unter Verwendung der aktuellen Charge von Ergebnissen erzeugen, z. B. zusätzlich zu den Zustandsinformationen.
  • Der Computer bezieht möglicherweise keine Ergebnisse in die Zustandsinformation ein, z. B. um sicherzustellen, dass eine Größe des Neustart-Tokens unter einer maximalen Schwellengröße liegt. Der Computer speichert die Zustandsinformationen möglicherweise nicht, z. B. in einem dauerhaften Speicher, um Speicheranforderungen zu reduzieren, wenn der Computer z. B. Zustandsinformationen für mehrere Abfragen speichern müsste, damit die anfordernde Vorrichtung eine Abfrage mit einem anderen Computer neu starten kann, z. B. unter Verwendung des Neustart-Tokens, oder beides.
  • Als Antwort auf das Bestimmen, dass die aktuelle Charge von Ergebnissen in Antwort auf die Abfrage deterministische Daten enthält, erzeugt der Computer ein Neustart-Token, das einen Zustand für die aktuelle Charge von Ergebnissen repräsentiert (210). Der Zustand kann ein Zustand des Computers sein, nachdem der aktuelle Satz von Ergebnissen bestimmt worden ist. Der Computer oder ein anderer Computer kann den Zustand verwenden, um zu bestimmen, welche Ergebnisse an eine anfordernde Vorrichtung geliefert worden sind, welche Ergebnisse als Nächstes an eine anfordernde Vorrichtung gesendet werden sollen, oder beides.
  • Der Computer stellt eine Nachricht bereit, die erste Daten für das Neustart-Token und zweite Daten für die aktuelle Charge von Ergebnissen enthält (212). Der Computer kann die Nachricht erzeugen, die die ersten Daten für das Neustart-Token und die zweiten Daten für die aktuelle Charge von Ergebnissen enthält. Der Computer liefert die Nachricht unter Verwendung eines Netzes an die anfordernde Vorrichtung, von der der Computer die Abfrage erhalten hat. Der Computer kann die Nachricht unter Verwendung eines geeigneten Verfahrens bereitstellen, z. B. als ein oder mehrere Pakete, liefern.
  • Der Computer empfängt die bestimmte Abfrage und das Neustart-Token, das Operationen repräsentiert, die durchgeführt werden, um die mehreren Chargen von Ergebnissen zu bestimmen (214). Wenn der Computer beispielsweise von der anfordernden Vorrichtung getrennt wird, kann die anfordernde Vorrichtung bestimmen, dass die Verbindung unterbrochen ist und keine zusätzlichen Ergebnischargen von dem Computer empfangen worden sind. Als Antwort darauf empfängt der Computer die bestimmte Abfrage und das Neustart-Token von der anfordernden Vorrichtung.
  • Der Computer bestimmt die mehreren Chargen von Ergebnissen unter Verwendung der bestimmten Abfrage und des Neustart-Tokens (216). Zum Beispiel verwendet der Computer unabhängig davon, ob die Ergebnischargen deterministische Daten oder nichtdeterministische Daten enthalten oder nicht, die bestimmte Abfrage und das Neustart-Token, um einen Zustand des Computers zu einem Zeitpunkt neu zu erstellen, zu dem der Computer die letzte Zeile von Ergebnissen an die anfordernde Vorrichtung geliefert hat, und zwar z. B. so, dass der Computer keine Ergebnisse an die anfordernde Vorrichtung liefert, die die anfordernde Vorrichtung bereits empfangen hat.
  • Der Computer bestimmt unter Verwendung des Datenspeichersystems eine neue Charge von Ergebnissen in Antwort auf die bestimmte Abfrage, die keine Ergebnisse aus den mehreren Chargen von Ergebnissen enthält (218). Zum Beispiel greift der Computer auf die Datenbank zu, um die neue Charge von Ergebnissen zu bestimmen. Die Ergebnisse in der neuen Charge von Ergebnissen enthalten keine Ergebnisse, die zuvor von der anfordernden Vorrichtung für die bestimmte Abfrage erhalten worden sind.
  • In einigen Beispielen kann die Datenbank andere Daten aufweisen als jene, die vorher auf dem Computer gespeichert worden sind. Wenn der Computer beispielsweise eine Shard von Daten enthält und die Shard später aufgeteilt wird, z. B. während der Zeit, während der der Computer von der anfordernden Vorrichtung getrennt war, bestimmt der Computer Daten, die in dem verbleibenden Teil der Shard enthalten sind, die eine Antwort auf die Abfrage darstellen. Der Computer sendet die bestimmten Daten als eine Charge von Ergebnissen mit einem entsprechenden Neustart-Token an die anfordernde Vorrichtung.
  • In einigen Implementierungen kann der Computer dann, wenn eine Shardaufteilung auftritt, unter Verwendung der bestimmten Abfrage und des Neustart-Tokens bestimmen, dass alle Daten in Antwort auf die bestimmte Abfrage, die in dem Computer gespeichert sind, an die anfordernde Vorrichtung gesendet worden sind. Der Computer kann eine Nachricht erstellen, die angibt, dass alle Antwortdaten an die anfordernde Vorrichtung geliefert worden sind. Die Nachricht kann eine Angabe der auf dem Computer gespeicherten Daten enthalten. Die Nachricht kann eine Angabe enthalten, dass eine Shardaufteilung aufgetreten ist.
  • Der Computer bestimmt ein neues Neustart-Token, das die Operationen repräsentiert, die durchgeführt werden, um die neue Charge von Ergebnissen und die mehreren Chargen von Ergebnissen zu bestimmen (220). Zum Beispiel kann der Computer bestimmen, ob die Daten deterministisch bestimmt worden sind oder nicht, also z. B. Schritt 206 durchführen. Als Antwort darauf nimmt der Computer die geeigneten Daten in das neue Neustart-Token auf. Der Computer kann die neue Charge von Ergebnissen verwenden, um das neue Neustart-Token zu bestimmen.
  • Der Computer stellt eine zweite Nachricht bereit, die dritte Daten für das neue Neustart-Token und vierte Daten für die neue Charge von Ergebnissen enthält (222). Der Computer kann die zweite Nachricht unter Verwendung des neuen Neustart-Tokens und der neuen Charge von Ergebnissen erstellen. Der Computer liefert die zweite Nachricht an die anfordernde Vorrichtung.
  • Die Reihenfolge der Schritte in dem Prozess 200, die oben beschrieben ist, ist lediglich veranschaulichend und das Erzeugen der Nachricht, die die Ergebnischarge in Antwort auf eine Abfrage und das Neustart-Token enthält, kann in verschiedenen Reihenfolgen durchgeführt werden. Zum Beispiel kann der Computer bestimmen, ob Ergebnisse deterministisch oder nichtdeterministisch bestimmt werden, und dann eine aktuelle Charge von Ergebnissen bestimmen. In einigen Beispielen kann der Computer bestimmen, ob Ergebnisse deterministisch oder nichtdeterministisch bestimmt werden, und gleichzeitig eine aktuelle Charge von Ergebnissen bestimmen.
  • In einigen Implementierungen kann der Prozess 200 zusätzliche Schritte oder weniger Schritte enthalten oder einige der Schritte können in mehrere Schritte unterteilt sein. Zum Beispiel kann der Computer die Schritte 202 bis 212 ausführen, ohne einen oder mehrere der Schritte 214 bis 222 auszuführen. In einigen Beispielen kann der Computer die Schritte 202 bis 204 und die Schritte 210 bis 212 ausführen.
  • 4.0 Optionale Implementierungsdetails
  • In einigen Implementierungen kann ein System ein Neustart-Token erzeugen, das keine merklichen Auswirkungen auf Netzkosten, Prozessorkosten oder beides hat. Das System kann ein Neustart-Token beliebiger Größe erzeugen. Das System kann ein Neustart-Token mit einer Größe von Tausenden von Bytes, z. B. weniger als zehntausend Bytes, vorzugsweise Hunderten von Bytes, z. B. weniger als tausend Bytes, bevorzugter mehreren Dutzend Bytes, z. B. weniger als einhundert Bytes, erzeugen. Wenn das System zum Beispiel Zustandsinformationen von jedem aktuellen Iterator empfängt, die weniger als ein paar Bytes enthalten, kann die Gesamtgröße eines Neustart-Tokens weniger als dreihundert Bytes, vorzugsweise weniger als ein Megabyte, betragen.
  • Ein System kann die Größe eines Neustart-Tokens steuern. Zum Beispiel kann die Größe eines Neustart-Tokens auf einer Abfragekomplexität, einem Grad an Parallelität beim Verarbeiten einer Abfrage, z. B. wenn jede Unterabfrage, die parallel ausgeführt wird, möglicherweise einen separaten Neustartzustand benötigt, oder beidem basieren. Das System kann die Abfragekomplexität, den Grad an Parallelität oder beides anpassen, um die Größe eines Neustart-Tokens anzupassen, z. B. um die Größe des Neustart-Tokens unter einer Schwellengröße zu halten. Zum Beispiel kann das System eine Größe eines Iteratorbaums, der einen Laufzeitabfrageplan repräsentiert, eine Form des Iteratorbaums, die z. B. den Grad an Parallelität bei der Verarbeitung der Abfrage repräsentiert, oder beides verwenden, um eine Größe eines entsprechenden Neustart-Tokens zu bestimmen. Das System kann die Größe des Iteratorbaums, die Form des Iteratorbaums oder beides anpassen, um eine Größe eines entsprechenden Neustart-Tokens anzupassen. In einigen Beispielen kann das System Daten für einen Laufzeitabfrageplan, der durch einen Iteratorbaum repräsentiert ist, als Teil eines Neustart-Tokens aufnehmen, z. B. wenn Antwortdaten nicht deterministisch bestimmt werden. In einigen Beispielen nimmt das System keine Daten für einen Laufzeitabfrageplan, der durch einen Iteratorbaum repräsentiert ist, als Teil eines Neustarttokens auf, z. B. wenn die Antwortdaten deterministisch bestimmt werden.
  • In einigen Implementierungen kann ein System eine parallele Verarbeitung ermöglichen, wenn eine Reihenfolge, in der Ergebnisse erzeugt werden, nicht wichtig ist. Zum Beispiel kann das System bestimmen, eine Unterabfrage für verschiedene Operationen zu erzeugen, die verwendet werden, um Ergebnisse für eine Abfrage zu erzeugen, wenn die anfordernde Vorrichtung, die die Abfrage an das System geliefert hat, angibt, dass die Reihenfolge, in der die Ergebnisse an die anfordernde Vorrichtung geliefert werden, nicht wichtig ist, oder das System anderweitig bestimmt, dass die Reihenfolge keine Rolle spielt. Das System kann Unterabfragen für verschiedene Operationen verschiedenen Iteratoren zuweisen. Jeder der Iteratoren erzeugt parallel Ergebnisse für eine entsprechende Unterabfrage.
  • Wenn mehrere Computer Operationen durchführen, um Ergebnischargen in Antwort auf eine Abfrage zu bestimmen, kann ein primärer Computer, z. B. der Computer 104, einen globalen Iteratorbaum, z. B. einen Laufzeitabfrageplan, erzeugen, der Zustandsinformationen von jedem der mehreren Computer enthält. Zum Beispiel kann der primäre Computer jedem der mehreren Computer als Knoten für den globalen Iteratorbaum einen Teil einer verteilten Abfrage zuweisen, für den der Computer arbeiten wird. Zum Beispiel verarbeitet der Knoten Daten aus einer Shard von Eingangsdaten. Der primäre Computer kann einen bestimmten lokalen Iterator verwenden, um eine Unterabfrage der Abfrage entfernt auf einem der Computer, z. B. Knoten, aufzurufen. Der primäre Computer kann Unterabfrageergebnisse einschließlich eines entsprechenden Neustart-Tokens von dem einen der Computer empfangen und die Ergebnisse an einen lokalen Iterator liefern. Der lokale Iterator kann Teil eines globalen Iteratorbaums sein, der auf dem primären Computer gespeichert ist und in dem jeder lokale Iterator einem der Computer entspricht, dem ein Teil der verteilten Abfrage zugewiesen ist. Der primäre Computer verwendet den lokalen Iterator, um die globale Struktur mithilfe der Ergebnisse und des enthaltenen Neustart-Tokens zu aktualisieren.
  • Der primäre Computer kann ein globales Neustart-Token unter Verwendung des globalen Iteratorbaums erzeugen. Zum Beispiel empfängt der primäre Computer mehrere Unterabfrage-Ergebnischargen jeweils von einem der Computer, der eine Unterabfrage verarbeitet und einen der Iteratorknoten in dem globalen Iteratorbaum repräsentiert. Jede der Unterabfrageergebnis-Chargen enthält ein entsprechendes Neustart-Token. Der primäre Computer kann die Neustart-Token an entsprechende lokale Iteratoren in dem globalen Iteratorbaum liefern, um die lokalen Iteratoren dazu zu veranlassen, den globalen Iteratorbaum zu aktualisieren. Der primäre Computer verwendet die Unterabfrage-Ergebnisse, die nicht an eine anfordernde Vorrichtung, von dem der primäre Computer die ursprüngliche Abfrage erhalten hat, geliefert worden sind, um eine aktuelle Ergebnischarge zu erzeugen. Der primäre Computer verwendet die lokalen Iteratoren für die Unterabfrage-Ergebnisse, die in der aktuellen Ergebnischarge enthalten sind, um ein aktuelles Neustart-Token zu erzeugen. Der primäre Computer sendet die aktuelle Ergebnischarge und das aktuelle Neustart-Token an die anfordernde Vorrichtung.
  • In einigen Beispielen kann der primäre Computer dynamisch eine Anzahl lokaler Iteratoren, die in einem globalen Iteratorbaum enthalten sind, und eine entsprechende Anzahl von sekundären Computern, die Operationen für eine Abfrage durchführen, unter Verwendung einer Anzahl von Shards von Eingabedaten dynamisch anpassen. Zum Beispiel kann der primäre Computer die Anzahl von lokalen Iteratoren unter Verwendung einer Anzahl von Computern, die Arbeit für die verteilte Abfrage ausführen, anpassen, wobei z. B. jeder Computer eine Shard der Eingangsdaten enthält. Wenn die Shards, in denen Daten für eine Abfrage gespeichert sind, sich ändern, z. B. kombiniert oder aufgeteilt werden, aktualisiert der primäre Computer die lokalen Iteratoren, um die Änderung in den Shards zu repräsentieren. Der primäre Computer kann ein Neustart-Token erzeugen, das Zustandsinformationen für jede Shard enthält, z. B. kann ein relevanter Teil des Satzes von Shards in ein Neustart-Token für eine bestimmte Ergebnischarge importiert werden, so dass die Iteratoren bei einem Neustart genau dieselben Daten empfangen, die die Iteratoren vor dem Neustart gesehen haben.
  • Wenn ein System während der Abfrageverarbeitung dynamisch ändert, wie Datenpartitionen in Shards auf mehreren Computern gruppiert werden, kann das System mehrere Stufen verwenden, um ein Neustart-Token zu erzeugen. Zum Beispiel kann das System einen Satz von Shards zu einem Zeitpunkt fixieren, zu dem der Computer die Steuerung über eine Verarbeitung für eine Abfrage erhält. Wenn das System bestimmt, dass eine Shard aufgeteilt worden ist, nachdem das System einem bestimmten Computer, der zuvor die Shard gehostet hat, eine Unterabfrage zugewiesen hat, stellt das System sicher, dass der bestimmte Computer die Daten in dem verbleibenden Abschnitt der Shard verarbeitet, um den jeweiligen Computer dazu zu veranlassen. einen Neustartzustand zu erzeugen, der nur für den verbleibenden Abschnitt des Shards spezifisch ist und nicht für Daten, die zuvor vor dem Aufteilen in der Shard enthalten waren.
  • Zum Beispiel kann ein primärer Computer damit beginnen, eine dynamische Erzeugung von Shards zu ignorieren und den Satz von Shards zu dem Zeitpunkt zu fixieren, zu dem der primäre Computer die Steuerung über die Abfrage erhält. Der primäre Computer kann die Shards setzen, indem er einen globalen Iteratorbaum für die Shards erzeugt, z. B. in dem ein Iteratorknoten in dem globalen Iteratorbaum einer jeweiligen der Shards entspricht. Der primäre Computer weist für jeden Iteratorknoten in dem globalen Iteratorbaum einem sekundären Computer entsprechende Operationen zu. Da die sekundären Computer in dem System entsprechende Unterabfragen verarbeiten, kann das System, z. B. der primäre Computer, die Shard-Zuweisung zu verschiedenen sekundären Computern in dem System dynamisch ändern, z. B. da der Satz von Shards veraltet werden kann, wenn die Abfrageverarbeitung fortschreitet.
  • Wenn eine logische Shard, die in dem Satz von Shards enthalten ist, aufgeteilt wird, nachdem der primäre Computer dem sekundären Computer, der den logischen Shard hostet, eine Unterabfrage zugewiesen hat, kann das System den sekundären Computer so einschränken, dass er durch logische Partitionen von zugrundeliegenden Eingangsdaten iteriert, wenn er z. B. Operatoren für die Unterabfrage ausführt, so dass die Lesevorgänge von physischen Daten auf dem sekundären Computer niemals zwischen Datensätzen hin und her springen, die auf verschiedene Shards, Computer, z. B. Knoten, oder beides aufgeteilt sein könnten.
  • Wenn ein primärer Computer eine unterbrochene Verbindung mit einem Computer detektiert, kann der primäre Computer ein aktuelles Neustart-Token verwendet, damit der Computer oder ein anderer Computer, der dieselbe Shard hostet, die Arbeit an einer Unterabfrage fortsetzt, die dem Computer zuvor zugewiesen worden ist. Wenn eine anfordernde Vorrichtung eine unterbrochene Verbindung mit einem primären Computer detektiert, kann die anfordernde Vorrichtung ein aktuelles globales Neustart-Token verwenden, um den primären Computer oder einen anderen primären Computer dazu zu veranlassen, mit der Bearbeitung einer Abfrage fortzufahren.
  • In einigen Implementierungen kann ein primärer Computer Shards in eine geeignete Anzahl von Shard-Gruppen gruppieren und ermöglichen, dass eine Unterabfrageverarbeitung unter den Shard-Gruppen parallel abläuft. Zum Beispiel kann der primäre Computer von jeder der Shard-Gruppen entsprechende Zustandsinformationen empfangen, die die für die Shards in der entsprechenden Shard-Gruppe erzeugten Ergebnisse repräsentieren. Der primäre Computer kombiniert die Zustandsinformationen aus den Shard-Gruppen, um ein globales Neustart-Token zu erstellen. Der primäre Computer kann die Anzahl der Shard-Gruppen basierend auf einer maximalen Neustart-Token-Größe auswählen. In einigen Beispielen kann der primäre Computer zwischen drei und zwanzig Shard-Gruppen erstellen. In einigen Beispielen kann der primäre Computer zwischen fünf und zwölf Shard-Gruppen erstellen. Der primäre Computer kann eine beliebige geeignete Anzahl als Gesamtanzahl von Shard-Gruppen verwenden. Der primäre Computer kann die Anzahl der Shard-Gruppen unter Verwendung einer maximalen Neustart-Token-Größe, einer maximalen Nachrichtengröße oder von beidem bestimmen.
  • Das System kann Computer, die die Shards in einer Shard-Gruppe hosten, dazu veranlassen, Unterabfrageergebnisse sequentiell zu verarbeiten. Zum Beispiel kann der primäre Computer Shards nur einer Shard-Gruppe zuweisen, die zusammen einen zusammenhängenden Datensatz bildet. Der primäre Computer kann einen ersten Computer auswählen, der eine erste Shard in einer Shard-Gruppe hostet, und an den ersten Computer eine erste Unterabfrage senden, z. B. für die erste Shard. Während der erste Computer die erste Unterabfrage verarbeitet, empfängt der primäre Computer Chargen von Ergebnissen und entsprechende Neustart-Tokens mit jeder der Chargen von Ergebnissen von dem ersten Computer. Der primäre Computer empfängt auch Daten von anderen Computern für andere Shard-Gruppen.
  • Wenn der primäre Computer bestimmt, dass der erste Computer die erste Unterabfrage verarbeitet hat, wählt der primäre Computer einen zweiten Computer aus, der eine zweite Shard in der Shard-Gruppe hostet. Die zweite Shard kommt sequentiell ohne irgendwelche dazwischenliegende Shards nach der ersten Shard. Der primäre Computer sendet eine zweite Unterabfrage an den zweiten Computer und empfängt als Antwort darauf Chargen von Ergebnissen mit entsprechenden Neustart-Token von dem zweiten Computer.
  • Der primäre Computer verwendet das Neustart-Token für eine aktuelle Shard in einer Shard-Gruppe als Neustart-Token für die Shard-Gruppe. Wenn der erste Computer beispielsweise die erste Unterabfrage verarbeitet, verwendet der primäre Computer ein erstes Neustart-Token von dem ersten Computer als Neustart-Token für die Shard-Gruppe, zu der der erste Computer gehört. Wenn der zweite Computer die zweite Unterabfrage verarbeitet, nachdem der erste Computer die erste Unterabfrage verarbeitet hat, verwendet der primäre Computer ein zweites Neustart-Token von dem zweiten Computer als Neustart-Token für die Shard-Gruppe, zu der der erste Computer und der zweite Computer gehören.
  • In einigen Implementierungen kann ein System dann, wenn das System einen Neustartzustand in einer Reihenfolge erzeugt, in der Iteratoren Operationen durchgeführt haben, einen minimalen Satz von Iteratoren verwenden, um einen Neustartzustand zu erzeugen. In einigen Implementierungen leitet das System dann, wenn das System die Iteratoren Zustandsinformationen in derselben Reihenfolge erzeugen lässt, in der die Iteratoren Daten für eine bestimmte Ergebnischarge erzeugt haben, möglicherweise keinen Aufruf zum Erzeugen eines Neustartzustands an einen Unterbaum des Iteratorbaums weiter, der nicht an einer Berechnung von Werten in einer letzten Zeile für die bestimmte Ergebnischarge beteiligt war. In einigen Implementierungen fordert ein primärer Computer möglicherweise keine Iteratorzustandsinformationen von einem Computer an, der eine Unterabfrage verarbeitet, und kann stattdessen ein aktuelles Neustart-Token verwenden, das von dem Computer mit einer letzten Charge von Ergebnissen empfangen wurde.
  • In einigen Implementierungen kann ein primärer Computer, der in dem System enthalten ist, dann wenn ein System veranlasst, dass ein sekundärer Computer durch logische Partitionen von Daten nach einer Aufteilung einer zuvor auf dem sekundären Computer gehosteten Shard in Reihenfolge iteriert, in der Lage sein, jeder Zeile, die der primäre Computer von dem sekundären Computer erhält, einen logische Partitionsschlüssel zuzuordnen. Der primäre Computer kann den logischen Partitionsschlüssel in einem globalen Neustart-Token speichern, um ihn später während des Neustarts zu verwenden. Das System kann den logischen Partitionsschlüssel verwenden, um einen Neustart ermöglichen, wenn sich die Shard-Grenzen seit der Erzeugung des Neustart-Tokens geändert haben.
  • In einigen Implementierungen kann ein Computer eine bestimmte Abfrage empfangen, die eine Stoppbedingung enthält. Zum Beispiel kann die Stoppbedingung spezifizieren, dass der Computer eine bestimmte Anzahl von Ergebnissen, eine bestimmte Anzahl von Chargen von Ergebnissen oder für eine bestimmte Zeitspanne Chargen von Ergebnissen an eine anfordernde Vorrichtung senden soll. Der Computer sendet Charge von Ergebnissen an die anfordernde Vorrichtung, bis die Stoppbedingung erfüllt ist.
  • Der Computer kann später die bestimmte Abfrage mit einem Neustart-Token für die letzte an die anfordernde Vorrichtung gesendete Charge von Ergebnissen empfangen. Als Antwort darauf liefert der Computer zusätzliche Chargen von Ergebnissen an die anfordernde Vorrichtung, z. B. bis eine zweite Stoppbedingung erfüllt ist oder keine an die anfordernde Vorrichtung zu sendenden Ergebnisse mehr vorhanden sind.
  • In einigen Implementierungen kann ein System mehrere verschiedene Typen von Neustart-Token verwenden. Wenn ein System beispielsweise die Verarbeitung der Eingabe nicht begonnen hat, kann das System das Neustart-Token beispielsweise leer lassen und Speicherplatz für das Neustart-Token in einem Speicher reservieren. Das System kann in einem flüchtigen Speicher Speicherplatz für das Neustart-Token zuteilen, z. B. ohne Speicherplatz in einem nichtflüchtigen Speicher für das Neustart-Token zuzuteilen oder zu verwenden. Wenn das System Chargen von Ergebnissen verarbeitet und immer noch mehr an eine anfordernde Vorrichtung zu sendende Ergebnisse aufweist, kann das System Daten, die einen Zustand der Verarbeitung einer Abfrage repräsentieren, als das Neustart-Token verwenden. Das System speichert den Zustand als Daten für das Neustart-Token an dem zugeteilten Platz in dem flüchtigen Speicher. Wenn das System die Verarbeitung der Eingabe abgeschlossen hat und eine letzte Charge von Ergebnissen in Antwort auf eine Abfrage bestimmt, kann das System eine Variable, die z. B. unendlich oder eine kompakte Darstellung von unendlich repräsentiert, als Neustart-Token verwenden.
  • Die anfordernde Vorrichtung kann das Neustart-Token verwenden, um einen Status der Abfrage zu bestimmen. Zum Beispiel kann die anfordernde Vorrichtung das Neustart-Token analysieren, um zu bestimmen, ob es zusätzliche Ergebnisse oder Chargen von Ergebnissen gibt, die die anfordernde Vorrichtung empfangen wird. Wenn die anfordernde Vorrichtung unter Verwendung des Neustart-Tokens bestimmt, dass keine zusätzlichen Ergebnisse oder Chargen von Ergebnissen vorhanden sind, kann die anfordernde Vorrichtung die von dem Computer empfangene Charge von Ergebnissen verwenden, anhalten, um auf weitere Chargen von Ergebnissen zu warten, oder beides.
  • Wenn die anfordernde Vorrichtung unter Verwendung des Neustart-Tokens bestimmt, dass es zusätzliche Chargen von Ergebnissen gibt, kann die anfordernde Vorrichtung die aktuell empfangenen Chargen von Ergebnissen verwenden, bestimmen, ob innerhalb einer vorbestimmten Zeitspanne keine Charge von Ergebnissen empfangen worden ist, oder beides. Zum Beispiel kann die anfordernde Vorrichtung eine Präsentation von Daten veranlassen, die in einigen der Chargen von Ergebnissen enthalten sind.
  • Wenn die anfordernde Vorrichtung bestimmt, dass innerhalb der vorbestimmten Zeitspanne keine Charge von Ergebnissen von dem Computer empfangen worden ist, kann die anfordernde Vorrichtung bestimmen, ob eine Verbindung mit dem Computer verloren gegangen ist. Als Antwort auf das Bestimmen, dass die Verbindung mit dem Computer verloren gegangen ist, kann die anfordernde Vorrichtung eine zweite Verbindung mit dem Computer oder eine zweite Verbindung mit einem anderen Computer herstellen. Die anfordernde Vorrichtung verwendet die zweite Verbindung, um die Abfrage und das jüngste Neustart-Token als Teil einer Anforderung von Ergebnissen in Antwort auf die Abfrage bereitzustellen. Die anfordernde Vorrichtung kann die Abfrage und das jüngste Neustart-Token an den Computer oder den anderen Computer liefern.
  • In einigen Beispielen kann ein Neustart-Token eine Anzahl von Zeilen, die übersprungen werden sollen, um die aktuelle Eingabe für eine aktuelle Charge von Ergebnissen zu bestimmen, angeben, z. B. zusätzlich zu einem Zustand eines Systems, das eine entsprechende Abfrage verarbeitet. In einigen Beispielen kann ein Neustart-Token eine Eingangsnummer, die einen Iterator aus einem Iteratorbaum identifiziert, der einen letzten Eintrag erbrachte, der in einer jüngsten Charge von Ergebnissen enthalten ist, als einen Zustand eines Systems, das eine entsprechende Abfrage verarbeitet, angeben. Wenn der Computer ein Neustart-Token empfängt, kann er seinen Zustand gemäß dem Neustart-Token aktualisieren. Der Computer kann ein Neustart-Token verwenden, um Daten von der aktuellen Eingabe anzufordern, und die angegebene Anzahl von Zeilen, die durch das Neustart-Token identifiziert wird, überspringen.
  • In einigen Implementierungen kann ein System ein Neustart-Token für einen Iteratorbaum unter Verwendung eines Tiefe-zuerst-Durchlaufs, z. B. eines bedingten Tiefe-zuerst-Durchlaufs, erzeugen. Zum Beispiel kann das System die Knoten in dem Iteratorbaum, bei dem z. B. jeder Knoten einen Iterator repräsentiert, der zum Verarbeiten einer Abfrage verwendet wird, durchgehen und die obersten Knoten in dem Iteratorbaum bestimmen, die Zustandsinformationen enthalten. Das System erzeugt unter Verwendung der Zustandsinformationen für die obersten Knoten das Neustart-Token. Das System kann einen obersten Knoten für jeden Zweig des Iteratorbaums bestimmen, wenn z. B. verschiedene Zweige Zustandsinformationen auf unterschiedlichen Ebenen enthalten.
  • In einigen Beispielen kann das System basierend darauf, ob ein untergeordneter Knoten einen nicht leeren Neustartzustand aufweist, bestimmen, ob zu einer tieferen Ebene des Iteratorbaums übergegangen werden soll. Das System kann den nicht leeren Neustartzustand verwenden, um ein Neustart-Token für den entsprechenden Zweig der Iteratorbaumstruktur zu erstellen. Das System kann für jeden Zweig des Iteratorbaums ein Neustart-Token erstellen und die Neustart-Token für jeden der Zweige kombinieren, um ein Neustart-Token für den gesamten Iteratorbaum zu erstellen.
  • Das System kann einen Iteratorbaum in der gleichen Weise durchlaufen, in der die Steuerung während der Abfrageausführung durch die Iteratoren geleitet wird, die durch den Iteratorbaum repräsentiert werden. Zum Beispiel kann das System den Iteratorbaum verwenden, um zu bestimmen, welcher Teil von Operationen für eine bestimmte Abfrage an entsprechende Iteratoren, z. B. Computer, gesendet werden soll. Wenn das System den Iteratorbaum durchläuft, um die Operationen zu bestimmen, kann das System entsprechende Neustart-Token für die Iteratoren erzeugen, z. B. zur Verwendung bei der Erzeugung eines Neustart-Tokens für den gesamten Iteratorbaum.
  • In einigen Implementierungen kann ein System Verlaufsdaten in ein Neustart-Token aufnehmen. Zum Beispiel können die Verlaufsdaten deterministische Schritte repräsentieren, die zum Erzeugen von Ergebnischargen ausgeführt werden. Die Verlaufsdaten können beschreiben, wie ein System mit nichtdeterministischer Ausgabe bestimmte Schritte, z. B. deterministische Schritte, ausführen kann, um Daten zum Bestimmen von Chargen von Ergebnissen in Reihenfolge zu bringen. Zum Beispiel können die Verlaufsdaten angeben, wie das System eine gewisse Anzahl von Zeilen in einer bestimmten Reihenfolge wiederholen kann, so dass das System oder ein anderes System beim Neustart nur die Zeilen, die zuvor in Ergebnischargen enthalten waren, die an eine anfordernde Vorrichtung gesendet worden sind, und keine zusätzlichen Zeilen überspringt.
  • Wenn ein System ein Neustart-Token und Verlaufsdaten empfängt, kann das System einen Wiederholungsmodus verwenden, der alle in den Verlaufsdaten identifizierten Schritte wiederholt. Der Wiederholungsmodus kann ein Modus, z. B. ein sequentieller Modus oder ein paralleler Modus, sein, in dem das System durch die Verlaufsdaten identifizierte Eingabedaten in der Reihenfolge bezieht, in der die Eingabedaten in den Verlaufsdaten identifiziert sind. Sobald das System die Wiederholung der Verlaufsdaten abgeschlossen hat, wechselt das System in einen Normalmodus, in dem es Daten abruft und Ergebnischargen erstellt. In einigen Beispielen kann das System dann, wenn das System sequentiell Schritte im Wiederholungsmodus ausführt, parallel Schritte im Normalmodus ausführen, z. B. wenn das System beginnt, Ergebnisse zu erzeugen, die an eine anfordernde Vorrichtung geliefert werden sollen.
  • Ein System kann Verlaufsdaten erzeugen, wenn das Iteratorverhalten von Eingabewerten oder Konstanten und Variablenwerten abhängt, die außerhalb des Iterators oder nachfolgenden Iteratoren in einem Iteratorbaum erzeugt werden. Zum Beispiel kann ein System, z. B. ein relationaler, Abfrageprozessor, einen Iterator wie ”cross apply” oder ”outer apply” enthalten, der Korrelationsvariablenwerte erzeugt. Wenn das System ein Neustart-Token für einen Iterator erzeugt, der Korrelationsvariablenwerte erzeugt, kann das System sowohl ein Neustart-Token als auch Verlaufsdaten, die eine Wiederholung der von dem System, z. B. von dem Iterator, vor dem Neustart erzeugten Werte ermöglichen, erzeugen, z. B. statt anzugeben, ob der Iterator bei der Verarbeitung einer Abfrage vor dem Neustart aufgehört hat.
  • Wenn Verlaufsdaten Daten enthalten, die eine Reihenfolge identifizieren, in der Iteratoren aufgerufen worden sind, in der Iteratoren einander aufgerufen haben, oder beides, um ein letztes Ergebniselement zu erzeugen, kann ein System bestimmen, ob ein Neustart-Token, Verlaufsdaten oder beide Daten für einen bestimmten Iterator in einem Iteratorbaum enthalten. Wenn beispielsweise eine Abfrage unter Verwendung eines Neustart-Tokens und von Verlaufsdaten neu gestartet wird, liefert das System Verlaufsdaten an die Iteratoren, die zuvor für die Abfrage ausgeführte Arbeit fortsetzen. Das System liefert möglicherweise keine Verlaufsdaten an Iteratoren, die die zuvor für die Abfrage ausgeführte Arbeit nicht fortsetzen. Zum Beispiel wird das System für einen bestimmten Iterator, der keine Verlaufsdaten aufweist, keine Ergebnisse basierend auf den Verlaufsdaten in einer wiederholbaren Reihenfolge liefern muss, oder beides, keine Neustart-Token oder Verlaufsdaten an den bestimmten Iterator liefern. Das System möglicherweise nur eine Unterabfrage, die eine Suchoperation für den bestimmten Iterator identifiziert, an den bestimmten Iterator liefern.
  • In einigen Beispielen kann ein bestimmter Iterator dann, wenn der bestimmte Iterator seine Nachfolger von Beginn an startet, zum Beispiel ohne Verlaufsdaten oder ein Neustart-Token, möglicherweise keine Neustartzustandsinformationen von seinen Nachfolger-Iteratoren anfordern, wenn er ein Neustart-Token erzeugt. Das Neustart-Token kann angeben, dass keine Arbeit durchgeführt worden ist. in einigen Implementierungen kann ein bestimmter Iterator wenn der bestimmte Iterator nicht von einer wiederholbaren Reihenfolge der Eingabe abhängt, möglicherweise kein Neustart-Token von seinen Nachfolger-Iteratoren anfordern. Der bestimmte Iterator kann ein Neustart-Token oder ein Neustart-Token und Verlaufsdaten unter Verwendung von Ergebnissen, die der bestimmte Iterator von seinen Nachfolger-Iteratoren erhalten hat, erzeugen.
  • In einigen Implementierungen kann ein Neustart-Token eine Kennung enthalten, die angibt, ob das Neustart-Token Verlaufsdaten enthält oder nicht. Zum Beispiel kann ein Neustart-Token eine Verlaufskennung enthalten. Die Verlaufskennung kann ein boolescher Wert sein, der angibt, ob das Neustart-Token Verlaufsdaten enthält.
  • In einigen Implementierungen kann ein System ein Verlaufs-Token enthalten, das die Verlaufsdaten getrennt von dem Neustart-Token enthält. Im Allgemeinen kann jedes System, das sowohl Verlaufsdaten als auch Neustartzustandsinformationen in eine Charge von Ergebnissen einbezieht, so beschrieben werden, dass es ein Neustart-Token mit Verlaufsdaten enthält, unabhängig davon, ob sich die Verlaufsdaten und die Neustartzustandsinformationen in sequentiellen Abschnitten einer Nachricht befinden oder durch andere Daten, z. B. Kopfabschnitte, Antwortdaten oder andere Daten, getrennt sind.
  • In einigen Implementierungen kann ein Neustart-Token eine Kennung für Daten enthalten, aus denen eine entsprechende Charge von Ergebnissen bestimmt wurde. Zum Beispiel kann ein System eine Kennung für eine Datenbank, eine Shard, einen Abschnitt einer Tabelle, einen Abschnitt des Speichers, einen Iterator oder eine Kombination von zwei oder mehreren davon in einem Neustart-Token aufnehmen. Das System kann die Kennung verwenden, um zu bestimmen, welche Schritte welchen Daten, Chargen von Ergebnissen oder Unterabfragen entsprechen.
  • In einigen Implementierungen kann ein System Verlaufsdaten erzeugen, die Kennungen für Daten enthalten, für die die Verlaufsdaten gültig sind. Zum Beispiel kann das System mehrere Schlüssel in den Verlaufsdaten enthalten, so dass jeder der Schlüssel die Daten angibt, für die entsprechende Verlaufsdaten, z. B. Schritte, gelten. Wenn das System Schlüssel in die Verlaufsdaten aufnimmt, kann das System die Schlüssel verwenden, um einen Verlauf nach einer Aufteilung zu wiederholen. Wenn beispielsweise eine Aufteilung eine Grenze einer Shard reduziert, kann ein System einen Schlüssel verwenden, um zu bestimmen, welche Schritte in einem Verlauf für eine bestimmte neue Shard gelten, und nur diese Schritte während der Wiederholung durchführen.
  • In einigen Implementierungen kann ein System mehrere Ebenen von sekundären Computern enthalten. Zum Beispiel kann ein primärer Computer Unterabfragen einer ersten Ebene von sekundären Computern zuweisen. Jeder Computer in der ersten Ebene von sekundären Computern kann einer zweiten Ebene von sekundären Computern weitere Unterabfragen zuweisen, so dass jeder sekundäre Computer der ersten Ebene bestimmten sekundären Computern der zweiten Ebene zugeordnet ist.
  • Ein Iteratorbaum kann die Anzahl von Computern repräsentieren, die Operationen für eine Abfrage verarbeiten. Zum Beispiel kann jeder Iterator in einem Iteratorbaum einen Computer repräsentieren, der Operationen für eine Abfrage verarbeitet. In einigen Beispielen kann ein einzelner Computer Operationen für mehrere Iteratoren in dem Iteratorbaum durchführen, z. B. dann, wenn der einzelne Computer eine virtuelle Maschine für jeden von zwei Iteratoren aus dem Iteratorbaum ausführt. Die Blattknoten in dem Iteratorbaum können bestimmte Computer darstellen, die Ergebnisse erzeugen und Ergebnisse an Computer liefern, die durch Nicht-Blattknoten in dem Iteratorbaum repräsentiert sind. Die durch die Nicht-Blattknoten in dem Iteratorbaum repräsentierten Computer können Ergebnisse von mehreren anderen Computern empfangen, die z. B. durch Blattknoten oder Nicht-Blattknoten repräsentiert sind, und die empfangenen Ergebnisse kombinieren. Die durch die Nicht-Blattknoten in dem Iteratorbaum repräsentierten Computer können mit ihren Nachfolger-Iteratoren kommunizieren, um ein Neustart-Token oder sowohl ein Neustart-Token als auch Verlaufsdaten zu erzeugen.
  • In einigen Implementierungen kann ein System Verlaufsdaten dann verwenden, wenn das System zwei oder mehr Ebenen von sekundären Computern enthält, und dann nicht verwenden, wenn ein einzelner Computer eine Abfrage verarbeitet oder ein primärer Computer und eine Ebene von sekundären Computern Operationen für eine Abfrage verarbeiten. In einigen Implementierungen kann ein System dann, wenn das System eine parallele Verarbeitung durch zwei oder mehr sekundäre Computer umfasst, Verlaufsdaten verwenden, z. B. unabhängig von der Ebene der sekundären Computer. In einigen Implementierungen kann ein System Verlaufsdaten verwenden, wenn das System zwei oder mehr Ebenen von sekundären Computern enthält und eine parallele Verarbeitung durch zumindest einige der sekundären Computer einsetzt.
  • In einigen Implementierungen kann das System bestimmen, ob eine Größe der Verlaufsdaten eine Schwellengröße erfüllt, wenn ein System Ergebnischargen parallel erzeugt und Verlaufsdaten für die Ergebnischargen erzeugt. Zum Beispiel kann die Schwellengröße eine maximale Größe sein und das System kann bestimmen, ob die Größe der Verlaufsdaten größer oder beinahe größer als die maximale Größe ist.
  • Wenn eine Größe der Verlaufsdaten die Schwellengröße erfüllt, kann das System aufhören, Ergebnisse parallel zu erzeugen, und beginnen, Ergebnisse sequentiell zu erzeugen. Zum Beispiel kann das System bestimmen, dass diese Verlaufsdaten zu groß sind und nicht die Anforderung erfüllen, eine Größe eines Neustart-Tokens unter einer Schwellengröße zu halten. Das System kann weiterhin die Verlaufsdaten als Teil eines Neustart-Tokens aufnehmen, während deterministische Werte innerhalb des Neustart-Tokens aktualisiert werden und z. B. die Größe der Verlaufsdaten nicht erhöht wird. Das System kann eine Verarbeitungstyp-Kennung, z. B. einen Merker, das angibt, dass das System von der parallelen Verarbeitung zur sequentiellen Verarbeitung gewechselt ist, in dem Neustart-Token aufnehmen. Das System kann Daten aufnehmen, die angeben, wann das System von der parallelen Verarbeitung zur sequentiellen Verarbeitung gewechselt ist.
  • In einigen Implementierungen kann ein System Verlaufsdaten erzeugen, die Schritte identifizieren, die vorgenommen werden, um an eine anfordernde Vorrichtung gesendete Chargen von Ergebnissen einschließlich einer aktuellen Charge von Ergebnissen zu erzeugen, also z. B. aktuelle Verlaufsdaten. In einigen Beispielen kann ein System Verlaufsdaten erzeugen, die Schritte identifizieren, die vorgenommen werden oder die vorgenommen werden werden, um Ergebnischargen zu erzeugen, die an eine anfordernde Vorrichtung gesendet werden sollen, also z. B. nächste Verlaufsdaten.
  • In einigen Implementierungen kann ein System verschiedene Arten von Verlaufsdaten erzeugen. Zum Beispiel kann ein System bestimmen, ob aktuelle Verlaufsdaten, nächste Verlaufsdaten oder beide verwendet werden sollen. Das System kann ein Neustart-Token unter Verwendung des ausgewählten Typs von Verlaufsdaten erstellen. Wenn ein System ein Neustart-Token empfängt, kann das System einen Typ von Verlaufsdaten bestimmen, der in dem Neustart-Token enthalten ist. Das System kann die in den Verlaufsdaten identifizierten Schritte wiederholen und dann basierend auf dem Typ der Verlaufsdaten bestimmen, welche Schritte als Nächstes auszuführen sind. Wenn die Verlaufsdaten aktuelle Verlaufsdaten für an die anfordernde Vorrichtung gesendete Chargen von Ergebnissen identifizieren, kann das System neue Ergebnischargen bestimmen, die an die anfordernde Vorrichtung gesendet werden sollen, z. B. kann das System zusätzliche Schritte zum Bestimmen einer neuen Ergebnischarge durchführen. Wenn die Verlaufsdaten nächste Verlaufsdaten für Chargen von Ergebnissen identifizieren, die nicht an die anfordernde Vorrichtung gesendet worden sind, erzeugt das System eine neue Charge von Ergebnissen, z. B. durch Auswählen von Ergebnissen, die durch Ausführen der in den nächsten Verlaufsdaten angegebenen Operationen repräsentiert sind.
  • Wenn ein System ein Neustart-Token empfängt, das unter Verwendung sowohl einer parallelen als auch einer sequentiellen Verarbeitung zusammen mit einer Abfrage erzeugt wurde, kann das System einen Zustand des Systems initialisieren, der mit der parallelen Verarbeitung beginnt. Während der Initialisierung, wenn das System den Wert für die Verarbeitungstypkennung identifiziert, die den Wechsel von der parallelen Verarbeitung zur sequentiellen Verarbeitung angibt, wechselt das System von der parallelen Verarbeitung der Abfrage zu der sequentiellen Verarbeitung der Abfrage.
  • Wenn eine Abfrage sequentiell verarbeitet wird, die parallel verarbeitet werden kann, kann ein System bestimmen, ob die Verarbeitung einer Abfrage unter Verwendung einer sequentiellen Verarbeitung fortgesetzt werden soll oder ob eine Größe der Verlaufsdaten klein genug sein wird, um mit der parallelen Verarbeitung von Daten zu beginnen. Zum Beispiel kann ein System ein aktuelles Neustart-Token aufweisen, das Verlaufsdaten enthält. Während das System zusätzliche Chargen von Ergebnissen bestimmt, kann das System die Verlaufsdaten aktualisieren, indem einige Verlaufsdaten entfernt werden, die nicht mehr benötigt werden, um einen aktuellen Zustand des Systems zu bestimmen und zu bestimmen, ob die Verlaufsdaten klein genug sind, um wieder eine parallele Verarbeitung zu ermöglichen.
  • Das System kann eine Iterator-Schnittstelle enthalten. Die Iterator-Schnittstelle kann Ablaufsteuerungsverfahren enthalten. Die Ablaufsteuerungsverfahren können Verfahren zum Führen eines Iterators durch verschiedene Stufen, zum Angeben, dass Daten in Antwort auf die Abfrage bereit sind, zum Angeben, dass keine zusätzlichen Daten in Antwort auf die Abfrage vorhanden sind, oder eine Kombination von zwei oder mehreren von diesen umfassen. Zum Beispiel kann die Iterator-Schnittstelle einen Signalisierungsmechanismus enthalten, der es einem Iterator ermöglicht, anzugebene, dass er alle Ausgabetupel erzeugt hat und der Iterator nichts mehr auszugeben hat.
  • Die Iterator-Schnittstelle kann Datenaustauschverfahren enthalten. Die Datenaustauschverfahren können Verfahren umfassen, die Positionen von Eingabewerten, Ausgabewerten oder beiden identifizieren. Ein System kann, nachdem ein letztes Tupel oder Zwischentupel bestimmt worden ist, einen Zustand der Abfrageausführung unter Verwendung der internen Zustände von Iteratoren in dem Iteratorbaum und unter Verwendung von Werte, z. B. Ausgabewerten, auf die mit den Datenaustauschverfahren zugegriffen werden kann, bestimmen.
  • In einigen Implementierungen kann ein System einen Iteratorbaum verwenden, der für verschiedene Unterabfragen von Operationen, die für eine Abfrage erzeugt werden, jeweils separate Neustart-Token angibt. Das System kann jede der Unterabfragen einem sekundären Computer zuweisen, der Operationen durchführt, um Ergebnischargen für die jeweilige Unterabfrage zu bestimmen. Das System kann für einige der Knoten in dem Iteratorbaum einen ”Begonnen-Merker”, der angibt, ob der entsprechende sekundäre Computer begonnen hat, die jeweilige Unterabfrage zu verarbeiten, einen ”Fertig-Merker”, der angibt, ob der entsprechende sekundäre Computer die Verarbeitung der jeweiligen Unterabfrage abgeschlossen hat, oder beide verwenden. Das System kann einen oder beide Merker verwenden, wenn das System Unterabfragen parallel verarbeitet. Das System kann einen oder beide Merker verwenden, wenn das System Unterabfragen sequentiell verarbeitet.
  • Wenn ein System bestimmt, dass eine Shard-Aufteilung aufgetreten ist, erzeugt das System möglicherweise separate Unterabfragen für jeden der Teile. Wenn die Teilung beispielsweise eine Grenze einer Shard erweitert, kann ein System eine erste Unterabfrage für die ursprünglich in der Shard enthaltenen Daten und eine zweite Unterabfrage für die der Shard neu hinzugefügten Daten erzeugen. Das System liefert die erste Unterabfrage und die zweite Unterabfrage an einen sekundären Computer, auf dem die Shard gehostet wird, um den Computer dazu zu veranlassen, Ergebnischargen in Antwort auf jede der Unterabfragen zu bestimmen und die Ergebnischargen von dem sekundären Computer zu empfangen. Wenn das System beispielsweise Shards (user(userl)/thread(1,10), user(user1)/thread(10,20), user(user1)/thread(20,30)) aufweist und bestimmt, dass sich eine der Shards zu user(user1)/thread(15,25); ändert, kann das System eine erste Unterabfrage für Anwender (user1)/thread(15,20) und eine zweite Unterabfrage für user(user1)/thread(15,20) erstellen und die erste Unterabfrage und die zweite Unterabfrage an einen Computer liefern, der die die Shard user(user1)/thread(15,25) hostet, z. B. in verschiedenen Anforderungen.
  • Wenn eine Aufteilung die Grenzen einer Shard verkleinert, kann ein System neue Unterabfragen für die neuen Shard-Grenzen erstellen und für jede der Unterabfragen das gleiche Neustart-Token verwenden. Das System sendet die Unterabfragen an die entsprechenden sekundären Computer, auf denen die entsprechenden Shards gehostet werden. Jeder der sekundären Computer bestimmt, ob das Neustart-Token angibt, dass alle Daten in Antwort auf die Unterabfrage bereits an das System geliefert worden sind. Als Antwort auf das Bestimmen, dass alle Daten in Antwort auf die Unterabfrage bereits an das System geliefert worden sind, liefert der sekundäre Computer eine Nachricht an das System, die angibt, dass alle Daten bereits an das System geliefert worden sind. Als Antwort auf das Bestimmen, dass nicht alle Daten in Antwort auf die Unterabfrage an das System geliefert worden sind, bestimmt der sekundäre Computer, ob das Neustart-Token für die in dem sekundären Computer enthaltene Shard gültig ist. Wenn das Neustart-Token für die Shard gültig ist, die in dem sekundären Computer enthalten ist, bestimmt der sekundäre Computer Daten, die vorher nicht an das System geliefert worden sind, unter Verwendung des Neustart-Tokens und erzeugt Ergebnischargen unter Verwendung der bestimmten Daten, die vorher nicht an das System geliefert worden sind. Wenn das Neustart-Token nicht für die Shard gültig ist, die in dem sekundären Computer enthalten ist, ignoriert der sekundäre Computer das Neustart-Token und verarbeitet Daten in der Shard so, als ob der sekundäre Computer kein Neustart-Token erhalten hätte.
  • 5.0 Zusätzliche Implementierungsdetails
  • Ausführungsformen des Gegenstands und der funktionalen Operationen, die in dieser Patentschrift beschrieben sind, können in digitalen elektronischen Schaltungen, in konkret verkörperter Computersoftware oder Firmware, in einer virtuellen Maschine, in einer Anwendung, die auf einer virtuellen Maschine ausgeführt wird, in Computerhardware einschließlich der in dieser Beschreibung offenbarten Strukturen und ihrer strukturellen Äquivalente oder in Kombinationen von einem oder mehreren davon implementiert werden. Ausführungsformen des in dieser Beschreibung beschriebenen Gegenstands können als ein oder mehrere Computerprogramme, d. h. ein oder mehrere Module von Computerprogrammbefehlen, die auf einem konkreten nicht transitorischen Programmträger zur Ausführung durch eine Datenverarbeitungsvorrichtung oder zur Steuerung des Betriebs der Datenverarbeitungsvorrichtung codiert sind, implementiert werden. Alternativ oder zusätzlich können die Programmbefehle auf einem künstlich erzeugten sich ausbreitenden Signal codiert sein, z. B. einem maschinenerzeugten elektrischen, optischen oder elektromagnetischen Signal, das erzeugt wird, um Informationen zur Übertragung an geeignete Empfängervorrichtungen zur Ausführung durch eine Datenverarbeitungsvorrichtung zu codieren. Das Computerspeichermedium kann eine maschinenlesbare Speichervorrichtung, ein maschinenlesbares Speichersubstrat, eine Speichervorrichtung mit wahlfreiem oder sequentiellem Zugriff oder eine Kombination von einem oder mehreren davon sein.
  • Der Begriff ”Datenverarbeitungsvorrichtung” bezieht sich auf Datenverarbeitungshardware und umfasst alle Arten von Vorrichtungen, Einrichtungen und Maschinen zum Verarbeiten von Daten, einschließlich beispielsweise eines programmierbaren Prozessors, eines Computers, einer virtuellen Maschine oder mehrerer Prozessoren oder Computer. Die Vorrichtung kann auch eine Logikschaltungsanordnung für spezielle Zwecke, z. B. eine FPGA (feldprogrammierbare Gatteranordnung) oder eine ASIC (anwendungsspezifische integrierte Schaltung), sein oder diese enthalten. Die Vorrichtung kann optional zusätzlich zu Hardware Code enthalten, der eine Ausführungsumgebung für Computerprogramme erstellt, also z. B. Code, der eine Prozessor-Firmware, einen Protokollstapel, ein Datenbankverwaltungssystem, ein Betriebssystem oder eine Kombination aus einem oder mehreren davon bildet.
  • Ein Computerprogramm, das auch als ein Programm, eine Software, ein Container, eine Softwareanwendung, ein Modul, ein Softwaremodul, ein Skript oder Code bezeichnet oder beschrieben werden kann, kann in irgendeiner Form von Programmiersprache geschrieben sein, einschließlich kompilierter oder interpretierter Sprachen oder deklarativer oder prozeduraler Sprachen, und kann in jeder Form bereitgestellt werden, einschließlich als eigenständiges Programm oder als ein Modul, eine Komponente, eine Unterroutine oder eine andere Einheit, die zur Verwendung in einer Datenverarbeitungsumgebung geeignet ist. Ein Computerprogramm kann, muss aber nicht, einer Datei in einem Dateisystem entsprechen. Ein Programm kann in einem Teil einer Datei, der andere Programme oder Daten, z. B. ein oder mehrere Skripts, die in einem Auszeichnungssprachen-Dokument gespeichert sind, enthält, in einer einzelnen dem Programm gewidmeten Datei oder in mehreren aufeinander abgestimmten Dateien, z. B. Dateien, die ein oder mehrere Module, Unterprogramme oder Teile von Code speichern, gespeichert sein. Ein Computerprogramm kann eingesetzt werden, um auf einem Computer oder auf mehreren Computern ausgeführt zu werden, die sich an einem Standort befinden oder über mehrere Standorte verteilt sind und über ein Kommunikationsnetz miteinander verbunden sind.
  • Die in dieser Patentschrift beschriebenen Prozesse und Logikabläufe können von einem oder mehreren programmierbaren Computern ausgeführt werden, die ein oder mehrere Computerprogramme durchführen, um Funktionen auszuführen, indem Eingabedaten bearbeitet und Ausgaben erzeugt werden. Die Prozesse und Logikabläufe können auch durch eine spezielle Logikschaltung, z. B. eine FPGA (feldprogrammierbare Gatteranordnung) oder eine ASIC (anwendungsspezifische integrierte Schaltung), ausgeführt werden.
  • Computer, die für die Ausführung eines Computerprogramms geeignet sind, umfassen beispielsweise Mikroprozessoren für allgemeine oder spezielle Zwecke oder beide oder irgendeine andere Art von zentraler Verarbeitungseinheit. Im Allgemeinen empfängt eine zentrale Verarbeitungseinheit Befehle und Daten von einem Nur-Lese-Speicher oder einem Direktzugriffsspeicher oder von beiden. Die wesentlichen Elemente eines Computers sind eine zentrale Verarbeitungseinheit zum Durchführen oder Ausführen von Befehlen und eine oder mehrere Speichervorrichtungen zum Speichern von Befehlen und Daten. Im Allgemeinen wird ein Computer auch eine oder mehrere Massenspeichervorrichtungen zum Speichern von Daten, z. B. magnetische, magnetooptische Platten oder optische Platten, enthalten oder mit diesen betriebstechnisch gekoppelt sein, um Daten von diesen zu empfangen oder auf diese zu übertragen. Ein Computer muss jedoch keine solchen Vorrichtungen haben. Darüber hinaus kann ein Computer in eine andere Vorrichtung, z. B. ein Mobiltelefon, einen persönlichen digitalen Assistenten (PDA), einen mobilen Audio- oder Videoplayer, eine Spielekonsole, einen GPS-Empfänger (Empfänger für das globale Positionsbestimmungssystem) oder eine tragbare Speichervorrichtung wie etwa einen USB-Stick eingebettet sein, um nur einige zu nennen.
  • Computerlesbare Medien, die zum Speichern von Computerprogrammbefehlen und Daten geeignet sind, umfassen alle Formen von nichtflüchtigem Speicher, Medien und Speichervorrichtungen, einschließlich beispielsweise Halbleiterspeichervorrichtungen, z. B. EPROM, EEPROM und Flash-Speichervorrichtungen; Magnetplatten, z. B. interne Festplatten oder entfernbare Platten; magnetooptische Platten; und CD-ROMs und DVD-ROMs. Der Prozessor und der Speicher können durch spezielle Logikschaltungen ergänzt oder in diese integriert sein.
  • Um eine Interaktion mit einem Anwender zu ermöglichen, können Ausführungsformen des in dieser Patentschrift beschriebenen Gegenstands auf einem Computer implementiert werden, der eine Anzeigevorrichtung, z. B. eine CRT (Kathodenstrahlröhre) oder einen LCD-Monitor (Flüssigkristallanzeigen-Monitor), um Informationen für den Anwender anzuzeigen, und eine Tastatur und ein Zeigevorrichtung, z. B. eine Maus oder einen Trackball, durch die der Anwender Eingaben an dem Computer vornehmen kann, aufweist. Andere Arten von Vorrichtungen können auch für die Interaktion mit einem Anwender verwendet werden. zum Beispiel kann eine Rückmeldung, die für den Anwender bereitgestellt wird, irgendeine Form von sensorischer Rückmeldung sein, z. B. eine visuelle Rückmeldung, akustische Rückmeldung oder taktile Rückmeldung; und die Eingabe von dem Anwender kann in irgendeiner Form einschließlich akustischer, sprachlicher oder taktiler Eingabe empfangen werden. Darüber hinaus kann ein Computer mit einem Anwender interagieren, indem er Dokumente an eine Vorrichtung sendet und von einer Vorrichtung empfängt, die von einem Anwender verwendet wird, und zwar z. B. durch Senden von Webseiten an einen Webbrowser auf der Vorrichtung eines Anwenders als Antwort auf von dem Webbrowser empfangene Anforderungen.
  • Ausführungsformen des in dieser Patentschrift beschriebenen Gegenstands können in einem Computersystem implementiert werden, das eine Backend-Komponente, z. B. als Datenserver, oder eine Middleware-Komponente, z. B. einen Anwendungsserver, oder Frontend-Komponente, z. B. einen Clientcomputer mit einer grafischen Anwenderoberfläche oder einem Webbrowser, über den ein Anwender mit einer Implementierung des in dieser Patentschrift beschriebenen Gegenstands interagieren kann, oder eine beliebige Kombination aus einer oder mehreren solchen Backend-, Middleware- oder Frontend-Komponenten enthält. Die Komponenten des Systems können über jede Form oder jedes Medium der digitalen Datenkommunikation, z. B. ein Kommunikationsnetz, miteinander verbunden sein. Beispiele von Kommunikationsnetzen umfassen ein lokales Netz (LAN) und ein Weitbereichsnetz (WAN), z. B. das Internet.
  • Das Computersystem kann Clients und Server enthalten. Ein Client und ein Server sind im Allgemeinen voneinander entfernt und interagieren typischerweise über ein Kommunikationsnetz. Die Beziehung von Client und Server entsteht durch Computerprogramme, die auf den jeweiligen Computern laufen und eine Client-Server-Beziehung zueinander haben. In einigen Ausführungsformen überträgt ein Server Daten, z. B. eine HTML-Seite, an eine Anwendervorrichtung, z. B. zum Anzeigen von Daten für und Empfangen von Anwendereingaben von einem Anwender, der mit dem Anwendervorrichtung interagiert, die als Client agiert. Daten, die in der Anwendervorrichtung erzeugt werden, z. B. ein Ergebnis der Anwenderinteraktion, können auf dem Server von der Anwendervorrichtung empfangen werden.
  • Ein Beispiel eines solchen Computertyps ist in 3 gezeigt, die eine schematische Darstellung eines generischen Computersystems 300 zeigt. Das System 300 kann gemäß einer Implementierung für die Operationen verwendet werden, die in Verbindung mit irgendeinem der zuvor beschriebenen computerimplementierten Verfahren beschrieben sind. Das System 300 enthält einen Prozessor 310, einen Speicher 320, eine Speichervorrichtung 330 und eine Eingabe-/Ausgabe-Vorrichtung 340. Jede der Komponenten 310, 320, 330 und 340 ist unter Verwendung eines Systembusses 350 miteinander verbunden. Der Prozessor 310 ist in der Lage, Befehle zur Ausführung innerhalb des Systems 300 zu verarbeiten. In einer Implementierung ist der Prozessor 310 ein Einzel-Thread-Prozessor. In einer anderen Implementierung ist der Prozessor 310 ein Mehr-Thread-Prozessor. Der Prozessor 310 ist in der Lage, Befehle zu verarbeiten, die in dem Speicher 320 oder in der Speichervorrichtung 330 gespeichert sind, um grafische Informationen für eine Anwenderschnittstelle auf der Eingabe-/Ausgabe-Vorrichtung 340 anzuzeigen.
  • Der Speicher 320 speichert Informationen innerhalb des Systems 300. In einer Implementierung ist der Speicher 320 ein computerlesbares Medium. In einer Implementierung ist der Speicher 320 eine flüchtige Speichereinheit. In einer weiteren Implementierung ist der Speicher 320 eine nichtflüchtige Speichereinheit.
  • Die Speichervorrichtung 330 ist in der Lage, Massenspeicher für das System 300 bereitzustellen. In einer Implementierung ist die Speichervorrichtung 330 ein computerlesbares Medium. In vielfältigen unterschiedlichen Implementierungen kann die Speichervorrichtung 330 eine Diskettenvorrichtung, eine Festplattenvorrichtung, eine optische Plattenvorrichtung oder eine Bandvorrichtung sein.
  • Die Eingabe-/Ausgabe-Vorrichtung 340 stellt Eingabe-/Ausgabe-Operationen für das System 300 bereit. In einer Implementierung enthält die Eingabe-/Ausgabe-Vorrichtung 340 eine Tastatur und/oder eine Zeigevorrichtung. In einer weiteren Implementierung enthält die Eingabe-/Ausgabe-Vorrichtung 340 eine Anzeigeeinheit zum Anzeigen von grafischen Anwenderschnittstellen.
  • Gemäß Implementierungen in dieser Offenbarung sind Verfahren, Systeme und Vorrichtungen bereitgestellt, einschließlich auf Computerspeichermedien codierter Computerprogramme zum Neustarten einer Abfrage unter Verwendung eines Tokens. Eines der Verfahren umfasst: Empfangen einer Abfrage durch einen Computer von einer anfordernden Vorrichtung; Bestimmen eines aktuellen Ergebnisses in Antwort auf die Abfrage unter Verwendung eines Datenspeichersystems; Erzeugen eines Neustart-Tokens unter Verwendung des aktuellen Ergebnisses in Antwort auf die bestimmte Abfrage, das Operationen repräsentiert, die durchgeführt werden, um mehrere Ergebnisse in Antwort auf die bestimmte Abfrage einschließlich des aktuellen Ergebnisses in Antwort auf die bestimmte Abfrage zu bestimmen und das verwendet werden kann, um ein neues Ergebnis in Antwort auf die bestimmte Abfrage zu bestimmen, das nicht in den mehreren Ergebnissen in Antwort auf die bestimmte Abfrage enthalten war; und Liefern einer Nachricht an die anfordernde Vorrichtung, die enthält: a) erste Daten für das Neustart-Token, das zum Bestimmen der mehreren Ergebnissen in Antwort auf die bestimmte Abfrage ausgeführte Operationen repräsentiert, und b) zweite Daten für das aktuelle Ergebnis in Antwort auf die bestimmte Abfrage.
  • Obwohl diese Patentschrift viele spezifische Implementierungsdetails enthält, sollten diese nicht als Beschränkungen des Umfangs des Beanspruchbaren ausgelegt werden, sondern vielmehr als Beschreibungen von Merkmalen, die für bestimmte Ausführungsformen spezifisch sein können. Bestimmte Merkmale, die in dieser Beschreibung im Zusammenhang mit getrennten Ausführungsformen beschrieben sind, können auch in Kombination in einer einzelnen Ausführungsform implementiert werden. Umgekehrt können verschiedene Merkmale, die im Zusammenhang mit einer einzelnen Ausführungsform beschrieben sind, auch in mehreren Ausführungsformen getrennt oder in jeder geeigneten Unterkombination implementiert werden. Obwohl darüber hinaus Merkmale oben so beschrieben sein können, dass sie in bestimmten Kombinationen agieren und sogar anfänglich derart beansprucht werden, können ein oder mehrere Merkmale aus einer beanspruchten Kombination in einigen Fällen aus der Kombination ausgeschnitten werden und die beanspruchte Kombination kann auf eine Unterkombination oder Variation einer Unterkombination ausgerichtet werden.
  • Obwohl Operationen in den Zeichnungen in einer bestimmten Reihenfolge dargestellt sind, sollte dies ebenfalls nicht dahingehend verstanden werden, dass erforderlich ist, dass solche Operationen in der gezeigten Reihenfolge oder in sequentieller Reihenfolge ausgeführt werden oder dass alle dargestellten Operationen durchgeführt werden, um wünschenswerte Ergebnisse zu erzielen. Unter bestimmten Umständen können Multitasking und Parallelverarbeitung vorteilhaft sein. Darüber hinaus sollte die Trennung verschiedener Systemmodule und Komponenten in den oben beschriebenen Ausführungsformen nicht so verstanden werden, dass eine solche Trennung in allen Ausführungsformen erforderlich ist, und es sollte verstanden werden, dass die beschriebenen Programmkomponenten und Systeme im Allgemeinen zusammen in einem einzigen Softwareprodukt integriert werden können oder in mehreren Softwareprodukten verpackt werden können.
  • Besondere Ausführungsformen des Gegenstands sind beschrieben worden. Andere Ausführungsformen liegen innerhalb des Umfangs der folgenden Ansprüche. Zum Beispiel können die in den Ansprüchen aufgeführten Aktionen in einer anderen Reihenfolge ausgeführt werden und dennoch wünschenswerte Ergebnisse erzielen. Als Beispiel erfordern die in den begleitenden Figuren dargestellten Prozesse nicht notwendigerweise die bestimmte gezeigte Reihenfolge oder sequentielle Reihenfolge, um wünschenswerte Ergebnisse zu erzielen. In einigen Fällen kann Multitasking und Parallelverarbeitung vorteilhaft sein.

Claims (11)

  1. System, das umfasst: eine Datenverarbeitungsvorrichtung; und ein nicht transitorisches computerlesbares Speichermedium in Datenkommunikation mit der Datenverarbeitungsvorrichtung, das Befehle speichert, die durch die Datenverarbeitungsvorrichtung ausführbar sind und bei einer solchen Ausführung veranlassen, dass die Datenverarbeitungsvorrichtung Operationen ausführt, die umfassen: Senden einer bestimmten Abfrage an einen Computer; und für jedes aktuelle Ergebnis in mehreren Ergebnissen in Antwort auf die bestimmte Abfrage: Empfangen einer Nachricht von dem Computer, die a) erste Daten für das jeweilige aktuelle Ergebnis und b) zweite Daten für ein Neustart-Token, das Operationen repräsentiert, die durchgeführt werden, um die mehreren aktuell von dem System empfangenen Ergebnisse einschließlich des jeweiligen aktuellen Ergebnisses zu bestimmen, und das verwendet werden kann, um ein neues Ergebnis in Antwort auf die bestimmte Abfrage zu bestimmen, das nicht in den mehreren Ergebnissen enthalten war, enthält.
  2. System nach Anspruch 1, wobei das Empfangen der Nachricht ein Empfangen der Nachricht von dem Computer umfasst, die a) die ersten Daten für das aktuelle Ergebnis und b) die zweiten Daten, die einen bestimmten Zustand des Computers identifizieren, um die mehreren Ergebnisse, die das System aktuell empfängt, zu bestimmen, enthält.
  3. System nach Anspruch 2, wobei die zweiten Daten einen Index enthalten, der die mehreren Ergebnissen identifiziert, die aktuell von dem System empfangen werden.
  4. System nach Anspruch 2, wobei die zweiten Daten einen oder mehrere deterministische Schritte identifizieren, die von dem Computer durchgeführt werden, um die mehreren Ergebnisse zu bestimmen, die aktuell von dem System empfangen werden.
  5. System nach einem der Ansprüche 1 bis 4, wobei das Senden der bestimmten Abfrage an den Computer ein Senden der bestimmten Abfrage über eine Verbindung an den Computer umfasst, wobei die Operationen Folgendes umfassen: nach dem Empfangen der Nachricht für jedes der mehreren Ergebnisse, Bestimmen eines jüngsten Neustart-Tokens, das von dem Computer empfangen wurde; Liefern der bestimmten Abfrage und des jüngsten Neustart-Tokens an einen zweiten Computer; und Empfangen einer Nachricht von dem zweiten Computer, die dritte Daten für ein zweites Ergebnis in Antwort auf die bestimmte Abfrage, das nicht in den mehreren Ergebnissen enthalten war, und vierte Daten für ein zweites Neustart-Token, das Operationen zum Bestimmen des zweiten Ergebnisses und der mehreren Ergebnisse repräsentiert, enthält.
  6. System nach Anspruch 5, wobei die Operationen umfassen: nach dem Empfangen der Nachricht für jedes der mehreren Ergebnisse, Bestimmen, dass eine Verbindung mit dem Computer nicht länger existiert, wobei das Bestimmen des jüngsten Neustart-Tokens, das von dem Computer empfangen wird, als Antwort auf das Bestimmen, dass die Verbindung mit dem Computer nicht mehr existiert, stattfindet.
  7. System nach Anspruch 5, wobei die Operationen umfassen: nach dem Empfangen der Nachricht für jedes der mehreren Ergebnisse, Bestimmen, zusätzliche Ergebnisse für die bestimmte Abfrage von dem Computer anzufordern, wobei das Bestimmen des jüngsten Neustart-Tokens, das von dem Computer empfangen wird, als Antwort auf das Bestimmen, zusätzliche Ergebnisse für die bestimmte Abfrage anzufordern, stattfindet.
  8. System nach einem der Ansprüche 1 bis 7, wobei die Operationen umfassen: Empfangen der bestimmten Abfrage von einer anfordernden Vorrichtung vor dem Senden der bestimmten Abfrage an den Computer, wobei das Senden der bestimmten Abfrage an den Computer ein Senden einer ersten Unterabfrage, die einen ersten Teil von Operationen für die bestimmte Abfrage repräsentiert, an den Computer als Antwort auf das Empfangen der bestimmten Abfrage von der anfordernden Vorrichtung umfasst; Senden einer zweiten Unterabfrage, die einen zweiten Teil von Operationen für die bestimmte Abfrage repräsentiert, an einen zweiten Computer; für jedes zweite aktuelle Ergebnis in mehreren zweiten Ergebnissen in Antwort auf die bestimmte Abfrage: Empfangen einer zweiten Nachricht von dem zweiten Computer, die dritte Daten für das jeweilige zweite aktuelle Ergebnis enthält, und von vierten Daten für ein zweites Neustart-Token, das unter Verwendung der zweiten Unterabfrage ausgeführte Operationen zum Bestimmen der mehreren zweiten Ergebnisse, die aktuell von dem System empfangen werden, einschließlich des jeweiligen zweiten aktuellen Ergebnisses repräsentiert; Bestimmen eines jüngsten aktuellen Ergebnisses und eines jüngsten zweiten aktuellen Ergebnisses; und Senden einer Antwort an die anfordernde Vorrichtung, die i) das jüngste aktuelle Ergebnis und ein entsprechendes Neustart-Token und ii) das jüngste zweite aktuelle Ergebnis und ein entsprechendes zweites Neustart-Token identifiziert.
  9. System nach Anspruch 8, wobei die Operationen umfassen: Bestimmen, die zweite Unterabfrage dem zweiten Computer zuzuweisen; und vor dem Senden der zweiten Unterabfrage an den zweiten Computer: Bestimmen, dass kein zweites aktuelles Ergebnis von dem zweiten Computer empfangen wurde; Bestimmen, dass ein aktuelles Ergebnis und ein entsprechendes Neustart-Token von dem Computer empfangen worden ist; und Senden einer ersten Antwort an die anfordernde Vorrichtung, die das aktuelle Ergebnis und das entsprechende Neustart-Token identifiziert, wobei das Senden der zweiten Unterabfrage an den zweiten Computer nach dem Senden der ersten Antwort an die anfordernde Vorrichtung erfolgt.
  10. System nach Anspruch 8 oder Anspruch 9, das ferner enthält: den Computer; und den zweiten Computer.
  11. Nicht transitorisches computerlesbares Speichermedium, das Befehle speichert, die durch eine Datenverarbeitungsvorrichtung ausführbar sind und bei einer solchen Ausführung veranlassen, dass die Datenverarbeitungsvorrichtung Operationen ausführt, die Folgendes umfassen: Empfangen einer bestimmten Abfrage durch einen Computer von einer anfordernden Vorrichtung; Bestimmen eines aktuellen Ergebnisses in Antwort auf die bestimmte Abfrage unter Verwendung eines Datenspeichersystems; Erzeugen eines Neustart-Tokens unter Verwendung des aktuellen Ergebnisses, das Operationen repräsentiert, die durchgeführt werden, um mehrere Ergebnisse in Antwort auf die bestimmte Abfrage einschließlich des aktuellen Ergebnisses in Antwort auf die bestimmte Abfrage zu bestimmen und das verwendet werden kann, um ein neues Ergebnis in Antwort auf die bestimmte Abfrage zu bestimmen, das nicht in den mehreren Ergebnissen in Antwort auf die bestimmte Abfrage enthalten war; und Liefern einer Nachricht an die anfordernde Vorrichtung, die enthält: a) erste Daten für das Neustart-Token und b) zweite Daten für das aktuelle Ergebnis.
DE202017105367.9U 2016-09-14 2017-09-06 Abfrageneustartfähigkeit Active DE202017105367U1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/264,797 2016-09-14
US15/264,797 US10169415B2 (en) 2016-09-14 2016-09-14 Query restartability

Publications (1)

Publication Number Publication Date
DE202017105367U1 true DE202017105367U1 (de) 2018-01-12

Family

ID=59738520

Family Applications (2)

Application Number Title Priority Date Filing Date
DE202017105367.9U Active DE202017105367U1 (de) 2016-09-14 2017-09-06 Abfrageneustartfähigkeit
DE102017120486.5A Pending DE102017120486A1 (de) 2016-09-14 2017-09-06 Abfrageneustartfähigkeit

Family Applications After (1)

Application Number Title Priority Date Filing Date
DE102017120486.5A Pending DE102017120486A1 (de) 2016-09-14 2017-09-06 Abfrageneustartfähigkeit

Country Status (6)

Country Link
US (4) US10169415B2 (de)
EP (1) EP3507705B1 (de)
CN (2) CN113886430A (de)
DE (2) DE202017105367U1 (de)
GB (1) GB2554810A (de)
WO (1) WO2018052660A1 (de)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20190129981A1 (en) * 2017-10-31 2019-05-02 Sap Se Asynchronous distributed data cleansing
US10635605B2 (en) * 2018-03-13 2020-04-28 International Business Machines Corporation Shared memory inter-enclave communication
US11190514B2 (en) * 2019-06-17 2021-11-30 Microsoft Technology Licensing, Llc Client-server security enhancement using information accessed from access tokens
US10915418B1 (en) * 2019-08-29 2021-02-09 Snowflake Inc. Automated query retry in a database environment
US20220107738A1 (en) * 2020-10-06 2022-04-07 Kioxia Corporation Read controller and input/output controller
US11734291B2 (en) * 2020-10-21 2023-08-22 Ebay Inc. Parallel execution of API calls using local memory of distributed computing devices

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4751702A (en) 1986-02-10 1988-06-14 International Business Machines Corporation Improving availability of a restartable staged storage data base system that uses logging facilities
US6253212B1 (en) 1998-06-23 2001-06-26 Oracle Corporation Method and system for maintaining checkpoint values
US6351754B1 (en) 1998-06-23 2002-02-26 Oracle Corporation Method and system for controlling recovery downtime
US6289474B1 (en) 1998-06-24 2001-09-11 Torrent Systems, Inc. Computer system and process for checkpointing operations on data in a computer system by partitioning the data
US7051034B1 (en) * 2002-12-18 2006-05-23 Oracle International Corporation Dynamic optimization for processing a restartable sub-tree of a query execution plan
GB0308264D0 (en) * 2003-04-10 2003-05-14 Ibm Recovery from failures within data processing systems
CA2523591C (en) * 2003-04-25 2013-12-31 Mark Bluhm Distributed search methods, architectures, systems, and software
GB0322797D0 (en) * 2003-09-30 2003-10-29 Koninkl Philips Electronics Nv Query caching in a system with a content directory service
US7634687B2 (en) 2005-01-13 2009-12-15 Microsoft Corporation Checkpoint restart system and method
US7822717B2 (en) 2006-02-07 2010-10-26 Emc Corporation Point-in-time database restore
US7490110B2 (en) 2006-03-24 2009-02-10 International Business Machines Corporation Predictable query execution through early materialization
US7853624B2 (en) * 2006-05-02 2010-12-14 International Business Machines Corporation System and method for optimizing distributed and hybrid queries in imperfect environments
US7725470B2 (en) 2006-08-07 2010-05-25 Bea Systems, Inc. Distributed query search using partition nodes
US7587392B2 (en) * 2006-09-15 2009-09-08 Microsoft Corporation Efficient navigation of search results
US7984043B1 (en) 2007-07-24 2011-07-19 Amazon Technologies, Inc. System and method for distributed query processing using configuration-independent query plans
US8316036B2 (en) 2007-08-31 2012-11-20 Microsoft Corporation Checkpointing iterators during search
US20090083238A1 (en) * 2007-09-21 2009-03-26 Microsoft Corporation Stop-and-restart style execution for long running decision support queries
US8185505B1 (en) 2008-06-20 2012-05-22 Emc Corporation Techniques for processing recovery points
US7991744B2 (en) 2008-07-10 2011-08-02 International Business Machines Corporation Method and system for dynamically collecting data for checkpoint tuning and reduce recovery time
CN101650746B (zh) * 2009-09-27 2011-06-29 中国电信股份有限公司 一种对排序结果进行验证的方法和系统
US9183255B1 (en) 2009-12-30 2015-11-10 Teradata Us, Inc. Spool management and checkpointing in a multi-database system
US8489647B2 (en) * 2010-08-31 2013-07-16 International Business Machines Corporation Use-case based configuration of an object-relational mapping framework
US8396852B2 (en) * 2010-09-20 2013-03-12 International Business Machines Corporation Evaluating execution plan changes after a wakeup threshold time
US8726076B2 (en) 2011-05-27 2014-05-13 Microsoft Corporation Operator state checkpoint markers and rehydration
US9064013B1 (en) 2011-11-30 2015-06-23 Google Inc. Application of resource limits to request processing
US8572051B1 (en) * 2012-08-08 2013-10-29 Oracle International Corporation Making parallel execution of structured query language statements fault-tolerant
US10102248B2 (en) * 2012-10-10 2018-10-16 TmaxData Co., Ltd. Join type for optimizing database queries
US9026504B2 (en) * 2013-02-04 2015-05-05 Bank Of America Corporation Multi-row database data loading for enterprise workflow application
US20150248461A1 (en) * 2014-02-28 2015-09-03 Alcatel Lucent Streaming query deployment optimization
CN105488208B (zh) * 2015-12-11 2019-03-08 北京奇虎科技有限公司 数据查找方法与装置

Also Published As

Publication number Publication date
US11698905B2 (en) 2023-07-11
US10956421B2 (en) 2021-03-23
CN107818129B (zh) 2021-10-08
CN107818129A (zh) 2018-03-20
DE102017120486A1 (de) 2018-03-15
EP3507705A1 (de) 2019-07-10
US20210191931A1 (en) 2021-06-24
GB2554810A (en) 2018-04-11
US20190155808A1 (en) 2019-05-23
US20230306028A1 (en) 2023-09-28
EP3507705B1 (de) 2020-06-17
US20180075103A1 (en) 2018-03-15
WO2018052660A1 (en) 2018-03-22
US10169415B2 (en) 2019-01-01
GB201714581D0 (en) 2017-10-25
CN113886430A (zh) 2022-01-04

Similar Documents

Publication Publication Date Title
DE202017105367U1 (de) Abfrageneustartfähigkeit
DE102013207049B4 (de) Überwachen der Datenstrompufferung zur Optimierung der Operatorverarbeitung
DE112013000752B4 (de) Verwalten von Verarbeitungselementen in einem Streaming-Datensystem
DE102013221057B4 (de) System und Verfahren für Batch-Auswertungs-Programme
DE60022152T2 (de) Parallele optimierte Ereignisauslösung in parallelen Datenbanksystemen
DE202018006529U1 (de) Gemeinsames Nutzen bzw. Teilen von Daten in einem mandantenfähigen Datenbanksystem
DE202015009298U1 (de) Dynamische Anpassung von Shard-Zuweisungen
DE202012013427U1 (de) Verknüpfung von Tabellen in einem MapReduce-Verfahren
DE202012013462U1 (de) Datenverarbeitung in einem Mapreduce-Framework
DE102013221052A1 (de) System und Verfahren für Batch-Auswertungs-Programme
DE202015009875U1 (de) Transparente Entdeckung eines semistrukturierten Datenschemas
DE112017003946T5 (de) System und verfahren zur automatischen fragenerzeugung aus einer wissensbasis
DE112012004099T5 (de) Transaktionsverarbeitungssystem, Verfahren und Programm
DE112012005639T5 (de) Auslösen von Fensterbedingungen bei Anwendungen des Stream-Computing
DE202017107393U1 (de) Vorhersagen eines Suchmaschinen-Einordnungssignalwerts
DE202017106604U1 (de) Benutzerdefinierte digitale Komponenten
DE202019005784U1 (de) System und Einrichtung zum Auswählen eines Edge-Servers
DE112019005288T5 (de) EFFEKTIVES UND SKALIERBARES AUFBAUEN UND SONDIEREN VON HASHTABELLEN UNTER VERWENDUNG MEHRERER GPUs
DE202014010940U1 (de) Dynamische Shuffle-Rekonfiguration
DE102015111820A1 (de) Auswählen eines Netzwerkes
DE112017007865T5 (de) Netzgebundener shuffle-datenspeicher
DE202014010924U1 (de) Nichtflüchtiges Shuffle-System
DE112012004926T5 (de) Gemeinsame Speichernutzung durch Prozessoren
DE112018005620T5 (de) Auftragsverwaltung in einem datenverarbeitungssystem
DE112018002837T5 (de) Überwachung für gemeinsam angeordnete container in einem hostsystem

Legal Events

Date Code Title Description
R082 Change of representative

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

R207 Utility model specification
R150 Utility model maintained after payment of first maintenance fee after three years
R079 Amendment of ipc main class

Free format text: PREVIOUS MAIN CLASS: G06F0017300000

Ipc: G06F0016240000

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