DE202011110863U1 - Spaltenspeicher Darstellungen von Datensätzen - Google Patents

Spaltenspeicher Darstellungen von Datensätzen Download PDF

Info

Publication number
DE202011110863U1
DE202011110863U1 DE202011110863.9U DE202011110863U DE202011110863U1 DE 202011110863 U1 DE202011110863 U1 DE 202011110863U1 DE 202011110863 U DE202011110863 U DE 202011110863U DE 202011110863 U1 DE202011110863 U1 DE 202011110863U1
Authority
DE
Germany
Prior art keywords
data
records
column
record
collection
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.)
Expired - Lifetime
Application number
DE202011110863.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 DE202011110863U1 publication Critical patent/DE202011110863U1/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

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/22Indexing; Data structures therefor; Storage structures
    • G06F16/221Column-oriented storage; Management thereof
    • 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/243Natural language query formulation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2458Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
    • G06F16/2465Query processing support for facilitating data mining operations in structured databases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/36Creation of semantic tools, e.g. ontology or thesauri
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/30Semantic analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/40Processing or translation of natural language

Abstract

Computerprogrammprodukt, das materiell auf einem computerlesbaren Speichergerät gespeichert ist, wobei das Produkt Computerprogrammanweisungen aufweist, die eingerichtet sind, um einen oder mehrere Prozessoren zum Durchführen von Operationen zu veranlassen, umfassend: Computerimplementiertes Verfahren, umfassend: das Zugreifen, durch ein Datenverarbeitungssystem, auf eine Sammlung von Datensätzen, die in einem Computerspeicher gespeichert sind, wobei jeder Datensatz in der Sammlung von Datensätzen eine Vielzahl von Datenwerten und eine Vielzahl von Datenelementen beinhaltet, die die Semantik entsprechender Datenwerte anhand der Vielzahl von Datenwerten identifizieren, wobei ein oder mehrere Datensätze in der Sammlung an Datensätzen jeweils mehrere Instanzen eines selben Datenelementes und Datenwerte beinhaltet, die den mehreren Instanzen desselben Datenelementes entsprechen; das Erzeugen, durch das Datenverarbeitungssystem, einer Sammlung an Spaltenstreifen, wobei die Sammlung an Spaltenstreifen die Datenwerte von jedem Datensatz in der Sammlung an Datensätzen beinhaltet, wobei jeder Spaltenstreifen in der Sammlung an Spaltenstreifen alle Datenwerte beinhaltet, die einem spezifischen Datenelement von jedem der Datensätze in der Sammlung an Datensätzen entspricht.

Description

  • 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.
  • TECHNISCHES GEBIET
  • Dieses Dokument betrifft im Allgemeinen Techniken, Verfahren, Systeme und Mechanismen zum Erzeugen und Verarbeiten von spaltenförmigen Speicherdarstellungen von Datensätzen.
  • HINTERGRUND
  • Die vorliegende Offenbarung betrifft im Allgemeinen analytische Datenverarbeitung großer Datenvolumen. Solch eine Datenverarbeitung wird mittlerweile weit verbreitet in Webunternehmen und in vielen verschiedenen Wirtschaftssektoren, nicht zuletzt aufgrund der kostengünstigen Speichermöglichkeit angewendet, mit der das Erfassen großer Mengen von geschäftskritischen Daten machbar ist. Die unmittelbare Bereitstellung dieser Daten für Analysten und technische Entwickler ist von zunehmender Bedeutung; interaktive Antwortzeiten geben häufig den Ausschlag über Qualität bei der Datenuntersuchung, Datenüberwachung, dem Online-Kunden-Support, einem schnellen Prototyping, der Fehlerbehebung von Daten-Pipelines und bei anderen Aufgaben. Das Durchführen einer interaktiven Datenanalyse in großem Umfang erfordert ein hohes Maß an Parallelität. So erfordert beispielsweise das Lesen eines Terabytes an komprimierten Daten in einer Sekunde unter Verwendung von heutzutage handelsüblichen Platten Zehntausende solcher Platten. Auf ähnliche Weise müssen CPU-intensive Abfragen möglicherweise auf Tausenden von Kernen ausgeführt werden, um die Verarbeitung innerhalb von Sekunden abzuschließen.
  • ZUSAMMENFASSUNG
  • Hierin wird ein skalierbares, interaktives ad-hoc-System zur Analyse von Daten offenbart. Durch Kombinieren von Multilevel-Ausführungsbäumen mit einem spaltenartigen Datenlayout kann das Verfahren schnelle und effiziente Abfragen wie beispielsweise Aggregationsabfragen durchführen. Es wird eine Spaltenspeicherdarstellung für verschachtelte Datensätze, ein verbreitetes Datenmodell beschrieben, das in vielen Web-Skalierungs- und wissenschaftlichen Datensätzen angewendet werden kann. Gemäß einer Ausführungsform wird ein Datensatz in Spaltenstreifen zerlegt, wobei jede Spalte als eine Reihe von Blöcken codiert ist, wobei jeder Block Feldwerte und Informationen zu Repetitions- und Definitionsebenen beinhaltet. Ebeneninformationen werden unter Verwendung eines Baumes aus Feld-Schreibelementen erzeugt, deren Aufbau mit der Feldhierarchie in dem Datensatzschema übereinstimmt. Der Datensatz kann unter Verwendung einer finiten Zustandsmaschine assembliert werden, die die Feldwerte und Ebeneninformationen für jedes Feld liest und die Werte sequenziell an die ausgegebenen Datensätze anhängt. Muss nur eine Teilmenge an Feldern abgerufen werden, kann eine einfachere Zustandsmaschine, die kostengünstiger in der Ausführung ist, konstruiert werden. Ferner können durch Speichern zusätzlicher Metadaten wie etwa Zwangsbedingungsinformationen mittels der spaltenförmigen Speicherdarstellung zusätzliche Typen von Abfragen unterstützt werden.
  • Es wird ein Multilevel(über mehrere Ebenen)-Bereitstellungsbaum zum Ausführen von Abfragen verwendet. Bei einer Ausführungsform empfängt ein Root-Server eine eingehende Abfrage, liest Metadaten aus den Tabellen und leitet die Abfragen an eine nächste Ebene in dem Bereitstellungsbaum weiter. Leaf(Endknoten)-Server kommunizieren mit einer Speicherschicht oder greifen auf die Daten auf dem lokalen Speicher zu, wo die gespeicherten Daten repliziert werden können, und liest Streifen von verschachtelten Daten in der spaltenartigen Darstellung. Jeder Server kann einen internen Ausführungsbaum umfassen, der einem physischen Abfrageausführungsplan entspricht, der eine Reihe an Iteratoren aufweist, die eingegebene Spalten scannen und Ergebnisse von Aggregaten (Zusammenfassungen) und skalaren Funktionen emittieren, die mit Ebeneninformationen versehen sind. In einer weiteren Ausführungsform wird ein Abfrage-Dispatcher bereitgestellt, der Abfragen auf der Grundlage ihrer Prioritäten terminiert und die Last ausgleicht. Der Abfrage-Dispsatcher stellt zudem eine Fehlertoleranz bereit, wenn ein Server viel langsamer als andere oder wenn ein Replikat unerreichbar wird. Der Abfrage-Dispatcher kann ein Histogramm an Bearbeitungszeiten für Ausführungs-Threads auf den Leaf-Servern berechnen und die Zeitplanung für einen anderen Server vorsehen, wenn die Bearbeitungszeit eine unverhältnismäßige Menge an Zeit in Anspruch nimmt.
  • Die Spaltendaten können in-situ (auf der Stelle) abgefragt werden. Durch das Halten der Spaltendaten auf einer gemeinsamen Speicherschicht und das Bereitstellen von Mechanismen zum Assemblieren von Datensätzen anhand der Spaltendaten wird eine Betriebsbereitschaft mit Datenverwaltungs-Tools ermöglicht, die Daten in einer Datensatzstruktur analysieren. Das System kann eine Vielzahl von CPUs skalieren und zu schnellem Lesen von großen Datenmengen in der Lage sein. Es können bestimmte Ausführungsformen in bestimmten Fällen implementiert werden, um einen oder mehrere der folgenden Vorteile umzusetzen. An verschachtelten Daten kann in-situ operiert werden, so dass auf die Daten zugegriffen werden kann, ohne die Daten mit einem Datenverwaltungssystem zu laden. Abfragen an verschachtelten Daten können in einer verringerten Ausführungszeit als bei anderen Analyseprogrammen erforderlich durchgeführt werden. Mit einer Spaltenspeicher-Datenstruktur, die auf einer gewöhnlichen Speicherschicht implementiert ist, können mehrere verschiedene Analyseprogramme auf die Spaltenspeicher-Datenstruktur zugreifen.
  • Als eine Alternative zu den angehängten Ansprüchen und den in der vorstehenden Beschreibung beschriebenen Ausführungsformen kann die vorliegende Erfindung auch mittels einer der folgenden Ausführungsformen beschrieben werden:
    Ausführungsform 1 betrifft ein computerimplementiertes Verfahren. Das Verfahren umfasst Zugreifen, durch ein Datenverarbeitungssystem, auf eine Sammlung an Datensätzen, die in einem Computerspeicher gespeichert ist, wobei jeder Datensatz in der Sammlung an Datensätzen eine Vielzahl von Datensätzen und eine Vielzahl von Datenelementen beinhaltet, die die Semantik der entsprechenden Datenwerte anhand der Vielzahl von Datenwerten identifizieren, wobei ein oder mehrere Datensätze in der Sammlung an Datensätzen jeweils mehrere Instanzen eines selben Datenelementes beinhalten und Datenwerte beinhalten, die den mehreren Instanzen desselben Datenelementes entsprechen. Das Verfahren umfasst ferner Erzeugen, durch das Datenverarbeitungssystem, einer Sammlung an Spaltenstreifen, wobei die Sammlung an Spaltenstreifen die Datenwerte von jedem Datensatz in der Sammlung an Datensätzen beinhaltet, wobei jeder Spaltenstreifen in der Sammlung an Spaltenstreifen alle Datenwerte beinhaltet, die einem spezifischen Datenelement von jedem der Datensätze in der Sammlung an Datensätzen entspricht.
  • Ausführungsform 2 betrifft das Verfahren von Ausführungsform 1. Das Verfahren umfasst ferner Erzeugen, durch das Datenverarbeitungssystem und für jeden Datenwert in jedem Spaltenstreifen in der Sammlung an Spaltenstreifen, Daten, die einen Ort des jeweiligen Datenwertes in einem jeweiligen Datensatz von der Sammlung an Datenwerten identifiziert.
  • Ausführungsform 3 betrifft das Verfahren von Ausführungsform 2, worin die Daten aus einem Repetitionswert und einem Definitionswert bestehen.
  • Ausführungsform 4 betrifft das Verfahren einer jeden beliebigen der Ausführungsformen 2 bis 3. Das Verfahren umfasst ferner Rekonstruieren anhand (i) der Spaltenstreifen in der Sammlung an Spaltenstreifen und (ii) der Daten, einer Reihe an Datensätzen, die nur eine Teilmenge an Datenelementen von den Datensätzen in der Sammlung an Datensätzen beinhaltet.
  • Ausführungsform 5 betrifft das Verfahren einer jeden beliebigen der Ausführungsformen 1 bis 4, ferner umfassend Erzeugen, zur Speicherung mit den Datenwerten in der Sammlung an Spaltenstreifen, eines Repetitionswertes für jeden bestimmten Datenwert in der Sammlung an Spaltenstreifen, worin ein Pfad für jedes bestimmte Datenelement ein beliebiges oder mehrere übergeordnete Datenelemente zu dem bestimmten Datenelement beinhaltet; worin der Repetitionswert für jeden bestimmten Datenwert ein am aktuellsten wiederholtes Datenelement in dem Pfad des bestimmten Datenelementes identifiziert, das dem bestimmten Datenelement entspricht; worin das am aktuellsten wiederholte Datenelement in dem Pfad des bestimmten Datenelementes das Datenelement in dem Pfad des bestimmten Datenelementes ist, das ein zweites Mal während einer Analyse vorkommt, eines bestimmten Datensatzes, der den bestimmten Datenwert beinhaltet, der nach oben in Richtung eines Anfangs des bestimmten Datensatzes von einer Position des bestimmten Datenwertes in dem bestimmten Datensatz arbeitet.
  • Ausführungsform 6 betrifft das Verfahren einer beliebigen der Ausführungsformen 1 bis 5, worin jedem bestimmten Datenelement der Datenelemente, die in der Sammlung an Datenelementen beinhalten sind, ein jeweiliger Pfad zugewiesen wird, der ein oder mehrere der übergeordneten Datenelemente zu dem bestimmten Datenelement beinhaltet. Das Verfahren umfasst ferner Erzeugen, zur Speicherung mit den Daten in den Spaltenstreifen, eines Definitionswertes für jeden bestimmten Pfad oder Abschnitt des bestimmten Pfades in der Sammlung an Datensätzen. Die Definitionsebene für den bestimmten Pfad oder den Abschnitt des bestimmten Pfades identifiziert eine Menge an Datenelementen, die in dem bestimmten Pfad oder Abschnitt des Pfades beinhalten sind.
  • Ausführungsform 7 betrifft das Verfahren einer jeden beliebigen der Ausführungsformen 1 bis 6. Das Verfahren umfasst ferner Empfangen, durch das Datenverarbeitungssystem, von Informationen von einer Sammlung an Datenressourcen, wobei jede Datenquelle Informationen beinhaltet, die nicht gemäß einem Schema strukturiert sind. Das Verfahren umfasst ferner Erzeugen, durch das Datenverarbeitungssystem, eines jeden Datensatzes in der Sammlung an Datensätzen, durch Strukturieren der Informationen in jeder Datenquelle gemäß einem Schema.
  • Ausführungsform 8 betrifft das Verfahren einer jeden beliebigen der Ausführungsformen 1 bis 7. Das Verfahren umfasst ferner Durchführen, durch das Datenverarbeitungssystem, einer Abfrage der Sammlung an Spaltenstreifen. Das Verfahren umfasst ferner Ausgeben, durch das Datenverarbeitungssystem und in Reaktion auf die Leistung der Abfrage, eines neuen Spaltenstreifens, der eine Teilmenge der Werte von dem Spaltenstreifen der Sammlung der Spaltenstreifen beinhaltet, die durch die die Abfrage identifiziert werden.
  • Ausführungsform 9 betrifft das Verfahren von Ausführungsform 8, worin die Abfrage der Sammlung an Spaltenstreifen ohne Laden der in der Sammlung an Spaltenstreifen beinhaltenen Datenwerte in eine Datenbank durchgeführt wird.
  • Ausführungsform 10 betrifft das Verfahren einer jeden beliebigen der Ausführungsformen 1 bis 9, worin wenigstens ein erster Spaltenstreifen der Sammlung an Spaltenstreifen mehrere Datenblöcke beinhaltet, worin wenigstens einige der mehreren Datenblöcke jeweils einen Zurechnungswert beinhaltet, der eine Art von Werten definiert, die in den Werten eines jeden Blockes vorkommen, so dass das Datenverarbeitungssystem, wenn es eine Abfrage des ersten Spaltenstreifens durchführt, einen oder mehrere Blöcke meidet, die keinen Datenwert beinhalten, der durch die Abfrage spezifiziert wird.
  • Ausführungsform 11 betrifft das Verfahren einer jeden beliebigen der Ausführungsformen 1 bis 10, worin ein erster Spaltenstreifen der Sammlung an Spaltenstreifen, als erste Datenwerte, alle Datenwerte von den Datensätzen in der Sammlung an Datensätzen beinhaltet, die den Instanzen eines ersten Datenelementes in der Sammlung an Datensätzen entsprechen. Der erste Spaltenstreifen speichert mehrere der ersten Datenwerte fortlaufend in dem Speicher, worin die mehreren ersten Datenwerte nicht fortlaufend in dem Speicher gespeichert wurden, als die mehreren ersten Datenwerte in den Datensätzen in der Sammlung an Datensätzen gespeichert wurden.
  • Ausführungsform 12 betrifft das Verfahren einer jeden beliebigen der Ausführungsformen 1 bis 11, worin wenigstens ein Datensatz in der Sammlung an Datensätzen Datenelemente und entsprechende Datenwerte beinhaltet, die gemäß einem verschachtelten Datenmodell gespeichert werden.
  • Ausführungsform 13 betrifft das Verfahren einer jeden beliebigen der Ausführungsformen 1 bis 12, worin der erste Datensatz ein erstes Datenelement und ein zweites Datenelement beinhaltet, wobei das erste Datenelement ein übergeordnetes Datenelement zu dem zweiten Datenelement ist und das zweite Datenelement ein untergeordnetes Datenelement zu dem ersten Datenelement ist. Ein erster Spaltenstreifen beinhaltet einen Datenwert, der dem ersten Datenelement in dem ersten Datensatz entspricht, sowie alle andere Datenwerte, die den Instanzen des ersten Datenelementes in der Sammlung an Datensätzen entsprechen. Ein zweiter Spaltenstreifen beinhaltet einen Datenwert, der dem zweiten Datenelement in dem ersten Datensatz entspricht, sowie alle andere Datenwerte, die den Instanzen des zweiten Datenelementes in der Sammlung an Datensätzen entsprechen.
  • Andere Ausführungsformen umfassen entsprechende computerlesbare Speichergeräte, die Anweisungen speichern, die, wenn sie von einem oder mehreren Datenverarbeitungsgeräten (beispielsweise einem programmierbaren Computerprozessor) ausgeführt werden, Operationen gemäß einer beliebigen der vorstehenden Ausführungsformen 1 bis 13 durchführt. Zu anderen Ausführungsformen gehören Systeme und Vorrichtungen, die die beschriebenen computerlesbaren Speichergeräte umfassen, die Anweisungen speichern, die, wenn sie von einem oder mehreren Datenverarbeitungsgeräten ausgeführt werden, Operationen gemäß einer beliebigen der vorstehend beschrieben Ausführungsformen 1 bis 13 durchführen.
  • Die Einzelheiten von einer oder mehreren Ausführungsformen werden in den beigefügten Zeichnungen und der nachstehenden Beschreibung dargelegt. Andere Merkmale, Objekte und Vorteile sind anhand der Beschreibung und den Zeichnungen sowie anhand der Ansprüche ersichtlich.
  • BESCHREIBUNG DER ZEICHNUNGEN
  • 1 veranschaulicht eine datensatzweise Darstellung im Vergleich zu einer spaltenweisen Darstellung verschachtelter Daten.
  • 2 veranschaulicht zwei musterhafte verschachtelte Datensätze und ihr Schema.
  • 3 veranschaulicht Darstellungen mit Spaltenstreifen der Muster verschachtelter Datensätze.
  • 4 ist ein Algorithmus zum Zerlegen eines Datensatzs in Spalten.
  • 5 veranschaulicht einen Automatismus zum Durchführen einer vollständigen Datensatz-Assemblierung.
  • 6 veranschaulicht einen Automatismus für eine Datensatz-Assemblierung aus zwei Feldern, und die Datensätze, die der Automatismus produziert.
  • 7 ist ein Algorithmus zum Konstruieren eines Automatismus zur Datensatz-Assemblierung.
  • 8 ist ein Algorithmus zum Assemblieren eines Datensatzes anhand von Spaltendaten.
  • 9 stellt ein Muster einer Abfrage dar, die Projektion, Auswahl, und Aggregation (Zusammenfassung) innerhalb des Datensatzes durchführt.
  • 10 veranschaulicht eine Systemarchitektur und eine Ausführung innerhalb eines Serverknotens.
  • 11 ist eine Tabelle, die die in der experimentellen Studie verwendeten Datensätze veranschaulicht.
  • 12 ist ein Graph, der die Leistungsaufschlüsselung veranschaulicht, die auftreten kann, wenn von einer lokalen Platte gelesen wird.
  • 13 ist ein Graph, der die Ausführung von sowohl MapReduce als auch dem beschriebenen System auf einem spaltenorientierten im Vergleich zu einem datensatzorientierten Speichern veranschaulicht.
  • 14 ist ein Graph, der die Ausführungszeit als eine Funktion der Ebenen des Bereitstellungsbaums für zwei Aggregationsabfragen veranschaulicht.
  • 15 ist ein Graph, der Histogramme von Verarbeitungszeiten veranschaulicht.
  • 16 ist ein Graph, der die Ausführungszeit veranschaulicht, wenn das System von 1000 auf 4000 Knoten unter Verwendung einer Top-k-Abfrage skaliert wird.
  • 17 ist ein Graph, der einen Prozentsatz von verarbeiteten Tabellen als eine Funktion der Verarbeitungszeit je Tablett veranschaulicht.
  • 18 ist ein Graph, der eine Zeitverteilung einer Abfrageantwort in einem monatlichen Workload veranschaulicht.
  • 19 ist ein Blockschaubild eines Systems zum Erzeugen und Verarbeiten von Darstellungen von Spaltenspeicher-Darstellungen von verschachtelten Datensätzen.
  • 20 ist ein Ablaufplan eines beispielhaften Verfahrens zum Erzeugen von Spaltendaten.
  • 21 ist ein Blockschaubild von Datenverarbeitungsgeräten, die zum Implementieren der in diesem Dokument beschriebenen Systeme und Verfahren, entweder als Client oder Server oder als Vielzahl von Servern, verwendet werden können.
  • Gleiche Bezugssymbole in den verschiedenen Zeichnungen zeigen gleiche Elemente an.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Dieses Dokument beschreibt Techniken, Verfahren, Systeme und Mechanismen zum Erzeugen und Verarbeiten von Spaltenspeicher-Darstellungen von Datensätzen. Als eine Veranschaulichung kann ein Unternehmen Daten von Webseiten in Datensätzen verschachtelter Daten speichern. Die verschachtelten Daten können in einem Spaltendatenspeicherformat gespeichert werden, das effiziente Abfragen der Daten unter Verwendung eines Multilevel-Ausführungsbaums ermöglicht. Der Spaltenspeicher kann in Datensätze zur Eingabe in Analyseprogramme erneut assembliert werden, die an nach Datensätzen gespeicherten Daten operieren.
  • Genauer gesagt, kann es sich bei jedem Datensatz um eine Instanzerstellung (Instanziierung) eines Schemas handeln, das eine Formatierung von Datensätzen definiert, wobei die Datensätze gemäß dem Schema erstellt werden. So kann ein Schema beispielsweise verschiedene Felder zum Speichern von Informationen über eine Webseite und eine Struktur zum Organisieren von Feldern in einem Datensatz und ihre entsprechenden Werte identifizieren. Wird ein Datensatz zum Beschreiben der Eigenschaften einer Webseite erzeugt, kann der Datensatz für jedes Feld ein Datenelement und einen entsprechenden Wert beinhalten. Das Datenelement kann die Semantik des Wertes gemäß einer Definition in dem Schema definieren. Die Begriffe Datenelement und Feld können in diesem Dokument untereinander austauschbar verwendet werden. Feld kann sich auch auf eine Kombination eines Datenelementes und eines entsprechenden Wertes beziehen.
  • Ein bestimmter Datensatz muss nicht notwendigerweise alle der Felder beinhalten, die durch ein Schema definiert sind. Demgemäß kann das Schema als eine Schablone dienen, von der Felder für den bestimmten Datensatz ausgewählt werden. So kann das Schema beispielsweise ein Feld zum Definieren von Informationen über Videoinhalt in einer Webseite beinhalten. Enthält eine Webseite keinen Videoinhalt, dann beinhaltet der der Webseite entsprechende Datensatz möglicherweise nicht das Feld von dem Schema, das Informationen über Videos auf der Webseite beinhaltet. Demgemäß sind einige der Felder möglicherweise 'optional'.
  • Einige der Felder in einem Datensatz können jedoch auch 'erforderlich' sein. So kann beispielsweise ein 'erforderlich'-Feld in dem Schema ein Einheitlicher Ressourcenzeiger (englisch: Uniform Resource Locator (URL) eines Quellenortes für das Dokument sein, der die Webseite bedient hat. Das Feld kann erforderlich sein, weil auf jedes Webseitendokument von einem Quellenort zugegriffen werden kann (d. h. es ist ein URL für jedes Dokument verfügbar) und weil das Feld zum weiteren Verarbeiten von Informationen auf der Webseite erforderlich ist (beispielsweise um zu bestimmen, ob sich der Inhalt geändert hat).
  • Ein Feld kann auch 'wiederholbar' sein. Ein Feld, das in dem Schema ist und das als wiederholbar definiert ist, kann an dem Ort repliziert werden, der wiederholt durch das Schema in einer Instanzerstellung des Schemas (das heißt in einem Datensatz) definiert ist. So kann ein Schema beispielsweise ein Feld beinhalten, das zum Definieren von Dokumenten dient, die einen Link zu der Webseite bilden. Das Schema kann dem Feld nur eine einzige Zeit spezifizieren, kann jedoch anzeigen, dass das Feld wiederholbar ist (beispielsweise weil mehrere Dokumente einen Link zu einer bestimmten Webseite bilden können). Demgemäß kann ein Datensatz für die Webseite mehrere Felder beinhalten, die einen Wert für eine verlinkende Webseite identifizieren. Die wiederholten Felder können auf einer gleichen Ebene und unter einem übergeordneten Feld in dem Datensatz (wie dies nachstehend ausführlicher beschrieben wird) angeordnet sein.
  • Die Felder des Schemas (und demzufolge die Felder in den Datensätzen) können verschachtelt sein. Mit anderen Worten bedeutet dies, dass einige Felder untergeordnete Felder von anderen Feldern sein können, die als übergeordnete Felder, in zweiter Ebene übergeordnete Felder usw. bezeichnet werden können. In einigen Beispielen sind untergeordnete Knoten jene Knoten in dem Schema, die innerhalb eines Paares von geöffneten und geschlossenen welligen Klammern unmittelbar nach dem übergeordneten Knoten angeordnet sind. Es können jedoch auch andere Implementierungen (beispielsweise die Verwendung eines Start-Tag für das Feld und eines End-Tag für das Feld) verwendet werden. Demgemäß kann, mit Ausnahme der Felder, die sich auf der höchsten Ebene befinden (beispielsweise die Felder, die keine untergeordnete Felder von irgendwelchen anderen Feldern sind), jedes Feld ein übergeordnetes Feld haben.
  • Das Verschachteln kann zum Organisieren von Informationen in konzeptbezogene Blöcke von Informationen hilfreich sein. Unter erneuter Bezugnahme auf unser vorheriges Beispiel kann das Schema ein 'Video'-Feld beinhalten. Das 'Video'-Feld kann mehrere untergeordnete Felder beinhalten, die die Eigenschaften des Videos (beispielsweise wie lang das Video ist, das Format des Videos und die Auflösung des Videos) identifizieren. Wird demgemäß ein Datensatz erstellt, dürfen untergeordnete Knoten nicht in den Datensatz platziert werden, wenn ihre übergeordneten Knoten nicht vorhanden sind. Mit anderen Worten darf ein Datensatz für eine Webseite, die kein Video beinhaltet kein 'VideoLength'-Feld beinhalten, da der Datensatz kein 'Video'-Feld (das heißt, das übergeordnete Feld des 'VideoLength'-Feldes) beinhaltet. Anwendungsprogramme, die Ansehen und Bearbeiten eines Datensatzes ermöglichen, können die abhängigen untergeordneten Felder visuell von den übergeordneten Feldern entfernt verschachteln (beispielsweise die untergeordneten Felder rechts von dem übergeordneten Feld eingerückt).
  • Das Analysieren von Millionen von Datensätzen kann zeitaufwändig sein. In einigen Beispielen interessiert sich ein Nutzer für Daten aus einem einzelnen Feld, muss jedoch auf jeden der Datensätze in ihrer Gesamtheit zugreifen. So kann ein Nutzer beispielsweise anfordern, dass ein Analyseprogramm Millionen von Datensätzen prüft, um jene Datensätze zu identifizieren, die den Webseiten zugewiesen sind, die Videos beinhalten, welche nicht länger als zehn Minuten sind und die eine hohe Auflösung ('High') haben. Da jeder Datensatz als eine separate Datenstruktur gespeichert werden kann, muss eventuell jeder Datensatz in seiner Gesamtheit in ein Datenbankverwaltungssystem geladen werden, um den Datensatz abzufragen, um zu bestimmen, ob der Datensatz die bestimmte Kombination aus Videolänge und Auflösung beinhaltet.
  • Solch ein Laden eines jeden einzelnen Datensatzes kann unerschwinglich teuer sein, sowohl hinsichtlich der Menge an Server, die zum Durchführen der Aufgabe erforderlich sind, als auch einer Menge an Zeit, die zum Fertigstellen der Abfrage erforderlich ist. Es können erhebliche Zeiteinsparungen durch Speichern aller der Werte für ein bestimmtes Feld, das aus den Millionen von Datensätzen ausgewählt wird, zusammen in einem zusammenhängenden Abschnitt des Speichers erzielt werden. Solch ein Speichern von Werten von mehreren Datensätzen jedoch für ein bestimmtes Feld wird als Spaltenspeicher bezeichnet. Im Gegensatz dazu wird das Beispiel, bei dem Informationen für einen bestimmten Datensatz zusammenhängend in einem Speicher gespeichert wird, als datensatzorientiertes Speichern bezeichnet.
  • Spaltenspeicher für verschachtelte Datensätze stellen jedoch einzigartige Schwierigkeiten dar. Ein Feld in einem Datensatz kann durch seinen Pfad identifiziert werden, der eine Aufstellung des Feldes und der übergeordneten Felder (beispielsweise GrandParent.Parent.Child) beinhalten kann. Da sich ein oder mehrere der Felder in dem Pfad wiederholen können, kann es mehrere Instanzen eines Feldes mit demselben Pfadnamen geben. Schaut man sich eine darauffolgende Auflistung von Spaltendaten für ein bestimmtes Feld an, wird ein Mechanismus benötigt, um zu identifizieren, welche Werte zu welchen Datensätzen gehören, und für jene Datensätze, die mehrere Werte für einen bestimmten Pfaden beinhalten, welches der jeweilige Ort des Wertes in dem Datensatz ist. Mit anderen Worten wird in Anbetracht einer Sequenz von Werten in einer Spaltenstruktur ein Mechanismus zum Rekonstruieren der Struktur des Datensatzes anhand der Werte benötigt.
  • Der Mechanismus zum Rekonstruieren der Struktur eines Datensatzes anhand der Spaltendaten umfasst Speichern, für jeden Wert in den Spaltendaten, einer 'Repetitions'-Ebene und einer 'Definitions'-Ebene. Jede 'Ebene' kann eine Bitfolge sein, die eine Zahl darstellt. Beispielsweise kann eine 'Ebene' von 3 von zwei Bits dargestellt sein (beispielsweise '11'). In einem anderen Beispiel kann eine 'Ebene' von 5 von drei Bits dargestellt sein (beispielsweise '101').
  • Die 'Repetition'-Ebene, die für einen bestimmten Wert speichert ist, zeigt das Feld in dem Pfad des Wertes an, das sich am aktuellsten wiederholt hat. Als Veranschaulichung kann eine Spalte an Werten für ein Feld mit dem Pfad 'Video.Resolution.Width.' gespeichert werden. Eine Repetition-Ebene von '1' kann anzeigen, dass sich das 'Video'-Feld am aktuellsten wiederholt hat, während eine Repetition-Ebene von '2' anzeigen kann, dass sich das 'Resolution'(Auflösung)-Feld am aktuellsten wiederholt hat. Ein kürzliches Wiederholen kann von der Position des Wertes in dem Datensatz anzeigen, von dem der Wert ausgewählt wurde und nach oben in Richtung des Anfangs des Dokumentes arbeitend, welches Feld in dem Pfad 'Video.Resolution.Width.' das erste sein wird, das einen Zählwert von zwei erreicht (beispielsweise welches Feld zuerst zum zweiten Mal vorkommt.
  • So kommt beispielsweise, wird von dem Ort mit dem 'Width'-Wert vorgegangen, jedes Feld ein einziges Mal vor. Für ein Auffinden einer zweiten Instanz eines jeden Feldes muss man quer zu den Tiefen des nächsten, angrenzenden verschachtelten Feldes (und möglicherweise zu weiteren Verschachtelungen) vorgehen. Demgemäß kann ein 'Video'-Feld vorkommen, das keine untergeordneten 'Resolution'-Felder hat (beispielsweise weil das 'Resolution'-Feld ein optionales oder ein sich wiederholendes Feld ist). Demgemäß ist das 'Video'-Feld ein zweites Mal vorgekommen und demzufolge das sich am aktuellsten wiederholende Feld. Dem Wert wird eine Repetition-Ebene von” zugewiesen.
  • Eine Repetition-Ebene von '0' kann anzeigen, dass das Feld keinen sich am aktuellsten wiederholten Wert (beispielsweise kommt es bei einem von oben nach unten gerichteten Scan zum ersten Mal in dem Datensatz vor) beinhaltet. In verschiedenen Beispielen weist ein 'required'(erforderlich)-Feld in einem Pfad keine Repetitions-Ebene auf. Ist beispielsweise das 'Resolution'-Feld für den 'Video.Resolution.Width'-Pfad erforderlich, kann der Bereich der Auflösungsebenen entweder '0' oder '1' sein. 'Resolution' hat möglicherweise keine Ebene, da es immer dann in dem Datensatz vorhanden ist, wenn das 'Video'-Feld vorhanden ist. Wurde demgemäß 'Resolution' einer Ebene von '2' zugewiesen, kann es immer vor 'Video' vorkommen, und demzufolge wird möglicherweise eine Ebene von '1' niemals zugewiesen. Demgemäß können durch das Nicht-Einfügen einer Repetition-Ebene für erforderliche Felder eine Anzahl von verschiedenen Auflösungsebenen und eine Anzahl von Bits zum Darstellen der Auflösungsebene reduziert werden.
  • Ist das Feld 'Width' in dem vorstehenden Beispiel ein 'optional'-Feld oder ein 'repeating' (wiederholendes) Feld, beinhaltet ein Datensatz möglicherweise nicht immer einen Wert für das 'Width'-Feld. Demgemäß kann eine Spalte an Werten für den 'Video.Resolution.Width'-Pfad einen Mechanismus verwenden, um anzugeben, wenn ein 'Video' oder ein 'Video.Resolution'-Pfad in dem Datensatz gefunden wird, das 'Width'-Feld jedoch in dem Datensatz nicht instanziiert wurde. Dieser Mechanismus kann Speichern, in der 'Video.Resolution.Width'-Datenspalte, einer 'Definition'-Ebene für jedes 'Video'- oder 'Video.Resolution'-Feld in dem Datensatz unabhängig davon umfassen, ob das 'Width'-Feld instanziiert ist. Die 'Definition'-Ebene kann anzeigen, wie viele der Felder in dem 'Video.Resolution.Width'-Pfad, die fehlen könnten (beispielsweise weil das erste Feld optional oder wiederholbar ist), tatsächlich vorhanden sind.
  • Ist demzufolge das Feld 'Video' in dem Datensatz vorhanden, jedoch kein entsprechendes untergeordnetes 'Resolution'-Feld instanziiert, kann eine Definitionsebene in der Spalte 'Video.Resolution.Width' eingetragen werden. Ist das Feld 'Video.Resolution' in dem Datensatz vorhanden, jedoch kein entsprechendes untergeordnetes 'Width”-Feld instanziiert, kann eine Definitionsebene eingetragen werden. Ist das Feld 'Video.Resolution.Width' in dem Datensatz vorhanden, kann eine Definitionsebene von '3' eingetragen werden.
  • In dieser Form kann eine Definitionsebene für jedes Datenelement oder Abschnitt eines Datenelementes in dem Datensatz erzeugt werden. So kann der Pfad 'Video.Resolution.Width' beispielsweise eine Definitionsebene von '3' umfassen, die die Menge an Datenelementen identifiziert, die in dem Pfad 'Video.Resolution.Width' beinhalten ist. Als weiteres Beispiel kann der Pfad 'Video.Resolution' eine Definitionsebene von '2' umfassen, die die Menge an Datenelementen identifiziert, die in dem Pfad 'Video.Resolution' beinhalten sind, obwohl das Width'-Datenelement nicht in dem Datensatz instanziiert war.
  • Demgemäß kann, immer wenn die 'Definition'-Ebene (die die Anzahl von Feldern darstellt, die undefiniert sein könnten, jedoch tatsächlich definiert sind) weniger als die Zahl von Feldern, die definiert werden könnte, ist, ein fehlendes Vorkommen des 'Width'-Feldes identifiziert werden.
  • In verschiedenen Beispielen handelt es sich bei einer 'Definition'-Ebene um einen Booleschen Wert anstelle einer Ganzzahl. Ein Boolescher Wert kann dann anstelle einer Ganzzahl verwendet werden, wenn bekannt ist, welches beinhaltende Objekt undefiniert jedoch nicht wichtig war. So kann beispielsweise eine Definitionsebene für einen Wert für das Width-Feld des 'Video.Resolution.Width'-Pfades 'NULL' sein, wenn das System nicht wissen muss, welche der übergeordneten Felder instanziiert sind. Mit der Kombination der 'Repetition'-Ebene und der 'Definition'-Ebene wird ein Rekonstruieren des Datensatzes ermöglicht.
  • Eine Datenspalte für ein bestimmtes Feld (beispielsweise das Feld 'Video.Resolution.Width') kann die Werte für das Feld von mehreren Datensätzen, entsprechenden Repetition- und Definitionsebenen (unter Anerkennung dass einige 'missing' (fehlende) Werte eine Repetitions- und eine Definitionsebene umfassen können) und Header-Informationen beinhalten. In einigen Beispielen werden die Werte aufeinanderfolgend und angrenzend gespeichert. Mit anderen Worten, wenn ein Wert für ein 'Video.Resolution.Width'-Feld '700' war und der Wert für ein nächstes 'Video.Resolution.Width'-Feld '800' war, kann ein Abschnitt der Spalte in ihrer in dem Speicher gespeicherten Form als '700800' gelesen werden. In diesem Beispiel kann ein Header in der Spalte identifizieren, dass jeder Wert eine festgelegte Breite (beispielsweise eine festgelegte binäre Darstellung zum Halten der Zahlen 700 und 800) aufweist.
  • In einigen Beispielen werden die gespeicherten Werte durch Zeichenfolgen dargestellt. So können die Instanzen des 'Width'-Feldes die Werte 'Small' und 'Medium' beinhalten. In einigen Beispielen können die verschiedenen Zeichenfolgewerte einer festgelegten Länge (beispielsweise kann dem Anfang oder dem Ende des 'Small'-Wertes ein Nullwert hinzugefügt werden, um der Zeichenfolge mit derselben Länge wie dem 'Medium'-Wert zu versehen) sein. In einigen Beispielen kann jedoch jede gespeicherte Zeichenfolge eine Kennung in einem Anfangsanschnitt der Zeichenfolge beinhalten, die eine Länge der Zeichenfolge identifiziert. So kann beispielsweise der 'small'-Wert eine Kennung beinhalten, die anzeigt, dass die Zeichenfolge fünf Dezimalstellen lang ist (oder eine entsprechende Zahl von binären Bits).
  • Da die Werte aufeinanderfolgend in dem Spaltenstreifen gespeichert werden können, können die 'Repetition- und 'Definition'-Ebenen am Anfang des Spaltenstreifens gespeichert werden. In einigen Beispielen werden die 'Repetition' und 'Definition'-Ebene in Paaren für einen bestimmten Wert (ungeachtet ob instanziiert oder fehlend) gespeichert. Als Veranschaulichung kann eine Repetitionsebene von 3 in den ersten vier Bits eines Byte und eine Definitionsebene von 1 in den letzten vier Bits des Byte gespeichert werden. Ein nächstes Byte in dem Header kann eine Repetitionsebene und eine Definitionsebene für die nächste Instanz des Feldes in dem Datensatz (oder der ersten Instanz in dem sich anschließenden Datensatz) beinhalten.
  • Die Anzahl von Bits, die zum Darstellen der Repetition- und Definitionsebenen verwendet werden, können auf dem maximalen Ebenenwert basieren. Wenn beispielsweise eine maximale Repetitionsebene 3 ist, kann die Repetitionsebene mit zwei Bits dargestellt werden. Wenn die maximale Repetitionsebene 4 ist, kann die Repetitionsebene mit drei Bits dargestellt werden. Der Header kann Informationen beinhalten, die die Länge der Repetitions- und Definitionsebene identifizieren.
  • In verschiedenen Beispielen können die Repetitionsebenen aufeinanderfolgend in dem Speicher und die Definitionsebenen aufeinanderfolgend in dem Speicher (beispielsweise nicht in Paaren) gespeichert werden. In verschiedenen Beispielen können die Repetitions- und Definitionsebenen in einer Gruppe mit ihren entsprechenden Wert (wenn der Wert instanziiert ist) gespeichert werden. Mit anderen Worten kann sich eine Folge von Informationen in dem Spaltenstreifen als
    Value (Wert) 1: RepetitionLevel (Repetitionsebene) 1: DefinitionLevel (Definitionsebene) 1:
    Value (Wert) 2: RepetitionLevel (Repetitionsebene) 2: DefinitionLevel (Definitionsebene) 2
    und so weiter lesen.
  • Die Spaltenstreifen können zu Informationsblöcken komprimiert werden. So kann beispielsweise jeder Spaltenstreifen in eine Reihe an Blöcken aufgeteilt werden, wobei jeder Block seinen eigenen jeweiligen Header aufweist. Ein erster Block kann die ersten 800.000 Werte und ein zweiter Block kann die zweiten 800.000 Werte von einem Streifen aus 1,6 Millionen Werten umfassen. Ein Block-Header kann die Repetitions- und Definitionsebene zusammen mit zusätzlichen Informationen beinhalten, die verwendet werden können, um beim Analysieren des Abschnittes des Spaltenstreifens, der durch den Block dargestellt wird, und beim Rekonstruieren des Spaltenstreifens zu helfen.
  • In einigen Beispielen beinhaltet der Block-Header einen 'Assertion'(Zurechnungs)-Wert, der einen Typ von Daten identifiziert, der in den Werten des Blocks vorgefunden wird. So darf beispielsweise ein Block für das 'Video.Resolution.Width'-Feld keinerlei Werte beinhalten, die eine 'Large'-Breiteauflösung auflisten. Demgemäß kann der 'Assertion'-Wert anzeigen, dass die Werte nur 'Small'- und 'Medium'-Werte beinhalten. Wird eine Abfrage für Datensätze durchgeführt, die Videos mit 'High' (hoher) Breiteauflösung beinhalten, kann der beschriebene Block von dem Abfragesystem umgangen werden.
  • Das in diesem Dokument beschriebene System kann Abfragen an Spaltenstreifen ohne Rekonstruieren der Informationen in den Spaltenstreifen zu Datensätzen und ohne Laden von Informationen von den Spaltenstreifen in eine Datenbank (beispielsweise ohne die 'Insert'(Einfügen)-Klausel) durchführen. Demgemäß kann auf die Daten in-situ zugegriffen werden, was Einsparungen hinsichtlich der Datenberechnungsanalyse in hochstelliger Größenordnung bereitstellt.
  • Das Abfragesystem kann viele der Klauseln verwenden, die zum Abfragen von verwandten Datenbanken verwendet werden. Es können jedoch auch zusätzliche Klauseln verwendet werden die für nicht-verwandte Daten spezifisch sind. So können beispielsweise mit einer WITHIN(INNERHALB)-Klausel Operationen auf mehreren Instanzen eines Feldes innerhalb eines einzelnen Datensatzes oder eines Abschnittes eines Datensatzes durchgeführt werden. Eine verwandte Datenbank ist jedoch möglicherweise nicht zum Speichern von mehr als einer einzelnen Instanz eines Feldes in einer Zeile (beispielsweise eine Darstellung eines Datensatzes) in der Lage. Demzufolge ist eine Abfrage an einer verwandten Datenbank möglicherweise im Grunde genommen zum Durchführen von Abfragen 'innerhalb' eines Datensatzes nicht in der Lage.
  • Als ein Beispiel der WITHIN-Klausel können Werte für ein bestimmtes Feld multipliziert werden. Es sei angenommen, dass die Abfrageanweisungen anfordern dass alle Werte für 'MutualFund.InterestRate' (Gemeinsamer Fonds-Zinssatz) für einen bestimmten Datensatz zusammen multipliziert werden (wobei jeder Datensatz für einen bestimmten Kontoinhaber sein kann). Das Abfragesystem kann alle der 'MutualFund.InterestRate'-Werte innerhalb eines einzigen Datensatzes finden und diese zusammen multiplizieren.
  • Ein weiteres Beispiel einer Klausel, die für nicht-verwandte verschachtelte Daten spezifisch sein kann, ist die OMIT IF(WEGLASSEN, FALLS)-Klausel. Mit dieser Klausel kann ein Datensatz gefiltert werden, um Instanzen von Feldern zu entfernen, wenn eine bestimmte Bedingung erfüllt ist (beispielsweise kann ein neuer Spaltenstreifen oder Datensatz erstellt werden, wenn spezifizierte Felder entfernt werden). Als Veranschaulichung kann ein Streifen von Werten, die Angestelltengehälter auflisten, abgefragt werden, und ein neuer Streifen, der Angestellte mit Gehältern von über 90.000$ entfernt, kann unter Verwendung der OMIT IF-Klausel erstellt werden.
  • 1. EINFÜHRUNG
  • Paralleldatenverarbeitung mit großen Datenvolumen kann unter Verwendung von gemeinsam genutzten Cluster aus Standardisierungsmaschinen durchgeführt werden. Siehe L. A. Barroso und U. Holzle. The Datacenter as a Computer: An Introduction to the Design of Warehouse-Scale Machines. Morgan & Claypool Publishers, 2009. Ein Cluster kann eine Vielzahl von verteilten Anwendungen hosten, die Ressourcen gemeinsam nutzen, die unterschiedlichste Workloads umfassen und auf Maschinen mit unterschiedlichen Hardware-Parametern laufen. Eine einzelne Datenverarbeitungsmaschine in einer verteilten Anwendung braucht möglicherweise viel länger zum Ausführen einer jeweiligen Aufgabe als andere oder kann möglicherweise aufgrund von Störungen oder einen vorrangigen Zugriff durch ein Cluster-Verwaltungssystem die Aufgabe gar nicht erst abschließen. Demzufolge kann das Umgehen mit Stragglern (beispielsweise Datenverarbeitungsaufgaben mit erheblicher Latenz) und Störungen eine schnelle Ausführung und eine Fehlertoleranz erreichen. Siehe G. Czajkowski. Sorting 1PB with MapReduce. Official Google Blog, Nov. 2008. Auf http://googleblog.blogspot.com/2008/11/sorting-lpb-with-mapreduce.html.
  • Die Daten, die in Web- und wissenschaftlichen Datenberechnungen verwendet werden sind oftmals nicht-verwandt. Demzufolge kann in diesen Bereichen ein flexibles Datenmodell von Vorteil sein. Datenstrukturen, die in Programmiersprachen, Mitteilungen, die durch verteilte Systeme ausgetauscht werden, Webverkehrprotokollen usw. verwendet werden, tendieren möglicherweise ganz natürlich zu einer verschachtelten Darstellung. So kann eine verschachtelte Darstellung von Daten beispielsweise mehrere Felder beinhalten, die jeweils mehrere Ebenen von untergeordneten Feldern beinhaltet. Einige der untergeordneten Felder können entsprechende Daten beinhalten. Das Normalisieren und erneute Kombinieren solcher Daten auf einer Webskalierung kann vom Rechenaufwand her sehr kostenintensiv sein. Ein verschachteltes Datenmodell liegt einigen Bestandteilen der strukturierten Datenverarbeitung bei wichtigen Webunternehmen zugrunde.
  • Dieses Dokument beschreibt ein System, das die interaktive Analyse sehr großer Datensätze über gemeinsam genutzte Cluster von Zustandsmaschinen unterstützt. Im Gegensatz zu herkömmlichen Datenbanken ist es in der Lage, in-situ an verschachtelten Daten zu operieren. In-situ bezeichnet die Fähigkeit, auf Daten 'auf der Stelle', beispielsweise in einem verteilten Dateisystem, wie dem Google File System (siehe S. Ghemawat, H. Gobioff und S.-T. Leung. The Google File System. In SOSP, 2003) oder einer anderen Speicherschicht wie Bigtable (siehe F. Chang, J. Dean, S. Ghemawat, W. C. Hsieh, D. A. Wallach, M. Burrows, T. Chandra, A. Fikes, and R. Gruber. Bigtable: A Distributed Storage System for Structured Data. In OSDI, 2006) zuzugreifen.
  • Das System kann viele Abfragen über solche Daten durchführen, die für gewöhnlich eine Folge an MapReduce-Aufgaben, jedoch in einem Bruchteil der Ausführungszeit durchführen. Siehe J. Dean und S. Ghemawat. MapReduce: Simplified Data Processing on Large Clusters. In OSDI, 2004. Das beschriebene System kann zusammen mit MapRedude verwendet werden, um Ausgaben von MapReduce-Pipelines zu analysieren, oder schneller Prototypen von größeren Datenberechnungen zu erstellen. Zu Verwendungsbeispielen des Systems gehören:
    • • Analyse von Webprotokollen und gekraulten Webdokumenten;
    • • Installieren von Daten für Anwendungen, die von einem Online-Marktplatz bedient werden;
    • • Crash-Daten für Anwendungsprodukte;
    • • Multimedia-Playback-Statistiken;
    • • OCR-Ergebnisse von Bücherscannen;
    • • Spamanalyse;
    • • Fehlerbeseitigung von gekachelten Karten;
    • • Tablettentfernungen in verwalteten Bigtable-Instanzen;
    • • Ergebnisse von Testläufen auf einem verteilten Build-System;
    • • Platten-E/A-Statistiken für Hunderttausende von Platten;
    • • Ausführungsprotokolle von MapReduce-Aufgaben über mehrere Datenzentren hinweg; und
    • • Symbole und Abhängigkeiten in einer Code-Basis.
  • Das beschriebene System baut auf Ideen von der Websuche und parallelen Datenbankverwaltungssystemen auf. Zunächst baut seine Architektur auf dem Konzept eines Bereitstellungsbaums in verteilten Suchmaschinen auf. Siehe J. Dean. Challenges in Building Large-Scale Information Retrieval Systems: Invited Talk. In WSDM, 2009. Wie bei einer Websucheanfrage wird eine Abfrage einen Baum hinuntergeschoben und bei jedem Schritt neu geschrieben. Das Ergebnis der Abfrage wird durch Zusammenfassen der Antworten assembliert, die von den unteren Ebenen des Baums empfangen werden.
  • Zweitens, stellt das beschriebene System eine Highlevel-, SQL-ähnliche Sprache bereit, um ad-hoc-Abfragen auszudrücken. Im Gegensatz zu Schichten wie Pig (siehe C. Olston, B. Reed, U. Srivastava, R. Kumar, and A. Tomkins. Pig Latin: a Not-so-Foreign Language for Data Processing. in SIGMOD, 2008.) und Hive (Hive. http://wiki.apache.org/hadoop/Hive, 2009), führt das Abfragesystem Abfragen nativ, ohne sie in MapReduce-Aufgaben zu übersetzen, durch.
  • Schließlich, verwendet das beschriebene System eine Spaltenstreifen-Speicherdarstellung, mit der es weniger Daten aus dem sekundären Speicher lesen und CPU-Kosten aufgrund von kostengünstigeren Komprimierungen senken kann. Von Spaltenspeichern zum Analysieren von verwandten Daten (D. J. Abadi, P. A. Boncz und S. Harizopoulos. Column-Oriented Database Systems. VLDB, 2(2), 2009, wird nicht angenommen, dass sie auf verschachtelte Datenmodelle erweitert worden sind. Das Spaltenspeicherformat, das beschrieben wird, kann von MapReduce, Sawzall unterstützt werden (siehe R. Pike, S. Dorward, R. Griesemer, and S. Quinlan). Interpreting the Data: Parallel Analysis with Sawzall. Scientific Programming, 13(4), 2005) und FlumeJava (siehe C. Chambers, A. Raniwala, F. Perry, S. Adams, R. Henry, R. Bradshaw und N. Weizenbaum. FlumeJava: Easy, Efficient Data-Parallel Pipelines. in PLDI, 2010).
  • In Abschnitt 4 beschreibt dieses Dokument ein Spaltenspeicherformat für verschachtelte Daten. Es werden Algorithmen zum Zerlegen von verschachtelten Datensätzen in Spalten und ihr erneutes Zusammenstellen (Reassemblieren) dargestellt.
  • In Abschnitt 5 wird eine Abfragesprache zum Verarbeiten von Daten beschrieben, die in dem Spaltenspeicherformat gespeichert werden. Die Abfragesprache und die Ausführung der Sprache für ein effizientes Operieren verschachtelten Daten als Spaltenstreifen ausgelegt und erfordern kein Umstrukturieren der verschachtelten Datensätze.
  • In Abschnitt 6 wird eine Veranschaulichung des Anwendens von Ausführungsbäumen bereitgestellt, die in Websuchesystemen zur Datenbankverarbeitung verwendet werden. Es werden die Vorteile für ein effizientes Beantworten von Zusammenfassungsabfragen erläutert.
  • In Abschnitt 7 werden Experimente an Systeminstanzen dargestellt.
  • ABSCHNITT 2: BEISPIELHAFTES SZENARIO
  • Es sei angenommen, dass Alice, eine Technikerin bei einem Websucheunternehmen, eine Idee für das Extrahieren neuer Arten von Signalen aus Webseiten bekommt. Sie führt eine MapReduce-Aufgabe aus, die sich durch die Eingabedaten zieht, die Inhalt von den Webseiten beinhalten und produziert einen Datensatz, der neue Signale beinhaltet, die in Milliarden von Datensätzen in einem verteilten Dateisystem gespeichert werden. Um die Ergebnisse ihres Experimentes zu analysieren, startet sie das in diesem Dokument beschriebene System und führt mehrere interaktive Befehle aus:
    DEFINE TABLE t AS /path/to/data/*
    SELECT TOP(signal1, 100), COUNT(*) FROM t
  • Alices Befehle werden in Sekunden ausgeführt. Sie führt einige andere Abfragen durch, um sich selbst zu überzeugen, dass ihr Algorithmus funktioniert. Sie findet eine Unregelmäßigkeit in Signal und untersucht dies genauer, indem sie ein FlumeJava-Programm schreibt, das eine komplexere analytische Datenberechnung an ihrem ausgegebenen Datensatz durchführt. Sobald das Problem behoben ist, richtet sie eine Pipeline ein, die die eingehenden Daten fortlaufend bearbeitet. Sie formuliert einige gekapselte SQL-Abfragen, die die Ergebnisse ihrer Pipeline über verschiedene Dimensionen zusammenfasst und fügt diese einem interaktiven Dashboard (beispielsweise einer Webseite über einen Dienst, der den Dienst erklärt und Einzelheiten zu Statistiken zu dem Dienst anführt) hinzu. Schließlich registriert sie ihren neuen Datensatz in einem Katalog, so dass andere Techniker den Datensatz schnell finden und auf ihn zugreifen können.
  • Das vorstehende Szenario erfordert möglicherweise die Interoperation zwischen dem Abfrageprozessor und anderen Datenverwaltungstools. Der erste bildende Bestandteil einer solchen Interoperation ist eine gemeinsame Speicherschicht. Das Google File System ist eine solche verteilte Speicherschicht, die verwendet werden kann. Das Google File System verwaltet große replizierte Datensätze über Tausende von Maschinen und Zehntausende von Platten.
  • Replizierung hilft bei der Wahrung der Daten trotz fehlerhafter Hardware und erzielt schnelle Antwortzeiten bei der Anwesenheit von Stragglern. Eine gemeinsam genutzte Hochleistungs-Speicherschicht ist ein ausschlaggebender Schlüsselfaktor für eine in-situ-Datenverwaltung. Es ermöglicht das Zugreifen auf Daten ohne eine zeitaufwändige Phase des Ladens, das ein großes Hindernis für die Verwendung von Datenbanken für die analytische Datenverarbeitung ist (wo oftmals möglicherweise Dutzende von MapReduce-Analysen ausgeführt werden, bevor ein Datenbankverwaltungssystem die Daten laden und (auch nur) eine einzige Abfrage ausführen kann). Wird ein Datenbankverwaltungssystem zum Analysieren von Daten verwendet, muss die Datenbank möglicherweise unter Verwendung von 'Insert'(Einfügen)-Befehlen durch die Daten geladen werden. Solch ein Laden wird möglicherweise von dem beschriebenen System nicht benötigt. Als weiterer Vorteil können Daten in einem Dateisystem praktischerweise unter Verwendung von Standardtools, beispielsweise zum Übertragen an ein anderes Cluster, Ändern von Zugriffsprivilegien oder Identifizieren einer Teilmenge von Daten zur Analyse auf der Grundlage von Dateinamen manipuliert werden.
  • Ein zweiter bildender Bestandteil zum Erstellen von interoperierbaren Datenverwaltungskomponenten ist ein gemeinsam genutztes Speicherformat. Es wird ein Spaltenspeicher für flache verwandte Daten verwendet, durch ein Anpassen des Spaltenspeichers an ein verschachteltes Datenmodell, kann das Verfahren jedoch auf Webdaten angewendet werden. 1 veranschaulicht die Idee, dass alle Werte eines verschachtelten Feldes in einer Datenstruktur zusammenhängend gespeichert werden. So werden beispielsweise bei der an Spalten ausgerichteten Darstellung verschachtelter Daten alle Werte für ein bestimmtes verschachteltes Feld innerhalb einer Datenstruktur (beispielsweise das Feld A.B.C) aneinander angrenzend und im Speicher zusammenhängend gespeichert. Demzufolge können Werte für das Feld A.B.C aus dem Speicher abgerufen werden, ohne dass die Werte von dem Feld A.E und Werte von dem Feld A.B.D gelesen werden.
  • Zusätzlich dazu können Werte für dasselbe bestimmte Feld in unterschiedlichen Instanzen einer Datenstruktur (beispielsweise ein 'record' (Datensatz)) zusammenhängend gespeichert werden. So werden beispielsweise die Werte für das Feld A.B.C für den Datensatz 'r1' angrenzend an die Werte für dasselbe Feld für den Datensatz 'r2' gespeichert. Im Gegensatz dazu werden in der 'datensatzorientierten' Darstellung verschachtelter Daten Werte für alle Felder innerhalb eines bestimmten Datensatzes zusammenhängend gespeichert. Mit anderen Worten werden Datenwerte für ein bestimmtes Feld nicht zusammengelegt.
  • Die Herausforderung, die das beschriebene Spaltenspeicherformat angeht, besteht darin, wie alle strukturbezogenen Informationen gewahrt werden und wie Datensätze aus willkürlichen Teilmengen von Feldern rekonstruiert werden können. Dieses Dokument beschreibt das Datenmodell, anhand dessen die Felder in dem Spaltenspeicherformat gefüllt werden können und sich dann Algorithmen zum Bearbeiten der Spaltenspeicher und zur Abfragebearbeitung an Daten in dem Spaltenspeicher zugewendet werden kann.
  • ABSCHNITT 3: DATENMODELL
  • Dieser Abschnitt beschreibt das Datenmodell, das von dem beschriebenen System verwendet wird und führt einige Begriffe ein, die an spätere Stelle verwendet werden. Das beschriebene Protocol-Buffer-Datenmodell hat seinen Ursprung im Kontext von verteilten Systemen und ist als eine Open-Source-Implementierung verfügbar. Siehe (Protocol Buffers: Developer Guide. Available at http://code.google.com/apis/protocolbuffers/docs/overview.html). Das Datenmodell basiert auf stark typisierten verschachtelten Datensätzen. Seine abstrakte Syntax wird bereitgestellt durch:
    τ = dom|< A1:τ [*|?], ..., An:τ[*|?]>
    wobei τ ein atomischer Typ oder ein Datensatztyp ist. Atomische Typen in 'dom' umfassen Ganzzahlen, Gleitkommazahlen, Zeichenfolgen usw. Der Datensatz besteht aus einem oder mehreren Feldern. Feld i in einem Datensatz hat einen Namen A; und ein optionales Multiplizitätsetikett. Wiederholte Felder (*) können mehrere Male in einem Datensatz vorkommen. Sie werden als Listen von Werten interpretiert, das heißt, die Reihenfolge des Vorkommens von Feldern in einem Datensatz ist von wichtiger Bedeutung. Optionale Felder (?) können in dem Datensatz fehlen. Anderenfalls ist ein Feld erforderlich (muss beispielsweise genau ein Mal vorkommen).
  • Als Veranschaulichung stellt 2 ein Schema dar, das ein Dokument des Datensatztyps definiert, das ein Webdokument darstellt. Die Schemadefinition verwendet die Protocol-Buffer-Syntax. Ein 'Dokument' hat eine erforderliche Ganzzahl 'Docld' und optionale 'Links', die eine Liste an 'Forward'(Vorwärts)- und 'Backward'(Rückwärts)-Einträgen beinhalten, die 'Doclds' anderer Webseiten halten. Ein 'Dokument' kann mehrere 'Names' haben, bei denen es sich um verschiedene URLs handelt, über die das Dokument referenziert werden kann. Ein 'Name' beinhaltet eine Folge aus 'Code'- und (optionalen) 'Country'-Paaren. 2 zeigt ferner zwei musterhafte Datensätze r1 und r2, die dem Schema entsprechen. Die Datensatzstruktur wird unter Verwendung von Einrückung umrissen. Die musterhaften Datensätze r1 und r2 in 2 werden zum Beschreiben der Algorithmen im Verlauf dieses Dokumentes verwendet. Die in dem Schema definierten Felder bilden eine Baumhierarchie. Der vollständige Pfad eines verschachtelten Datenfeldes wird unter Verwendung einer gestrichelte Anmerkung bezeichnet. So ist beispielsweise Name.Language.Code der vollständige Pfadname für das in 2 dargestellte 'Code'-Feld.
  • Das verschachtelte Datenmodell unterstützt einen plattformunabhängigen, erweiterbaren Mechanismus zum Serialisieren von strukturierten Daten. Tools zum Erstellen von Codes erzeugen Bindungen für unterschiedliche Programmiersprachen wie etwa C++ oder Java. Interoperabilität zwischen mehreren Sprachen wird unter Verwendung einer standardmäßigen binären ”On-the-wire”-Darstellung von Datensätzen erzielt, bei der Feldwerte sequenziell, wie sie in dem Datensatz vorkommen, angeordnet werden. Auf diese Weise kann ein MapReduce-Programm, das in Java geschrieben ist, Datensätze von einer Datenquelle konsumieren, die über eine C++-Bibliothek zugänglich ist. Demzufolge kann, wenn Datensätze in einer Spaltendarstellung gespeichert werden, ihr schnelles Zusammenstellen die Interoperation mit MapReduce und anderen Datenverarbeitungs-Tools unterstützen.
  • ABSCHNITT 4: VERSCHACHTELTE SPALTENSPEICHER
  • Wie in 1 veranschaulicht ist, besteht ein Ziel darin, alle Werte eines jeweiligen Feldes aufeinanderfolgend zu speichern, um die Abrufeffizienz zu verbessern. Dieser Abschnitt widmet sich den Herausforderungen hinsichtlich einer verlustfreien Darstellung von Datensatzstruktur in einem Spaltenformat (Abschnitt 4.1), Fast Encoding (schnelles Codieren) (Abschnitt 4.2) und effizientem Assemblieren von Datensätzen (Abschnitt 4.3).
  • ABSCHNITT 4.1: REPETITIONS- UND DEFINITIONSEBENEN
  • Eine aufeinanderfolgende Auflistung von Werten allein liefert noch keine Struktur eines Datensatzes. Betrachtet man zwei Werte eines Feldes, das in einem Datensatz wiederholt wird, ist ein System möglicherweise nicht in der Lage zu bestimmen, auf welcher 'Ebene' der Wert wiederholt wird (beispielsweise ob die zwei Werte von verschiedenen Datensätzen oder von demselben Datensatz sind). Auf gleiche Weise geben, wenn ein optionales Feld aus einem Datensatz fehlt, Werte allein nicht bekannt, welche einschließenden Datensätze explizit definiert wurden und welche nicht. Demgemäß werden die Konzepte von Repetitions- und Definitionsebenen vorgestellt. 3 umfasst Tabellen, die die Repetitions- und Definitionsebenen für atomische Felder in denselben Datensätzen zusammenfassen, die in 1 dargestellt sind.
  • Repetitionsebenen. Betrachtet werden soll das Feld 'Code' in 2. Es kommt im Datensatz 'r1' dreimal vor. Vorkommen von 'en-us' und 'en' liegen innerhalb des ersten 'Name'-Feldes während 'en-gb' im dritten 'Name'-Feld vorhanden ist. Um diese Vorkommen in der Spaltenstruktur zu disambiguieren, wird jedem Wert eine Repetitionsebene angehängt, die in der Spaltenstruktur gespeichert werden soll. Die Repetitionsebene zeigt an, bei welchem wiederholten Feld in dem Feldpfad sich der Wert wiederholt. So beinhaltet der Feldpfad Name.Language.Code beispielsweise zwei Felder, die wiederholt werden, 'Name' und 'language'. Demzufolge liegt die Repetitionsebene von Code zwischen 0 und 2. Ebene 0 bezeichnet den Anfang eines neuen Datensatzes, Ebene 1 bezeichnet eine kürzliche Wiederholung beim 'Name'-Feld und Ebene 2 bezeichnet eine kürzliche Wiederholung beim 'language'-Feld.
  • Als Veranschaulichung des Bestimmens der Ebene für ein Feld kann der Datensatz 'r1' von oben nach unten gescannt werden. Der Wert 'en-us' kommt zuerst vor, und es kann eine Prüfung durchgeführt werden, um das Feld in dem Pfad Name.Language.Code zu identifizieren, das am aktuellsten in dem Datensatz wiederholt wurde. In diesem Beispiel wurde keines der Felder wiederholt, und demzufolge ist die Repetitionsebene 0. Der Wert kommt als Nächstes für den Pfad Name.Language.Code vor, und das Feld 'language' wird als das Feld identifiziert, das am aktuellsten wiederholt wurde. So ist beispielsweise beim Scannen nach oben von dem Wert 'en' das erste Feld in dem Pfad Name.Language.Code, das sich wiederholt, 'Language'. Demzufolge ist die Repetitionsebene 2 (beispielsweise da 12' dem 'Language'-Feld entspricht, da 'Language' das zweite Feld in dem Pfad Name.Language.Code ist, das sich wiederholt). Schließlich hat sich, wenn der Wert 'en-gb' vorkommt, das Feld 'Name' am aktuellsten wiederholt (das Feld 'Language' trat nur einmal nach Name auf), demzufolge ist die Repetitionsebene 1. Mit anderen Worten kann die Repetitionsebene für einen Wert eine Zahl sein, die ein am aktuellsten wiederholtes Feld darstellt. Demzufolge sind die Repetitionsebenen von Codewerten in dem Datensatz 'r1' 0, 2, 1.
  • Hierbei ist zu beachten, dass das zweite 'Name'-Feld in dem Datensatz 'r1' keinerlei Werte für das Feld 'Code' beinhaltet. Um zu bestimmen, dass 'en-gb' als ein Wert für Feld vorkommt, das innerhalb der dritten Instanz des Feldes 'Name' und nicht in der zweiten Instanz verschachtelt ist, wird ein NULL-Wert zwischen die Werte 'en' und 'en-gb' hinzugefügt, wenn sie in der Spaltenstruktur (siehe 3) gespeichert werden. 'Code' ist ein erforderliches untergeordnetes Feld des 'Language'-Feldes, so dass die Tatsache, dass ein Wert für das 'Code'-Feld fehlt, impliziert, dass das 'Language'-Feld ebenfalls nicht definiert ist. Im Allgemeinen kann das Bestimmen der Ebene, bis auf die, auf der verschachtelte Datensätze vorhanden sind, zusätzliche Informationen erfordern.
  • Definitionsebenen. Jeder Wert eines Feldes mit dem Pfad 'p', insbesondere jeder NULL-Wert, besitzt ein 'definition level' (Definitionsebene), die spezifiziert, wie viele Felder in dem Pfad 'p', die undefiniert sein könnten (beispielsweise weil die Felder optional oder wiederholt sind) tatsächlich in dem Datensatz vorhanden sind. Um dies zu veranschaulichen, sei zu beachten, dass der Datensatz 'r1' keine Felder 'Backward' für das Feld 'Links' aufweist. Dennoch ist das Feld 'Links' definiert (auf einer Ebene von 1). Um diese Informationen zu bewahren, wird ein NULL-Wert mit einer Definitionsebene von 1 der Spalte 'Links.Backward' hinzugefügt.
  • Mit anderen Worten zeigt das Spezifizieren einer Ebene von 1 für den Pfad 'Links.Backward' an, dass das Feld '1' optional oder wiederholt war (das heißt, das Feld 'Links') wurde in einem Pfad definiert, der zwei Felder beinhaltet die optional oder wiederholt sind (das heißt, das Feld 'Links' und das Feld 'Backward'). Demzufolge zeigt eine Definition von '1' an, dass das Feld 'Backward' nicht instanziiert war. Auf ähnliche Weise trägt das fehlende Vorkommen von 'Name.Language.Country' in dem Datensatz 'r2' eine Definitionsebene 1, während sein fehlendes Auftreten im Datensatz 'r1' jeweils Definitionsebenen von 2 (innerhalb von jeweils 'Name-Language') und 1 (innerhalb von 'Name') umfassen. Die vorstehend umrissene Codiervorgehensweise kann die Datensatzstruktur verlustfrei bewahren.
  • Codieren. Eine Spalte entspricht in ihrer in dem Speicher gespeicherten Form, einem bestimmten Feld, das mit einem Header gespeichert werden kann, der eine zusammenhängende Auflistung von Repetitions- und Definitionswerten, gefolgt von einer zusammenhängenden Auflistung der substantiven Werte beinhaltet. Jeder Sättigungs- und Definitionswert kann als eine Bitfolge (beispielsweise in einem einzelnen Byte) gespeichert sein. So können beispielsweise die ersten vier Bits eines Bytes zum Darstellen der Repetitionsebene für einen bestimmten und die letzten vier Bits zum Darstellen der Definitionsebene verwendet werden. Bei einigen Beispielen kann der Header Definitionen von Längen der Zahl an Bits beinhalten, so dass Begrenzer verwendet werden können. Auf diese Weise können Bits, nur wenn sie notwendig sind, verwendet werden. Beträgt die maximale Definitionsebene beispielsweise 3, können zwei Bits pro Definitionsebene verwendet werden.
  • Demgemäß kann eine Darstellung von Spaltendaten für ein einzelnes Feld (beispielsweise das Feld 'Name.Language.Code') in dem Speicher mit einer Bytefolge gespeichert werden, die die Repetitions- und Definitionsebenen für eine entsprechende Folge an Werten, gefolgt von einer Folge an Werten, darstellt. NULL-Werte können jedoch nicht explizit gespeichert werden, da sie durch Analysieren der Definitionsebenen bestimmt werden können. So kann beispielsweise jede beliebige Definitionsebene, die kleiner als die Anzahl der wiederholten und optionalen Felder in einem Pfad eines Feldes ist, eine NULL bezeichnen. Demzufolge kann ein System in der Lage sein zu bestimmen, wo in einer Auflistung aufeinanderfolgender Werte ein NULL-Wert eingefügt oder inferiert werden sollte. In einigen Beispielen werden Definitionsebenen nicht für Werte gespeichert, die immer und stets definiert sind. Auf ähnliche Weise können Repetitionsebenen nur gespeichert werden, wenn sie erforderlich sind. So impliziert etwa eine Definitionsebene von 0 eine Repetitionsebene von 0, dementsprechend kann die Letztgenannte weggelassen werden. In der Tat können durch Verweisen auf die in 3 veranschaulichten Strukturen keine Ebenen für das Feld 'Docld' gespeichert werden.
  • Eine Darstellung von Spaltendaten kann in eine Reihe von Blöcken unterteilt werden. Jeder Block kann einen Header beinhalten, der die Informationen zu den Repetitions- und Definitionsebenen und eine sich anschließende Auflistung der Werte fair das Feld beinhaltet. Jeder Header kann einen 'constraint'(Zwangsbedingungs)-Wert beinhalten, der einen zulässigen Wertebereich in dem Block anzeigt. Auf diese Weise kann das beschriebene System Identifizieren, welche Blöcke Daten beinhalten, an denen das System interessiert ist. Die Zwangsbedingung kann auch andere Eigenschaften der Werte, so etwa, ob die Werte sortiert worden sind, anzeigen. Im Allgemeinen kann man sich das 'constraint' als eine 'assertion' (Zurechnung) darüber, welche Art von Werten in dem Block gefunden werden, vorstellen. Jeder Block kann komprimiert werden.
  • ABSCHNITT 4.2 ZERLEGEN VON DATENSÄTZEN IN SPALTEN
  • Die vorstehende Beschreibung widmete sich einer Codierung der Datensatzstruktur in einem Spaltenformat. Eine Herausforderung besteht nun darin, Spaltenstreifen mit Repetition- und Definitionsebenen effizient zu produzieren. Der grundlegende Algorithmus zum Berechnen von Repetitions- und Definitionsebenen wird nachstehend bereitgestellt. Der Algorithmus kehrt in die Datenstruktur wieder und berechnet die Ebenen für jeden Feldwert. Wie weiter oben veranschaulicht, müssen die Repetitions- und Definitionsebenen möglicherweise selbst, wenn die Feldwerte fehlen, berechnet werden. Viele Datensätze sind dünn besetzt, und es ist möglicherweise nicht unüblich, ein Schema mit Tausenden von Feldern zu haben, von denen nur Einhundert in einem jeweiligen Datensatz verwendet werden. Demzufolge ist es möglicherweise von Vorteil, fehlende Felder so kostengünstig wie möglich zu bearbeiten. Um Spaltenstreifen zu erzeugen, wird ein Baum aus Feld-Schreibelementen erstellt, dessen Struktur mit der Feldhierarchie in dem Schema übereinstimmt. Die grundlegende Idee besteht darin, Feld-Schreibelemente nur dann zu aktualisieren, wenn sie ihre eigenen Daten umfassen, und nicht zu versuchen, den übergeordneten Zustand nach unten im Baum weiterzugeben, es sei denn, dies ist absolut erforderlich. Um dies zu tun, bekommen untergeordnete Schreibelemente die Ebenen von ihren übergeordneten Elementen übertragen. Ein untergeordnetes Schreibelement synchronisiert sich mit den Ebenen seines übergeordneten Schreibelementes immer dann, wenn ein neuer Wert hinzugefügt wird.
  • Ein beispielhafter Algorithmus zum Zerlegen eines Datensatzes in Spalten ist in 4 dargestellt. Die Vorgehensweise 'DissectRecord' (Datensatz zerlegen) wird an die Instanz eines 'RecordDecoder' (Datensatz-Decodierer) weitergeleitet, der zum Durchlaufen von binärcodierten Datensätzen verwendet wird. 'FieldWriters' (Feld-Schreibelemente) bilden eine Baumhierarchie, die isomorph mit der des Eingabeschemas ist. Der Root 'FieldWriter' wird für jeden neuen Datensatz an den Algorithmus weitergeleitet, wobei die 'Repetitionsebene' auf 0 gesetzt wird. Die vorrangige Aufgabe der Vorgehensweise 'DissectRecord' besteht im Beibehalten der aktuellen 'Repetitionsebene'. Die aktuelle 'Definitionsebene' ist eindeutig durch die Baumposition des aktuellen Schreibelementes als Summe der Anzahl von optionalen und wiederholten Feldern in dem Pfad des Feldes bestimmt.
  • Die Obgleich-Schleife des Algorithmus (Zeile 5) wird über alle atomischen und datensatzbewertete Felder iteriert, die in einem jeweiligen Datensatz beinhalten sind. Das eingestellte 'seenFields' (geseheneFelder) verfolgt, ob ein Feld in dem Datensatz eingestellt wurde oder nicht. Es wird verwendet, um zu bestimmen, welches Feld am aktuellsten wiederholt wurde. Die untergeordnete Repetitionsebene 'chRepetitionLevel' wird auf die des am aktuellsten wiederholten Feldes eingestellt oder geht anderenfalls auf ihre standardmäßige übergeordnete Ebene zurück (Zeilen 9–13). Die Vorgehensweise wird rekursiv an verschachtelten Datensätzen aufgerufen (Linie 18).
  • Das vorstehende Dokument referenzierte 'FieldWriters” und akkumuliert Ebenen und leitet sie erst an Schreibelemente niedrigere Ebenen. Dies kann von jedem Nicht-Leaf-Schreibelement durchgeführt werden, das eine Folge von (Repetitions-, Definition-)Ebenen) hält. Jedes Schreibelement weist ferner eine ihm zugewiesene 'Version'-Zahl auf. Einfach ausgedrückt wird eine Schreibelement-Version immer dann um Eins erhöht, wenn eine Ebene hinzugefügt wird. Es reicht aus, wenn untergeordnete Elemente die letzte Version des übergeordneten Elementes, das sie synchronisiert haben, erinnern. Wenn ein untergeordnetes Schreibelement seinen eigenen (Nicht-Null) Wert erhält, synchronisiert es seinen Zustand mit dem übergeordneten Element, indem es neue Ebenen abruft und fügt anschließend nur die neuen Daten hinzu.
  • Da Eingabedaten Tausende an Feldern und Millionen von Datensätzen umfassen können, ist es möglicherweise nicht machbar, alle Ebenen im Speicher zu speichern. Einige Ebenen können vorrübergehend in einer Datei oder auf einer Platte gespeichert werden. Für ein verlustfreies Codieren von leeren (Teil-)Datensätzen, benötigen nicht-atomische Felder (wie etwa Name.Language in 2) möglicherweise selbst Spaltenstreifen, die nur Ebenen jedoch keine Nicht-NULL-Werte umfassen.
  • ABSCHNITT 4.3: ASSEMBLIERUNG DES DATENSATZES
  • Das Assemblieren von Datensätzen (beispielsweise Datensätze 'r1' und 'r2') auf effiziente Weise ist für datensatzorientierte Datenverarbeitungs-Tools (beispielsweise MapReduce) von großer Bedeutung. Es sei eine Teilmenge von Feldern gegeben, so besteht ein Ziel darin, die ursprünglichen Datensätze so zu rekonstruieren, als ob sie lediglich die ausgewählten Felder enthielten und alle anderen Felder entfernt worden sind. Die Schlüsselidee besteht darin, eine finite Zustandsmaschine (FSM) zu erstellen, die die Feldwerte und Ebenen für jedes Feld liest und die Werte sequenziell an die ausgegebenen Datensätze anhängt. Eine FSM entspricht einen Feld-Leseelement für jedes ausgewählte Feld. Zustandsübergänge werden mit Repetitionsebenen gekennzeichnet. Sobald ein Leseelement einen Wert abruft, wird die nächste Repetitionsebene betrachtet, um zu entscheiden, welches nächste Leseelement zu verwenden ist. Die FSM wird für jeden Datensatz vom Anfang- bis zum Endzustand durchlaufen.
  • 5 zeigt eine FSM, die die vollständigen Datensätze in unserem laufenden Beispiel unter Verwendung der in Abschnitt 4.1 beschriebenen Blöcke als Eingabe rekonstruiert. In diesem Beispiel werden die Knoten mit Feldern gekennzeichnet und die Kanten werden mit Repetitionsebenen gekennzeichnet. Der Anfangszustand ist 'Docld'. Sobald ein 'Docld'-Wert gelesen wird, geht die FSM in den 'Links.Backward'-Zustand über. Nachdem alle wiederholten 'Backward'-Werte entleert worden sind, springt die FSM zu 'Links.Forward', usw.
  • Um umrissartig zu beschreiben, wie FSM-Übergänge konstruiert werden, sei angenommen dass '1' die nächste Repetitionsebene ist, die von dem aktuellen Leseelement für das Feld 'f' zurückgegeben wird. Beginnend bei 'f' in dem Schemabaum (beispielsweise das Schema in 2) wird sein Vorgänger gefunden, der sich bei Ebene '1' wiederholt und es wird das erste Leaf-Feld 'n' innerhalb dieses Vorgängers ausgewählt. Damit wird ein FSM-Übergang ('f'; 'I') → n bereitgestellt. So sei beispielsweise 'I' = 1 die nächste Repetitionsebene, die von 'f' = 'Name.Language.Country.' gelesen wird. Sein Vorgänger mit Repetitionsebene ist Name, dessen erstes Leaf-Feld 'n' = 'Name.Ur1.' ist.
  • Muss nur eine Teilmenge an Feldern abgerufen werden, kann eine einfachere FSM konstruiert werden, die kostengünstiger in der Ausführung ist. 6 stellt eine FSM zum Lesen der Felder 'Docld' und 'Name.Language.Country.' bereit. Die Figur zeigt die ausgegebenen Datensätze 's1' und 's2', die von dem Automatismus produziert werden. Hierbei ist zu beachten, dass das Codieren und Assemblieren des Algorithmus die umschließende Struktur des Feldes 'Country' bewahren. Dies kann für Anwendungen wichtig sein, die beispielsweise auf ”Country” zugreifen müssen, das im ersten ”Language” des zweiten ”Name” erscheint. Bei XPath kann dies der Fähigkeit zum Bewerten von Ausdrücken wie /Name[2]/Language[1]/Country entsprechen.
  • Konstruierem einer FSM-Vorgehensweise. 7 zeigt einen Algorithmus zum Konstruieren einer endlichen Zustandsmaschine, die eine Datensatzzusammenstellung durchführt. Der Algorithmus nimmt als Eingabe die Felder, die in den Datensätzen belegt werden sollen, in der Reihenfolge, in der sie in dem Schema erscheinen. Der Algorithmus verwendet ein Konzept einer gemeinsamen 'Repetitionsebene' von zwei Feldern, bei der es sich um die Repetitionsebene ihres niedrigsten gemeinsamen Vorgängers handelt. So entspricht beispielsweise die gemeinsame Repetitionsebene von 'Links.Backward' und 'Links.Forward' 1. Das zweite Konzept besteht in dem eines 'Carrier' (Trägers), bei dem es sich um das nächste Feld in der Folge nach dem aktuellen handelt. Es wird angenommen, dass versucht wird, jedes Feld nacheinander so lange zu bearbeiten, bis die Grenze erreicht ist, und ein Sprung auf ein vorher gesehenes Feld erforderlich wird.
  • Das Algorithmus besteht aus drei Schritten. In Schritt 1 (Zeilen 6–10) werden die gemeinsamen Repetitionsebenen rückwärts bearbeitet. Diese sind garantiert nicht-ansteigend. Für jede Repetitionsebene, die vorkommt, wird das am weitesten links liegende Feld in der Folge herausgesucht – das ist das Feld, das als Übergang genutzt werden muss, wenn diese Repetitionsebene von einem 'FieldReaders.' (Feld-Leseelement) zurückgegeben wird. In Schritt 2 werden die Lücken gefüllt (Zeilen 11–14). Die Lücken entstehen, weil nicht alle Repetitionsebenen in den gemeinsamen Repetitionsebenen vorhanden sind, die in Zeile 8 berechnet wurden. In Schritt 3 (Zeilen 15–17) werden Übergänge für alle Ebenen eingestellt, die der Grenzebene entsprechen oder darunter liegen, an der zu dem Grenzfeld zu springen ist. Wenn ein 'FieldReader.' eine solche Ebene erzeugt, kann der verschachtelte Datensatz weiterhin konstruiert werden, und es besteht möglicherweise keine Notwendigkeit, von der Grenze zurückzudrängen.
  • Vorgehensweise zum Assemblieren eines Datensatzes. Eine Vorgehensweise zum Assemblieren eines Datensatzes (veranschaulicht in 8) nimmt als Eingabe eine Reihe von 'FieldReaders', und die FSM schafft (implizit) Zustandsübergänge zwischen den Leseelementen. Mit anderen Worten arbeitet der Algorithmus an der FSM und den Spaltendaten und gibt konstruierte Datensätze aus. Ein variables Leseelement hält die aktuellen 'FieldReaders' in der Hauptroutine (Zeile 4). Das Variable Leseelement hält die letzten zwei Leseelemente, deren Wert an den Datensatz angehängt ist und allen drei in 7 dargestellten Vorgehensweisen verfügbar ist. Die Haupt-”Obgleich-Schleife” ist in Zeile 5 dargestellt. Der nächste Wert wird von dem aktuellen Leseelement abgerufen. Wenn der Wert nicht NULL ist, was durch Betrachtung seiner Definitionsebene bestimmt wird, wird der Datensatz, der assembliert wird, auf die Datensatzstruktur des aktuellen Leseelementes in dem Verfahren 'MoveToLevel' (Gehe zu Ebene) synchronisiert, und der Feldwert wird an den Datensatz angehängt. Anderenfalls kann die Datensatzstruktur ohne Anhängen irgendeines Wertes angepasst werden, was bei Vorhandensein von leeren Datensätzen durchgeführt werden kann. Auf Zeile 12 wird eine 'full definition level' (vollständige Definitionsebene) verwendet. Es sei zu erinnern, dass die Definitionsebene erforderliche Felder ausklammert (nur wiederholte und optionales Felder werden gezählt). ”Full definition level” berücksichtigt alle Felder.
  • Die Vorgehensweise 'MovetoLevel' erstellt den Übergang vom Zustand des 'lastReader' zu dem der 'FieldReaders' (siehe Zeile 22). So sei beispielsweise angenommen, dass der 'lastReader' den 'Links' entspricht. 'Backward' (zurück) in 2 und 'nextReader' (nächstes Leseelement) ist 'Name.Language.Country.' Das Verfahren beendet den verschachtelten Datensatz Links und beginnt neue Datensätze ”Name” und ”Language”, in dieser Reihenfolge. Die Vorgehensweise 'ReturnsToLevel' (KehrtZurEbeneZurück) (Zeile 30) ist ein Gegenstück zu 'MoveToLevel' (ZuEbeneBewegen), das nur aktuelle Datensätze beendet, ohne neue anzufangen.
  • In ihrer ”on-the-wire”-Darstellung werden Datensätze als Paare einer Feldkennung angeordnet, die von einem Feldwert gefolgt wird. Verschachtelte Datensätze kann man sich so vorstellen, dass sie einen 'opening tag' und einen 'closing tag' ähnlich XML haben (die tatsächliche binäre Codierung kann anders sein). Eine Beschreibung des 'Beginnens' eines Datensatzes betrifft das Schreiben von ”opening tags”, während 'Beenden' eines Datensatzes das Schreiben von 'closing tags' betrifft.
  • ABSCHNITT 5: ABFRAGESPRACHE
  • Das beschriebene System kann eine Abfragesprache verwenden, die auf SQL basiert und die für eine effiziente Implementierung an spaltenförmigen verschachtelten Speicherungen eingerichtet ist. Hierin werden Aspekte der Abfragesprache beschrieben. Jede SQL-ähnliche Aussage (und algebraische Operators, in die sie übersetzbar ist) nimmt als Eingabe eine oder mehrere verschachtelte Tabellen (beispielsweise eine Reihe von komprimierten Blöcken an Spaltendaten, die eine Tabelle darstellen, wie in Abschnitt 4.1 beschrieben) und ihre Schemata, und erzeugt eine verschachtelte Tabelle (beispielsweise eine modifizierte Instanz der Spaltendaten) und ihr ausgegebenes Schema. 9 stellt eine musterhafte Abfrage dar, die Projektion, Auswahl und Aggregation (Zusammenfassung) innerhalb des Datensatzes durchführt. Die Abfrage wird über der Tabelle t = {r1, r2} aus 2 evaluiert. Die Felder werden unter Verwendung von Pfadausdrücken referenziert. Die Abfrage erzeugt ein verschachteltes Ergebnis, obgleich keine Datensatzkonstruktoren in der Abfrage vorhanden sind.
  • Um zu erklären, was die Abfrage tut, sei die Auswahloperation (die WOBEI-Klausel) betrachtet. Ein verschachtelter Datensatz sollte sich als ein gekennzeichneter Baum vorgestellt werden, bei dem jede Kennzeichnung einem Feldnamen entspricht. Der Auswahl-Operator schneidet die Äste des Baumes weg, die die spezifizierten Bedingungen nicht erfüllen. Auf diese Weise werden nur jene verschachtelten Datensätze erhalten, bei denen 'Name.Ur1' definiert ist und mit 'http' beginnt. Als Nächstes sei die Projektion betrachtet. Jeder skalare Ausdruck in der SELECT-(AUSWAHL)Klausel emittiert einen Wert auf derselben Verschachtelungsebene wie das am aktuellsten wiederholte Eingabefeld, das in diesem Ausdruck verwendet wird. Dementsprechend emittiert der Ausdruck der Zeichenfolgeverkettung 'Str'-Werte auf der Ebene von 'Name.Language.Country.' in das Eingabeschema.
  • Der COUNT-(ZÄHL)Ausdruck veranschaulicht die Aggregation innerhalb des Datensatzes. Die Aggregation wird INNERHALB eines jeden 'Name'-Teildatensatzes durchgeführt und emittiert die Anzahl der Vorkommen von 'Name.Language.Country.' für jeden 'Name' als eine nicht-negative 64-Bit-Ganzzahl (uint64). Demgemäß ermöglicht die INNERHALB-Aussage eine Aggregation innerhalb der Zeilen. Mit anderen Worten können Datensätze desselben Namens in einem gleichen Datensatz oder unter einem gleichen untergeordneten Datensatz aggregiert werden. Im Gegensatz dazu ist SQL, das möglicherweise nicht zum Arbeiten an verschachtelten Daten in der Lage ist, nicht in der Lage, an Datensätzen innerhalb der Zeilen zu arbeiten.
  • Die Sprache unterstützt verschachtelte Teilabfragen, Aggregation zwischen und innerhalb von Zeilen, top-k, Verknüpfungen, benutzerdefinierte Funktionen usw. Einige dieser Merkmale werden in dem Abschnitt zum Experiment beschrieben. Als zusätzliches Beispiel beinhaltet die beschriebene Abfragesprache eine OMIT IF-(WEGLASSEN, WENN)Aussage, mit der eine Gruppe von Werten innerhalb einer Zeile gefiltert werden kann. So kann beispielsweise jeder von Tausenden von Datensätzen mehrere sich wiederholende 'Cosf'-Felder beinhalten, die jeweils einen numerischen Wert beinhalten. Ein Nutzer einer Abfragesprache möchte möglicherweise sämtliche Datensätze entfernen, bei denen eine Summe der Werte in den Feldern die Zahl '20' übersteigt. Nun kann der Nutzer eine OMIT IF-Aussage anwenden, um eine Liste der Datensätze zu erzeugen, bei denen die summierten 'Cosf' in jedem Datensatz höchstens zwanzig ist.
  • ABSCHNITT 6: ABFRAGEAUSFÜHRUNG
  • Baumarchitektur. Das beschriebene System verwendet einen Multilevel-Bereitstellungsbaum zum Ausführen von Abfragen (siehe 10). Ein Root-Server empfängt eingehende Abfragen, liest Metadaten aus Tabellen und leitet die Abfragen an die nächste Ebene in dem Bereitstellungsbaum weiter. Die Leaf-Server kommunizieren mit der Speicherschicht oder greifen auf einer lokalen Platte auf die Daten zu. Viele der Abfragen, die in dem beschriebenen System operieren, sind ”Single-Scan”-Aggregationen; demzufolge konzentriert sich dieses Dokument auf das Beschreiben solcher Abfragen und verwendet sie für Experimente in dem Textabschnitt. Im Folgenden sei eine einfache Aggregationsabfrage betrachtet:
    SELECT A, COUNT(B) FROM T GROUP BY A (WÄHLE A AUS, ZÄHLE (B) VON T GRUPPE DURCH A)
  • Wenn der Root-Server die vorstehende Abfrage empfängt, bestimmt er alle Tabletts, das heißt, horizontale Partitionen der Tabelle, die die Tabelle 'T' bilden und schreibt die Abfrage wie folgt neu:
    SELECT A, SUM(c) FROM (R1,1 UNION ALL ... R1,n) GROUP BY A
  • Tables R1,i UNION ALL ... R1,n sind die Ergebnisse der Abfragen, die an die Knoten gesendet werden 1, ..., n auf Ebene 1 des Bereitstellungsbaums:
    R1,i) = SELECT A, COUNT(B) AS c FROM T1,i GROUP BY A
  • T1,i ist eine nicht zusammenhängende Partition von Tabletts in 'T', die von Server 'I' auf Ebene '1.' bearbeitet werden. Jede Bereitstellungsebene führt ein ähnliches Umschreiben durch. Schließlich erreichen die Abfragen die Endknoten (Leaves), die parallel die Tabletts in T' scannen. Auf dem Weg nach oben führen zwischengeschaltete Server eine parallele Aggregation von Teilergebnissen durch. Das vorstehend dargestellte Ausführungsmodell ist gut für Aggregationsabfragen geeignet, die kleine und mittelgroße Ergebnisse liefern, bei denen es sich um eine sehr weit verbreitete Klasse interaktiver Abfragen handelt.
  • Abfrage-Dispatcher. Bei dem beschriebenen System handelt es sich um ein Multi-User-System, so können beispielsweise mehrere Abfragen gleichzeitig ausgeführt werden. Ein Abfrage-Dispatcher terminiert Abfragen auf der Grundlage ihrer Prioritäten und rührt einen Lastausgleich durch. Eine weitere Rolle besteht in der Fehlertoleranz wenn ein Server viel langsamer als andere oder ein Tablettreplikat unerreichbar wird.
  • Die Menge an in jeder Abfrage bearbeiteten Daten ist oftmals größer als die Anzahl der Verarbeitungseinheiten, die zur Ausführung verfügbar sind, welche Slots genannt werden. Ein Slot entspricht einem Ausführungspfad auf einem Leaf-Server. So hat beispielsweise ein System mit 3.000 Leaf-Servern, von denen jeder 8 Pfade nutzt, 24.000 Slots. So kann eine Tabelle, die sich über 100.000 Tabletts erstreckt, verarbeitet werden, indem jedem Slot ungefähr 5 Tabletts zugewiesen werden. Während der Abfrageausführung berechnet der Abfrage-Dispatcher ein Histogramm von Tablett-Bearbeitungszeiten. Nimmt ein Tablett unverhältnismäßig viel Zeit zum Verarbeiten in Anspruch, führt das System eine neue Terminierung des Tabletts auf einem anderen Server durch. Einige Tabletts müssen mehrere Male neu zugeteilt werden.
  • Die Leaf-Server lesen Streifen von verschachtelten Daten in Spaltendarstellung. Die Blöcke in jedem Streifen werden vorab asynchron abgerufen; der Vorauslese-Cachespeicher erreicht normalerweise Trefferquoten von 95%. Tabletts werden für gewöhnlich dreifach repliziert. Kann ein Leaf-Server nicht auf ein Tablett-Replikat zugreifen, greift es auf ein anderes Replikat zurück.
  • Der Abfrage-Dispatcher berücksichtigt einen Parameter, der den prozentualen Mindestsatz an Tabletts spezifiziert, der vorm Liefern eines Ergebnisses gescannt werden muss. Wie nachstehend beschrieben, kann durch das Einstellen eines solchen Parameters (beispielsweise 98% anstatt 100%) die Ausführung oftmals signifikant beschleunigt werden, insbesondere wenn kleinere Replikationsfaktoren verwendet werden.
  • Jeder Server kann einen internen Ausführungsbaum haben, wie dies auf der rechten Seite in 7 dargestellt ist. Der Baum entspricht einem physischen Abfrage-Ausführungsplan und umfasst die Evaluierung von skalaren Ausdrücken. In optimierter Form wird ein typspezifischer Code für die meisten skalaren Funktionen erzeugt. Ein grundlegender Ausführungsplan besteht aus einer Reihe von Iteratoren, die eingegebene Spalten in Lockstep scannt und Ergebnisse von Aggregaten (Zusammenfassungen) und skalaren Funktionen, die mit den korrekten Repetitions- und Definitionsebenen versehen sind, und umgeht die Assemblierung von Datensätzen während der Ausführung völlig.
  • Einige Abfragen von dem beschriebenen System, wie beispielsweise top-k und Count Distinct, liefern ungefähre Ergebnisse unter Verwendung gut bekannter Single-Scan-Algorithmen.
  • ABSCHNITT 7: EXPERIMENTELLE DATEN
  • Dieser Abschnitt stellt eine experimentelle Evaluierung des beschriebenen Systems an mehreren Datensätzen dar und prüft die Effektivität der Spaltenspeicherung für verschachtelte Datensätze. Die Eigenschaften der in der Studie verwendeten Datensätze sind in 11 zusammengefasst. In nicht-komprimierter, nicht-replizierter Form belegen die Datensätze ungefähr einen Speicherbereich von einem Petabyte. Alle Tabellen sind, mit Ausnahme einer zweifach replizierten Tabelle, dreifach repliziert und beinhalten zwischen 100.000 und 800.000 Tabletts verschiedener Größe. Dieser Abschnitt beginnt mit Überprüfen der grundlegenden Datenzugriffseigenschaften auf einer einzelnen Maschine, zeigt anschließend, welche Vorteile die Spaltenspeicherung der MapReduce-Ausführung bringt und konzentriert sich abschließend auf die Leistung des beschriebenen Systems. Die Experimente wurden während des normalen Geschäftsbetriebs auf Systeminstanzen durchgeführt, die in zwei Datenzentren neben vielen anderen Anwendungen laufen. Nachstehend verwendete Tabellen- und Feldnamen sind anonymisiert.
  • Lokale Platte. Im ersten Experiment wurden Kompromisse bei der Leistung von spalten- vs. datensatzorientierter Speicherung durch Scannen eines 1 GB-Fragmentes von Tabelle 1, die ungefähr 300.000 Zeilen beinhaltet, überprüft (siehe 12). Die Daten sind auf einer lokalen Platte gespeichert und nehmen ungefähr 375 MB in komprimierter Spaltendarstellung in Anspruch. Das datensatzorientierte Format verwendet eine schwerere Komprimierung, ergibt jedoch ungefähr dieselbe Größe auf der Platte. Das Experiment wurde auf einer Dual-Core-Intel-Maschine mit einer Platte durchgeführt, die eine Lesebandbreite von 70 MB/s bereitstellt. Alle berichteten Zeiten sind kalt; der OS-Cachespeicher wurde vor jedem Scan geleert.
  • 12 zeigt fünf Graphen, die die Zeit veranschaulichen, die zum Lesen und Dekomprimieren der Daten, sowie zum Zusammenstellen und Parsen der Datensätze für eine Teilmenge der Felder erforderlich ist. Die Graphen (a)–(c) stellen einen Überblick der Ergebnisse für die Spaltenspeicherung dar. Jeder Datenpunkt in diesen Graphen wurde mittels Durchschnittsbildung der Messungen über 30 Durchlaufe erhalten, bei denen in jedem eine Reihe von Spalten einer jeweiligen Kardinalität (Beziehungsfolge) stichprobenartig ausgewählt wurde. Graph (a) zeigt die Lese- und Dekomprimierzeit. Graph (b) fügt die Zeit hinzu, die zum Assemblieren von verschachtelten Datensätzen von den Spalten benötigt wird. Graph (c) zeigt, wie lange es dauert, um die Datensätze in stark typisierte C++-Datenstrukturen zu parsen.
  • Die Graphen (d)–(e) stellen die Zeit zum Zugreifen auf die Daten auf einem datensatzorientierten Speicher dar. Graph (d) zeigt die Lese- und Dekomprimierzeit. Ein Großteil der Zeit wird für die Dekomprimierung aufgewandt; tatsächlich können die komprimierten Daten in ungefähr der Hälfte der Zeit von der Platte gelesen werden. Wie Graph (e) anzeigt, fügt das Parsen weitere 50% zu der Zeit für Lesen und Dekomprimieren hinzu. Diese Kosten werden für alle Felder einschließlich der Felder bezahlt, die gar nicht benötigt werden.
  • Wenn einige wenige Spalten gelesen werden, können die Vorteile der Spaltendarstellung im hochstelligen Bereich liegen. Die Abrufzeit für spaltenförmige verschachtelte Daten kann linear mit der Anzahl der Felder zunehmen. Die Zusammenstellung und das Parsen von Datensätzen kann kostenintensiv sein, wobei jedes Mal die Ausführungszeit möglicherweise verdoppelt wird. Ähnliche Trends wurden an anderen Datensätzen beobachtet. Es stellt sich ganz selbstverständlich die Frage, wo sich die oberen und unteren Graphen treffen, das heißt, wo die datensatzorientierte Speicherung anfängt, die Spaltenspeicherung hinsichtlich der Leistung zu übertreffen. Im Experiment kann der Schnittpunkt bei Dutzenden von Feldern liegen, variiert jedoch zwischen den Datensätzen und hängt davon ab, ob eine Datensatzassemblierung benötigt wird.
  • Map Reduce und das Beschriebene System. Als Nächstes werden eine Ausführung von MapReduce und das Beschriebene System hinsichtlich spalten- vs. datensatzorientierten Daten veranschaulicht. In diesem Fall wird auf ein einzelnes Feld zugegriffen, und die Leistungsgewinne treten sehr deutlich hervor. Die Ausführungsformen für mehrere Spalten können unter Verwendung der Ergebnisse von 12 extrapoliert werden. In diesem Experiment wird die durchschnittliche Anzahl von Begriffen in ein Feld 'txtField' von Tabelle 'T1' gezählt. Die MapReduce-Ausführung wird unter Verwendung des folgenden Sawzall-Programms durchgeführt:
    numRecs: table sum of int;
    numWords: table sum of int;
    emit numRecs < –1;
    emit numWords <- CountWords(input.txtField);
  • Die Anzahl von Datensätzen wird in der Variable 'numRecs.' gespeichert. Für jeden Datensatz wird 'numWords' um die Anzahl von Begriffen in 'input.txtField' erhöht, die von der 'CountWords'-Funktion zurückgegeben wird. Nachdem das Programm läuft, kann die durchschnittliche Begriffshäufigkeit als numWords=numRecs berechnet werden. In SQL wird die Berechnung wie folgt ausgedrückt:
    Q1: SELECT SUM(CountWords(textile))/COUNT(*) FROM T1
  • 13 stellt die Ausführungszeiten von zwei MapReduce-Aufgaben und das beschriebene System auf einer logarithmischen Skala dar. Beide MapReduce-Aufgaben werden an 3000 Bearbeitern (beispielsweise Servern) ausgeführt. Auf ähnliche Weise wird eine 3000-Knoten-Instanz des vorliegenden Systems zum Ausführen von Abfrage Q1 verwendet. Das beschriebene System und MapReduce-an-Spalten lesen ungefähr 0,5 TB an komprimierten Spaltendaten vs. 87 TB, die von MapReduce-an-Datensätzen gelesen werden. Wie 12 veranschaulicht, gewinnt MapReduce durch das Wechseln von datensatzorientierter auf spaltenorientierter Speicherung eine Größenordnung an Effizienz (von Stunden auf Minuten). Eine weitere Größenordnung wird durch das Verwenden des beschriebenen Systems erreicht (von Minuten auf Sekunden).
  • Topologie des Bereitstellungsbaumes. Im nächsten Experiment wird die Auswirkung der Tiefe des Bereitstellungsbaumes auf die Ausführungszeit veranschaulicht. Zwei Abfragen GROUP BY (GRUPPIEREN NACH) werden an Tabelle T2 durchgeführt, die jeweils unter Verwendung eines einzelnen Scans über die Daten ausgeführt werden. Tabelle T2 beinhaltet 24 Milliarden verschachtelte Datensätze. Jeder Datensatz hat ein wiederholtes Feldelement, das eine Zahlenmenge beinhaltet. Das Feld item.amount wiederholt sich ungefähr 40 Milliarden Mal in einem Datensatz. Die erste Abfrage summiert die Elementmenge nach ”country” (Land):
    Q2: SELECT country, SUM(item.amount) FROM T2
    GROUP BY country
  • Sie gibt einige Hundert Datensätze zurück und liest grob 60 GB an komprimierten Daten von der Platte. Die nächste Abfrage führt ein GRUPPIEREN NACH an einem Textfeldbereich mit einer ausgewählten Bedingung durch. Sie liest ungefähr 180 GB und erzeugt ungefähr 1,1 Millionen unterschiedliche Bereiche:
    Q3: SELECT domain, SUM(item.amount) FROM T2
    WHERE domain CONTAINS'.net,
    GROUP BY domain
  • 14 zeigt die Ausführungszeiten für jede Abfrage als eine Funktion der Servertopologie. In jeder Topologie wird die Anzahl von Leaf-Servern konstant bei 2900 gehalten, so dass von der gleichen kumulativen Scangeschwindigkeit ausgegangen werden kann. In der 2-Ebenen-Topologie (1:2900) kommuniziert ein Single-Root-Server direkt mit den Leaf-Servern. Für 3 Ebenen wird eine Einstellung von 1:100:2900 verwendet, das heißt eine zusätzliche Ebene von 100 zwischengeschalteten Servern. Die Topologie mit 4 Ebenen lautet: 1:10:100:2900.
  • Abfrage Q2 läuft in 3 Sekunden, wenn 3 Ebenen in dem Bereitstellungsbaum verwendet werden und profitiert von einer zusätzlichen Ebene nicht wirklich. Im Gegensatz dazu wird die Ausführungszeit von Q3 aufgrund der erhöhten Parallelität halbiert. Bei 2 Ebenen liegt Q3 außerhalb des Diagramms, da der Root-Server, der zum Aggregieren der Ergebnisse nahe sequenziell erforderlich war, Ergebnisse von Tausenden von Knoten empfangen hat. Dieses Experiment veranschaulicht wie Aggregationen, die viele Gruppen zurückgeben, von Multilevel-Bereitstellungsbäumen profitieren können.
  • Histogramme pro Tablett. 15 zeigt, wie schnell Tabletts von Leaf-Servern für einen spezifischen Durchlauf von Q2 and Q3 verarbeitet werden. Die Zeit wird beginnend an dem Punkt gemessen, an dem ein Tablett zur Ausführung in einem verfügbaren Slot terminiert wird, das heißt es wird die Zeit herausgerechnet, die mit Warten in der Aufgabenwarteschlange verbracht wird. Diese Messtechnologie lagert die Effekte anderer Abfragen, die gleichzeitig ausgeführt werden, aus. Der Bereich unter jedem Histogramm entspricht 100%. Wie 15 anzeigt, werden 99% von Q2 (oder Q3) Tabletts in weniger als einer (oder zwei) Sekunden bearbeitet.
  • Aggregation innerhalb des Datensatzes. Als weiteres Experiment wird die Leistung von Abfrage Q4 überprüft, wenn sie an Tabelle T3 ausgeführt wird. Die Abfrage veranschaulicht die Aggregation innerhalb des Datensatzes: sie zählt alle Datensätze, bei denen die Summe von a.b.c.d-Werten die in dem Datensatz vorkommen, größer als die Summe aus a.b.q.r-Werten ist. Die Felder wiederholen sich auf verschiedenen Ebenen von Verschachtelung. Aufgrund der Spaltenstreifenanordnung werden nur 13 GB (von 70 TB) von der Platte gelesen, und die Abfrage ist in 15 Sekunden abgeschlossen. Wäre Verschachtelung nicht unterstützt, würde diese Abfrage an T3 kostenintensiv sein.
    Q4: SELECT COUNT(c1 > c2) FROM
    (SELECT SUM(a.b.c.d) WITHIN RECORD AS c1, SUM(a.b.p.q.r)
    WITHIN RECORD AS c2 FROM T3)
  • Skalierbarkeit. Das folgende Experiment veranschaulicht die Skalierbarkeit des Systems an einer Tabelle mit Trillionen von Datensätzen. Die nachstehend gezeigte Abfrage Q5 wählt die obersten 20 Unterstützungsfunktionen und ihre Anzahl des Vorkommens in Tabelle T4 aus. Die Abfrage scannt 4,2 TB an komprimierten Daten.
    Q5: SELECT TOP (aid, 20), COUNT(*) FROM T4
    WHERE bid = {valuel} AND cid = {value2}
  • Die Abfrage wurde unter Verwendung von Konfigurationen des Systems im Bereich von 1000 bis 4000 Knoten ausgeführt. Die Ausführungszeiten sind in 16 dargestellt. Die insgesamt aufgewendete CPU-Zeit ist bei jedem Durchlauf nahezu gleich und liegt bei ungefähr 300.000 Sekunden, während sich die vom Nutzer wahrgenommene Zeit nahezu linear mit der zunehmenden Größe des Systems verringert. Dieses Ergebnis legt den Schluss nahe, dass ein größeres System genauso effektiv hinsichtlich der Ressourcennutzung wie ein kleineres sein kann, jedoch eine schnellere Ausführung ermöglicht.
  • Straggler. Bei Stragglern (”Nachzüglern”) kann es sich um Aufgaben (beispielsweise das Verarbeiten eines Tabletts) handeln, die beispielsweise deshalb nicht durchgeführt werden, weil die Maschine, die die Aufgabe durchführt, ein funktionelles Problem aufweist, oder die Maschine bei der Abwicklung der Aufgabe aufgrund Aufgaben höherer Priorität nicht aggressiv genug ist. Nachstehende Abfrage Q6 wird an einer Tabelle T5 mit einer Trillionen Zeilen ausgeführt. Im Gegensatz zu den anderen Datensätzen wird T5 zweifach repliziert. Dementsprechend ist die Wahrscheinlichkeit, dass Straggler die Ausführung verlangsamen, höher, da weniger Möglichkeiten für eine Neuterminierung der Arbeitsaufgaben vorliegen.
    Q6: SELECT COUNT (DISTINCT a) FROM T5
  • Abfrage Q6 liest über 1 TB an komprimierten Daten. Das Komprimierungsverhältnis für das abgerufene Feld liegt bei ungefähr 10. Wie dies in 17 angezeigt ist, liegt die Verarbeitungszeit für 99% der Tabletts unter 5 Sekunden pro Tablett pro Slot. Ein kleiner Bruchteil der Tabletts brauch jedoch weitaus länger, wodurch die Abfrage-Reaktionszeit von weniger als eine Minute auf mehrere Minuten ansteigt, wenn sie auf einem System mit 2500 Knoten ausgeführt wird. Der folgende Abschnitt fasst die Ergebnisse der Experimente zusammen.
  • ABSCHNITT 8: FESTSTELLUNGEN
  • 18 zeigt die Zeitverteilung der Abfrageantwort in einer typischen monatlichen Workload des beschriebenen Systems auf einer logarithmischen Skala. Wie von 18 angezeigt, werden die meisten Abfragen in weniger als 10 Sekunden, bequem innerhalb des interaktiven Bereiches verarbeitet. Einige Abfragen haben eine Scan-Durchsatzleistung von nahezu 100 Milliarden Datensätzen pro Sekunde in einem ausgelasteten Cluster und sogar noch mehr auf dedizierten Maschinen erzielt. Die vorstehend dargelegten Experimentdaten legen die folgenden Feststellungen nahe:
    • • Scanbasierte Abfragen können bei interaktiven Geschwindigkeiten an auf Platten befindlichen Datensätzen einer Vielzahl von Datensätzen ausgeführt werden;
    • • Für Systeme, die Tausende von Knoten beinhalten, kann eine nahezu lineare Skalierbarkeit hinsichtlich der Anzahl von Spalten und Servern erzielt werden;
    • • MapReduce kann ebenso von einer Spaltenspeicherung wie ein DBMS profitieren;
    • • Die Assemblierung und das Parsen von Datensätzen ist kostenintensiv. Software-Schichten (über die Abfrageverarbeitungsschicht hinaus) können so optimiert werden, dass sie direkt spaltenorientierte Daten konsumieren;
    • • MapReduce und Abfragebearbeitung können auf eine sich gegenseitig ergänzende Weise verwendet werden, die Ausgabe einer Schicht kann als Eingabe in die andere Schicht verwendet werden;
    • • In einer Multi-User-Umgebung kann ein größeres System von Skalierungseinsparungen profitieren, während ein qualitativ besseres Nutzererlebnis bereitgestellt wird;
    • • Wenn für Genauigkeit ein Abstriche hinsichtlich der Geschwindigkeit annehmbar sind, kann eine Abfrage viel früher abgeschlossen werden und es können immer noch die meisten Daten sichtbar sein; und
    • • Der Großteil eines webskalierten Datensatzes kann schnell gescannt werden, obgleich das Erreichen der letzten wenigen Prozent die Menge an Verarbeitungszeit erhöhen kann.
  • 19 ist ein Blockschaubild eines Systems zum Erzeugen und Verarbeiten von Spaltenspeicherdarstellungen von verschachtelten Datensätzen. Der Datensatzgenerator 1904 erzeugt Datensätze verschachtelter Daten anhand von Datenquellen 1920 und einem Schema 1902. Der Spaltengenerator 1908 empfängt als Eingabe die Datensätze 1906 und das Schema 1902 und gibt Spaltenstreifen aus, die die Daten in den Datensätzen 1906 darstellen, jedoch in einem Spaltenformat. Die Spaltendaten 1910 können in-situ durch das Abfragesystem 1912 abgefragt werden, um verschiedene Reihen an ausgegebenen Spalten 1914 zu erzeugen. Die Spaltendaten 1910 können auch von dem Datensatz-Assembler 1916 zurück in Datensatzform assembliert werden. Die Datensätze 1918, die von dem Datensatz-Assembler ausgegeben werden, können jeweils eine Teilmenge an Feldern von den ursprünglichen Datensätzen in der Sammlung 1906 beinhalten. An den ausgegebenen Datensätzen 1918 kann durch ein datensatzbasiertes Datenanalyseprogramm (beispielsweise MapReduce) operiert werden.
  • Genauer gesagt, können die Datenquellen 1920 im Wesentlichen unstrukturierte Daten umfassen. Im ”Wesentlichen unstrukturiert” bedeutet, dass die Daten Elemente beinhalten können, die Struktur bezeichnen, das gesamte Spektrum von Informationen jedoch möglicherweise nicht ähnlich strukturiert ist. Als Veranschaulichung können zu den Datenquellen 1920 der Quellencode für jede der Millionen von Webseiten gehören. Obgleich jede Webseite ein gewisses Maß an Struktur beinhaltet, wird der Inhalt jeder Webseite nicht auf der Grundlage eines gemeinsamen Schemas erzeugt. Im Allgemeinen können Standards ein Format der Seite vorgeben, Inhalt und Platzierung von Feldern wird jedoch nicht durch ein einzelnes Schema zwischen den einzelnen Webseiten spezifiziert. Bei einigen Beispielen werden die Informationen in den Datenquellen 1920 nicht auf der gemeinsamen Speicherschicht 1922 gespeichert, sondern direkt von externen Quellen im Internet abgerufen.
  • Das Schema 1902 definiert eine gemeinsame Strukturierung für Informationen, die in den Datenquellen beinhalten sein können. Wie dies bereits in diesem Dokument beschrieben wurde, kann das Schema 1902 bestimmte Felder an Informationen erfordern und zulassen, dass andere Felder an Informationen als optional gespeichert werden.
  • Der Datensatz-Generator 1904 empfängt als Eingabe das Schema 1902 und Informationen von den Datenquellen 1920. Der Datensatz-Generator 1904 nimmt die Informationen von den Datenquellen 1920 und strukturiert alle oder Abschnitte der Informationen in den einzelnen Instanzen der Datensätze, die mit dem Schema 1902 übereinstimmen. Während die Datenquellen 1920 im Wesentlichen unstrukturierte Daten von Webseiten beinhalten können, kann der Datensatz-Generator 1904 einzelne Informationen von jeder Webseite auswählen, um sie in bestimmte Datensätze 1906 einzufügen.
  • Auf diese Weise kann jeder der Datensätze 1906 Daten beinhalten, die gemäß dem Schema 1902 strukturiert sind. Die strukturierten Daten können Felder beinhalten, die eine Semantik von Datenwerten und eine strukturbezogene Beziehung der Datenwerte bezeichnen kann. Dementsprechend kann das Schema referenziert werden, um zusätzliche Informationen für den Datenwert (beispielsweise was der digital gespeicherte Datenwert in der realen Welt oder auf einer Webseite darstellt und Beziehungen zu anderen Werten) zu beziehen.
  • Jeder Eintrag 1906 kann verschachtelte Felder und Datenwerte beinhalten. Ein verschachtelter Datensatz kann mehr als ein Feld desselben Namen oder Pfades beinhalten. Die Felder mit demselben Namen oder Pfad können sich jedoch strukturell an verschiedenen Orten in einem bestimmten Datensatz befinden. So kann sich beispielsweise ein einzelnes Feld, das durch das Schema definiert wird, mehrere Male wiederholen. Ferner können Felder untergeordnete Felder (das heißt verschachtelte Felder) umfassen. Auf diese Weise kann sich ein bestimmtes Feld auf einer oberen Ebene eines Datensatzes wiederholen, und jede Wiederholung des Feldes kann in einem bestimmten untergeordneten Feld beinhaltet sein oder nicht. Mit anderen Worten kann der Datensatz Instanzen des untergeordneten Feldes in einigen Abschnitten des Datensatzes aber nicht in anderen Abschnitten des Datensatzes beinhalten.
  • Die Sammlung an Datensätzen 1906 kann in Spaltendaten 1910 übersetzt werden, um die Verarbeitungsgeschwindigkeit der Informationen in den Datensätzen zu erhöhen. Wenn beispielsweise die Menge an Datensätzen in der Sammlung 1906 in die Milliarden geht und jeder Datensatz Hunderte von verschiedenen Feldern beinhalten könnte, kann eine Analyse der Datensätze zeitintensiv sein, wobei Informationen an einer kleineren Anzahl von Feldern gewünscht wird. Dies rührt daher, dass jeder Datensatz in der Sammlung 1906 zusammen mit anderen Informationen von dem Datensatz gespeichert wird. Das heißt, jeder Datensatz wird zusammen in einem darauffolgenden Abschnitt des Speichers gruppiert (wie dies beispielsweise in der 'datensatzorientierten' Darstellung verschachtelter Daten in 1 dargestellt ist).
  • Im Gegensatz dazu beinhalten die Spaltendaten 1910 Spalten, die jeweils Informationen für ein einzelnes Feld in dem Schema 1902 (wie dies beispielsweise in der 'spaltenorientierten' Darstellung verschachtelter Daten in 1 veranschaulicht ist) speichern. Wenn demgemäß das Feld ein Byte lang ist, kann die Spalte für das Feld in der Größenordnung von Milliarden von Bytes (beispielsweise ein Byte für jeden Datensatz) im Gegensatz zu Milliarden von Datensätzen liegen (wo beispielsweise jeder Datensatz ein Megabyte groß sein kann). Die Operationen des Spalten-Generators 1908 werden ausführlicher im Abschnitt 4.2 ”Zerlegen von Datensätzen in Spalten” beschrieben. Das Speicherformat für die Spaltendaten 1910 wird ausführlicher im Abschnitt 4.1 ”Repetitions- und Definitionsebene” beschrieben.
  • Die Spaltendaten 1910 können direkt unter Verwendung des Abfragesystems 1912 abgefragt werden. Mit anderen Worten können die Spaltendaten 1910 ohne Laden von Daten in eine Datenbank abgefragt werden. Das Abfragesystem kann, wenn es eine Abfrage ausführt, eine Tabelle mit Spaltendaten als Eingabe empfangen. Bei einigen Beispielen empfängt das Abfragesystem auch das Schema 1902 als Eingabe. Die Spaltenstreifen können zusammen mit dem Schema gespeichert werden, um die Daten selbstbeschreibend zu gestalten. Mit dem Abfragesystem können Operationen an den Spaltendaten durchgeführt werden, um Spalten mit ausgegebenen Informationen 1914 zu erzeugen. Die ausgegebenen Spalten 1914 können eine Teilmenge der Werte beinhalten, die in den Spaltendaten 1910 dargestellt sind, je nachdem wie dies von einer bestimmten Abfrage bestimmt wird. Bei einigen Beispielen gibt das Abfragesystem Datensätze 1918 anstelle oder zusätzlich von den Spalten 1914 aus.
  • So kann das Abfragesystem 1912 beispielsweise eine erste Abfrage empfangen und, in Reaktion darauf, Parsen durch eine Spalte an Daten ausgewählten Daten durchführen und eine Reihe an ausgegebenen Spalten erzeugen, die einen Titel aller Webseiten bereitstellt, die ein oder mehrere Videos sowie eine Anzahl von Videos für jede Webseite besitzen. Das Abfragesystem kann eine zweite Abfrage empfangen und in Reaktion eine zweite Reihe an ausgegebenen Spalten ausgeben, die einen URL jeder Webseite bereitstellt, die innerhalb der letzten fünfzehn Minuten erzeugt wurde. Andere Informationen von den Spalten 1910 sind möglicherweise nicht in einer Reihe an ausgegebenen Spalten beinhalten, die einer bestimmten Abfrage 1914 entsprechen.
  • Auf Daten, die als Spaltendaten 1910 gespeichert werden, muss möglicherweise von einem Analysedienst zugegriffen werden, der nicht an Spaltendaten jedoch an Datensätzen operiert. Demgemäß kann ein Datensatz-Assembler 1916 die Spaltendaten als Eingabe empfangen und Datensätze anhand der Spaltendaten assemblieren. Der Prozess des Assemblierens von Datensätzen wird ausführlicher in Abschnitt 4.3 ”Assemblieren von Datensätzen” beschrieben.
  • Obgleich die Datensätze bereits in der Sammlung 1906 verfügbar sein können, ermöglicht der Datensatz-Assembler 1916 das Erzeugen einer Reihe an Datensätzen, die eine Teilmenge der Felder der Datensätze in der Sammlung 1906 beinhaltet. So können die Datensätze in der Sammlung beispielsweise Tausende unterschiedlicher Felder beinhalten. Ein Nutzer möchte möglicherweise ein datensatzorientiertes Analyseprogramm ausführen, das lediglich Kenntnis von zweien der Felder jedoch für alle der Datensätze erfordert. Demgemäß kann der Datensatz-Assembler 1916 eine Reihe von Datensätzen erzeugen, die lediglich Informationen zu den erforderlichen Feldern beinhaltet. Auf diese Weise können mehrere Reihen an ausgegebenen Datensätzen 1918 für unterschiedliche Analysen oder für verschiedene Analyseprogramme entwickelt werden. Eine Analyse an kleineren Datensätzen kann schneller als eine Analyse sein, die die größeren Datensätze durchlaufen muss, die in der Sammlung 1906 vorkommen können.
  • Die vorstehende Beschreibung der Funktionsweise des Systems 1900 veranschaulicht ein Beispiel, bei dem die Sammlung an Datensätzen 1906 Datensätze beinhaltet, die gemäß dem Schema 1902 formatiert sind, und bei dem die Spaltendaten 1910 anhand dieser einzelnen Reihe an ähnlich strukturierten Daten erzeugt wird. Bei verschiedenen Beispielen können mehrere Schemata 1902 zum Erzeugen einer Sammlung von Datensätzen verwendet werden, die viele Reihen an unterschiedlich strukturierten Datensätzen 1906 beinhaltet. Jeder Datensatz kann jedoch in einem Header den Typ von Schema identifizieren, der bei der Erzeugung des Datensatzes verwendet wurde. Auf ähnliche Weise kann ein Spaltenstreifen für jedes Feld in jedem vieler Reihen an ähnlich strukturierten Datensätzen erzeugt werden. Jeder Spaltenstreifen kann nicht nur den Namen des Feldes sondern auch das Schema anzeigen, dem die Spaltendaten zugewiesen sind (das heißt das Schema, das zum Formatieren der Datensätze verwendet wird, anhand derer die Spaltendaten erzeugt wurden).
  • 20 ist ein Ablaufplan eines beispielhaften Verfahrens zum Erzeugen von Spaltendaten. Das Verfahren kann von Komponenten des Systems 1900 durchgeführt werden.
  • In Kästchen 2002 wird eine Reihe an Datensätzen erzeugt. Die Erzeugung der Datensätze kann von dem Datensatz-Generator 1904 durchgeführt werden. Unstrukturierte Daten (beispielsweise von Datenquellen 1920) können zu einem standardisierten Datensatzformat kompiliert werden, das durch Schema 1902 definiert ist. Die Datensätze können in der Sammlung 1906 gespeichert werden.
  • In Kästchen 2004 wird auf die Datensätze in der Sammlung 1906 zugegriffen. So empfangt der Spalten-Generator 1908 beispielsweise die Daten von der Sammlung an Datensätzen 1906 als Eingabe.
  • In Kästchen 2006 wird eine Bestimmung dahingehend gemacht, ob ein Spaltenstreifen für ein zusätzliches Feld erzeugt werden soll. So muss beispielsweise ein Streifen für jedes Feld in der Reihe an Datensätzen erzeugt werden, die in der Sammlung 1906 gespeichert sind (und demzufolge jeder Datensatz in dem Schema 1902 oder einer Teilmenge davon). In dieser Veranschaulichung wurden bisher keine Streifen erzeugt, und demzufolge gibt es Felder, für die ein Streifen erzeugt werden muss. Dementsprechend geht das Verfahren in Kästchen 2008 über, um Operationen für ein bestimmtes Feld durchzuführen. Wenn alle Streifen erzeugt worden sind (beispielsweise wurde ein Streifen für jedes Feld in der Sammlung an Datensätzen 1906 erzeugt) kann das Verfahren enden.
  • In Kästchen 2008 wird eine Liste mit Werten für das bestimmte Feld erzeugt. So kann beispielsweise jeder der Datensätze durchlaufen und eine Liste mit Werten für das bestimmte Feld erzeugt werden.
  • In Kästchen 2010 werden Repetitionsebenen für das bestimmte Feld erzeugt. So kann der Spalten-Generator 1908 beispielsweise eine Repetitionsebene für jeden der Werte in der Liste durch Bestimmen eines am aktuellsten wiederholten Feldes in dem Pfad für das Feld bestimmen.
  • In Kästchen 2012 werden Definitionsebenen für das bestimmte Feld erzeugt.
  • So kann der Spalten-Generator 1908 beispielsweise eine Definitionsebene für jeden Wert (einschließlich von Werten, die 'missing' (fehlen), wie weiter oben ausführlicher beschrieben ist) erzeugen.
  • In Kästchen 2014 wird ein Spaltenstreifen für das bestimmte Feld assembliert.
  • Bei verschiedenen Beispielen werden die Repetitions- und Definitionsebenen in gepaarte Gruppierungen in dem Header des Streifens platziert. Die Liste mit Werten kann in den Hauptteil des Streifens platziert werden.
  • In Kästchen 2016 wird der Spaltenstreifen in Blöcke unterteilt, die komprimiert werden können. Jeder Block kann eine Reihe von Werten und ihre entsprechenden Repetitions- und Definitionsebenen beinhalten. Anschließend wird in Kästchen 2006 eine Bestimmung dahingehend, ob Spaltenstreifen für zusätzliche Felder erzeugt werden müssen, durchgeführt. Wenn keine zusätzlichen Spaltenstreifen erzeugt werden sollen, endet der Prozess.
  • Der in 20 dargestellte Prozess ist ein Beispiel zum Erzeugen von Spaltenstreifen. Es sind Varianten an dem Prozess vorgesehen. So können beispielsweise die Operationen der Kästchen nicht sequenziell wie in dem Ablaufplan dargestellt durchgeführt werden. Streifen können für mehrere Felder in einem einzigen Anlauf erzeugt werden. Die Repetitions- und Definitionsebenen können dann erzeugt werden, wenn jeder Wert von einem Datensatz bezogen wird. Der Spaltenstreifen muss nicht als Ganzes erzeugt werden. Stattdessen kann jeder Block anhand des Streifens erzeugt und unabhängig komprimiert werden. Auf diese Weise kann der Ablaufplan einen konzeptuellen Mechanismus zum Verständnis der Streifen darstellen, ist jedoch nicht im beschränkenden Sinne zu erachten. In dem Algorithmus von 4 wird ein Prozess zum Erzeugen von Spaltendaten dargestellt, der möglicherweise nicht den in Bezug auf 20 beschriebenen Operationen entspricht.
  • 21 ist ein Blockschaubild der Datenverarbeitungsgeräte 2100, 2150 die zum Implementieren der hierin beschriebenen Systeme und Verfahren entweder als Client oder als Server oder als eine Vielzahl von Servern verwendet können. Datenverarbeitungsgerät 2100 soll verschiedene Formen von Digitalcomputern darstellen, zum Beispiel Laptops, Desktops, Workstations, Personal Digital Assistants, Server, Blade Server, Mainframes und andere geeignete Computer darstellen. Datenverarbeitungsgerät 2150 soll verschiedene Formen mobiler Geräte, wie Personal Digital Assistants, Mobiltelefone, Smartphones und andere ähnliche Datenverarbeitungsgeräte darstellen. Zusätzlich dazu kann das Datenverarbeitungsgerät 2100 oder 2150 kann USB(Universal Serial Bus)-Speichermedien beinhalten. Die USB-Speichermedien können Betriebssysteme und andere Anwendungen speichern. Die USB-Flashlaufwerke können Eingabe-/Ausgabekomponenten, wie z. B. einen kabellosen Transmitter oder USB-Anschluss enthalten, der in eine USB-Schnittstelle eines anderen Computers eingesteckt werden kann. Die hier gezeigten Komponenten, ihre Verbindungen und Beziehungen sowie ihre Funktionen sind im rein beispielhaften Sinne zu erachten und stellen keine Einschränkung der in diesem Dokument beschriebenen und/oder beanspruchten Implementierungen dar.
  • Das Datenverarbeitungsgerät 2100 beinhaltet einen Prozessor 2102, Speicher 2104, ein Speichergerät 2106, eine High-Speed-Schnittstelle 2108, die mit Speicher 2104 und High-Speed-Erweiterungsanschlüssen 2110 verbunden ist, und eine Low-Speed-Schnittstelle 2112, die mit Low-Speed-Bus 2114 und dem Speichergerät 2106 verbunden ist. Alle der Komponenten 2102, 2104, 2106, 2108, 2110 und 2112 sind mithilfe verschiedener Busse miteinander verbunden und können auf einer gemeinsamen Hauptplatine oder auf andere geeignete Weise montiert sein. Der Prozessor 2102 kann Anweisungen für die Ausführung im Datenverarbeitungsgerät 2100 verarbeiten, unter anderem Anweisungen, die im Speicher 2104 oder dem Speichergerät 2106 gespeichert sind, um grafische Informationen für eine grafische Benutzeroberfläche auf einem externen Eingabe-/Ausgabegerät, wie etwa ein Display 2116, das mit der High-Speed-Schnittstelle 2108 gekoppelt ist, anzuzeigen. In anderen Implementierungen können mehrere Prozessoren und/oder mehrere Busse verwendet sein, wie angemessen, zusammen mit mehreren Speichern und Speichertypen. Ferner können mehrere Datenverarbeitungsgeräte 2100 verbunden sein, wobei jedes Gerät Abschnitte der erforderlichen Operationen bereitstellt (z. B. als Serverbank, eine Gruppe von Blade-Servern oder ein Multiprozessor-System).
  • Der Speicher 2104 speichert Informationen im Datenverarbeitungsgerät 2100. Bei einer Implementierung ist der Speicher 2104 eine flüchtige Speichereinheit oder flüchtige Speichereinheiten. Bei einer anderen Implementierung ist der Speicher 2104 eine nicht flüchtige Speichereinheit oder nicht flüchtige Speichereinheiten. Der Speicher 2104 kann auch eine andere Form von computerlesbarem Medium sein, zum Beispiel eine magnetische oder optische Platte.
  • Das Speichergerät 2106 ist geeignet, Massenspeicherung für das Datenverarbeitungsgerät 2100 bereitzustellen. Bei einer Implementierung kann das Speichergerät 2106 ein computerlesbares Medium sein oder beinhalten, zum Beispiel ein Diskettengerät, ein Festplattengerät, ein optisches Plattengerät oder ein Bandgerät, ein Flash-Speicher oder ein anderes ähnliches Solid-State-Speichergerät oder eine Reihe von Geräten, zum Beispiel Geräte in einem Storage Area Network oder anderen Konfigurationen. Ein Computerprogrammprodukt kann konkret in einem Informationsträger ausgeführt sein. Das Computerprogrammprodukt kann auch Anweisungen enthalten, die, wenn sie ausgeführt werden, ein oder mehrere Verfahren ausführen, wie die oben beschriebenen. Der Informationsträger ist ein computer- oder maschinenlesbares Medium, wie der Speicher 2104, das Speichergerät 2106 oder der Speicher auf dem Prozessor 2102.
  • Der High-Speed-Controller 2108 verwaltet bandbreitenintensive Operationen für das Datenverarbeitungsgerät 2100, während der Low-Speed-Controller 2112 weniger bandbreitenintensive Operationen verwaltet. Eine solche Zuordnung von Funktionen ist nur exemplarisch. Bei einer Implementierung ist der High-Speed-Controller 2108 mit Speicher 2104, Display 2116 (z. B. über einen Grafikprozessor oder -beschleuniger) und mit High-Speed-Erweiterungsanschlüssen 2110 verbunden, die verschiedene Erweiterungskarten aufnehmen können (nicht dargestellt). Bei der Implementierung ist Low-Speed-Controller 2112 mit dem Speichergerät 2106 und dem Low-Speed-Erweiterungsanschluss 2114 verbunden. Der Low-Speed-Erweiterungsanschluss, der verschiedene Datenübertragungsanschlüsse (z. B. USB, Bluetooth, Ethernet, Funkethernet) beinhalten kann, kann mit einem oder mehreren Eingabe-/Ausgabe-Geräten, wie eine Tastatur, ein Zeigegerät, ein Scanner oder ein Netzwerkgerät, wie etwas einen Switch oder Router, z. B. über einen Netzwerkadapter verbunden sein.
  • Das Datenverarbeitungsgerät 2100 kann in einer Reihe verschiedener Formen implementiert werden, wie in der Figur gezeigt. Es kann zum Beispiel als Standardserver 2120 oder mehrmals in einer Gruppe dieser Server implementiert sein. Es kann auch als Teil eines Rackserver-Systems 2124 implementiert sein. Außerdem kann es in einem Personal Computer, wie etwa einem Laptop-Computer 2122, implementiert sein. Alternativ dazu können Komponenten vom Datenverarbeitungsgerät 2100 mit anderen Komponenten in einem mobilen Gerät kombiniert sein (nicht dargestellt), wie etwa Gerät 2150. Jedes dieser Geräte kann eines oder mehrere Datenverarbeitungsgeräte 2100, 2150 beinhalten, und ein gesamtes System kann aus mehreren miteinander kommunizierenden Datenverarbeitungsgeräte 2100, 2150 bestehen.
  • Das Datenverarbeitungsgerät 2150 beinhaltet neben anderen Komponenten einen Prozessor 2152, einen Speicher 2164, ein Eingabe-/Ausgabegerät wie etwa ein Display 2154, eine Datenübertragungsschnittstelle 2166 und einen Transceiver 2168. Das Gerät 2150 kann auch mit einem Speichergerät ausgestattet sein, wie etwa einem Microdrive oder einem anderem Gerät bereitgestellt werden, um zusätzlichen Speicherplatz bereitzustellen. Alle der Komponenten 2150, 2152, 2164, 2154, 2166 und 2168 sind unter Verwendung verschiedener Busse miteinander verbunden, und mehrere der Komponenten können auf einer gemeinsamen Hauptplatine oder auf geeignete andere Weise montiert sein.
  • Der Prozessor 2152 kann Anweisungen im Datenverarbeitungsgerät 2150 unter anderem Anweisungen ausführen, die in Speicher 2164 gespeichert sind. Der Prozessor kann als ein Chipsatz von Chips implementiert werden, die separate und mehrere analoge und digitale Prozessoren beinhalten. Zusätzlich dazu kann der Prozessor mit einer beliebigen Anzahl von Architekturen implementiert werden. So kann der Prozessor 410 beispielsweise ein CISC-Prozessor (Complex Instruction Set Computers), ein RISC-Prozessor (Reduced Instruction Set Computer) oder ein MISC-Prozessor (Minimal Instruction Set Computer) sein. Der Prozessor kann beispielsweise für die Koordination der anderen Komponenten des Geräts 2150 sorgen, so etwa die Steuerung von Benutzeroberflächen, Anwendungen, die vom Gerät 2150 ausgeführt werden, und die drahtlose Datenübertragung durch Gerät 2150.
  • Der Prozessor 2152 kann mit einem Benutzer über Steuerschnittstelle 2158 und Displayschnittstelle 2156 kommunizieren, die mit einem Display 2154 verbunden ist. Das Display 2154 kann zum Beispiel ein TFT(Thin-Film-Transistor Liquid Crystal Display)-Display oder ein OLED(Organic Light Emitting Diode)-Display oder eine andere geeignete Displaytechnologie sein. Die Displayschnittstelle 2156 kann eine geeignete Schaltung umfassen, die das Display 2154 dazu veranlasst, einem Benutzer grafische und andere Informationen darzustellen. Die Steuerschnittstelle 2158 kann Befehle von einem Benutzer empfangen und sie zum Senden an Prozessor 2152 umwandeln. Außerdem kann eine externe Schnittstelle 2162 Datenübertragung mit dem Prozessor 2152 bereitgestellt werden, um die Nahbereichskommunikation von dem Gerät 2150 mit anderen Geräten zu ermöglichen. Die externe Schnittstelle 2162 kann zum Beispiel bei einigen Implementierungen eine verdrahtete Datenübertragung, oder bei anderen Implementierungen eine drahtlose Datenübertragung bereitstellen, und es können mehrere Schnittstellen verwendet werden.
  • Der Speicher 2164 speichert Informationen im Datenverarbeitungsgerät 2150. Der Speicher 2164 kann als eines oder mehrere computerlesbare Medien, flüchtige Speichereinheiten oder nicht flüchtige Speichereinheiten implementiert sein. Der Erweiterungsspeicher 2174 kann ebenfalls bereitgestellt und mit dem Gerät 2150 über die Erweiterungsschnittstelle 2172 verbunden sein, die zum Beispiel eine SIMM(Single In Line Memory Module)-Kartenschnittstelle beinhalten kann. Dieser Erweiterungsspeicher 2174 kann zusätzlichen Speicherplatz für das Gerät 2150 bereitstellen, oder er kann auch Anwendungen oder andere Informationen für das Gerät 2150 speichern. Insbesondere kann der Erweiterungsspeicher 2174 Anweisungen zum Ausführen oder Ergänzen der oben beschriebenen Prozesse und ferner sichere Informationen beinhalten. Somit kann der Erweiterungsspeicher 2174 beispielsweise als Sicherheitsmodul für das Gerät 2150 bereitgestellt werden und mit Anweisungen programmiert sein, die die sichere Verwendung von Gerät 2150 ermöglichen. Zusätzlich dazu können über die SIMM-Cards sichere Anwendungen bereitgestellt werden, zusammen mit zusätzlichen Informationen, wie dem Ablegen von Identifizierungsinformationen auf der SIMM-Card auf eine Weise, die nicht gehackt werden kann.
  • Der Speicher kann beispielsweise Flash Speicher und/oder NVRAM-Speicher beinhalten, wie nachstehend erörtert. In einer Implementierung, ist ein Computerprogrammprodukt konkret in einem Informationsträger ausgeführt. Das Computerprogrammprodukt enthält Anweisungen, die, wenn sie ausgeführt werden, ein oder mehrere Verfahren ausführen, wie die oben beschriebenen. Der Informationsträger ist ein computer- oder maschinenlesbares Medium, wie der Speicher 2164, die Speichererweiterung 2174 oder der Prozessorspeicher 2152, der beispielsweise über den Transceiver 2168 oder die externe Schnittstelle 2162 empfangen werden kann.
  • Das Gerät 2150 kann drahtlos über die Verbindungsschnittstelle 2166 kommunizieren, die, falls erforderlich, digitale Signalverarbeitungsschaltungen beinhalten kann. Die Verbindungsschnittstelle 2166 kann Datenübertragung gemäß verschiedenen Modi oder Protokollen aufbauen, darunter GSM-Sprachanrufe, SMS, EMS, oder MMS-Messaging, CDMA, TDMA, PDC, WCDMA, CDMA2000 oder GPRS. Diese Datenübertragung kann beispielsweise über Funkfrequenzempfänger 2168 erfolgen. Zusätzlich kann eine Kurzstreckenkommunikation stattfinden, wie unter Verwendung eines Bluetooth-, WLAN- oder anderen solchen Sende-Empfängern (nicht gezeigt). Außerdem kann das GPS(Global Positioning System)-Empfängermodul 2170 zusätzlich mit der Navigation und dem Ort verbundene drahtlose Daten für Gerät 2150 bereitstellen, die gegebenenfalls von Anwendungen verwendet werden können, die auf dem Gerät 2150 ausgeführt werden.
  • Das Gerät 2150 kann mithilfe des Audio-Codec 2160 auch akustisch kommunizieren, das gesprochene Informationen von einem Benutzer empfangen und diese in nutzbare digitale Informationen konvertieren kann. Audio-Codec 2160 kann ebenfalls akustische Töne für einen Benutzer erzeugen, beispielsweise über einen Lautsprecher so etwa in einem Handgerät von Gerät 2150. Solche Töne können Töne von Sprachtelefonanrufen umfassen, können aufgezeichnete Töne (z. B. Sprachnachrichten, Musikdateien usw.) beinhalten und können ferner Töne beinhalten, die von der auf dem Gerät 2150 laufenden Anwendung erzeugt werden.
  • Das Computergerät 2150 kann in einer Reihe verschiedener Formen implementiert sein, wie in der Figur gezeigt. Es kann beispielsweise als Mobiltelefon 2180 implementiert sein. Es kann außerdem als Teil eines Smartphones 2182, Personal Digital Assistant oder eines anderen ähnlichen mobilen Geräts implementiert sein.
  • Verschiedene Implementierungen der hierin beschriebenen Systeme und Verfahren können in digitalen elektronischen Schaltkreisen, integrierten Schaltkreisen, speziell konzipierten ASICs (anwendungsorientierten integrierten Schaltkreisen), Computerhardware, Firmware, Software und/oder Kombinationen davon umgesetzt werden. Diese verschiedenen Implementierungen können eine Implementierung in einem oder mehreren Computerprogrammen beinhalten, die auf einem programmierbaren System ausführbar und/oder interpretierbar sind, das mindestens einen programmierbaren Prozessor beinhaltet, der ein spezieller Prozessor oder ein Prozessor für allgemeine Zwecke sein kann, und der zum Empfangen von Daten und Anweisungen von und zum Übertragen von Daten und Anweisungen an ein Speichersystem, mindestens eine Eingabevorrichtung und mindestens eine Ausgabevorrichtung gekoppelt ist.
  • Diese Computerprogramme (auch bekannt als Programme, Software, Softwareanwendungen oder Code) beinhalten Maschinenanweisungen für einen programmierbaren Prozessor und können in einer höheren prozeduralen und/oder objektorientierten Programmiersprache und/oder in Assembler-/Maschinensprache implementiert werden. In ihrer hierin verwendeten Form bedeuten die Begriffe „maschinenlesbares Medium”, „computerlesbares Medium” jedes beliebige Computerprogrammprodukt, Vorrichtung und/oder Gerät (z. B. magnetische und optische Speicherplatten, Speicher, Programmable Logic Devices (PLDs)), die zum Bereitstellen von Maschinenanweisungen und/oder -daten an einen programmierbaren Prozessor, unter anderem eines maschinenlesbaren Mediums, das Maschinenanweisungen als maschinenlesbare Signale empfängt, verwendet wird. Der Begriff „maschinenlesbares Signal” bezeichnet ein beliebiges Signal, das verwendet wird, um einem programmierbaren Prozessor Maschinenanweisungen und/oder Daten bereitzustellen.
  • Um Interaktion mit einem Benutzer bereitzustellen, können die hier beschriebenen Systeme und Verfahren auf einem Computer mit einem Anzeigegerät (z. B. einer CRT-(Kathodenstrahlröhre) oder einem LCD-(Flüssigkristallanzeige)Monitor), um dem Benutzer Informationen anzuzeigen und einer Tastatur und einem Zeigegerät implementiert werden (z. B. Maus oder Trackball), mit denen der Benutzer Eingaben in den Computer vornehmen kann. Andere Arten von Geräten können auch verwendet werden, um eine Interaktion mit einem Benutzer bereitzustellen; zum Beispiel kann eine dem Benutzer bereitgestellte Rückmeldung irgendeine Form von Sinnesrückmeldung sein (z. B. visuelle Rückmeldung, auditive Rückmeldung oder Tastrückmeldung); und eine Eingabe vom Benutzer kann in einer beliebigen Form empfangen werden, einschließlich akustischer, Sprach- oder Tasteingaben.
  • Die hierin beschriebenen Systeme und Verfahren können in einem Computersystem implementiert werden, das eine Back-End-Komponente beinhaltet (z. B. als Datenserver), oder das eine Middleware-Komponente beinhaltet (z. B. einen Anwendungsserver), oder das eine Front-End-Komponente beinhaltet (z. B. ein Client-Computer mit einer grafischen Benutzeroberfläche oder einem Webbrowser, über welche ein Benutzer mit einer Implementierung der hier beschriebenen Systeme und Verfahren interagieren kann) oder einer beliebigen Kombination derartiger Back-End-, Middleware- und Front-End-Komponenten. Die Komponenten des Systems können durch eine beliebige Form oder ein beliebiges Medium von digitaler Datenkommunikation (z. B. ein Kommunikationsnetzwerk) miteinander verbunden sein. Beispiele von Datenübertragungsnetzwerken umfassen ein lokales Netz („LAN”), ein Weitverkehrsnetz („WAN”), Peer-to-Peer-Netze (mit Ad-hoc-Mitgliedern und ständigen Mitgliedern), Netzrechnerinfrastrukturen und das Internet.
  • Das Computersystem kann Clients und Server beinhalten. Ein Client und Server befinden sich im Allgemeinen ortsfern voneinander und interagieren typischerweise über ein Kommunikationsnetz. Die Beziehung von Client und Server ergibt sich durch Computerprogramme, die auf den jeweiligen Computer laufen und eine Client-Server-Beziehung zueinander umfassen.
  • Obgleich vorstehend nur einige Implementierungen ausführlich beschrieben wurden, sind andere Ausführungen möglich. Ferner können andere Mechanismen zum Erzeugen und Verarbeiten von Spaltenspeicherdarstellungen verschachtelter Datensätze verwendet werden. Darüber hinaus erfordern die logischen Abläufe in den Abbildungen nicht unbedingt die abgebildete Reihenfolge oder die sequenzielle Reihenfolge, um die gewünschten Ergebnisse zu erzielen. Es können weitere Schritte zu den beschriebenen Abläufen hinzugefügt oder aus diesen weggelassen werden, und andere Komponenten zu den beschriebenen Systemen hinzugefügt oder von diesen weggelassen werden. Dementsprechend liegen andere Implementierungen im Geltungsbereich der folgenden Ansprüche.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Nicht-Patentliteratur
    • L. A. Barroso und U. Holzle. The Datacenter as a Computer: An Introduction to the Design of Warehouse-Scale Machines. Morgan & Claypool Publishers, 2009 [0074]
    • G. Czajkowski. Sorting 1PB with MapReduce. Official Google Blog, Nov. 2008. Auf http://googleblog.blogspot.com/2008/11/sorting-lpb-with-mapreduce.html [0074]
    • Ghemawat, H. Gobioff und S.-T. Leung. The Google File System. In SOSP, 2003 [0076]
    • F. Chang, J. Dean, S. Ghemawat, W. C. Hsieh, D. A. Wallach, M. Burrows, T. Chandra, A. Fikes, and R. Gruber. Bigtable: A Distributed Storage System for Structured Data. In OSDI, 2006 [0076]
    • J. Dean und S. Ghemawat. MapReduce: Simplified Data Processing on Large Clusters. In OSDI, 2004 [0077]
    • J. Dean. Challenges in Building Large-Scale Information Retrieval Systems: Invited Talk. In WSDM, 2009 [0078]
    • C. Olston, B. Reed, U. Srivastava, R. Kumar, and A. Tomkins. Pig Latin: a Not-so-Foreign Language for Data Processing. in SIGMOD, 2008 [0079]
    • Hive. http://wiki.apache.org/hadoop/Hive, 2009 [0079]
    • D. J. Abadi, P. A. Boncz und S. Harizopoulos. Column-Oriented Database Systems. VLDB, 2(2), 2009 [0080]
    • R. Pike, S. Dorward, R. Griesemer, and S. Quinlan [0080]
    • Parallel Analysis with Sawzall. Scientific Programming, 13(4), 2005 [0080]
    • C. Chambers, A. Raniwala, F. Perry, S. Adams, R. Henry, R. Bradshaw und N. Weizenbaum. FlumeJava: Easy, Efficient Data-Parallel Pipelines. in PLDI, 2010 [0080]
    • http://code.google.com/apis/protocolbuffers/docs/overview.html [0092]

Claims (2)

  1. Computerprogrammprodukt, das materiell auf einem computerlesbaren Speichergerät gespeichert ist, wobei das Produkt Computerprogrammanweisungen aufweist, die eingerichtet sind, um einen oder mehrere Prozessoren zum Durchführen von Operationen zu veranlassen, umfassend: Computerimplementiertes Verfahren, umfassend: das Zugreifen, durch ein Datenverarbeitungssystem, auf eine Sammlung von Datensätzen, die in einem Computerspeicher gespeichert sind, wobei jeder Datensatz in der Sammlung von Datensätzen eine Vielzahl von Datenwerten und eine Vielzahl von Datenelementen beinhaltet, die die Semantik entsprechender Datenwerte anhand der Vielzahl von Datenwerten identifizieren, wobei ein oder mehrere Datensätze in der Sammlung an Datensätzen jeweils mehrere Instanzen eines selben Datenelementes und Datenwerte beinhaltet, die den mehreren Instanzen desselben Datenelementes entsprechen; das Erzeugen, durch das Datenverarbeitungssystem, einer Sammlung an Spaltenstreifen, wobei die Sammlung an Spaltenstreifen die Datenwerte von jedem Datensatz in der Sammlung an Datensätzen beinhaltet, wobei jeder Spaltenstreifen in der Sammlung an Spaltenstreifen alle Datenwerte beinhaltet, die einem spezifischen Datenelement von jedem der Datensätze in der Sammlung an Datensätzen entspricht.
  2. System, das Folgendes umfasst: einen oder mehrere programmierbare Prozessoren; und ein computerlesbares Speichergerät, das mit dem Prozessor verbunden ist und Anweisungen darauf gespeichert hat, die, wenn sie von dem einen oder mehreren programmieren Prozessoren ausgeführt werden, den einen oder die mehreren Prozessoren zum Durchführen von Operationen veranlasst, umfassend: Computerimplementiertes Verfahren, umfassend: das Zugreifen, durch ein Datenverarbeitungssystem, auf eine Sammlung von Datensätzen, die in einem Computerspeicher gespeichert sind, wobei jeder Datensatz in der Sammlung von Datensätzen eine Vielzahl von Datenwerten und eine Vielzahl von Datenelementen beinhaltet, die die Semantik entsprechender Datenwerte anhand der Vielzahl von Datenwerten identifizieren, wobei ein oder mehrere Datensätze in der Sammlung an Datensätzen jeweils mehrere Instanzen eines selben Datenelementes und Datenwerte beinhaltet, die den mehreren Instanzen desselben Datenelementes entsprechen; das Erzeugen, durch das Datenverarbeitungssystem, einer Sammlung an Spaltenstreifen, wobei die Sammlung an Spaltenstreifen die Datenwerte von jedem Datensatz in der Sammlung an Datensätzen beinhaltet, wobei jeder Spaltenstreifen in der Sammlung an Spaltenstreifen alle Datenwerte beinhaltet, die einem spezifischen Datenelement von jedem der Datensätze in der Sammlung an Datensätzen entspricht.
DE202011110863.9U 2010-04-05 2011-04-04 Spaltenspeicher Darstellungen von Datensätzen Expired - Lifetime DE202011110863U1 (de)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US32110610P 2010-04-05 2010-04-05
US61/321,106 2010-04-05
US32168810P 2010-04-07 2010-04-07
US61/321,688 2010-04-07

Publications (1)

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

Family

ID=44027534

Family Applications (2)

Application Number Title Priority Date Filing Date
DE202011110863.9U Expired - Lifetime DE202011110863U1 (de) 2010-04-05 2011-04-04 Spaltenspeicher Darstellungen von Datensätzen
DE112011101200T Pending DE112011101200T5 (de) 2010-04-05 2011-04-04 Spaltenorientierte Speicher-Darstellungen von Datensätzen

Family Applications After (1)

Application Number Title Priority Date Filing Date
DE112011101200T Pending DE112011101200T5 (de) 2010-04-05 2011-04-04 Spaltenorientierte Speicher-Darstellungen von Datensätzen

Country Status (8)

Country Link
EP (1) EP2556446B1 (de)
KR (1) KR101785959B1 (de)
CN (2) CN107092627B (de)
CA (1) CA2795525C (de)
DE (2) DE202011110863U1 (de)
GB (1) GB2492720A (de)
HK (1) HK1243202A1 (de)
WO (1) WO2011126995A1 (de)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9037615B2 (en) 2010-05-14 2015-05-19 International Business Machines Corporation Querying and integrating structured and unstructured data
WO2013074665A1 (en) 2011-11-14 2013-05-23 Google Inc. Data processing service
US9367293B2 (en) 2012-06-18 2016-06-14 International Business Machines Corporation System and method for compiler assisted parallelization of a stream processing operator
CN103793316B (zh) 2012-10-29 2017-06-23 腾讯科技(深圳)有限公司 确定软件性能的方法和系统
US10885001B2 (en) 2013-01-17 2021-01-05 International Business Machines Corporation System and method for assigning data to columnar storage in an online transactional system
WO2014145230A1 (en) * 2013-03-15 2014-09-18 Recent Memory Incorporated Object-oriented data infrastructure
CN104424314B (zh) * 2013-09-06 2019-06-11 Sap欧洲公司 对列状表数据库的数据库操作
GB2524074A (en) 2014-03-14 2015-09-16 Ibm Processing data sets in a big data repository
JP6287441B2 (ja) * 2014-03-26 2018-03-07 日本電気株式会社 データベース装置
CN104270257B (zh) * 2014-09-10 2017-11-07 烽火通信科技股份有限公司 基于pb和xpath的网元级网管业务配置适配系统及方法
US10409799B2 (en) 2015-10-19 2019-09-10 International Business Machines Corporation Supporting updatable repeated values over variable schema
CN106713394A (zh) * 2015-11-16 2017-05-24 华为技术有限公司 一种数据传输方法和装置
US11226985B2 (en) 2015-12-15 2022-01-18 Microsoft Technology Licensing, Llc Replication of structured data records among partitioned data storage spaces
CN105701199B (zh) * 2016-01-08 2019-04-26 广东电网有限责任公司信息中心 一种数据依赖的数据质量检测方法及装置

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TW405090B (en) * 1997-04-04 2000-09-11 Ibm Predictive cache loading by program address discontinuity history
US7213017B2 (en) 2000-03-17 2007-05-01 Microsoft Corporation Systems and methods for transforming query results into hierarchical information
US20090006399A1 (en) * 2007-06-29 2009-01-01 International Business Machines Corporation Compression method for relational tables based on combined column and row coding

Non-Patent Citations (13)

* Cited by examiner, † Cited by third party
Title
C. Chambers, A. Raniwala, F. Perry, S. Adams, R. Henry, R. Bradshaw und N. Weizenbaum. FlumeJava: Easy, Efficient Data-Parallel Pipelines. in PLDI, 2010
C. Olston, B. Reed, U. Srivastava, R. Kumar, and A. Tomkins. Pig Latin: a Not-so-Foreign Language for Data Processing. in SIGMOD, 2008
D. J. Abadi, P. A. Boncz und S. Harizopoulos. Column-Oriented Database Systems. VLDB, 2(2), 2009
F. Chang, J. Dean, S. Ghemawat, W. C. Hsieh, D. A. Wallach, M. Burrows, T. Chandra, A. Fikes, and R. Gruber. Bigtable: A Distributed Storage System for Structured Data. In OSDI, 2006
G. Czajkowski. Sorting 1PB with MapReduce. Official Google Blog, Nov. 2008. Auf http://googleblog.blogspot.com/2008/11/sorting-lpb-with-mapreduce.html
Ghemawat, H. Gobioff und S.-T. Leung. The Google File System. In SOSP, 2003
Hive. http://wiki.apache.org/hadoop/Hive, 2009
http://code.google.com/apis/protocolbuffers/docs/overview.html
J. Dean und S. Ghemawat. MapReduce: Simplified Data Processing on Large Clusters. In OSDI, 2004
J. Dean. Challenges in Building Large-Scale Information Retrieval Systems: Invited Talk. In WSDM, 2009
L. A. Barroso und U. Holzle. The Datacenter as a Computer: An Introduction to the Design of Warehouse-Scale Machines. Morgan & Claypool Publishers, 2009
Parallel Analysis with Sawzall. Scientific Programming, 13(4), 2005
R. Pike, S. Dorward, R. Griesemer, and S. Quinlan

Also Published As

Publication number Publication date
WO2011126995A1 (en) 2011-10-13
CN103003813B (zh) 2017-02-15
CA2795525C (en) 2018-03-13
KR20130084599A (ko) 2013-07-25
EP2556446A1 (de) 2013-02-13
DE112011101200T5 (de) 2013-01-17
CN107092627A (zh) 2017-08-25
CN103003813A (zh) 2013-03-27
KR101785959B1 (ko) 2017-10-17
GB2492720A (en) 2013-01-09
HK1243202A1 (zh) 2018-07-06
CA2795525A1 (en) 2011-10-13
CN107092627B (zh) 2021-02-26
EP2556446B1 (de) 2018-12-12
GB201219795D0 (en) 2012-12-19

Similar Documents

Publication Publication Date Title
DE202011110863U1 (de) Spaltenspeicher Darstellungen von Datensätzen
DE202011110890U1 (de) System für die Bereitstellung eines Datenspeicherungs- und Datenverarbeitungsservices
DE202012013469U1 (de) Datenverarbeitungsdienst
WO2016133855A1 (en) System and method for generating an effective test data set for testing big data applications
US8209297B2 (en) Data processing device and method
US11698918B2 (en) System and method for content-based data visualization using a universal knowledge graph
Sinthong et al. Aframe: Extending dataframes for large-scale modern data analysis
CN105677687A (zh) 一种数据处理方法及装置
Sinthong et al. AFrame: Extending DataFrames for large-scale modern data analysis (Extended Version)
Marx et al. Large-scale RDF dataset slicing
Owens et al. Hadoop Real World Solutions Cookbook
DE112016003130T5 (de) Automatische Importe und Abhängigkeiten in großräumigen Quellcode-Depots
Souissi et al. Genus: An etl tool treating the big data variety
Bidoit et al. Evaluating queries and updates on big xml documents
Maheswari et al. Large-scale data analytics tools: apache hive, pig, and hbase
Panchenko et al. Efficient storage and fast querying of source code
Hassan et al. MapReduce Programs Simplification using a Query Criteria API
Sachdev et al. Khanan: Performance Comparison and Programming α-Miner Algorithm in Column-Oriented and Relational Database Query Languages
Dmitriyev et al. Building a big data analytical pipeline with Hadoop for processing enterprise XML data
DE112021004637T5 (de) Transformieren von operationen eines computerprogramms zur ausführung in einer datenbank
CN116010420A (zh) 一种基于位图存储的数据查询方法、系统、设备及介质
Krishna Data storage and processing
Zhu et al. Generic query toolkit: A query interface generator integrating data mining

Legal Events

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

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

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

R082 Change of representative

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

R081 Change of applicant/patentee

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

Free format text: FORMER OWNER: GOOGLE LLC (N.D.GES.D. STAATES DELAWARE), MOUNTAIN VIEW, CALIF., US

R082 Change of representative

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

R152 Utility model maintained after payment of third maintenance fee after eight years
R079 Amendment of ipc main class

Free format text: PREVIOUS MAIN CLASS: G06F0017300000

Ipc: G06F0016000000

R071 Expiry of right