DE112011101200T5 - Spaltenorientierte Speicher-Darstellungen von Datensätzen - Google Patents

Spaltenorientierte Speicher-Darstellungen von Datensätzen Download PDF

Info

Publication number
DE112011101200T5
DE112011101200T5 DE112011101200T DE112011101200T DE112011101200T5 DE 112011101200 T5 DE112011101200 T5 DE 112011101200T5 DE 112011101200 T DE112011101200 T DE 112011101200T DE 112011101200 T DE112011101200 T DE 112011101200T DE 112011101200 T5 DE112011101200 T5 DE 112011101200T5
Authority
DE
Germany
Prior art keywords
data
collection
records
columnar
values
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.)
Pending
Application number
DE112011101200T
Other languages
English (en)
Inventor
Andrey Gubarev
Sergey Melnik
Jing Jing Long
Narayanan Shivakumar
Matthew B. Tolton
Theodore Vassilakis
Geoffrey M. Romer
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 DE112011101200T5 publication Critical patent/DE112011101200T5/de
Pending 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/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/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/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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Linguistics (AREA)
  • Artificial Intelligence (AREA)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • General Health & Medical Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Fuzzy Systems (AREA)
  • Probability & Statistics with Applications (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

Im Allgemeinen kann der in dieser Patentschrift berogrammprodukten ausgeführt werden. Ein Computersystem greift auf eine Sammlung von Datensätzen zu. Jeder Datensatz in der Sammlung umfasst eine Vielzahl von Datenwerten und eine Vielzahl von Datenelementen, welche die Semantik von entsprechenden Datenwerten aus der Vielzahl von Datenwerten identifizieren. Einer oder mehrere der Datensätze umfassen jeweils mehrere Exemplare des gleichen Datenelements und umfassen Datenwerte, die den mehreren Exemplaren des gleichen Datenelements entsprechen. Das Computersystem erstellt eine Sammlung von spaltenförmigen Streifen. Die Sammlung von spaltenförmigen Streifen umfasst die Datenwerte aus allen Datensätzen in der Sammlung von Datensätzen. Jeder spaltenförmige Streifen in der Sammlung von spaltenförmigen Streifen enthält alle Datenwerte, die einem bestimmten Datenelement aus allen Datensätzen in der Sammlung von Datensätzen entsprechen.

Description

  • KREUZVERWEIS AUF VERWANDTE ANMELDUNGEN
  • Diese Anmeldung beansprucht die Priorität der U. S. Provisional Application Nr. 61/321.106, eingereicht am 5. April 2010 und der U. S. Provisional Application Nr. 61/321.688, eingereicht am 7. April 2010.
  • TECHNISCHES GEBIET
  • Dieses Dokument beschreibt allgemein Techniken, Verfahren, Systeme und Mechanismen zur Erstellung und Verarbeitung von spaltenorientierten Speicherdarstellungen von Datensätzen.
  • HINTERGRUND
  • Die vorliegende Offenbarung betrifft im Allgemeinen analytische Datenverarbeitung im großen Maßstab. Solche Datenverarbeitung hat sich in Internetfirmen und über verschiedene Industriezweige etabliert, nicht zuletzt wegen der kostengünstigen Speicher, die das Sammeln von großen Mengen and geschäftsrelevanten Daten ermöglichen. Die Bereitstellung dieser Daten an Analytiker und Techniker wird immer wichtiger; interaktive Reaktionszeiten machen oft einen qualitativen Unterschied bezüglich Datenexploration, Überwachung, Online-Kundenservice, rasches Prototyping, Fehlerbeseitigung in Datenpipelines und anderer Aufgaben. Die Durchführung einer interaktiven Datenanalyse im großen Maßstab erfordert einen hohen Grad an Parallelität. Beispielsweise erfordert das Lesen von einem Terabyte von komprimierten Daten in einer Sekunde unter Anwendung der heute handelsüblichen Festplatten gegebenenfalls Zehntausende von Festplatten. Auf ähnliche Weise müssen CPU-intensive Suchen eventuell über Tausenden von Kernen laufen gelassen werden, um sie innerhalb weniger Sekunden abschließen zu können.
  • ZUSAMMENFASSUNG
  • Ein skalierbares, interaktives Ad-hoc-Abfragesystem zur Analyse von Daten ist hierin offenbart. Durch die Kombination von mehrstufigen Ausführungsbäumen mit spaltenorientierter Datenanordnung sind das beschriebene System und die beschriebenen Verfahren in der Lage, rasche und effiziente Abfragen, wie z. B. Aggregatabfragen, auszuführen. Eine spaltenorientierte Speicherdarstellung für verschachtelte Datensätze, ein weit verbreitetes Datenmodell, das in vielen Web- und wissenschaftlichen Daten-Sets Anwendung findet, wird beschrieben. Gemäß einer Ausführungsform wird ein Datensatz in spaltenförmige Streifen zerlegt, wobei jede Spalte als Gruppe von Blöcken kodiert ist, wobei jeder Block Feldwerte und Wiederholungs- sowie Definitionsstufeninformationen enthält. Stufeninformationen werden mithilfe eines Baums von Feldschreibern erzeugt, deren Struktur der Feldhierarchie im Datensatzschema entspricht. Der Datensatz kann unter Einsatz eines endlichen Automaten, der die Feldwerte und Stufeninformationen für jedes Feld abliest und die Werte nacheinander an die ausgegebenen Datensätze anhängt, effizient aus den spaltenorientierten Daten assembliert werden. Wenn nur eine Teilmenge von Feldern abgerufen werden soll, kann ein einfacherer endlicher Automat konstruiert werden, dessen Ausführung billiger ist. Außerdem können durch die Speicherung von zusätzlichen Metadaten, wie z. B. Einschränkungsinformationen, mit der spaltenorientierten Speicherdarstellung weitere Abfragearten unterstützt werden.
  • Ein mehrstufiger Serving-Baum wird verwendet, um Abfragen auszuführen. In einer Ausführungsform empfängt ein Stammserver eine eingehende Abfrage, liest Metadaten aus den Tabellen ab und leitet die Abfrage zu einer nächsten Stufe im Serving-Baum weiter. Blattserver kommunizieren mit einer Speicherschicht oder greifen auf die Daten auf einer lokalen Festplatte zu, wo die gespeicherten Daten repliziert werden können, und lesen Streifen von verschachtelten Daten in der spaltenorientierten Darstellung aus. Jeder Server kann einen internen Ausführungsbaum aufweisen, der einem physikalischen Abfrageausführungsplan entspricht und eine Gruppe von Iteratoren umfasst, die Eingabespalten durchsuchen und Aggregat- und Skalarfunktionsergebnisse, die mit den Stufeninformationen versehen sind, ausgeben. In einer weiteren Ausführungsform ist ein Abfrageverteiler bereitgestellt, der Abfragen basierend auf ihren Prioritäten zeitlich ordnet und die Belastung ausgleicht. Der Abfrageverteiler stellt außerdem Fehlertoleranz bereit, wenn ein Server viel langsamer wird als andere oder wenn auf Replikate nicht mehr zugegriffen werden kann. Der Abfrageverteiler kann ein Histogramm der Verarbeitungszeiten von Ausführungsthreads auf den Blattservern berechnen und zu einem anderen Server umleiten, wenn Verarbeitungszeiten unverhältnismäßig lange sind.
  • Die spaltenweise angeordneten Daten können in situ abgefragt werden. Indem die spaltenweise angeordneten Daten auf einer gemeinsamen Speicherschicht gehalten werden und Mechanismen zur Assemblierung von Datensätzen aus den spaltenweise angeordneten Daten bereitgestellt werden, wird Betriebsfähigkeit mit Datenverwaltungstools ermöglicht, die Daten in einer Datensatzstruktur analysieren. Das System kann außerdem für zahlreiche CPUs skaliert werden und in der Lage sein, rasch große Datenmengen auszulesen. In manchen Fällen können spezielle Ausführungsformen umgesetzt werden, um einen oder mehrere der folgenden Vorteile zu erreichen. An verschachtelten Daten kann in situ gearbeitet werden, sodass auf die Daten zugegriffen werden kann, ohne dass die Daten mit einem Datenbankverwaltungssystem geladen werden müssen. Abfragen von verschachtelten Daten können in kürzerer Ausführungszeit ausgeführt werden als durch andere Analyseprogramme. Eine spaltenorientierte Speicherdatenstruktur, die auf einer gemeinsamen Speicherebene umgesetzt wird, ermöglicht mehreren verschiedenen Analyseprogrammen Zugriff auf die spaltenorientierte Speicherdatenstruktur.
  • Als Alternative zu den beiliegenden Ansprüchen und den in der obigen Beschreibung beschriebenen Ausführungsformen könnte die vorliegende Erfindung auch durch eine der folgenden Ausführungsform beschrieben werden.
  • Ausführungsform 1 betrifft ein durch einen Computer umgesetztes Verfahren. Das Verfahren umfasst das Zugreifen auf eine Sammlung von Datensätzen, die in einem Computerspeicher gespeichert sind, durch ein Rechensystem, wobei jeder Datensatz in der Sammlung von Datensätzen eine Vielzahl von Datenwerten und eine Vielzahl von Datenelementen, welche die Semantik von entsprechenden Datenwerten aus der Vielzahl von Datenwerten identifizieren, umfasst, wobei einer oder mehrere der Datensätze in der Sammlung von Datensätzen jeweils mehrere Exemplare des gleichen Datenelements umfassen und Datenwerte umfassen, die den mehreren Exemplaren des gleichen Datenelements entsprechen. Das Verfahren umfasst weiters das Erstellen, durch das Rechensystem, einer Sammlung von spaltenförmigen Streifen, wobei die Sammlung von spaltenförmigen Streifen die Datenwerte aus jedem Datensatz in der Sammlung von Datensätzen umfasst, wobei jeder spaltenförmige Streifen in der Sammlung von spaltenförmigen Streifen alle Datenwerte enthält, die einem bestimmten Datenelement aus allen Datensätzen in der Sammlung von Datensätzen entsprechen.
  • Ausführungsform 2 betrifft das Verfahren aus Ausführungsform 1. Das Verfahren umfasst weiters das Erstellen, durch das Rechensystem und für jeden Datenwert in jedem spaltenförmigen Streifen in der Sammlung von spaltenförmigen Streifen, von Daten, die eine Position des jeweiligen Datenwerts in einem jeweiligen Datensatz in der Sammlung von Datensätzen identifizieren.
  • Ausführungsform 3 betrifft das Verfahren aus Ausführungsform 2, wobei die Daten aus einem Wiederholungswert und einem Definitionswert bestehen.
  • Ausführungsform 4 betrifft ein Verfahren nach einer der Ausführungsformen 2 bis 3. Das Verfahren umfasst weiters das Wiederherstellen einer Sammlung von Datensätzen, die nur eine Teilmenge der Datenelemente aus den Datensätzen in der Sammlung von Datensätzen enthält, aus (i) den spaltenförmigen Streifen in der Sammlung von spaltenförmigen Streifen und (ii) den Daten.
  • Ausführungsform 5 betrifft ein Verfahren nach einer der Ausführungsformen 1 bis 4, das weiters das Erstellen zur Speicherung eines Wiederholungswerts für jeden einzelnen Datenwert in der Sammlung von spaltenförmigen Streifen mit den Datenwerten in der Sammlung von spaltenförmigen Streifen umfasst, wobei ein Pfad für jedes einzelne Datenelement ein oder mehrere übergeordnete Datenelemente für das jeweilige Datenelement enthält; wobei der Wiederholungswert jedes einzelnen Datenwerts ein neuestes wiederholtes Datenelement im Pfad des jeweiligen Datenelements identifiziert, das dem jeweiligen Datenwert entspricht; wobei das neueste wiederholte Datenelement im Pfad des jeweiligen Datenelements das Datenelement im Pfad des jeweiligen Datenelements ist, das während einer Analyse zum zweiten Mal angetroffen wird, bezogen auf einen Datensatz, der den jeweiligen Datenwert enthält, und der von einer Position des jeweiligen Datenwerts im jeweiligen Datensatz nach oben zum Beginn diese jeweiligen Datensatzes arbeitet.
  • Ausführungsform 6 betrifft ein Verfahren nach einer der Ausführungsformen 1 bis 5, wobei jedes einzelne Datenelement von den Datenelementen, die in der Sammlung von Datenelementen enthalten sind, mit einem jeweiligen Pfad assoziiert ist, der eines oder mehrere der übergeordneten Datenelemente für das jeweilige Datenelement enthält. Das Verfahren umfasst weiteres das Erstellen eines Definitionswerts für jeden einzelnen Pfad oder Abschnitt des jeweiligen Pfads in der Sammlung von Datensätzen zur Speicherung mit den Datenwerten in den spaltenförmigen Streifen. Der Definitionswert für den jeweiligen Pfad oder Abschnitt des jeweiligen Pfads identifiziert eine Menge von Datenelementen, die im jeweiligen Pfad oder Pfadabschnitt enthalten ist.
  • Ausführungsform 7 betrifft ein Verfahren nach einer der Ausführungsformen 1 bis 6. Das Verfahren umfasst weiters das Empfangen von Informationen aus einer Sammlung von Datenquellen vom Rechensystem, wobei jede Datenquelle Informationen enthält, die nicht nach dem Schema strukturiert sind. Das Verfahren umfasst weiters das Erstellen jedes Datensatzes in der Sammlung von Datensätzen durch das Rechensystem, indem die Informationen in jeder Datenquelle gemäß dem Schema strukturiert werden.
  • Ausführungsform 8 betrifft ein Verfahren nach einer der Ausführungsformen 1 bis 7. Das Verfahren umfasst weiters das Ausführen einer Abfrage der Sammlung von spaltenförmigen Streifen durch das Rechensystem. Das Verfahren umfasst weiters das Ausgeben, durch das Rechensystem und als Antwort auf die Ausführung der Abfrage, eines neuen spaltenförmigen Streifens, der eine Teilmenge der Werte aus einem spaltenförmigen Streifen aus der Sammlung von spaltenförmigen Streifen, die durch die Abfrage identifiziert werden, umfasst.
  • Ausführungsform 9 betrifft ein Verfahren nach Ausführungsform 8, wobei die Abfrage der Sammlung von spaltenförmigen Streifen ausgeführt wird, ohne dass die Datenwerte, die in der Sammlung von spaltenförmigen Streifen enthalten sind, in eine Datenbank geladen werden.
  • Ausführungsform 10 betrifft ein Verfahren nach einer der Ausführungsformen 1 bis 9, wobei zumindest ein erster spaltenförmiger Streifen der Sammlung von spaltenförmigen Streifen mehrere Datenblöcke enthält, wobei zumindest einer der mehreren Datenblocke einen Feststellungswert enthält, der eine Art von Werten definiert, die in den Werten jedes Blocks zu finden sind, sodass das Rechensystem, wenn eine Abfrage des ersten spaltenförmigen Streifens ausgeführt wird, einen oder mehrere Datenblöcke umgeht, die keinen durch die Abfrage spezifizierten Datenwert enthalten.
  • Ausführungsform 11 betrifft ein Verfahren nach einer der Ausführungsformen 1 bis 10, wobei ein erster spaltenförmiger Streifen der Sammlung von spaltenförmigen Streifen als erste Datenwerte alle Datenwerte aus den Datensätzen in der Sammlung von Datensätzen umfasst, die Exemplaren eines ersten Datenelements in der Sammlung von Datensätzen entsprechen. Der erste spaltenförmige Streifen speichert mehrere der ersten Datenwerte kontinuierlich in einem Speicher, wobei die mehreren ersten Datenwerte nicht kontinuierlich in einem Speicher gespeichert wurden, wenn die mehreren ersten Datenwerte in Datensätzen in der Sammlung von Datensätzen gespeichert wurden.
  • Ausführungsform 12 betrifft ein Verfahren nach einer der Ausführungsformen 1 bis 11, wobei zumindest ein Datensatz in der Sammlung von Datensätzen Datenelemente und entsprechende Datenwerte enthält, die gemäß einem verschachtelten Datenmodell gespeichert sind.
  • Ausführungsform 13 betrifft ein Verfahren nach einer der Ausführungsformen 1 bis 12, wobei ein erster Datensatz ein erstes Datenelement und ein zweites Datenelement umfasst, wobei das erste Datenelement ein übergeordnetes Datenelement des zweiten Datenelements ist, und das zweite Datenelement ein untergeordnetes Datenelement des ersten Datenelements ist. Ein erster spaltenförmiger Streifen umfasst einen Datenwert, der dem ersten Datenelement im ersten Datensatz entspricht, und alle andere Datenwerten, die Exemplaren des ersten Datenelements in der Sammlung von Datensätzen entsprechen. Ein zweiter spaltenförmiger Streifen umfasst einen Datenwert, der dem zweiten Datenelement im ersten Datensatz entspricht, und alle anderen Datenwerte, die Exemplaren des zweiten Datenelements in der Sammlung von Datensätzen entsprechen.
  • Weitere Ausführungsformen entsprechen computerlesbaren Speichervorrichtungen, die Anweisungen speichern, die bei Ausführung durch eine oder mehrere Verarbeitungsvorrichtungen (z. B. einen programmierbaren Computerprozessor) Operationen gemäß einer der oben beschriebenen Ausführungsformen 1 bis 13 ausführen. Weitere Ausführungsformen umfassen Systeme und Geräte, welche die beschriebenen computerlesbaren Speichervorrichtungen umfassen, die Anweisungen speichern, die bei Ausführung durch eine oder mehrere Verarbeitungsvorrichtungen Operationen gemäß einer der oben beschriebenen Ausführungsformen 1 bis 13 ausführen.
  • Details zu einer oder mehreren der Ausführungsformen sind in den beiliegenden Zeichnungen und der nachfolgenden Beschreibung dargelegt. Andere Merkmale, Ziele und Vorteile gehen aus der Beschreibung und den Zeichnungen sowie aus den Ansprüchen hervor.
  • BESCHREIBUNG DER ZEICHNUNGEN
  • 1 veranschaulicht eine datensatzweise Darstellung von verschachtelten Daten im Vergleich zu einer spaltenorientierten Darstellung.
  • 2 veranschaulicht zwei exemplarische verschachtelte Datensätze und ihr Schema.
  • 3 veranschaulicht spaltenförmige Streifendarstellungen der exemplarischen verschachtelten Datensätze.
  • 4 ist ein Algorithmus für die Zerlegung eines Datensatzes in Spalten.
  • 5 veranschaulicht einen Automaten zur Ausführung einer vollständigen Datensatzassemblierung.
  • 6 veranschaulicht einen Automaten zur Assemblierung von Datensätzen aus zwei Feldern sowie die Datensätze, die der Automat erstellt.
  • 7 ist ein Algorithmus für die Erstellung eines Datensatz-Assemblierungsautomaten.
  • 8 ist ein Algorithmus zur Assemblierung eines Datensatzes aus spaltenförmig angeordneten Daten.
  • 9 zeigt eine exemplarische Abfrage, die eine Projektion, Selektion und Aggregation innerhalb des Datensatzes ausführt.
  • 10 veranschaulicht eine Systemarchitektur und Ausführung innerhalb eines Serverknotens.
  • 11 ist eine Tabelle, welche die in der experimentellen Studie verwendeten Datensätze veranschaulicht.
  • 12 ist ein Diagramm, das den Leistungsausfall zeigt, der auftreten kann, wenn von einer lokalen Festplatte abgelesen wird.
  • 13 ist ein Diagramm, dass die Ausführung von sowohl MapReduce als auch dem beschriebenen System an einem spaltenorientierten Speicher im Vergleich zu einem datensatzorientierten Speicher zeigt.
  • 14 ist ein Diagramm, das die Ausführungszeit als Funktion von Serving-Baumstufen für zwei Aggregatabfragen zeigt.
  • 15 ist ein Diagramm, das Histogramme von Verarbeitungszeiten veranschaulicht.
  • 16 ist ein Diagramm, das die Ausführungszeit einer Top-k-Abfrage veranschaulicht, wenn das System von 1000 auf 4000 Knoten skaliert wird.
  • 17 ist ein Diagramm, das einen Prozentsatz an verarbeiteten Tabellen als Funktion der Verarbeitungszeit pro Tablet zeigt.
  • 18 ist ein Diagramm, das die Abfrageantwortzeitverteilung in einem Arbeitspensum von einem Monat zeigt.
  • 19 ist ein Blockdiagramm eines Systems, zur Erstellung und Verarbeitung von spaltenorientierten Speicherdarstellungen von verschachtelten Datensätzen.
  • 20 ist ein Flussdiagramm eines exemplarischen Prozesses zur Erstellung von spaltenförmig angeordneten Daten.
  • 21 ist ein Blockdiagramm von Rechenvorrichtungen, die zur Implementierung der in diesem Dokument beschriebenen Systeme und Verfahren eingesetzt werden können, entweder als Client oder als Server oder als Vielzahl von Servern.
  • Gleiche Bezugssymbole in den verschiedenen Zeichnungen bezeichneten gleiche Elemente.
  • DETAILLIERTE BESCHREIBUNG
  • Dieses Dokument beschreibt Techniken, Verfahren, Systeme und Mechanismen zur Erstellung und Verarbeitung von spaltenorientierten Speicherdarstellungen von Datensätzen. Als Veranschaulichung kann beispielsweise eine Organisation Daten von Internetseiten in Datensätzen aus verschachtelten Informationen speichern. Die verschachtelten Informationen können in einem spaltenförmigen Datenspeicherformat gesammelt werden, das effiziente Abfragen der Daten unter Verwendung eines mehrstufigen Ausführungsbaums ermöglicht. Die spaltenförmig angeordneten Daten können wieder in Datensätzen zur Eingabe in Analyseprogramme assembliert werden, die mit datensatzorientierten Daten arbeiten.
  • Im Speziellen kann jeder Datensatz eine Instantiierung eines Schemas sein, das eine Formatierung von Datensätzen definiert, wobei die Datensätze gemäß dem Schema erzeugt werden. Beispielsweise kann ein Schema verschiedene Felder zur Speicherung von Informationen über eine Internetseite und eine Struktur zur Organisation von Feldern in einem Datensatz und ihre entsprechenden Werte identifizieren. Wenn ein Datensatz zur Beschreibung der Merkmale einer Internetseite erstellt wird, dann kann der Datensatz für jedes Feld ein Datenelement und einen entsprechenden Wert umfassen. Das Datenelement kann die Semantik des Wertes gemäß einer Definition im Schema definieren. Die Bezeichnungen Datenelement und Feld können in diesem Dokument austauschbar verwendet werden. Feld kann sich auch auf eine Kombination aus einem Datenelement und einem entsprechenden Wert beziehen.
  • Ein bestimmter Datensatz muss nicht alle von einem Schema definierten Felder enthalten. Somit kann das Schema als ,Vorlage' dienen, aus der Felder für den jeweiligen Datensatz ausgewählt werden können. Beispielsweise kann das Schema ein Feld zur Definition von Informationen über Videoinhalte auf einer Internetseite enthalten. Wenn eine Internetseite keine Videoinhalte umfasst, dann umfasst der der Internetseite entsprechende Datensatz gegebenenfalls kein Feld aus dem Schema, das Informationen über Videos auf der Webseite definiert. Somit können einige der Felder ,optional' sein.
  • Einige der Felder in einem Datensatz können jedoch ,obligatorisch' sein. Ein ,obligatorisches' Feld in dem Schema kann beispielsweise ein Uniform Resource Locator (URL) eines Ursprungsorts des Dokuments auf der Internetseite sein. Das Feld kann gegebenenfalls obligatorisch sein, weil jedes Dokument einer Internetseite von einem Ursprungsort abgerufen werden kann (d. h. es gibt einen URL für jedes Dokument) und weil das Feld gegebenenfalls erforderlich ist, um Informationen auf der Internetseite weiter zu verarbeiten (z. B. um zu bestimmen, ob sich der Inhalt verändert hat).
  • Ein Feld kann auch ,wiederholbar' sein. Ein Feld, das sich im Schema befindet und als wiederholbar definiert ist, kann an der durch das Schema definierten Position wiederholt in einer Instantiierung des Schemas (d. h. in einem Datensatz) repliziert werden. Beispielsweise kann ein Schema ein Feld enthalten, das zur Definition von Dokumenten dient, die mit der Internetseite verknüpft sind. Das Schema spezifiziert gegebenenfalls das Feld nur einmal, kann aber angeben, dass das Feld wiederholbar ist (z. B. weil mehrere Dokumente mit einer bestimmten Internetseite verknüpft sind). Somit kann ein Datensatz für eine Internetseite mehrere Felder enthalten, die einen Wert für eine Verknüpfung zu einer Internetseite identifizieren. Die wiederholten Felder können sich auf derselben Stufe befinden und unter einem übergeordneten Feld in dem Datensatz verschachtelt sein (wie nachstehend genauer erläutert ist).
  • Die Felder des Schemas (und somit die Felder in den Datensätzen) können verschachtelt sein. Mit anderen Worten können einige Felder untergeordnete (Children) von anderen Feldern sein, die als übergeordnete Felder (Parents), überübergeordnete Felder (Grandparents) usw. bezeichnet werden. In manchen Beispielen sind untergeordnete Knoten jene Knoten in dem Schema, die sich innerhalb eines Paars aus einer öffnenden und einer schließenden geschwungenen Klammer direkt nach einem übergeordneten Knoten befinden. Andere Implementierungen der Verschachtelung können aber auch eingesetzt werden (z. B. die Verwendung eines Start-Tags für das Feld und eines End-Tags für das Feld). Somit kann, mit Ausnahme der Felder, die sich auf der höchsten Stufe befinden (z. B. die Felder, die keine untergeordneten Felder anderer Felder sind), jedes Feld ein übergeordnetes Feld aufweisen.
  • Eine Verschachtelung kann hilfreich für die Organisation von Informationen in konzeptbezogene Informationsblöcke sein. Um zum vorherigen Beispiel zurückzukehren, kann das Schema ein ,Video'-Feld umfassen. Das ,Video'-Feld kann mehrere untergeordnete Felder umfassen, welche die Merkmale des Videos identifizieren können (z. B. wie lange das Video dauert, das Format des Videos und die Auflösung des Videos). Somit müssen, wenn ein Datensatz erstellt wird, gegebenenfalls keine untergeordneten Knoten in den Datensatz aufgenommen werden, wenn die übergeordneten Knoten nicht vorhanden sind. Mit anderen Worten umfasst ein Datensatz für eine Internetseite, die kein Video aufweist, gegebenenfalls kein Feld ,VideoLänge', weil der Datensatz kein Feld ,Video' (d. h. das übergeordnete Feld des Felds ,VideoLänge') enthält. Anwendungsprogramme, die das Ansehen und Ändern eines Datensatzes erlauben, können das abhängige untergeordnete Feld visuell vom übergeordneten trennen (z. B. das untergeordnete Feld gegenüber dem übergeordneten Feld einrücken).
  • Die Analyse von Millionen von Datensätzen kann zeitaufwändig sein. In manchen Fällen ist ein Benutzer nur an Daten aus einem einzigen Feld interessiert, aber es muss auf alle Datensätze vollständig zugegriffen werden. Beispielsweise kann ein Benutzer abfragen, dass ein Analyseprogramm Millionen von Datensätzen überprüft, um jene Datensätze zu identifizieren, die mit Internetseiten assoziiert sind, die Videos enthalten, die nicht länger als zehn Minuten dauern und eine ,hohe' Auflösung haben. Da jeder Datensatz als separate Datenstruktur gespeichert sein kann, muss jeder ganze Datensatz auf ein Datenbankverwaltungssystem geladen werden, um den Datensatz abzufragen und zu bestimmen, ob der Datensatz die bestimmte Kombination von Videolänge und Auflösung enthält.
  • Dieses Laden jedes einzelnen Datensatzes kann untragbar teuer sein, sowohl bezüglich der Menge an Servern, die für die Ausführung der Aufgabe erforderlich ist, als auch bezüglich der Zeit, die notwendig ist, um die Abfrage abzuschließen. Viel Zeit kann eingespart werden, indem alle Werte eines bestimmten Feldes – ausgewählt aus den Millionen von Datensätzen – nebeneinander in einem Teil des Speichers gespeichert werden. Solch eine Speicherung von Werten aus verschiedenen Datensätzen, aber für ein bestimmtes Feld, wird als spaltenorientierte Speicherung bezeichnet. Im Gegensatz dazu wird das Beispiel, bei dem Informationen für einen bestimmten Datensatz nebeneinander in einem Speicher gespeichert werden, als datensatzorientierte Speicherung bezeichnet.
  • Spaltenorientierte Speicherung für verschachtelte Datensätze bringt jedoch besondere Schwierigkeiten mit sich. Ein Feld in einem Datensatz kann durch seinen Pfad identifiziert sein, der eine Liste der Felder und der übergeordneten Felder (z. B. ÜberÜbergeordnet.Übergeordnet.Untergeordnet) umfassen kann. Da ein oder mehrere der Felder in dem Pfad wiederholend sein können, kann es mehrere Exemplare eines Felds mit demselben Pfadnamen geben. Wenn nun eine fortlaufende Liste von spaltenförmigen Daten für ein bestimmtes Feld analysiert wird, ist ein Mechanismus notwendig, um zu identifizieren, welche Werte zu welchen Datensätzen gehören, und für jene Datensätze, die mehrere Werte für einen bestimmten Pfad enthalten, was die jeweilige Position des Werts im Datensatz ist. Mit anderen Worten ist aufgrund einer Abfolge von Werten in einer Spaltenstruktur ein Mechanismus notwendig, um die Struktur der Datenätze aus den Werten zu rekonstruieren.
  • Der Mechanismus zur Rekonstruktion der Struktur eines Datensatzes aus spaltenförmig angeordneten Daten umfasst das Speichern, für jeden Wert der spaltenförmig angeordneten Daten, einer ,Wiederholungsstufe' und einer ,Definitionsstufe'. Jede ,Stufe' kann eine Abfolge von Bits sein, die eine Zahl darstellen. Beispielsweise kann eine ,Stufe' 3 durch zwei Bits (z. B. ,11') dargestellt sein. In einem anderen Beispiel kann eine Stufe ,5' durch drei Bits (z. B. ,101') dargestellt sein.
  • Die ,Wiederholungsstufe', die für einen bestimmten Wert gespeichert ist, zeigt das Feld im Pfad des Werts an, dessen Wiederholung die letzte war. Beispielsweise kann eine Spalte von Werten für ein Feld mit dem Pfad ,Video.Auflösung.Breite' gespeichert werden. Eine Wiederholungsstufe ,1' kann anzeigen, dass das ,Video'-Feld als letztes wiederholt wurde, während eine Wiederholungsstufe ,2' anzeigen kann, dass das ,Auflösung'-Feld als letztes wiederholt wurde. Kürzliche Wiederholung kann anzeigen, ausgehend von der Position des Werts im Datensatz, aus dem der Wert ausgewählt wurde und von der aus der nach oben zum Beginn des Dokuments arbeitet, welches Feld im Pfad ,Video.Auflösung.Breite' als erstes einen Wert zwei erreicht (z. B. welches Feld als erstes zum zweiten Mal auftritt).
  • Beim Arbeiten nach oben von der Position des ,Breite'-Werts wird jedes Feld beispielsweise einmal angetroffen. Tritt ein Feld ein zweites Mal auf, dann muss in die Tiefen des nächsten, benachbarten verschachtelten Feldes (und möglicherweise weitere Verschachtelungen) vorgedrungen werden. So kann ein ,Video'-Feld angetroffen werden, dass keine untergeordneten ,Auflösung'-Felder umfasst (z. B. weil das ,Auflösung'-Feld optional oder ein wiederholtes Feld ist). So wurde das ,Video'-Feld ein zweites Mal angetroffen und ist somit das zuletzt wiederholte Feld. Eine Wiederholungsstufe ,1' wird dem Wert zugeordnet.
  • Eine Wiederholungsstufe'0' kann anzeigen, dass das Feld keinen zuletzt wiederholten Wert umfasst (z. B. wurde es bei einem Top-Down-Scan zum ersten Mal im Datensatz angetroffen). In manchen Beispielen weist ein ,obligatorisches' Feld in einem Pfad keine Wiederholungsstufe auf. Wenn beispielsweise das ,Auflösung'-Feld für den ,Video.Auflösung.Breite'-Pfad obligatorisch ist, dann kann der Bereich der Auflösungsstufen ,0' oder ,1' sein. ,Auflösung' weist gegebenenfalls keine Stufe auf, weil es immer im Datensatz vorhanden ist, wenn das ,Video'-Feld vorhanden ist. Wenn also ,Auflösung' eine Stufe ,2' zugeordnet wurde, dann tritt es gegebenenfalls immer vor ,Video' auf und erhält somit niemals eine Stufe ,1'. Wenn also keine Wiederholungsstufe für obligatorische Felder vorhanden ist, kann die Anzahl an verschiedenen Auflösungsstufen reduziert werden, und die Anzahl an Bits zur Angabe der Auflösungsstufen kann reduziert werden.
  • Wenn das Feld ,Breite' im obigen Beispiel ein ,optionales' oder ,wiederholtes' Feld ist, umfasst ein Datensatz nicht immer einen Wert für das ,Breite'-Feld. Somit kann eine Spalte von Werten für den ,Video.Auflösung.Breite'-Pfad einen Mechanismus nutzen, um zu kennzeichnen, wenn ein ,Video'- oder ein ,Video.Auflösung'-Pfad im Datensatz gefunden wird, das ,Breite'-Feld aber nicht im Datensatz instantiiert wurde. Dieser Mechanismus kann das Speichern einer ,Definition'-Stufe für jedes ,Video'- oder ,Vido.Auflösung'-Feld im Datensatz in der ,Vido.Auflösung.Breite'-Spalte von Daten umfassen, unabhängig davon, ob das ,Breite'-Feld instantiiert wurde. Die ,Definition'-Stufe kann anzeigen, wie viele der Felder im ,Video.Auflösung.Breite'-Pfad, die fehlen könnten (z. B. weil das Feld optional oder wiederholbar ist), tatsächlich vorhanden sind.
  • Wenn also das Feld ,Video' im Datensatz vorhanden ist, aber kein entsprechendes untergeordnetes ,Auflösung'-Feld instantiiert ist, kann eine Definitionsstufe ,1' in der ,Video.Auflösung.Breite'-Spalte gespeichert werden. Wenn das Feld ,Video.Auflösung' im Datensatz vorhanden ist, aber kein entsprechendes untergeordnetes ,Breite'-Feld instantiiert ist, kann eine Definitionsstufe ,2' gespeichert werden. Wenn das Feld ,Video.Auflösung.Breite' im Datensatz vorhanden ist, dann kann eine Definitionsstufe ,3' gespeichert werden.
  • Als solches kann ein Definitionsgrad für jeden Datenelementpfad oder Abschnitt eines Datenelementpfads in einem Datensatz erzeugt werden. Beispielsweise kann der Pfad ,Video.Auflösung.Breite' einen Definitionsgrad von ,3' aufweisen, der die Menge an Datenelementen im Pfad ,Video.Auflösung.Breite' identifiziert. Als weiteres Beispiel kann der Pfad ,Video.Auflösung' eine Definitionsstufe von ,2' aufweisen, welche die Menge an Datenelementen im Pfad ,Video.Auflösung' identifiziert, auch wenn das ,Breite'-Datenelement nicht im Datensatz instantiiert wurde.
  • Wann immer also die ,Definitionsstufe' (welche die Anzahl an Feldern darstellt, die undefiniert sein könnten, tatsächlich aber definiert sind) niedriger ist als die Anzahl an Feldern, die definiert sein könnten, kann ein Fehlen des ,Breite'-Felds identifiziert werden.
  • In verschiedenen Beispielen ist eine ,Definitionsstufe' ein Boolescher Wert und keine ganze Zahl. Ein Boolescher Wert kann anstelle einer ganzen Zahl verwendet werden, wenn nicht wichtig ist, welches enthaltende Objekt nicht definiert wurde. Beispielsweise kann eine Definitionsstufe für einen Wert des Breite-Felds des ,Video.Auflösung.Breite'-Pfads ,NULL' sein, wenn das System nicht wissen muss, welche der übergeordneten Felder instantiiert wurden. Die Kombination der ,Wiederholungsstufe' und der ,Definitionsstufe' kann die Rekonstruktion der Struktur des Datensatzes ermöglichen.
  • Eine Spalte von Daten für ein bestimmtes Feld (z. B. das ,Video.Auflösung.Breite'-Feld) kann die Werte für das Feld aus verschiedenen Datensätzen, die Wiederholungs- und Definitionsstufen entsprechen (mit der Erkenntnis, dass einige ,fehlende' Werte eine Wiederholungs- und eine Definitionsstufe aufweisen können) und Header-Informationen enthalten. In manchen Beispielen sind die Werte nacheinander und benachbart gespeichert. Mit anderen Worten, wenn ein Wert für ein ,Video.Auflösung.Breite'-Feld ,700' war und der Wert für ein nächstes Video ,Video.Auflösung.Breite'-Feld ,800' war, kann ein Teil der Spalte, wie er im Speicher gespeichert ist, ,700800' sein. In diesem Beispiel kann ein Header in der Spalte identifizieren, dass jeder Wert eine fixe Breite aufweist (z. B. eine fixe binäre Darstellung mit den Zahlen 700 und 800).
  • In manchen Beispielen sind die gespeicherten Werte durch Zeichenketten dargestellt. Beispielsweise können Exemplare des ,Breite'-Felds die Werte ,klein' und ,mittel' enthalten. In manchen Beispielen können die verschiedenen Zeichenkettenwerte eine fixe Länge aufweisen (z. B. kann ein Nullwert am Anfang oder am Ende des ,klein'-Werts angehängt werden, damit die Zeichenkette gleich lang ist wie der ,mittel'-Wert). In manchen Beispielen kann jedoch jede gespeicherte Zeichenkette einen Bezeichner in einem Anfangsabschnitt der Zeichenkette enthalten, der die Länge der Zeichenkette identifiziert. Beispielsweise kann der ,klein'-Wert einen Bezeichner enthalten, der angibt, dass die Zeichenfolge fünf Stellen (oder eine entsprechende Anzahl von binären Bits) lang ist.
  • Da die Werte nacheinander im spaltenförmigen Streifen gespeichert sein können, können die ,Wiederholungs-' und ,Definitionsstufen' am Anfang des spaltenförmigen Streifens gespeichert werden. In manchen Beispielen sind die „Wiederholungs-' und ,Definitionsstufen” in Paaren für einen bestimmten Wert (egal ob instantiiert oder nicht vorhanden) gespeichert. Beispielsweise kann eine Wiederholungsstufe 3 in den ersten vier Bits eines Bytes gespeichert sein, und eine Definitionsstufe 1 in den letzten vier Bits des Bytes. Ein nächstes Byte im Header kann eine Wiederholungsstufe und eine Definitionsstufe für das nächste Exemplar des Feldes im Datensatz (oder das erste Exemplar im nachfolgenden Datensatz) umfassen.
  • Die Anzahl an Bits, die zur Darstellung der Wiederholungs- und Definitionsstufen verwendet wird, kann auf einem maximalen Stufewert basieren. Wenn beispielsweise die maximale Wiederholungsstufe 3 beträgt, dann kann die Wiederholungsstoffe durch zwei Bits dargestellt werden. Wenn die maximale Wiederholungsstufe 4 beträgt, kann die Wiederholungsstufe durch drei Bits dargestellt werden. Der Header kann Informationen enthalten, welche die Länge der Wiederholungs- und Definitionsstufen identifizieren.
  • In verschiedenen Beispielen können die Wiederholungsstufen nacheinander im Speicher gespeichert sein, und die Definitionsstufen können nacheinander im Speicher (d. h. nicht in Paaren) gespeichert sein. In verschiedenen Beispielen können die Wiederholungs- und Definitionsstufen als Gruppe mit ihrem entsprechenden Wert gespeichert sein (wenn der Wert instantiiert ist). Mit anderen Worten kann eine Folgen von Informationen im spaltenförmigen Streifen wie folgt aussehen:
    Wert1:WiederholungStufe1:DefinitionStufe1:Wert2:WiederholungStufe2:Stufe2
    usw.
  • Die spaltenförmigen Streifen können zu Informationsblöcken komprimiert werden. Beispielsweise kann jeder spaltenförmige Streifen in eine Gruppe von Blöcken aufgespaltet werden, wobei jeder Block seinen eigenen Header aufweist. Ein erster Block kann die ersten 800.000 Werte enthalten, und ein zweiter Block kann die zweiten 800.000 Werte aus 1,6 Millionen Werten enthalten. Ein Block-Header kann die Wiederholungs- und Definitionsstufen zusammen mit weiteren Informationen enthalten, die verwendet werden können, um die Analyse des Abschnitts des spaltenförmigen Streifens zu unterstützen, der durch den Block dargestellt ist, und um den spaltenförmigen Streifen zu rekonstruieren.
  • In manchen Beispielen umfasst der Block-Header einen „Feststellung'-Wert, der einen Datentyp definiert, der in den Blockwerten zu finden ist. Beispielsweise kann ein Block für das ,Video.Auflösung.Breite'-Feld gegebenenfalls keine Werte enthalten, die eine Auflösungsbreite ,groß' bezeichnen. Somit kann der ,Festellung'-Wert anzeigen, dass die Werte nur die Werte ,klein' und ,mittel' enthalten. Wenn eine Abfrage für Datensätze ausgeführt wird, die Videos mit einer Auflösungsbreite ,hoch' umfassen, dann kann der beschriebene Block vom Abfragesystem ausgelassen werden.
  • Das in diesem Dokument beschriebene System kann Abfragen an spaltenförmigen Streifen durchführen, ohne dass die Informationen in den spaltenförmigen Streifen in Datensätzen rekonstruiert werden und ohne dass Informationen aus den spaltenförmigen Streifen in eine Datenbank geladen werden müssen (d. h. ohne ,Einfügen'-Klausel). Somit kann in situ auf die Daten zugegriffen werden, was angesichts der Größenordnung Zeitersparnisse bei der rechnerischen Analyse bringen kann.
  • Das Abfragesystem kann zahlreiche der zur Abfrage von relationalen Datenbanken eingesetzten Klauseln verwenden. Weitere Klauseln, die für nichtrelationale Datenbanken spezifisch sind, können jedoch ebenfalls eingesetzt werden. Beispielsweise kann eine Klausel INNERHALB die Ausführung von Operationen an mehreren Exemplaren eines Feldes innerhalb eines einzelnen Datensatzes oder eines Teils eines Datensatzes ermöglichen. Eine relationale Datenbank kann jedoch gegebenenfalls nicht in der Lage sein, mehr als ein einzelnes Exemplar eines Feldes in einer Reihe zu speichern (z. B. eine Darstellung eines Datensatzes). Somit kann eine Abfrage einer relationalen Datenbank gegebenenfalls grundsätzlich nicht in der Lage sein, Abfragen ,in' einer Datensatzes auszuführen.
  • Als Beispiel für die INNERHALB-Klausel können Werte für ein bestimmtes Feld multipliziert werden. Dies basiert auf der Annahme, dass die Abfrageanweisungen erfordern, dass alle Werte für ,Investmentfond.Zinssatz' für einen bestimmten Datensatz zusammen multipliziert werden (wenn jeder Datensatz für einen bestimmten Kontoinhaber steht). Das Abfragesystem kann alle ,Investmentfond.Zinssatz'-Werte innerhalb des einen Datensatzes finden und sie zusammen multiplizieren.
  • Ein weiteres Beispiel für eine Klausel, die für nichtrelationale verschachtelte Daten spezifisch sein kann, ist die Klausel AUSLASSEN WENN. Diese Klausel kann das Filtern eines Datensatzes ermöglichen, um Exemplare von Feldern zu entfernen, wenn ein eine bestimmte Bedingung erfüllt ist (z. B. kann mit bestimmten entfernten Feldern ein neuer spaltenförmiger Streifen oder Datensatz erstellt werden). Beispielsweise kann ein Streifen von Werten, die das Gehalt von Mitarbeitern auflisten, abgefragt werden und unter Verwendung der Klausel AUSLASSEN WENN ein neuer Streifen erstellt werden, der Mitarbeiter mit einem Einkommen über $ 90.000 entfernt.
  • 1. EINLEITUNG
  • Paralleles Rechnen im großen Maßstab kann unter Einsatz von gemeinsamen Clustern von handelsüblichen Geräten ausgefü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 an verteilten Anwendungen umfassen, die Ressourcen teilen, sehr unterschiedliche Arbeitspensen aufweisen und auf Geräten mit unterschiedlichen Hardware-Parametern laufen. Eine einzelne Rechenmaschine in einer verteilten Anwendung kann viel länger für die Ausführung einer Aufgabe brauchen als andere oder aufgrund von Ausfällen oder Zufallsfehlern des Cluster-Verwaltungssystems niemals abschließen. So kann das Behandeln von Nachzüglern (z. B. Rechenaufgaben mit großer Verzögerungszeit) und Ausfällen das rasche Ausführen und Fehlertoleranz ermöglichen. Siehe G. Czajkowski. Sorting 1PB with MapReduce. Official Google Blog, Nov. 2008. http://googleblog.blogspot.com/2008/11/sorting-1pb-with-mapreduce.html.
  • Die bei Internet- und wissenschaftlichen Rechenaufgaben verwendeten Daten sind oft nichtrelational. Somit kann in diesen Bereichen ein flexibles Datenmodell von Vorteil sein. Datenstrukturen, die in Programmiersprachen verwendet werden, Nachrichten, die von verteilten Systemen ausgetauscht werden, Internet-Datenverkehrprotokolle usw. eignen sich gegebenenfalls für eine verschachtelte Darstellung. Beispielsweise kann eine verschachtelte Darstellung von Daten mehrere Felder umfassen, die jeweils mehrere Stufen von untergeordneten Feldern umfassen. Einige der untergeordneten Felder können entsprechende Daten enthalten. Eine Normalisierung und Rekombination solcher Daten auf Internetebene kann teuer bezüglich der Rechenmaschinen sein. Manchen der strukturierten Datenverarbeitungssystemen bei großen Internetfirmen liegt ein verschachteltes Datenmodell zugrunde.
  • Dieses Dokument beschreibt ein System, das eine interaktive Analyse sehr großer Daten-Sets mithilfe von geteilten Clustern aus handelsüblichen Geräten unterstützt. Anders als bei herkömmlichen Datenbanken ist dieses in der Lage, in situ mit verschachtelten Daten zu arbeiten. In situ bezieht sich hier auf die Möglichkeit, ,an Ort und Stelle' auf Daten zuzugreifen, beispielsweise in einem verteilten Dateisystem wie 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 und R. Gruber. Bigtable: A Distributed Storage System for Structured Data. In OSDI (2006)).
  • Das System kann zahlreiche Abfragen an solchen Daten ausführen, die üblicherweise eine Abfolge von MapReduce-Aufträgen erfordern, aber in einem Bruchteil der Ausführungszeit. Siehe J. Dean und S. Ghemawat. MapReduce: Simplified Data Processing an Large Clusters. In OSDI (2004). Das beschriebene System kann gemeinsam mit MapReduce eingesetzt werden, um die Ausgaben von MapReduce-Pipelines zu analysieren oder größere Berechnungen einem raschen Prototyping zu unterziehen. Beispiele für die Verwendung des Systems umfassen:
    • • Analyse von Internetprotokollen und Crawler-Internetdokumenten;
    • • Installation von Daten für Anwendungen, die von einem Online-Marktplatz bedient werden;
    • • Absturzdaten für Anwendungsprodukte;
    • • Multimedia-Abspielstatistiken;
    • • OCR-Ergebnisse beim Scannen von Büchern;
    • • Spam-Analyse;
    • • Fehlerbehebung bei Kartenkacheln;
    • • Tabellenmigrationen in verwalteten Bigtable-Exemplaren;
    • • Ergebnisse eines Testdurchlaufs eines verteilten Build-Systems;
    • • Festplatten-I/O-Statistiken für Hunderttausende von Festplatten;
    • • Ausführungsprotokolle von MapReduce-Aufträgen in mehreren Datenzentren; und
    • • Symbole und Abhängigkeiten in einer Codebasis.
  • Das beschriebene System basiert auf Ideen aus Internetsuch- und parallelen Datenbankverwaltungssystemen. Erstens basiert seine Architektur auf dem Konzept eines Serving-Baums, der in verteilten Suchmaschinen eingesetzt wird. Siehe J. Dean. Challenges in Building Large-Scale Information Retrieval Systems: Invited Talk. In WSDM (2009). Wie bei einer Internetsuchanfrage wird eine Abfrage bei jedem Schritt im Baum nach unten geschoben und neu geschrieben. Das Ergebnis der Abfrage wird assembliert, indem die von unteren Stufen des Baums erhaltenen Antworten aggregiert werden.
  • Zweitens stellt das beschriebene System eine höhere SQL-artige Sprache zum Ausdruck von Ad-hoc-Abfragen bereit. Im Gegensatz zu Stufen wie Pig (siehe C. Olston, B. Reed, U. Srivastava, R. Kumar und 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 in der stehenden Form aus, ohne sie in MapReduce-Aufträge umzuwandeln.
  • Und schließlich verwendet das beschriebene System eine spaltenförmige Streifenspeicherdarstellung, die es ermöglicht, weniger Daten von einem sekundären Speicher abzulesen und CPU-Kosten durch günstigere Kompression zu reduzieren. Spaltenspeicherungen zur Analyse von relationalen Daten (D. J. Abadi, P. A. Boncz und S. Harizopoulos. Column-Oriented Database Systems. VLDB, 2(2) (2009)) haben sich scheinbar nicht ihren Weg in verschachtelte Datenmodelle gefunden. Das spaltenorientierte Speicherformat, das beschrieben wird, kann durch MapReduce, Sawzall (siehe R. Pike, S. Dorward, R. Griesemer und 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)) unterstützt werden.
  • In Abschnitt 4 dieses Dokuments ist ein spaltenorientiertes Speicherformat für verschachtelte Daten beschrieben. Algorithmen zur Aufteilung von verschachtelten Datensätzen in Spalten und ihre Reassemblierung sind beschrieben.
  • In Abschnitt 5 ist eine Abfragesprache zur Verarbeitung von Daten beschrieben, die im spaltenorientierten Speicherformat gespeichert sind. Die Abfragesprache und Ausführung der Sprache sind so entworfen, dass sie effizient für spaltenorientierte verschachtelte Streifendaten funktionieren und keine Umstrukturierung von verschachtelten Datensätzen erfordern.
  • In Abschnitt 6 ist eine Veranschaulichung der Anwendung von Ausführungsbäumen, die in Internetsuchsystemen verwendet werden, bei der Datenbankverarbeitung bereitgestellt.
  • In Abschnitt 7 sind Versuche beschrieben, die an Systembeispielen durchgeführt wurden.
  • ABSCHNITT 2: BEISPIEL-SZENARIO
  • Angenommen, Alice, eine Technikerin in einer Internetsuchfirma, hat die Idee, eine neue Art von Signalen aus Internetseiten zu extrahieren. Sie führt einen MapReduce-Auftrag aus, der die Eingabedaten durchsucht, die Inhalte von den Internetseiten enthalten, und ein Daten-Set erstellt, das die neuen Signale enthält, gespeichert in Milliarden von Datensätzen in einem verteilten Dateisystem. Um die Ergebnisse ihres Versuchs 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(*) FROMt
  • Die Befehle von Alice werden innerhalb weniger Sekunden ausgeführt. Sie führt ein paar weitere Abfragen durch, um sicherzustellen, dass der Algorithmus funktioniert. Sie findet eine Unregelmäßigkeit in Signal1 und geht der Sache auf den Grund, indem sie ein FlumeJava-Programm schreibt, das eine komplexere analytische Berechnung mit ihrem ausgegebenen Daten-Set ausführt. Sobald das Problem gelöst ist, erstellt sie eine Pipeline, welche kontinuierlich die eingehenden Inputdaten verarbeitet. Sie formuliert einige vorgefertigten SQL-Abfragen, welche die Ergebnisse ihrer Pipeline über verschiedene Dimensionen aggregieren und fügt sie zu einem interaktiven Dashboard hinzu (z. B. eine Internetseite über einen Dienst, welche den Dienst und detaillierte Statistiken des Diensts beschreibt). Schließlich trägt sie ihr neues Daten-Set in einem Katalog ein, sodass andere Techniker das Daten-Set rasch lokalisieren und abfragen können.
  • Das obige Szenario erfordert gegebenenfalls eine Zusammenarbeit zwischen dem Abfrageprozessor und anderen Datenverwaltungs-Tools. Der erste Bestandteil einer solchen Zusammenarbeit ist eine gemeinsame Speicherschicht. Das Google File System ist eine solche verteilte Speicherschicht, die verwendet werden kann. Das Google File System verwaltet sehr große replizierte Daten-Sets von Tausenden von Maschinen und Zehntausenden von Festplatten.
  • Die Replikation stellt sicher, dass die Daten auch bei fehlerhafter Hardware geschützt sind und dass bei Vorhandensein von Nachzüglern rasche Reaktionszeiten erreicht werden können. Eine hochleistungsfähige geteilte Speicherschicht ist der entscheidende Faktor für In-situ-Datenverwaltung. Sie ermöglicht den Zugriff auf Daten ohne zeitaufwändige Ladephasen, was eine der größten Schwierigkeiten der Datenbankverwendung bei analytischer Datenverarbeitung darstellt (wo es oft möglich ist, Dutzende von MapReduce-Analysen laufen zu lassen, bevor ein Datenbankverwaltungssystem in der Lage ist, die Daten zu laden und eine einzelne Abfrage auszuführen). Wenn beispielsweise ein Datenbankverwaltungssystem zur Analyse von Daten verwendet wird, muss die Datenbank gegebenenfalls geladen werden, wobei Daten ,Einfügen'-Befehle nutzen. Dieses Laden muss vom beschriebenen System gegebenenfalls nicht durchgeführt werden. Ein weiterer Vorteil ist, dass Daten in einem Dateisystem einfach unter Einsatz von Standardinstrumenten manipuliert werden können, beispielsweise um sie auf einen anderen Cluster zu übertragen, Zugangsberechtigungen zu ändern oder eine Teilmenge von Daten für eine auf Dateinamen basierende Analyse zu identifizieren.
  • Ein zweiter Bestandteil beim Aufbau von kooperierenden Datenverwaltungskomponenten ist ein gemeinsames Speicherformat. Spaltenförmige Speicherung wird für flache relationale Daten verwendet, aber die Anpassung einer spaltenförmigen Speicherung für ein verschachteltes Datenmodell ermöglicht die Anwendung der Technik für Internetdaten. 1 veranschaulicht die Idee, dass alle Werte eines verschachtelten Feldes in einer Datenstruktur nebeneinander gespeichert werden. Bei der spaltenorientierten Darstellung von verschachtelten Daten werden alle Werte für ein bestimmtes verschachteltes Feld innerhalb einer Datenstruktur (z. B. das Feld A.B.C) im Speicher nebeneinander und aneinander angrenzend gespeichert. Somit können die Werte für das Feld A.B.C vom Speicher abgerufen werden, ohne dass Werte aus dem Feld A.E und Werte aus dem Feld A.B.D gelesen werden.
  • Weiters können Werte für das gleiche Feld in verschiedenen Exemplaren einer Datenstruktur (z. B. eines ,Datensatzes') aneinander angrenzend gespeichert werden. Beispielsweise können die Werte für das Feld A.B.C für den Datensatz ,r1' neben den Werten für das gleiche Feld für den Datensatz ,r2' gespeichert werden. Bei der ,datensatzorientierten' Darstellung von verschachtelten Daten werden im Gegensatz dazu Werte für alle Felder innerhalb eines bestimmten Datensatzes aneinander angrenzend gespeichert. Mit anderen Worten werden die Datenwerte für ein bestimmtes Feld nicht gebündelt.
  • Die Herausforderung für das beschriebene spaltenförmige Speicherformat ist, alle Strukturinformationen zu erhalten und in der Lage zu sein, Datensätze aus einer zufälligen Teilmenge von Feldern zu rekonstruieren. Als Nächstes erläutert dieses Dokument das Datenmodell, aus dem die Felder in dem spaltenförmigen Speichermodell gefüllt werden können, und geht dann zu Algorithmen für die Verarbeitung der spaltenförmigen Speicherung und Abfrageverarbeitung für Daten in der spaltenförmigen Speicherung über.
  • ABSCHNITT 3: DATENMODELL
  • Dieser Abschnitt beschreibt das in dem beschriebenen System verwendete Datenmodell und führt einige später verwendete Termini ein. Das beschriebene Datenmodell Protocol Buffer entstand im Zusammenhang mit verteilten Systemen und ist als Open-Source-Implementierung erhältlich. Siehe (Protocol Buffers: Developer Guide. Verfügbar unter http://code.google.com/apis/protocolbuffers/docs/overview.html). Das Datenmodell basiert auf stark typisierten verschachtelten Datensätzen. Seine abstrakte Syntax sieht wie folgt aus: τ = dom| < A1 : τ[*|?], ..., An : τ[*|?]> wobei τ ein atomarer Typ oder ein Datensatztyp ist. Atomare Typen in dom umfassen ganze Zahlen, Gleitkommazahlen, Zeichenketten usw. Datensätze bestehen aus einem oder mehreren Feldern. Das Feld i in einem Datensatz hat den Namen Ai und eine optionale Multiplizitätsmarkierung. Wiederholte Felder (*) können mehrere Male in einem Datensatz vorkommen. Sie werden als Liste von Werten interpretiert, d. h. die Reihenfolge des Vorkommens der Felder in einem Datensatz ist signifikant. Optionale Felder (?) können im Datensatz fehlen. Ansonsten ist ein Feld obligatorisch (d. h. es muss genau einmal vorkommen).
  • Zur Veranschaulichung zeigt 2 ein Schema, das einen Datensatztyp ,Dokument' definiert, das ein Internetdokument darstellt. Die Schemadefinition nutzt die Syntax von Protocol Buffer. Ein ,Dokument' weist eine obligatorische ganze Zahl ,Docld' und optionale ,Links' auf, die eine Liste von ,Vorwärts'- und ,Rückwärts'-Eintragungen mit ,Doclds' von anderen Internetseiten enthalten. Ein ,Dokument' kann mehrere ,Namen' haben, die unterschiedliche URLs darstellen, durch sich auf das Dokument bezogen werden kann. Ein ,Name' enthält eine Folge von ,Code'- und (optionale) ,Land'-Paaren. 2 zeigt außerdem zwei beispielhafte Datensätze, r1 und r2, die dem Schema entsprechen. Die Datensatzstruktur wird durch Einrückungen hervorgehoben. Die beispielhaften Datensätze r1 und r2 in 2 werden verwendet, um die Algorithmen in diesem Dokument zu erläutern. Die im Schema definierten Felder bilden eine Baumhierarchie. Der volle Pfad eines verschachtelten Feldes wird mithilfe von Punkten dargestellt, z. B. Name.Sprache.Code ist der volle Pfadname für das in 2 dargestellte ,Code'-Feld.
  • Das verschachtelte Datenmodell stützt einen plattformneutralen, erweiterbaren Mechanismus zur Serialisierung von strukturierten Daten. Codebildungsinstrumente erzeugen Bindungen für verschiedene Programmiersprachen, wie C++ oder Java. Zusammenarbeit über verschiedene Sprachen wird durch eine herkömmliche binäre Darstellung von Datensätzen über das Netzwerk erreicht, wobei Feldwerte nacheinander in der Reihenfolge dargelegt werden, wie sie im Datensatz vorkommen. Auf diese Weise kann ein MapReduce-Programm, das in Java geschrieben ist, Datensätze aus einer Datenquelle nutzen, die über eine C++Bibliothek dargeboten wird. Wenn also Datensätze in einer spaltenorientierten Darstellung gespeichert sind, kann ihre rasche Assemblierung die Zusammenarbeit mit MapRecuce und anderen Datenverarbeitungs-Tools unterstützen.
  • ABSCHNITT 4: VERSCHACHTELTE SPALTENFÖRMIGE SPEICHERUNG
  • Wie in 1 dargestellt besteht ein Ziel darin, alle Werte eines bestimmten Feldes nacheinander zu speichern, um die Abrufeffizienz zu verbessern. In diesem Abschnitt wird die Herausforderung einer verlustsfreien Darstellung eine Datensatzstruktur in einem Spaltenformat (Abschnitt 4.1), des raschen Kodierens (Abschnitt 4.3) und der effizienten Datensatzassemblierung angesprochen.
  • ABSCHNITT 4.1: WIEDERHOLUNGS- UND DEFINITIONSSTUFEN
  • Eine fortlaufende Liste von Werten alleine stellt die Struktur einer Datenbank nicht dar. Im Falle von zwei Werten eines Feldes, das in einem Datensatz wiederholt wird, ist ein System gegebenenfalls nicht in der Lage, zu bestimmen, auf welcher ,Stufe' der Wert wiederholt wird (z. B. ob die beiden Werte aus unterschiedlichen Datensätzen oder aus demselben Datensatz stammen). Auch wenn ein optionales Feld in einem Datensatz fehlt, können Werte alleine nicht darstellen, welche einschließenden Datensätze explizit definiert wurden und welche nicht. Daher wurde das Konzept der Wiederholungs- und Definitionsstufen eingeführt. 3 zeigt Tabellen, welche die Wiederholungs- und Definitionsstufen für atomare Felder in den beispielhaften Datensätzen aus 1 zusammenfassen.
  • Wiederholungsstufen. Siehe das Feld ,Code' in 2. Es kommt im Datensatz ,r1' dreimal vor. Exemplare ,en-us' und ,en' befinden sich innerhalb des ersten ,Name'-Felds, während ,en-gb' sich im dritten ,Name'-Feld befindet. Um diese Exemplare in der Spaltenstruktur zu unterscheiden, wird eine Wiederholungsstufe an jeden Wert angehängt, der in der Spaltenstruktur gespeichert werden soll. Die Wiederholungsstufe zeigt an, in welchem wiederholten Feld im Pfad des Feldes der Wert wiederholt wurde. Beispielsweise enthält der Feldpfad Name.Sprache.Code zwei Felder, die wiederholt werden, ,Name' und ,Sprache'. Somit liegt die Wiederholungsstufe von Code zwischen 0 und 2. Stufe 0 bezeichnet den Beginn eines neuen Datensatzes, Stufe 1 bezeichnet eine kürzliche Wiederholung im ,Name'-Feld und Stufe 2 bezeichnet eine kürzliche Wiederholung im ,Sprache'-Feld.
  • Zur Veranschaulichung der Bestimmung der Stufe eines Feldes kann der Datensatz ,r1' von oben nach unten betrachtet werden. Der Wert ,en-us' tritt als erstes auf, und eine Überprüfung kann durchgeführt werden, um das Feld im Name.Sprache.Code-Pfad zu identifizieren, das als letztes wiederholt wurde. In diesem Beispiel wurde keines der Felder wiederholt, sodass die Wiederholungsstufe 0 ist. Der Wert ,en' tritt als nächstes im Name.Sprache.Code-Pfad auf, und das Feld ,Sprache' wird als das Feld identifiziert, das als letztes wiederholt wurde. Eine Betrachtung vom Wert ,en' nach oben zeigt, dass das erste Feld im Name.Sprache.Code-Pfad, das wiederholt wird, ,Sprache' ist. Somit ist die Wiederholungsstufe 2 (z. B. weil ,2' dem ,Sprache'-Feld entspricht, weil ,Sprache' das zweite Feld im Name.Sprache-Code-Pfad ist, das wiederholt wird). Schließlich ist, wenn der Wert ,en-gb' auftritt, das Feld ,Name' das letzte wiederholte (das ,Sprache'-Feld kommt nach Name nur einmal vor), sodass die Wiederholungsstufe 1 ist. Mit anderen Worten kann die Wiederholungsstufe für einen Wert einer Zahl sein, die das letzte wiederholte Feld darstellt. Folglich sind die Wiederholungsstufen der Code-Werte im Datensatz ,r1' 0, 2 1.
  • Es gilt darauf hinzuweisen, dass das zweite ,Name'-Feld im Datensatz ,r1' keine Werte für das Feld ,Code' enthält. Um zu bestimmen, dass ,en-gb' als Wert für ein Feld auftritt, das im dritten Auftreten des Feldes ,Name' verschachtelt ist, und nicht im zweiten Exemplar, wird ein NULL-Wert zwischen den Werten ,en' und ,en-gb' hinzugefügt, wie sie in der Spaltenstruktur gespeichert werden (siehe 3). ,Code' ist ein obligatorisches untergeordnetes Feld des ,Sprache'-Feldes, sodass die Tatsache, dass ein Wert für das ,Code'-Feld fehlt, vermuten lässt, dass auch das ,Sprache'-Feld nicht definiert ist. Im Allgemeinen kann jedoch das Bestimmen der Stufe, bis zu welcher verschachtelte Datensätze vorhanden sind, zusätzliche Informationen erfordern.
  • Definitionsstufen. Jeder Wert eines Feldes im Pfad ,p', insbesondere jeder NULL-Wert, weist eine ,Definitionsstufe' auf, die anzeigt, wie viele Felder im Pfad ,p', die undefiniert sein können (z. B. weil die Felder optional oder wiederholt sind), tatsächlich im Datensatz vorhanden sind. Um dies zu veranschaulichen, sei darauf hingewiesen, dass Datensatz ,r1' keine ,Rückwärts'-Felder für das ,Links'-Feld aufweist. Trotzdem ist das Feld ,Links' definiert (auf einer Stufe 1). Um diese Informationen zu erhalten, wird ein NULL-Wert mit einer Definitionsstufe 1 zu der ,Links.Rückwärts'-Spalte hinzugefügt.
  • Mit anderen Worten zeigt die Spezifizierung einer Stufe 1 für den ,Links.Rückwärts'-Pfad an, dass ,1' Feld, das optionale oder wiederholt war (d. h. das ,Links'-Feld) in einem Pfad definiert war, der zwei Felder enthält, die optional oder wiederholt sind (d. h. das ,Links'-Feld und das ,Rückwärts'-Feld). Somit gibt eine Definition ,1' an, dass das ,Rückwärts'-Feld nicht instantiiert wurde. Auch das Fehlen von ,Name.Sprache.Land' im Datensatz ,r2' trägt eine Definitionsstufe 1, während sein Fehlen in Datensatz ,r1' eine Definitionsstufe 2 (in ,Name.Sprache') bzw. 1 (in ,Name') aufweist. Das oben dargelegte Kodierungsverfahren kann die Datensatzstruktur verlustfrei erhalten.
  • Kodierung. Beim Speichern im Speicher kann jede Spalte, die einem bestimmten Feld entspricht mit einem Header gespeichert werden, der eine fortlaufende Auflistung von Wiederholungs- und Definitionswerten enthält, gefolgt von einer fortlaufenden Liste der tatsächlichen Werte. Jeder Wiederholungs- und Definitionswert kann als Bit-Sequenz gespeichert werden (z. B. in einem einzelnen Byte). Beispielsweise können die ersten vier Bits eines Bytes zur Darstellung der Wiederholungsstufe eines bestimmten Werts verwendet werden, und die letzten vier Bits können für die Darstellung der Definitionsstufe verwendet werden. In manchen Beispielen kann der Header Längendefinitionen der Anzahl von Bits umfassen, sodass gegebenenfalls keine Begrenzer verwendet werden. Somit können Bits nur nach Bedarf eingesetzt werden. Wenn beispielsweise die maximale Definitionsstufe 3 ist, können zwei Bits pro Definitionsstufe verwendet werden.
  • Somit kann eine Darstellung von spaltenförmigen Daten für ein einzelnes Feld (z. B. das ,Name.Sprache.Code'-Feld) mit einer Folge von Bytes in einem Speicher gespeichert werden, welche die Wiederholungs- und Definitionsstufen einer entsprechenden Folge von Werten darstellen, gefolgt von einer Abfolge von Werten. NULL-Werte müssen jedoch gegebenenfalls nicht explizit gespeichert werden, da sie durch Analyse der Definitionsstufen bestimmt werden können. Beispielsweise kann jede Definitionsstufe, die kleiner ist als die Anzahl an wiederholten und optionalen Feldern im Pfad eines Feldes, eine NULL bezeichnen. Folglich kann ein System in der Lage sein, zu bestimmen, wo in der Auflistung von aufeinanderfolgenden Werten ein NULL-Wert eingefügt oder abgeleitet werden soll. In manchen Beispielen werden keine Definitionsstufen für Werte gespeichert, die immer definiert sind. Auf ähnliche Weise können Wiederholungsstufen gegebenenfalls nur gespeichert werden, wenn dies erforderlich ist. So weist beispielsweise eine Definitionsstufe 0 auf eine Wiederholungsstufe 0 hin, sodass Letztere weggelassen werden kann. Tatsächlich werden in der in 3 dargestellten Struktur keine Stufen für das ,Docld'-Feld gespeichert.
  • Eine Darstellung von spaltenförmigen Daten in einem Speicher kann in eine Gruppe von Blöcken aufgespaltet werden. Jeder Block kann einen Header, der die Wiederholungs- und Definitionsstufeninformationen enthält, und eine nachfolgende Auflistung der Werte für das Feld enthalten. Jeder Header kann einen ,Beschränkung'-Wert enthalten, der einen zulässigen Bereich für die Wert im Block anzeigt. So kann das beschriebene System identifizieren, welche Blöcke die Daten enthalten, an denen das System interessiert ist. Die Beschränkung kann auch andere Eigenschaften des Werts anzeigen, z. B. ob der Wert sortiert wurde. Im Allgemeinen kann die ,Beschränkung' als ,Feststellung' darüber gesehen werden, welche Art von Werten im Block vorkommen. Jeder Block kann komprimiert sein.
  • ABSCHNITT 4.2: TRENNEN VON DATENSÄTZEN IN SPALTEN
  • Die obige Beschreibung legt die Kodierung der Datensatzstruktur in einem Spaltenformat dar. Eine Herausforderung besteht darin, effizient spaltenförmige Streifen mit Wiederholungs- und Definitionsstufen zu bilden. Der Basisalgorithmus zur Berechnung von Wiederholungs- und Definitionsstufen ist nachstehend dargelegt. Der Algorithmus greift auf die Datensatzstruktur zurück und berechnet die Stufe für jeden Feldwert. Wie vorher veranschaulicht, müssen Wiederholungs- und Definitionsstufen gegebenenfalls auch dann berechnet werden, wenn die Feldwerte fehlen. Viele Daten-Sets sind spärlich, und es ist nicht unüblich, auf ein Schema mit Tausenden von Feldern zu treffen, wovon nur Hundert in einem bestimmten Datensatz verwendet werden. Daher kann es von Vorteil sein, fehlende Felder so billig wie möglich zu berechnen. Um spaltenförmige Streifen zu erstellen, wird ein Baum von Feldschreibern geschaffen, deren Struktur der Feldhierarchie im Schema entspricht. Die Grundidee besteht darin, Feldschreiber nur zu aktualisieren, wenn sie eigene Daten haben, und nicht zu versuchen, den übergeordneten Parent-Zustand den Baum hinunter fortzupflanzen, wenn dies nicht notwendig ist. Um dies zu tun, erben untergeordnete Child-Schreiber die Stufen von ihren Eltern. Ein untergeordneter Child-Schreiber synchronisiert mit den übergeordneten Parent-Stufen, immer wenn ein neuer Wert hinzugefügt wird.
  • Ein Beispiel für einen Algorithmus zur Aufteilung eines Datensatzes in Spalten ist in 4 dargestellt. Dem Vorgang ,DatensatzZerlegen' wird ein Exemplar eines ,DatenssatzDecodierers' zugeführt, der zur Durchforstung von binär kodierten Datensätzen verwendet wird. ,Feldschreiber' bilden eine Baumhierarchie, die mit der des Eingabeschemas isomorph ist. Der Stamm,Feldschreiber' wird für jeden neuen Datensatz zum Algorithmus geleitet, wobei die ,Wiederholungsstufe' auf 0 gesetzt ist. Die Hauptaufgabe des ,DatensatzZerlegen'-Vorgangs besteht darin, die aktuelle ,Wiederholungsstufe' zu erhalten. Die aktuelle ,Wiederholungsstufe' wird durch die Baumposition des aktuellen Schreibers klar bestimmt, und zwar als Summe der Anzahl an optionalen und wiederholten Feldern im Feldpfad.
  • Die WHILE-Schleife des Algorithmus (Zeile 5) läuft über alle atomaren und Datensatzwertfelder in einem gegebenen Datensatz. Die Einstellung ,geseheneFelder' hält fest, ob ein Feld im Datensatz gefunden wurde oder nicht. Sie wird verwendet, um zu bestimmen, welches Feld als letztes wiederholt wurde. Die untergeordnete Child-Wiederholungsstufe ,chWiederholungsstufe' ist auf das letzte wiederholte Feld oder ansonsten standardmäßig auf die übergeordnete Parent-Stufe eingestellt (Zeilen 9–13). Der Vorgang wird rekursiv an verschachtelten Datensätzen ausgeführt (Zeile 18).
  • Das Dokument bezieht sich weiter oben auf ,Feldschreiber', die Stufen akkumulieren und sie langsam zu Schreibern der unteren Stufen weitergeben. Dies kann durch jeden Nicht-Blatt-Schreiber erfolgen, der eine Abfolge von (Wiederholungs-, Definitions-)Stufen behält. Jeder Schreiber weist außerdem eine ,Versionsnummer' auf, die ihm zugeordnet ist. Einfach gesagt steigt eine Schreiberversion immer um eins, wenn eine Stufe hinzugefügt wird. Für Children reicht es aus, sich an die letzte Parent-Version zu erinnern, die sie synchronisiert haben. Wenn ein untergeordneter Schreiber jemals seinen eigenen (Nicht-Null-)Wert bekommt, synchronisiert er seinen Zustand mit dem übergeordneten, indem neue Stufen geholt werden, und erst dann fügt er neue Daten hinzu.
  • Da Eingabedaten Tausende von Feldern und Millionen von Datensätzen aufweisen können, ist es gegebenenfalls nicht machbar, alle Stufen im Speicher zu speichern. Manche Stufen können vorübergehend in einer Datei auf einer Festplatte gespeichert werden. Für eine verlustfreie Kodierung von leeren (Unter-)Datensätzen müssen gegebenenfalls nichtatomare Felder (wie z. B. Name.Sprache in 2) ihre eigenen spaltenförmigen Streifen aufweisen, die nur Stufen, aber keine Nicht-NULL-Werte enthalten.
  • ABSCHNITT 4.3: DATENSATZASSEMBLIERUNG
  • Eine effiziente Assemblierung von Datensätzen (z. B. der Datensätze ,r1' und ,r2') aus spaltenförmigen Daten ist entscheidend für datensatzorientierte Datenverarbeitungs-Tools (z. B. MapReduce). Ausgehend von einer Teilmenge von Feldern besteht das Ziel darin, die ursprünglichen Datensätze zu rekonstruieren, als ob sie nur die ausgewählten Felder enthalten würden, mit allen anderen Feldern entfernt. Die Grundidee besteht in der Schaffung eines endlichen Automaten (FSM – finite state machine), der die Feldwerte und Stufen jedes Feldes liest und die Werte sequenziell an die ausgegebenen Datensätze anhängt. Ein FSM-Zustand entspricht einem Feldleser für jedes ausgewählte Feld. Zustandsübergänge werden mit Wiederholungsstufen markiert. Sobald ein Leser einen Wert abruft, wird die nächste Wiederholungsstufe geprüft, um zu entscheiden, welcher Leser als nächstes verwendet werden soll. Der FSM wird für jeden Datensatz einmal vom Anfang bis zum Ende durchlaufen.
  • 5 zeigt einen FSM, der die kompletten Datensätze im vorliegenden Durchlaufbeispiel unter Verwendung der in Abschnitt 4.1 beschriebenen Blöcke als Eingabe rekonstruiert. In diesem Beispiel sind die Knoten mit Feldern markiert, und die Kanten sind mit Wiederholungsstufen markiert. Der Ausgangszustand ist ,Docld'. Sobald ein ,Docld'-Wert gelesen wird, geht der FSM in den ,Links.Rückwärts'-Zustand über. Nachdem alle wiederholten ,Rückwärts'-Werte erschöpft sind, springt der FSM auf ,Links.Vorwärts' usw.
  • Um darzustellen, wie FSM-Übergänge aufgebaut sind, sei ,I' die nächste Wiederholungsstufe, die vom aktuellen Feldleser für das Feld ,f' ausgegeben wird. Beginnend mit ,f' im Schemabaum (z. B. dem Schema in 2) wird sein Vorgänger gefunden, der in der Stufe ,l' wiederholt ist, und das erste Blattfeld ,n' innerhalb dieses Vorgängers wird ausgewählt. Dies stellt einen FSM-Übergang (,f', ,l') → bereit. Beispielsweise ist ,l' = 1 die nächste Wiederholungsstufe, die von ,f' = ,Name.Sprache.Land' gelesen wird. Sein Vorgänger mit der Wiederholungsstufe ,1' ist Name, dessen erstes Blattfeld ,n' = ,Name.Url' ist.
  • Wenn nur eine Teilgruppe von Feldern abgerufen werden muss, kann ein einfacherer FSM konstruiert werden, der billiger ausführbar ist. 6 zeigt einen FSM zum Lesen der Felder ,Docld' und ,Name.Sprache.Land'. Die Figur zeigt die ausgegebenen Datensätze ,s1' und ,s2', die durch den Automaten erstellt werden. Es gilt anzumerken, dass der Kodierungs- und Assemblierungsalgorithmus die einschließende Struktur des Feldes ,Land' beibehalten. Dies kann für Anwendungen wichtig sein, die z. B. auf das Land zugreifen müssen, das in der ersten Sprache des zweiten Namens aufscheint. Bei Xpath kann dies der Fähigkeit entsprechen, Ausdrücke wie /Name[2]/Language[1]/Country zu evaluieren.
  • Vorgang zur Erstellung eines FSM. 7 zeigt einen Algorithmus zur Erstellung eines endlichen Automaten, der einen Datensatz assembliert. Der Algorithmus nimmt als Eingabe die Felder, die in den Datensätzen bestückt werden sollten, und zwar in der Reihenfolge, in der sie im Schema auftreten. Der Algorithmus nutzt das Konzept einer gemeinsamen ,Wiederholungsstufe' von zwei Feldern, was die Wiederholungsstufe ihres niedrigsten gemeinsamen Vorgängers ist. Beispielsweise ist die gemeinsame Wiederholungsstufe von ,Links.Rückwärts' und ,Links.Vorwärts' gleich 1. Das zweite Konzept ist das einer ,Barriere', die das nächste Feld in der Abfolge nach dem aktuellen ist. Der Zweck besteht darin, dass versucht wird, jedes Feld einzeln zu verarbeiten, bis auf die Barriere getroffen wird und das Zurückspringen auf ein vorher gesehenes Feld erfordert.
  • Der Algorithmus besteht aus drei Schritten. In Schritt 1 (Zeilen 6–10) werden die gemeinsamen Wiederholungsstufen rückwärts verarbeitet. Diese sind garantiert nicht ansteigend. Für jede gefundene Wiederholungsstufe wird das am weitesten links gelegene Feld in der Abfolge ausgewählt – d. h. das Feld, in das übergegangen werden soll, wenn die Wiederholungsstufe von einem ,Feldleser' zurückgestellt wird. In Schritt 2 werden die Lücken gefüllt (Zeilen 11–14). Die Lücken treten auf, weil nicht alle Wiederholungsstufen in den gemeinsamen Wiederholungsstufen vorhanden sind, die in Zeile 8 berechnet wurden. In Schritt 3 (Zeilen 15–17) werden Übergänge für alle Stufen eingestellt, die der Barrierenstufe entsprechen oder darunter liegen, sodass sie zum Barrierenfeld springen. Wenn ein ,Feldleser' eine solche Stufe erzeugt, kann der verschachtelte Datensatz weiter konstruiert werden und es ist gegebenenfalls nicht notwendig, von der Barriere abzuspringen.
  • Vorgang zur Assemblierung eines Datensatzes. Ein Vorgang zur Assemblierung eines Datensatzes (veranschaulicht in 8) nimmt als Eingabe eine Gruppe von ,Feldlesern' und (implizit) den FSM mit Zustandsübergängen zwischen den Lesern. Mit anderen Worten arbeitet der Algorithmus auf einem FSM und spaltenförmigen Daten und gibt konstruierte Datensätze aus. Variable Leser halten den aktuellen ,Feldleser' in der Hauptroutine (Zeile 4). Variable Leser halten den letzten Leser, dessen Wert an den Datensatz angehängt ist und der für alle drei in 7 dargestellte Vorgänge verfügbar sind. Die WHILE-Hautschleife befindet sich in Zeile 5. Der nächste Wert wird vom aktuellen Leser abgerufen. Wenn der Wert nicht NULL ist, was über die Definitionsstufe bestimmt wird, wird der assemblierte Datensatz im Verfahren ,GeheZuStufe' mit der Datensatzstruktur des aktuellen Lesers synchronisiert, und der Feldwert wird an den Datensatz angehängt. Ansonsten kann die Datensatzstruktur angepasst werden, ohne einen Wert anzuhängen – was durchgeführt werden kann, wenn leere Datensätze vorhanden sind. In Zeile 12 wird eine ,volle Definitionsstufe' verwendet. Es sei daran erinnert, dass die Definitionsstufen obligatorische Felder ausschließt (nur wiederholte und optionale Felder werden gezählt). Volle Definitionsstufen berücksichtigen alle Felder.
  • Der Vorgang ,GeheZuStufe bringt den Datensatz vom Zustand von ,letzterLeser' in den von ,nächsterLeser' (siehe Zeile 22). Angenommen ,letzterLeser' entspricht ,Links.Rückwärts' in 2 und ,nächsterLeser' ist ,Name.Sprache.Code'. Das Verfahren beendet den verschachtelten Datensatz Links und startet neue Datensätze Name und Sprache, in dieser Reihenfolge. Der Vorgang ,ZurückZuStufe' (Zeile 30) ist ein Gegenstück zu ,GeheZuStufe', das nur aktuelle Datensätze beendet, ohne neue zu starten.
  • In ihrer Online-Darstellung sind Datensätze als Paare aus Feldidentifikator gefolgt von einem Feldwert dargelegt. Verschachtelte Datensätze können so betrachtet werden, als hätten sie eine ,Beginnmarkierung' und eine ,Endmarkierung', ähnlich wie XML (die binäre Kodierung kann sich unterscheiden). Die Bezeichnung ,Starten' eines Datensatzes bezieht sich auf das Schreiben von Beginnmarkierungen, während „Beenden” eines Datensatzes bedeutet, dass Endmarkierungen geschrieben werden.
  • ABSCHNITT 5: ABFRAGESPRACHE
  • Das beschriebene System kann eine Abfragesprache verwenden, die auf SQL basiert und darauf ausgerichtet ist, effizient für spaltenorientierte verschachtelte Speicherung umsetzbar zu sein. Einige Aspekte der Abfragesprache sind hierin beschrieben. Jede SQL-artige Anweisung (und jeder algebraische Operator, in den diese übersetzt wird) nimmt als Eingabe eine oder mehrere verschachtelte Tabellen, wie in Abschnitt 4.1 beschrieben) und ihre Schemata und erzeugt eine verschachtelte Tabelle (z. B. ein modifiziertes Exemplar der spaltenförmigen Daten) und sein Ausgabeschema. 9 zeigt eine exemplarische Abfrage, die Projektion, Selektion und Aggregation innerhalb des Datensatzes ausführt. Die Abfrage wird über die Tabelle t = {r1, r2} aus 2 ausgeführt. Auf die Felder wird mithilfe von Pfadausdrücken Bezug genommen. Die Abfrage ergibt ein verschachteltes Ergebnis, obwohl in der Abfrage keine Datensatzkonstruktoren vorhanden sind.
  • Um zu erklären, was die Abfrage macht, siehe den Selektionsvorgang (die WHERE-Klausel). Angenommen ein verschachtelter Datensatz ist ein markierter Baum, wo jede Markierung einem Feldnamen entspricht. Der Selektionsoperator entfernt die Äste des Baums, die nicht den spezifizierten Bedingungen entsprechen. Somit werden nur jene verschachtelten Datensätze behalten, in denen ,Name.Url' definiert ist und die mit ,http.' beginnen. Das Nächste ist die Projektion. Jeder skalare Ausdruck in der SELECT-Klausel gibt einen Wert auf der gleichen Verschachtelungsstufe aus wie das am häufigsten wiederholte Eingabefeld, das in diesem Ausdruck verwendet wird. Somit gibt der Zeichenfolgenverkettungsausdruck ,Str'-Werte auf der Stufe ,Name.Sprache.Code' im Eingabeschema aus.
  • Der COUNT-Ausdruck veranschaulicht die Aggregation innerhalb des Datensatzes. Die Aggregation erfolgt INNERHALB jedes ,Name'-Teildatensatzes und gibt die Anzahl an Exemplaren von ,Name.Sprache.Code' für jeden ,Namen' als nichtnegative ganze Zahl mit 64 Bit aus (uint64). Die WITHIN-Anweisung ermöglicht somit eine Aggregation innerhalb einer Zeile. Mit anderen Worten können Datensätze mit dem gleichen Namen im gleichen Datensatz oder unter dem gleichen Child aggregiert werden. Im Gegensatz dazu kann SQL, das gegebenenfalls nicht an verschachtelten Daten durchgeführt werden kann, nicht in der Lage sein, an Datensätzen innerhalb einer Zeile zu arbeiten.
  • Die Sprache unterstützt verschachtelte Unterabfragen, Aggregation in und zwischen Datensätzen, Top-K, Joins, benutzerdefinierte Funktionen usw. Einige dieser Merkmale werden im experimentellen Abschnitt erläutert. Als ein weiteres Beispiel umfasst die beschriebene Abfragesprache eine Anweisung OMIT IF, die eine Gruppe von Werten innerhalb einer Zeile filtern kann. Beispielsweise kann jeder von Tausenden von Datensätzen mehrere wiederholte ,Kosten'-Felder aufweisen, die jeweils einen Zahlenwert enthalten. Ein Benutzer der Abfragesprache will eventuell alle Datensätze entfernen, in denen die Summe der Werte in den Feldern über der Zahl ,20' liegt. Somit kann der Benutzer eine Anweisung OMIT IF verwenden, um eine Liste jener Datensätze zu erstellen, in denen die addierten ,Kosten' im Datensatz zwanzig oder weniger betragen.
  • ABSCHNITT 6: ABFRAGEAUSFÜHRUNG
  • Baumarchitektur. Das beschriebene System verwendet einen mehrstufigen Serving-Baum, um Abfragen auszuführen (siehe 10). Ein Stammserver empfängt eingehende Abfragen, liest Metadaten aus den Tabellen aus und leitet die Abfragen zur nächsten Stufe im Serving-Baum weiter. Die Blatt-Server kommunizieren mit der Speicherschicht oder greifen auf die Daten auf einer lokalen Festplatte zu. Viele der Abfragen, die in dem beschriebenen System arbeiten, sind Aggregationen anhand eines einzelnen Scans; daher konzentriert sich dieses Dokument auf die Erklärung dieser und verwendet sie im nächsten Abschnitt für Experimente. Eine einfache Aggregationsabfrage kann wie folgt aussehen:
  • SELECT A, COUNT(B) FROM T GROUP BY A
  • Wenn der Stammserver die obige Abfrage erhält, bestimmt er alle Tablets, d. h. horizontale Unterteilungen der Tabelle, welche die Tabelle ,T' enthalten und schreibt die Abfrage wie folgt um:
  • SELECT A, SUM(c) FROM (R 1 / 1 UNION ALL ... R 1 / n ) GROUP BY A
  • Die Tabellen R 1 / 1 UNION ALL ... R 1 / n sind das Ergebnis der Abfragen, die zu den Knoten 1, ..., n auf Stufe 1 des Serving-Baums gesendet wurden: R 1 / i) = SELECT A, COUNT(B) AS c FROM T 1 / i GROUP BY A
  • T 1 / i ist eine abgetrennte Unterteilung von Tablets in ,T', verarbeitet vom Server ,I' auf Stufe ,1'. Jede Servingstufe führt eine ähnliche Umschreibung durch. Schlussendlich erreicht die Abfrage die Blätter, welche die Tablets in ,T' parallel scannen. Auf dem Weg nach oben führen Zwischenserver eine parallele Aggregation von Teilergebnissen durch. Das oben dargelegte Ausführungsmodell ist gut für Aggregationsabfragen geeignet, die kleine und mittelgroße Ergebnisse liefern, was eine sehr häufige Form von interaktiven Abfragen ist.
  • Abfragenverteiler. Das beschriebene System ist ein System für mehrere Benutzer, z. B. können mehrere Abfragen gleichzeitig ausgeführt werden. Ein Verteiler plant Abfragen zeitlich nach ihren Prioritäten und gleicht die Belastung aus. Eine weitere Aufgabe steht darin, Fehlertoleranz bereitzustellen, wenn ein Server viel langsamer wird als andere oder wenn eine Tablet-Replikation nicht erreicht werden kann.
  • Die Menge an Daten, die in jeder Abfrage verarbeitet wird, ist oft größer als die Anzahl an Verarbeitungseinheiten, die für die Ausführung zur Verfügung stehen und als Slots bezeichnet werden. Ein Slot entspricht einem Ausführungsthread auf einem Blattserver. Beispielsweise verwendet ein System mit 3.000 Blattservern mit jeweils 8 Threads 24.000 Slots. So kann eine Tabelle, die 100.000 Tablets umfasst, verarbeitet werden, indem jedem Slot etwa 5 Tablets zugeordnet werden. Während der Ausführung der Abfrage berechnet der Abfragenverteiler ein Histogramm von Tablet-Verarbeitungszeiten. Wenn ein Tablet unverhältnismäßig lange braucht, um verarbeitet zu werden, plant das System das Tablet auf einen anderen Server um. Einige Tablets müssen gegebenenfalls mehrere Male umgeschichtet werden.
  • Die Blattserver lesen Streifen von verschachtelten Daten in spaltenförmiger Darstellung ab. Die Blöcke in jedem Streifen sind asynchron vorabgerufen; der Read-Ahead-Cache erreicht typischerweise Trefferraten von 95%. Tablets sind typischerweise dreifach repliziert. Wenn ein Blattserver auf eine Tablet-Replikation nicht zugreifen kann, greift er auf eine andere Replikation zurück.
  • Der Abfrageverteiler berücksichtigt einen Parameter, der den Mindestprozentsatz an Tablets spezifiziert, die gescannt werden müssen, bevor ein Ergebnis erhalten wird. Wie nachstehend beschrieben kann das Einstellen eines solchen Parameters auf einen niedrigeren Wert (z. B. 98% anstelle von 100%) die Ausführung oft deutlich beschleunigen, insbesondere wenn kleinere Replikationsfaktoren verwendet werden.
  • Jeder Server kann einen internen Ausführungsbaum aufweisen, wie er in 7 auf der rechten Seite dargestellt ist. Der interne Baum entspricht einem physikalischen Abfrageausführungsplan, einschließlich der Evaluation von skalaren Ausdrücken. In einem optimierten Fall wird ein typenspezifischer Code für die meisten skalaren Funktionen erzeugt. Ein grundlegender Ausführungsplan besteht aus einer Reihe von Iteratoren, die Eingabespalten im Gleichschritt scannen und Ergebnisse von Aggregaten und skalaren Funktionen ausgeben, die mit den korrekten Wiederholungs- und Definitionsstufen versehen sind, wobei die Datensatzassemblierung während der Abfrageausführung vollkommen umgangen wird.
  • Einige Abfragen des beschriebnen Systems, wie z. B. Top-k und Count-Distinct, führen zu ungefähren Ergebnissen, wenn allgemein bekannte Einzelscan-Algorithmen verwendet werden.
  • ABSCHNITT 7: EXPERIMENTELLE DATEN
  • Dieser Abschnitt stellt eine experimentelle Beurteilung des beschriebenen Systems anhand von mehreren Daten-Sets bereit und untersucht die Effektivität der spaltenorientierten Speicherung für verschachtelte Daten. Die Eigenschaften der Daten-Sets, die in der Studie verwendet wurden, sind in 11 zusammengefasst. In der unkomprimierten, nicht replizierten Form nehmen die Daten-Sets etwa ein Petabyte ein. Alle Tabellen werden dreifach repliziert, mit Ausnahme einer zweifach replizierten Tabelle, und enthalten 100 K- bis 800 K-Tablets mit verschiedenen Größen. Dieser Abschnitt beginnt mit der Unersuchung der grundlegenden Datenzugangsmerkmale auf einer einzelnen Maschine, dann wird gezeigt, wie sich die spaltenförmige Speicherung positiv auf die Ausführung von MapReduce auswirkt, und schließlich steht die Leistung des beschriebenen Systems im Mittelpunkt. Die Experimente wurden an Systemexemplaren durchgeführt, die während eines herkömmlichen Betriebs neben zahlreichen anderen Anwendungen auf zwei Datenzentren liefen. Nachstehend verwendete Tabellen- und Feldnamen sind anonymisiert.
  • Lokale Festplatte. Im ersten Versuch wurden Leistungsvergleiche zwischen spaltenorientierter und datensatzorientierter Speicherung untersucht, indem ein 1 GB großes Fragment der Tabelle T1 mit etwa 300 K Reihen gescannt wurde (siehe 12). Die Daten sind auf einer lokalen Festplatte gespeichert und in komprimierter spaltenförmiger Darstellung etwa 375 MB groß. Das datensatzorientierte Format nutzt stärkere Kompression, führt aber auf der Festplatte zu etwa der gleichen Größe. Der Versuch wurde auf einem Dual-Core-Intel-Gerät mit einer Festplatte mit 70 MB/s-Lesebandbreite durchgeführt.
  • 12 zeigt fünf Diagramme, welche die Zeit veranschaulichen, die notwendig ist, um die Daten zu lesen und dekomprimieren sowie die Datensätze für eine Teilmenge der Felder zu assemblieren und zu analysieren. Die Diagramme (a)–(c) zeigen die Ergebnisse für spaltenorientierte Speicherung. Jeder Datenpunkt in diesen Diagrammen wurde durch Mittelung der Messungen aus 30 Durchgängen erhalten, wobei jede Gruppe von Spalten mit einer vorgegebenen Kardinalität zufällig ausgewählt wurde. Diagramm (a) zeigt die Lese- und Dekompressionszeit. Diagramm (b) addiert die Zeit, die zum Assemblieren von verschachtelten Datensätzen aus den Spalten erforderlich ist. Diagramm (c) zeigt, wie lange es dauert, die Datensätze in stark typisierte C++ Datenstrukturen zu analysieren.
  • Die Diagramme (d)–(e) zeigen die Zeit für den Zugriff auf Daten bei datensatzorientierter Speicherung. Diagramm (d) zeigt die Lese- und Dekompressionszeit. Viel Zeit wird für die Dekompression verwendet; tatsächlich können die komprimierten Daten in etwa der Hälfte der Zeit von der Festplatte abgelesen werden. Diagramm (e) zeigt, dass das Analysieren weitere 50% zu der Lese- und Dekompressionszeit hinzufügt. Das wirkt sich auf alle Felder aus, auch auf jene, die nicht gebraucht werden.
  • Wenn weniger Spalten gelesen werden, können die Vorteile der spaltenförmigen Darstellung eine Größenordnung von eins aufweisen. Die Abrufzeit für spaltenförmige verschachtelte Daten kann mit der Felderanzahl linear zunehmen. Die Assemblierung und Analyse von Datensätzen kann teuer sein und die Ausführungszeit möglicherweise verdoppeln. Ähnliche Entwicklungen wurden auch bei anderen Daten-Sets beobachtet. Eine offensichtliche Frage ist, wo sich die oberen und unteren Diagramme kreuzen, d. h. wo die datensatzweise Speicherung beginnt, die spaltenförmige Speicherung zu übertreffen. Erfahrungen haben gezeigt, dass der Übertritt bei Dutzenden von Feldern liegen kann, aber zwischen verschiedenen Daten-Sets variiert und davon abhängt, ob eine Datensatzassemblierung erforderlich ist oder nicht.
  • MapReduce und das beschriebene System. Als Nächstes ist eine Ausführung von MapReduce und des beschriebenen Systems an spaltenorientierten bzw. datensatzorientierten Daten veranschaulicht. In diesem Fall wird auf ein einzelnes Feld zugegriffen, und die Leistungssteigerungen sind am stärksten erkennbar. Die Ausführungszeiten für mehre Spalten können anhand der Ergebnisse aus 12 extrapoliert werden. Bei diesem Versuch wurde die mittlere Anzahl an Termen in einem Feld ,txtFeld' von Tabelle ,T1' gezählt. MapReduce wird mithilfe des folgenden Sawzall-Programms ausgeführt:
    numRecs: table sum of int;
    numWords: table sum of int;
    emit numRecs <- 1;
    emit numWords <- CountWords(input.txtField);
  • Die Anzahl an Datensätzen ist in der Variable ,numRecs' gespeichert. Für jeden Datensatz wird ,numWords' um die Anzahl an Termen in ,input.txtField' erhöht, die von der ,CountWords'-Funktion rückgemeldet wird. Nachdem das Programm gelaufen ist, kann die mittlere Termhäufigkeit als num-Words=numRecs berechnet werden. In SQL ist diese Berechnung wie folgt ausgedrückt:
  • Q1: SELECT SUM(CountWords(textile))/COUNT(*)FROM T1
  • 13 zeigt die Ausführungszeiten von zwei MapReduce-Aufträgen und des beschriebenen Systems in logarithmischem Maßstab. Beide MapReduce-Aufträge werden auf 3000 Geräten (z. B. Servern) ausgeführt. Auf ähnliche Weise wird ein 3000-Knoten-Exemplar des vorliegenden Systems verwendet, um die Abfrage Q1 auszuführen. Das beschriebene System und MapReduce lesen bei Spalten etwa 0,5 TB komprimierte Spaltendaten aus, im Vergleich zu 87 TB, die von MapReduce aus Datensätzen abgelesen werden. Wie 12 veranschaulicht, steigt die Effizienz von MapReduce um eine Größenordnung, wenn von der datensatzorientierten zur spaltenorientierten Speicherung umgestellt wird (von Stunden zu Minuten). Eine weitere Größenordnung wird erzielt, wenn das beschriebene System eingesetzt wird (von Minuten zu Sekunden).
  • Serving-Baum-Topologie. Im nächsten Versuch wird die Auswirkung der Serving-Baum-Tiefe auf die Abfrageausführungszeit veranschaulicht. Zwei Abfragen GROUP BY werden an Tabelle T2 durchgeführt, wobei jede einen einzelnen Scan der Daten ausführt. Tabelle T2 enthält 24 Milliarden verschachtelte Datensätze. Jeder Datensatz weist ein wiederholtes Feld-Item auf, das eine numerische Menge enthält. Das Feld item.amount wird im Datensatz etwa 40 Milliarden Mal wiederholt. Die erste Abfrage fasst die Itemmenge länderweise zusammen:
  • Q2: SELECT Land, SUM(item.amount) FROM T2
  • GROUP BY Land
  • Es gibt einige hundert Datensätze aus und liest etwa 60 GB komprimierte Daten von der Festplatte. Die nächste Abfrage führt GROUP BY an einer Textfelddomäne mit einer Auswahlbedingung durch. Sie liest etwa 180 GB aus und produziert etwa 1,1 Millionen unterschiedliche Domänen:
  • Q3: SELECT Domäne, SUM(item.amount) FROM T2
  • WHERE Domäne CONTAINS'.net'
  • GROUP BY Domäne
  • 14 zeigt die Ausführungsdauer für jede Abfrage als Funktion der Server-Topologie. In jeder Topologie wird die Anzahl an Blattservern konstant bei 2900 gehalten, sodass die gleiche kumulative Scangeschwindigkeit angenommen werden kann. In der 2-stufigen Topologie (1:2900) kommuniziert ein einzelner Stammserver direkt mit den Blattservern. Für 3 Stufen wird ein Aufbau mit 1:100:2900 verwendet, d. h. eine zusätzliche Stufe mit 100 Zwischenservern ist vorhanden. Die 4-stufige Topologie ist 1:10:100:2900.
  • Die Abfrage Q2 läuft in 3 Sekunden ab, wenn 3 Stufen im Serving-Baum verwendet werden, und hat nicht viel Vorteil von einer weiteren Stufe. Im Gegensatz dazu wird aufgrund erhöhter Parallelität die Ausführungszeit von Q3 halbiert. Bei 2 Stufen liegt Q3 außerhalb des Diagramms, da der Stammserver die Ergebnisse von Tausenden von Knoten fast sequenziell aggregieren musste. Dieser Versuch zeigt, wie Aggregationen, die viele Gruppen ausgeben, von mehrstufigen Serving-Bäumen profitieren können.
  • Histrogramme pro Tablet. 15 zeigt, wie schnell Tablets von den Blattservern für einen spezifischen Durchlauf Q2 und Q3 verarbeitet werden. Die Zeit wird beginnend von dem Punkt gemessen, wenn ein Tablet für eine Ausführung in einem verfügbaren Slot eingeteilt wurde, d. h. die Zeit, die auf den Auftrag gewartet wird, wird nicht gerechnet. Diese Messmethode schließt die Einwirkung anderen Abfragen aus, die gleichzeitig ausgeführt werden. Der Bereich unter jedem Histogramm entspricht 100%. Wie 15 zeigt werden 99% von Q2-(oder Q3-)Tablets unter einer Sekunde (oder zwei Sekunden) verarbeitet.
  • Aggregation innerhalb eines Datensatzes. In einem weiteren Versuch wird die Leistung der Abfrage Q4 untersucht, wenn sie auf Tabelle T3 läuft. Die Abfrage veranschaulicht die Aggregation innerhalb eines Datensatzes: sie zählt alle Datensätze, in denen die Summe der a.b.c.d.-Werte, die im Datensatz vorkommen, größer ist als die Summe der a.b.p.q.r-Werte. Die Felder werden in verschiedenen Stufen der Verschachtelung wiederholt. Aufgrund von Spalten-Streifen werden nur 13 GB (von 70 TB) von der Festplatte gelesen, und die Abfrage wird in 15 Sekunden abgeschlossen. Ohne Unterstützung der Verschachtelung wäre die Ausführung dieser Abfrage für T3 teuer.
  • 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 auf eine Tabelle mit einer Billion von Datensätzen. Die nachstehende Abfrage Q5 wählt die Top-20-Aids und die Zahl ihres Auftretens in Tabelle 4 aus. Die Abfrage durchforstet 4,2 TB von komprimierten Daten.
  • Q5: SELECT TOP(Aid, 20), COUNT(*) FROM T4
  • WHERE bid = {Wert1} AND cid = {Wert2}
  • Die Abfrage wurde unter Verwendung von vier Konfigurationen des Systems ausgeführt. die von 1000 bis 4000 Knoten reichten. Die Ausführungsdauern sind in 16 dargestellt. Die insgesamt erforderliche CPU-Zeit ist bei jedem Durchgang fast identisch, mit etwa 300 K Sekunden, während die vom Benutzer beobachtete Zeit mit zunehmender Größe des Systems fast linear abnimmt. Das Ergebnis last vermuten, dass ein größeres System bezüglich der Ressourcennutzung genauso effektiv sein kann wie in kleines, aber gleichzeitig eine raschere Ausführung ermöglicht.
  • Nachzügler. Nachzügler können Aufgaben (z. B. Verarbeitung einer Tabelle) sein, die nicht ausgeführt werden, weil beispielsweise die Maschine, die die Aufgabe ausführt, ein Betriebsproblem aufweist oder die Maschine aufgrund von Aufgaben mit höhere Priorität nicht ausreichend dynamisch ist, um die Aufgabe auszuführen. Die nachstehende Abfrage Q6 wird an einer Tabelle T5 mit einer Billion Zeilen laufen gelassen. Im Gegensatz zu den anderen Daten-Sets ist T5 zweifach repliziert. Daher ist die Wahrscheinlichkeit von Nachzüglern, welche die Ausführung verlangsamen, höher, weil weniger Möglichkeiten zur Neuplanung der Arbeit zur Verfügung stehen.
  • Q6: SELECT COUNT(DISTINCT a) FROM T5
  • Die Abfrage Q6 liest 1 TB komprimierte Daten. Das Kompressionsverhältnis des abgerufenen Felds beträgt etwa 10. Wie in 17 zu sehen liegt die Verarbeitungszeit für 99% der Tablets unter 5 Sekunden pro Tablet pro Slot. Ein kleiner Teil der Tablets braucht jedoch länger, was die Abfragereaktionszeit von weniger als eine Minute auf einige Minuten verlangsamt, wenn auf einem System mit 2500 Knoten gearbeitet wird. Der nächste Abschnitt fast die Erkenntnisse aus den Versuchen zusammen.
  • ABSCHNITT 8: BEOBACHTUNGEN
  • 18 zeigt die Abfragereaktionszeitverteilung in einer typischen monatlichen Arbeitslast des beschriebenen Systems, in logarithmischem Maßstab. Wie 18 zeigt werden die meisten Abfragen unter 10 Sekunden verarbeitet, was innerhalb des interaktiven Bereichs liegt. Einige Abfragen haben einen Scan-Durchsatz von fast 100 Milliarden Datensätzen pro Sekunden in einem auch anderweitig beschäftigten Cluster erreicht, und bei ausschließlicher Widmung sogar höhere Raten. Die oben dargelegten Versuchsdaten führen zu den folgenden Beobachtungen:
    • • Scan-basierte Abfragen können an Festplatten-basierten Daten-Sets mit zahlreichen Datensätzen mit interaktiver Geschwindigkeit ausgeführt werden;
    • • Für Systeme, die Tausende von Knoten enthalten, kann fast lineare Skalierbarkeit in der Anzahl der Spalten und Server erreicht werden;
    • • MapReduce kann, wie ein DBMS, von spaltenorientierter Speicherung profitieren;
    • • Datensatzassemblierung und -Analyse sind teuer. Software-Schichten (über die Abfrageverarbeitungsschicht hinaus) können optimiert werden, um spaltenorientierte Daten direkt zu konsumieren;
    • • MapReduce und Abfragenverarbeitung können komplementär zueinander verwendet werden, wobei die Ausgabe einer Schicht die Eingabe einer anderen sein kann;
    • • In einer Umgebung mit mehreren Benutzern kann ein größeres System von Größeneinsparungen profitieren und gleichzeitig qualitativ bessere Benutzererfahrungen bereitstellen;
    • • Wenn eine Verringerung der Geschwindigkeit zur Erhöhung der Genauigkeit annehmbar ist, kann eine Abfrage viel früher beendet werden und trotzdem die meisten der Daten sichten; und
    • • der Großteil eines Daten-Sets mit Internetmaßstab kann rasch gescannt werden, wobei das Erreichen der letzten paar Prozent die Dauer der Verarbeitung erhöhen kann.
  • 19 ist ein Blockdiagramm eines Systems zur Erstellung und Verarbeitung von spaltenorientierten Speicherdarstellungen von verschachtelten Datensätzen. Der Datensatzgenerator 1904 erzeugt Datensätze mit verschachtelten Daten aus den 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, welche die Daten in den Datensätzen 1906 darstellen, aber in spaltenförmigem Format. Die spaltenförmigen Daten 1910 können in situ vom Abfragesystem 1912 abgefragt werden, um unterschiedliche Gruppen von Ausgabespalten 1914 zu erzeugen. Die spaltenförmigen Daten 1910 können vom Datensatzassemblierer 1916 auch wieder in Datensatzform zurückassembliert werden. Die Datensätze 1918, die vom Datensatzassemblierer ausgegeben werden, können jeweils eine Teilgruppe von Feldern aus den ursprünglichen Datensätzen in der Sammlung 1906 enthalten. Die ausgegebenen Datensätze 1918 können auf einem datensatzbasierten Datenanalyseprogramm (z. B. MapReduce) laufen gelassen werden.
  • Genauer gesagt können die Datenquellen 1920 im Wesentlichen unstrukturierte Daten enthalten. Im Wesentlichen unstrukturiert bedeutet, dass die Daten Elemente enthalten können, die eine Struktur bezeichnen, aber das gesamte Spektrum von Informationen ist gegebenenfalls nicht ähnlich strukturiert. Zur Veranschaulichung können die Datenquellen 1920 den Quellcode für jede von Millionen von Internetseiten enthalten. Obwohl jede Internetseite einen bestimmten Grad an Struktur aufweist, wird der Inhalt der einzelnen Internetseiten nicht anhand eines gemeinsamen Schemas erstellt. Standards können das Format einer Seite allgemein festlegen, aber Inhalt und Platzierung von Feldern sind nicht von einem einzigen Schema für alle Internetseiten festgelegt. In manchen Beispielen sind die Informationen in den Datenquellen 1920 nicht in der gemeinsamen Speicherschicht 1922 gespeichert, sondern stammen direkt aus externen Quellen im Internet.
  • Das Schema 1902 definiert eine gemeinsame Struktur für Informationen, die in den Datenquellen enthalten sein können. Wie weiter oben in diesem Dokument beschrieben, kann das Schema 1902 bestimmte Informationsfelder erfordern und die Speicherung anderer Informationsfelder als optional erlauben.
  • Der Datensatzgenerator 1904 empfängt als Eingabe das Schema 1902 und Informationen aus den Datenquellen 1920. Der Datensatzgenerator 1904 nimmt die Informationen aus den Datenquellen 1920 und strukturiert alle oder einen Teil der Informationen zu einzelnen Exemplaren von Datensätzen, die mit dem Schema 1902 übereinstimmen. Wenn beispielsweise die Datenquellen 1920 im Wesentlichen unstrukturierte Daten von Internetseiten enthalten können, dann kann der Datensatzgenerator 1904 Teile von Informationen von jeder Internetseite auswählen, um sie in bestimmte Datensätze 1906 aufzunehmen.
  • Somit kann jeder der Datensätze 1906 Daten enthalten, die gemäß dem Schema 1902 strukturiert sind. Die strukturierten Daten können Felder enthalten, die eine Semantik von Datenwerten und eine strukturelle Beziehung zwischen den Datenwerten bezeichnen können. Demgemäß kann auf das Schema Bezug genommen werden, um weitere Definitionsinformationen für die Datenwerte zu erhalten (z. B. was der digital gespeicherte Datenwert in der realen Welt oder auf einer Internetseite darstellt und wie seine Beziehungen zu anderen Werten aussehen).
  • Jeder Datensatz 1906 kann verschachtelte Felder und Datenwerte enthalten. Ein verschachtelter Datensatz kann mehr als ein Feld mit dem gleichen Namen oder Pfad enthalten. Die Felder mit gleichem Namen oder Pfad können jedoch strukturell an verschiedenen Positionen in einem bestimmten Datensatz positioniert sein. Beispielsweise kann ein einzelnes Feld, das durch das Schema definiert ist, mehrere Male wiederholt sein. Außerdem können Felder untergeordnete Felder (d. h. verschachtelte Felder) aufweisen. Somit kann auf der obersten Stufe eines Datensatzes ein bestimmtes Feld wiederholt sein, und eine Wiederholung des Feldes kann Exemplare des untergeordneten Feldes in manchen Teilen des Datensatzes, nicht aber in anderen Teilen des Datensatzes umfassen.
  • Die Sammlung von Datensätzen 1906 kann in spaltenförmige Daten 1910 umgewandelt werden, um die Verarbeitung von Informationen in den Datensätzen zu beschleunigen. Wenn beispielsweise die Zahl an Datensätzen in der Sammlung 1906 in die Milliarden geht, und wenn jeder Datensatz Hunderte von unterschiedlichen Feldern enthalten kann, kann eine Analyse der Datensätze zeitaufwändig sein, wenn Informationen über eine kleine Zahl von Feldern erwünscht ist. Der Grund dafür ist, dass jeder Datensatz in der Sammlung 1906 gemeinsam mit anderen Informationen im Datensatz gespeichert ist. D. h. alle Datensätze sind in fortlaufenden Abschnitten des Speichers gruppiert (z. B. wie in der ,datensatzorientierten' Darstellung von verschachtelten Daten in 1).
  • Im Gegensatz dazu umfassen die spaltenförmigen Daten 1910 Spalten, die jeweils Informationen für ein einzelnes Feld im Schema 1902 speichern (wie z. B. in der ,spaltenorientierten' Darstellung von verschachtelten Daten in 1 dargestellt). Wenn also ein Feld ein Byte lang ist, dann kann die Spalte für das Feld in der Größenordnung von Milliarden von Bytes sein (z. B. ein Byte für jeden Datensatz), im Gegensatz zu Milliarden von Datensätzen (z. B. wenn jeder Datensatz ein Megabyte groß ist). Die Operationen des Spaltengenerators 1908 sind in Abschnitt 4.2 „Trennen von Datensätzen in Spalten” genauer beschrieben. Das Speicherformat für die spaltenförmigen Daten 1910 ist in Abschnitt 4.1 „Wiederholungs- und Definitionsstufen” genauer beschrieben.
  • Die spaltenförmigen Daten 1910 können direkt mithilfe des Abfragesystems 1912 abgefragt werden. Mit anderen Worten können die spaltenförmigen Daten 1910 ohne Laden der Daten in eine Datenbank abgefragt werden. Das Abfragesystem kann, wenn eine Abfrage ausgeführt wird, als Eingabe eine Tabelle von spaltenförmigen Daten erhalten. In manchen Beispielen kann das Abfragesystem als Eingabe auch das Schema 1902 erhalten. Die spaltenförmigen Streifen können zusammen mit dem Schema gespeichert werden, um die Daten selbstbeschreibend zu machen. Das Abfragesystem erlaubt die Durchführung von Operationen an den spaltenförmigen Daten, um Spalten von Ausgabeinformationen 1914 zu erstellen. Die Ausgabespalten 1914 können eine Teilmenge von Werten umfassen, die in den spaltenförmigen Daten 1910 dargestellt sind, wie durch eine bestimmte Abfrage bestimmt wird. In manchen Beispielen gibt das Abfragesystem Datensätze 1918 anstelle von oder zusätzlich zu den Spalten 194 aus.
  • Beispielsweise kann das Abfragesystem 1912 eine erste Abfrage erhalten und als Reaktion ausgewählte Spalten von Daten durchforsten und eine Gruppe von Ausgabespalten erstellen, die eine Titel aller Internetseiten bereitstellt, die ein oder mehr Videos aufweisen, sowie auch die Anzahl der Videos auf jeder Internetseite. Das Abfragesystem kann eine zweite Abfrage erhalten und als Reaktion eine zweite Gruppe von Ausgabespalten ausgeben, die eine URL für jede Internetseite bereitstellt, die innerhalb der vorangegangenen 15 Minuten erstellt wurde. Weitere Informationen von den Spalten 1910 sind gegebenenfalls nicht in einer Gruppe von Ausgabespalten enthalten, die einer bestimmten Abfrage 1914 entsprechen.
  • Auf Daten, die als spaltenförmigen Daten 1910 gespeichert sind, muss gegebenenfalls durch einen analytischen Dienst zugegriffen werden, der nicht mit spaltenförmigen Daten arbeitet, sondern mit Datensätzen. Somit kann der Datensatzassemblierer 1916 als Eingabe die spaltenförmigen Daten erhalten und Datensätze aus den spaltenförmigen Daten assemblieren. Der Vorgang der Assemblierung von Datensätzen ist in Abschnitt 4.3 „Datensatzassemblierung” genauer beschrieben.
  • Obwohl die Datensätze vielleicht schon in der Sammlung 1906 vorhanden sind, ermöglicht der Datensatzassemblierer 1916 die Erstellung einer Gruppe von Datensätzen, die eine Telmenge der Felder der Datensätze in der Sammlung 1906 enthalten. Beispielsweise können die Datensätze in der Sammlung Tausende von unterschiedlichen Feldern enthalten. Ein Benutzer will vielleicht ein datensatzorientiertes Analyseprogramm laufen lassen, das nur Informationen aus zwei der Felder, aber für alle Datensätze benötigt. So kann ein Datensatzassemblierer 1916 eine Gruppe von Datensätzen erzeugen, die nur Informationen für die notwendigen Felder enthalten. Auf diese Weise können mehrere Gruppen von Ausgabedatensätzen 1918 für verschiedene Analysen oder für verschiedene Analyseprogramme entwickelt werden. Eine Analyse von kleineren Datensätzen kann rascher ablaufen als eine Analyse, die größere Datensätze durchforsten muss, die gegebenenfalls in der Sammlung 1906 vorhanden sind.
  • Die obige Beschreibung des Betriebs des Systems 1900 veranschaulicht ein Beispiel, bei dem die Sammlung von Datensätzen 1906 Datensätze umfasst, die gemäß dem Schema 1902 formatiert sind, und wobei die spaltenförmigen Daten 1910 aus einzelnen Gruppen von ähnlichen strukturierten Daten erzeugten werden. In verschiedenen Beispielen können mehrere Schemata 1902 zusammen verwendet werden, um eine Sammlung von Datensätzen zu erstellen, die viele Gruppen von unterschiedlich strukturierten Datensätzen 1906 enthält. Jeder Datensatz kann jedoch in einem Header den Typ des Schemas identifizieren, das für die Erstellung des Datensatzes verwendet wurde. Auf ähnliche Weise kann ein spaltenförmiger Streifen für jedes Feld in jeder der zahlreichen Gruppen von ähnlich strukturierten Datensätzen erzeugt werden. Jeder spaltenförmige Streifen kann nicht nur den Namen des Feldes anzeigen, sondern auch das Schema, mit dem die spaltenförmigen Daten assoziiert sind (d. h. das Schema, das zur Formatierung der Datensätze verwendet wurde, aus denen die spaltenförmigen Daten generiert wurden).
  • 20 ist ein Flussdiagramm eines exemplarischen Prozesses zur Erstellung von spaltenförmig angeordneten Daten. Der Vorgang kann durch Komponenten des Systems 1900 ausgeführt werden.
  • Im Block 2002 wird eine Gruppe von Datensätzen erstellt. Die Erstellung der Datensätze kann durch den Datensatzgenerator 1904 erfolgen. Unstrukturierte Daten (z. B. aus den Datenquellen 1920) können in einem standardisierten Datensatzformat kompiliert werden, das durch das Schema 1902 definiert ist. Die Datensätze können in der Sammlung 1906 gespeichert werden.
  • Im Block 2004 wird auf die Datensätze in der Sammlung 1906 zugegriffen. Beispielsweise empfängt der Spaltengenerator 1908 als Eingabe die Daten von der Sammlung von Datensätzen 1906.
  • Im Block 2006 wird bestimmt, ob ein spaltenförmiger Streifen für ein zusätzliches Feld generiert werden soll. Beispielsweise muss ein Steifen für jedes Feld in der Gruppe von Datensätzen generiert werden, die in der Sammlung 1906 gespeichert sind (und somit für jeden Datensatz im Schema 1902 oder eine Teilgruppe davon). In dieser Veranschaulichung wurden vorher keine Streifen erstellt, sodass es Felder gibt, für die Streifen erstellt werden müssen. Demgemäß schreitet der Vorgang zum Block 2008 voran, um Operationen für ein bestimmtes Feld auszuführen. Wenn alle Streifen generiert wurden (z. B. ein Streifen für jedes Feld in der Sammlung von Datensätzen 1906 erzeugt wurde), dann kann der Vorgang beendet werden.
  • Im Block 2008 wird eine Liste von Werten für das jeweilige Feld generiert. Beispielsweise kann jeder der Datensätze durchforstet werden und eine Liste von Werten für das jeweilige Feld wird generiert.
  • Im Block 2010 werden Wiederholungsstufen für das jeweilige Feld erzeugt. Beispielsweise kann der Spaltengenerator 1908 eine Wiederholungsstufe für jeden der Werte in der Liste bestimmen, indem das letzte wiederholte Feld im Pfad für das Feld bestimmt wird.
  • Im Block 2012 werden Definitionsstufen für das jeweilige Feld generiert. Beispielsweise kann der Spaltengenerator 1908 eine Definitionsstufe für jeden Wert bestimmen (einschließlich der Werte, die ,fehlen', wie weiter oben genauer beschrieben).
  • Im Block 2014 wird ein spaltenförmiger Streifen für das jeweilige Feld assembliert. In verschiedenen Beispielen werden die Wiederholungs- und Definitionsstufen in gepaarten Gruppen im Header des Streifens platziert. Die Liste von Werten kann im Körper des Streifens platziert werden.
  • Im Block 2016 wird der spaltenförmige Streifen in Blöcke unterteilt, die komprimiert werden können. Jeder Block kann eine Gruppe von Werten und ihre entsprechenden Wiederholungs- und Definitionsstufen enthalten. Anschließend wird im Block 2006 bestimmt, ob spaltenförmige Streifen für zusätzliche Felder generiert werden sollen. Wenn keine weiteren spaltenförmigen Streifen generiert werden müssen, wird der Vorgang beendet.
  • Der in 20 dargestellte Vorgang ist ein Beispiel für Prozesse zur Generierung von spaltenförmigen Streifen. Variationen des Vorgangs sind vorgesehen. Beispielsweise können die Operationen der Blöcke gegebenenfalls nicht nacheinander ausgeführt werden, wie sie im Flussdiagramm dargestellt sind. Streifen für mehrere Felder können zu einem Zeitpunkt generiert werden. Die Wiederholungsstufe und die Definitionsstufe können generiert werden, da jeder Wert aus einem Datensatz erhalten wird. Die spaltenförmigen Streifen können gegebenenfalls nicht als Ganzes erzeugt werden. Stattdessen muss gegebenenfalls jeder Block aus dem Streifen generiert und unabhängig komprimiert werden. Somit kann das Flussdiagramm einen konzeptuellen Mechanismus für das Verstehen der Generierung von Streifen darstellen, ist aber nicht als Einschränkung zu sehen. Ein Vorgang zur Generierung von spaltenförmigen Daten ist im Algorithmus in 4 zu sehen, der gegebenenfalls nicht den in Verbindung mit 20 beschriebenen Operationen entspricht.
  • 21 ist ein Blockdiagramm von Rechenvorrichtungen 2100, 2150, die zur Implementierung der in diesem Dokument beschriebenen Systeme und Verfahren eingesetzt werden kann, entweder als Client oder als Server oder als Vielzahl von Servern. Die Rechenvorrichtung 2100 dient zur Darstellung verschiedener Formen von digitalen Rechnern, wie z. B. Laptops, Desktop-Rechnern, Arbeitsplätzen, PDAs, Servern, Bladeservern, Großrechnern und anderen geeigneten Rechnern. Die Rechenvorrichtung 2150 dient zur Darstellung verschiedener Formen von mobilen Geräten, wie z. B. PDAs, Mobiltelefonen, Smartphones und anderen ähnlichen Rechenvorrichtungen. Weitere Rechenvorrichtungen 2100 oder 2150 können USB-(Universal Serial Bus)Speichersticks umfassen. Die USB-Speichersticks können Betriebssysteme und andere Anwendungen speichern. Die USB-Speichersticks können Eingabe-/Ausgabekomponenten umfassen, wie z. B. kabellose Übertragungsvorrichtungen oder USB-Stecker, die in einen USB-Eingang einer anderen Rechenvorrichtung eingeführt werden können. Die hier dargestellten Komponenten, ihre Verbindungen und Beziehungen, sowie ihre Funktion sind lediglich Beispiele und nicht als Einschränkung für Implementierungen, die in diesem Dokument beschrieben und/oder beansprucht sind, zu verstehen.
  • Die Rechenvorrichtung 2100 umfasst einen Prozessor 2102, einen Speicher 2104, eine Speichervorrichtung 2106, eine Hochgeschwindigkeitsschnittstelle 2108 zur Verbindung mit einem Speicher 2104 und Hochgeschwindigkeitserweiterungseingängen 2110 sowie eine Niedergeschwindigkeitsschnittstelle 2112 zur Verbindung mit einem Niedergeschwindigkeitsbus 2114 und einer Speichervorrichtung 2106. Alle der Komponenten 2102, 2104, 2106, 2108, 2110 und 2112 sind durch verschiedene Busse miteinander verbunden und können auf einer gemeinsamen Hauptplatine oder auf andere geeignete Weise montiert sein. Der Prozessor 2102 kann Anweisungen zur Ausführung innerhalb der Rechenvorrichtung 2100 verarbeiten, einschließlich Anweisungen, die im Speicher 2104 oder in der Speichervorrichtung 2106 gespeichert sind, um graphische Informationen für eine GUI auf einer externen Eingabe-/Ausgabevorrichtung, wie z. B. eine Anzeige 2116, die mit der Hochgeschwindigkeitsschnittstelle 2108 verbunden ist, darzustellen. In anderen Anwendungen können, je nach Bedarf, mehrere Prozessoren und/oder mehrere Busse verwendet werden, zusammen mit mehreren Speichern und Speicherarten. Außerdem können mehrere Rechenvorrichtungen 2100 verbunden sein, wobei jede Vorrichtung Teile der notwendigen Operationen bereitstellt (z. B. als Serverbank, Gruppe von Bladeservern oder Multiprozessorsystem).
  • Der Speicher 2104 speichert Informationen in der Rechenvorrichtung 2100. In einer Implementierung ist der Speicher 2104 eine oder mehrere flüchtige Speichereinheiten. In einer weiteren Implementierung ist der Speicher 2104 eine oder mehrere nichtflüchtige Speichereinheiten. Der Speicher 2104 kann auch eine andere Form eines computerlesbaren Mediums sein, wie z. B. eine Magnet- oder optische Platte.
  • Die Speichervorrichtung 2106 ist in der Lage, Massenspeicherung für die Rechenvorrichtung 2100 bereitzustellen. Bei einer Implementierung kann die Speichervorrichtung 2106 ein computerlesbares Medium, wie z. B. Diskettenvorrichtung, eine Festplatte, eine optische Plattenvorrichtung oder eine Bandvorrichtung, ein Flash-Speicher oder eine andere ähnliche Festköper-Speichervorrichtung oder eine Anordnung solcher Vorrichtungen, einschließlich Vorrichtungen in einem Speicherbereichnetzwerk oder anderen Konfigurationen, sein oder umfassen. Ein Computerprogrammprodukt kann in einem Informationsträger umgesetzt sein. Das Computerprogrammprodukt kann auch Anweisungen enthalten, dass bei einer Ausführung ein oder mehrere Verfahren, wie sie oben beschrieben sind, ausgeführt werden. Der Informationsträger ist ein computer- oder maschinenlesbares Medium, wie z. B. der Speicher 2104, die Speichervorrichtung 2106 oder ein Speicher im Prozessor 2102.
  • Die Hochgeschwindigkeitssteuervorrichtung 2108 verwaltet bandbreitenintensive Operationen der Rechenvorrichtung 2100, während die Niedriggeschwindigkeitssteuervorrichtung 2112 Operationen mit geringerer Bandbreitenintensität verwaltet. Solche Zuordnung von Funktionen ist lediglich ein Beispiel. In einer Implementierung ist die Hochgeschwindigkeitssteuervorrichtung 2108 mit dem Speicher 2104, der Anzeige 2116 (z. B. durch einen Grafikprozessor oder -beschleuniger) und mit Hochgeschwindigkeitserweiterungseingängen 2110, die verschiedene Erweiterungskarten (nicht dargestellt) akzeptieren können, verbunden. Bei der Implementierung ist die Niedriggeschwindigkeitssteuervorrichtung 2112 mit der Speichervorrichtung 2106 und dem Niedriggeschwindigkeitswertweiterungseingang 21114 verbunden. Der Niedriggeschwindigkeitserweiterungseingang, der verschiedene Übertragungseingänge (z. B. USB, Bluetooth, Ethernet, drahtloses Ethernet) umfassen kann, kann mit einer oder mehreren Eingabe-/Ausgabe-Vorrichtungen, wie z. B. einer Tastatur, einer Zeigevorrichtung, einem Scanner oder einer Netzwerkvorrichtung, wie z. B. einem Schalter oder Router, z. B. über einen Netzwerkadapter, verbunden sein.
  • Die Rechenvorrichtung 2100 kann in verschiedenen Formen umgesetzt sein, wie in der Figur dargestellt ist. Beispielsweise kann sie als Standardserver 2120 oder mehrere Male in einer Gruppe von solchen Servern umgesetzt sein. Sie kann auch als Teil eines Rack-Serversystems 2124 umgesetzt sein. Außerdem kann sie in einem Personalcomputer, wie z. B. einem Laptop 2122, umgesetzt sein. Alternativ dazu können Komponenten der Rechenvorrichtung 2100 mit andern Komponenten in einer mobilen Vorrichtung (nicht dargestellt), wie z. B. der Vorrichtung 2150, kombiniert sein. Alle diese Vorrichtungen können eine oder mehrere der Rechenvorrichtungen 2100, 2150 umfassen, und ein ganzes System kann aus mehreren Rechenvorrichtungen 2100, 2150 zusammengestellt werden, die miteinander kommunizieren.
  • Die Rechenvorrichtung 2150 umfasst, neben anderen Komponenten, einen Prozessor 2152, einen Speicher 2164, eine Eingabe-/Ausgabe-Vorrichtung, wie z. B. eine Anzeige 2154, eine Datenübertragungsschnittstelle 2166 und einen Tranceiver 2168. Die Vorrichtung 2150 kann auch mit einer Speichervorrichtung versehen sein, wie z. B. mit einer Mikrofestplatte oder einer anderen Vorrichtung, um zusätzliche Speicherung bereitzustellen. Alle Komponenten 2150, 2152, 2164, 2154, 2166 und 2168 sind über verschiedene Busse miteinander verbunden, und mehrere der Komponenten können auf einer gemeinsamen Hauptplatine oder auf andere geeignete Weise montiert sein.
  • Der Prozessor 2152 kann Anweisungen in der Rechenvorrichtung 2150 ausführen, einschließlich Anweisungen, die im Speicher 2164 gespeichert sind. Der Prozessor kann als Chipset aus Chips umgesetzt sein, die separate und mehrere analoge und digitale Prozessoren umfassen. Außerdem kann der Prozessor unter Anwendung von verschiedenen Architekturen umgesetzt sein.
  • Beispielsweise kann der Prozessor 410 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 die Koordination der anderen Komponenten der Vorrichtung 2150 bereitstellen, wie z. B. die Steuerung von Benutzerschnittstellen, Anwendungen, die über die Vorrichtung 2150 laufen und drahtlose Datenübertragung durch die Vorrichtung 2150.
  • Der Prozessor 2152 kann mit einem Benutzer über die Steuerschnittstelle 2158 und die Anzeigenschnittstelle 2156, die mit der Anzeige 2154 verbunden ist, kommunizieren. Die Anzeige 2154 kann beispielsweise eine TFT-Anzeige (Dünnfilmtransistor-Flüssigkristallanzeige) oder eine OLED-Anzeige (organische Leuchtdiode) oder eine andere geeignete Anzeigentechnologie sein. Die Anzeigenschnittstelle 2156 kann geeignete Schaltungen zum Steuern der Anzeige 2154 umfassen, um grafische und andere Informationen für einen Benutzer bereitzustellen. Die Steuerschnittstelle 2158 kann Befehle von einem Benutzer empfangen und sie für die Weiterleitung an den Prozessor 2152 umwandeln. Außerdem kann eine externe Schnittstelle 2162 in Kommunikation mit dem Prozessor 2152 bereitgestellt sein, um eine Nahfeldkommunikation der Vorrichtung 2150 mit anderen Vorrichtungen zu ermöglichen. Die externe Schnittstelle 2162 kann beispielsweise Kabeldatenübertragung in manchen Implementierungen bereitstellen, oder drahtlose Datenübertragung in anderen Implementierungen, und es können auch mehrere Schnittstellen verwendet werden.
  • Der Speicher 2164 speichert Informationen in der Rechenvorrichtung 2150. Der Speicher 2164 kann als ein oder mehrere aus einem oder mehreren computerlesbaren Medien, flüchtigen Seichereinheiten oder nichtflüchtigen Speichereinheiten umgesetzt sein. Erweiterungsspeicher 2174 können ebenfalls betreitgestellt sein und über die Erweiterungsschnittstelle 2172 mit der Vorrichtung 2150 verbunden sein, die beispielsweise eine SIMM-Kartenschnittsttelle (Single In Line Memory Module) umfassen können. Solch ein Erweiterungsspeicher 2174 kann zusätzlichen Speicherplatz für die Vorrichtung 2150 bereitstellen, oder auch Anwendungen oder andere Informationen für die Vorrichtung 2150 speichern. Im Speziellen kann der Erweiterungsspeicher 2174 Anweisungen zur Ausführung oder Ergänzung der oben beschriebenen Prozesse enthalten, oder auch Sicherheitsinformationen umfassen. So kann beispielsweise der Erweiterungsspeicher 2174 als Sicherheitsmodul für die Vorrichtung 2150 ausgeführt sein und mit Anweisungen programmiert sein, die eine sichere Verwendung der Vorrichtung 2150 ermöglichen. Weiters können sichere Anwendungen über die SIMM-Karten bereitgestellt sein, zusammen mit weiteren Informationen, wie z. B. Identifikationsinformationen auf der SIMM-Karte in einer Weise, die nicht gehackt werden kann.
  • Der Speicher kann beispielsweise einen Flash-Speicher und/oder einen NVRAM-Speicher umfassen, wie nachstehend erläutert ist. In einer Implementierung ist ein Computerprogrammprodukt in einem Informationsträger umgesetzt. Das Computerprogrammprodukt enthält Anweisungen, die bei der Ausführung ein oder mehrere Verfahren, wie sie oben beschrieben sind, ausführen. Der Informationsträger ist ein computer- oder maschinenlesbares Medium, wie z. B. der Speicher 2164, der Erweiterungsspeicher 4174 oder der Speicher im Prozessor 2152, der beispielsweise über den Transceiver 2168 oder die externe Schnittstelle 2162 empfangen werden kann.
  • Die Vorrichtung 2150 kann drahtlos über die Datenübertragungsschnittstelle 2166 kommunizieren, die, wenn notwenig, digitale Signalverarbeitungsschaltungen umfassen kann. Die Datenübertragungsschnittstelle 2166 kann Datenübertragung unter verschiedenen Modi oder Protokollen ermöglichen, beispielsweise GSM-Sprachtelefonie, SMS-, EMS- oder MMS-Nachrichten, CDMA, TDMA, PDC, WCDMA, CDMA2000 oder GPRS u. a. Solche eine Datenübertragung kann beispielsweise durch den Hochfrequenztranceiver 2168 erfolgen. Außerdem kann Nahbereichdatenübertragung beispielsweise unter Verwendung von Bluetooth, WiFi oder anderen solchen Transceivern (nicht dargestellt) erfolgen. Weiters kann ein GPS-Empfängermodul (Global Positioning System) 2170 zusätzliche naviations- und positionsbezogene Drahtlosdaten für die Vorrichtung 2150 bereitstellen, die von auf der Vorrichtungen 2150 laufenden Anwendungen auf geeignete Weise genutzt werden können.
  • Die Vorrichtung 2150 kann auch akustisch unter Verwendung eines Audio-Codecs 2160 kommunizieren, der gesprochene Informationen von einem Benutzer empfängt und sie in nutzbare digitale Informationen umwandelt. Der Audio-Codec 2160 kann auch hörbare Töne für einen Benutzer, beispielsweise über einen Lautsprecher, z. B. in einem Hörer der Vorrichtung 2150, erzeugen. Solche Töne können Sprachtelefonie umfassen, aufgenommene Töne (z. B. Sprachnachrichten, Musikdateien usw.) und auch durch Anwendungen, die auf der Vorrichtung 2150 laufen, erzeugte Töne.
  • Die Rechenvorrichtung 2150 kann in verschiedenen Formen umgesetzt sein, wie in der Figur dargestellt ist. Beispielsweise kann sie als Mobiltelefon 2180 umgesetzt sein. Sie kann auch als Teil eines Smartphones 2182, eines PDAs oder eines anderen ähnlichen mobilen Geräts umgesetzt sein.
  • Verschiedene Implementierungen der hierin beschriebenen Systeme und Techniken können in digitalen elektronischen Schaltungen, integrierten Schaltungen, speziell designten ASICs (application specific integrated circuits), Computerhardware, Firmware, Software und/oder Kombinationen davon umgesetzt sein. Diese verschiedenen Implementierungen umfassen eine Implementierung in einem oder mehreren Computerprogrammen, die auf einem programmierbaren System, das zumindest einen programmierbaren Prozessor umfasst, der für spezielle oder allgemeine Zwecke ausgerichtet ist und zum Empfangen von Daten und Anweisungen von einem und zum Übertragen von Daten und Anweisungen an ein Speichersystem, zumindest eine Eingabevorrichtung und zumindest eine Ausgabevorrichtung geeignet ist, ausführbar und/oder interpretierbar sind.
  • Diese Computerprogramme (auch bekannt als Programme, Software, Softwareanwendungen oder Code) umfassen Maschinenanweisungen für einen programmierbaren Prozessor und können in einer hohen verfahrensorientierten und/oder objektorientierten Programmiersprache und/oder in einer Assemblier-/Maschinensprache umgesetzt werden. Wie hierin verwendet beziehen sich „maschinenlesbares Medium”, „computerlesbares Medium” auf beliebige Computerprogrammprodukte, Apparate und/oder Vorrichtungen (z. B. Magnetplatten, optische Platten, Speicher, PLDs (programmierbare logische Schaltungen) (PLDs)), die zur Bereitstellung von Maschinenanweisungen und/oder Daten für einen programmierbaren Prozessor dienen, einschließlich eines maschinenlesbaren Mediums, das Maschinenanweisungen als maschinenlesbare Signale erhält. Die Bezeichnung „maschinenlesbares Signal” bezieht sich auf jedes beliebige Signal, das zur Bereitstellung von Maschinenanweisungen und/oder Daten für einen programmierbaren Prozessor dient.
  • Um eine Interaktion mit einem Benutzer zu ermöglichen, können die hierin beschriebenen Systeme und Techniken auf einem Computer mit einer Anzeigevorrichtung (z. B. einer CRT-(Kathodenstrahlröhre) oder LCD-(Flüssigkristallanzeige)Anzeige) zur Darstellung von Informationen für den Benutzer und einer Tastatur sowie einer Zeigevorrichtung (z. B. eine Maus oder ein Trackball), mit dem der Benutzer Eingaben in den Computer vornehmen kann, implementiert sein. Auch andere Arten von Vorrichtungen können verwendet werden, um eine Interaktion mit dem Benutzer zu ermöglichen; beispielsweise kann vom Benutzer bereitgestelltes Feedback jede Form von sensorischem Feedback sein (z. B. visuelles Feedback, akustisches Feedback oder taktiles Feedback); und die Eingabe des Benutzers kann in jeder beliebigen Form empfangen werden, einschließlich akustisch, durch Sprache oder taktil.
  • Die hierin beschriebenen Systeme und Techniken können in einem Computersystem implementiert werden, das eine Back-End-Komponente (z. B. einen Datenserver) umfasst oder eine Middleware-Komponente (z. B. einen Anwendungsserver) umfasst, oder das eine Front-End-Komponente (z. B. einen Client-Computer mit einer grafischen Benutzerschnittstelle oder einem Internetbrowser, über den der Benutzer mit einer Implementierung der hierin beschriebenen Systemen und Techniken interagieren kann) oder eine beliebige Komponente aus solchen Back-End-, Middleware- oder Front-End-Komponenten. Die Komponenten des Systems können in jeder beliebigen Form oder über jedes beliebige Medium digitaler Datenübertragung verbunden sein (z. B. über ein Datenübertragungsnetzwerk). Beispiele für Datenübertragungsnetzwerke umfassen ein Nahbereichnetz („LAN”), ein Weitverkehrsnetz („WAN”), Punkt-zu-Punkt-Netzwerke (mit Ad-hoc- oder statischen Elementen), Grid-Computing-Infrastrukturen und das Internet.
  • Das Rechensystem kann Clients und Server umfassen. Ein Client und ein Server sind im Allgemeinen voneinander entfernt und interagieren typischerweise über ein Datenübertragungsnetzwerk. Die Beziehung zwischen Client und Server basiert auf Computerprogrammen, die auf den jeweiligen Computern laufen und eine Client-Server-Beziehung zueinander aufweisen.
  • Oben wurden zwar nur wenige Implementierungen im Detail beschrieben, es sind aber auch andere Modifikationen möglich. Außerdem können weitere Mechanismen zur Erzeugung und Verarbeitung von spaltenorientierten Speicherdarstellungen von verschachtelten Datensätzen verwendet werden. Weiters müssen die logischen Abläufe, die in den Figuren dargestellt sind, nicht unbedingt in der dargestellten Reihenfolge oder Abfolge ablaufen, um die erwünschten Ergebnisse zu erzielen. Andere Schritte können umgesetzt werden, oder Schritte können in den beschriebenen Abläufen ausgelassen werden, oder andere Komponenten können zu den beschriebenen Systemen hinzugefügt oder Komponenten können entfernt werden. Demgemäß liegen auch andere Implementierungen innerhalb des Schutzumfangs der nachstehenden Ansprüche.
  • Bezugszeichenliste
  • Schlüssel zu den Figuren:Fig. 2
  • DocID:10
    r1
    Links
    20 Vorwärts:
    40 Vorwärts:
    60 Name
    60 Vorwärts:
    Sprache
    Code: ,en-us'
    Url: ,http://A'
    Name
    Url: ,http://b'
    Name
    Sprache
    Code: 'en-gb'
    Land: 'gb'
    Nachricht Dokument {
    obligatorisch int64 DocID;
    optionale Gruppe Links {
    wiederholt int64 Vorwärts; }
    wiederholte Gruppe Name {
    wiederholte Gruppe Sprache {
    obligatorische Zeichenkette Code;
    optionale Zeichenkette Land; }
    optionale Zeichenkette Url; }}
    DocID:10
    r2
    Links
    Rückwärts: 10
    Rückwärts: 30
    Rückwärts: 80
    Name
    Url: ,http://C'
    Fig. 4
    1
    Vorgang DatensatzZerlegen (DatensatzDecodierer Decodierer,
    2
    Feldschreiber Schreiber, int Wiederholungsstufe):
    3
    Hinzufügen der aktuellen Wiederholungsstufe und Definitionsstufe zu Schreiber
    4
    geseheneFelder = {}//leere Gruppe von ganzen Zahlen
    5
    while Decodierer mehrere Feldwerte aufweist
    6
    Feldschreiber chSchreiber =
    7
    Child von Schreiber für das vom Decodierer gelesene Feld
    8
    int chWiederholungsstufe = Wiederholungsstufe
    9
    if die Gruppe geseheneFelder enthält Feld-ID von chSchreiber
    10
    chWiederholungsstufe = Baumtiefe von chSchreiber
    11
    else
    12
    Hinzufügen der Feld-ID von chSchreiber zu geseheneFelder
    13
    end if
    14
    if chSchreiber entspricht einem atomaren Feld
    15
    Schreiben des Werts des aktuellen Felds, das vom Decodierer gelesen wird
    16
    Verwenden von chSchreiber auf chWiederholungsstufe
    17
    else
    18
    DatensatzZerlegen (neuer Datensatzdecodierer für verschachtelten Datensatz
    19
    gelesen vom Decodierer, chSchreiber, chWiederholungsstufe)
    20
    end if
    21
    end while
    22
    Endvorgang
    Fig. 4Fig. 7
    1
    Vorgang KonstruktionFSM(Feld [] Felder):
    2
    für jedes Feld in Felder:
    3
    maxStufe = maximale Wiederholungsstufe des Feldes
    4
    Barriere = nächstes Feld nach Feld oder Zustand des endlichen FSM sonst
    5
    Barrierenstufe = gemeinsame Wiederholungsstufe von Feld und Barriere
    6
    für jedes Vorfeld vor Feld dessen
    7
    Wiederholungstufe größer ist als die Barrierenstufe:
    8
    RückStufe = gemiensame Wiederholungsstufe von Vorfeld und Feld
    9
    Übergang einstellen (Feld, RückStufe) -> Vorfeld
    10
    end for
    11
    für jede Stufe in [Barrierenstufe+1..maxStufe]
    12
    der Übergang von Feld fehlt
    13
    Kopieren des Ziels des Übergangs von Stufe-1
    14
    end for
    15
    für jede Stufe in [0..Barrierenstufe]:
    16
    Übergang einstellen (Feld, Stufe) -> Barriere
    17
    end for
    18
    end for
    19
    Endvorgang
    Fig. 7Fig. 8
    1
    Datensatz DatensatzAssemblieren (Feldleser [] Leser):
    2
    Datensatz = neuen Datensatz erstellen
    3
    letzterLeser = den Stammfeldleser in Leser auswählen
    4
    Leser = Leser [0]
    5
    while Leser Daten aufweist
    6
    nächsten Wert vom Leser abrufen
    7
    wenn der aktuelle Wert nicht NULL ist
    8
    GehezuStufe (Baumstufe von Leser, Leser)
    9
    Leserwert an Datensatz anhängen
    10
    else
    11
    GehezuStufe (volle Definitionsstufe von Leser, Leser)
    12
    end if
    13
    Leser = Leser, auf den der FSM übergeht
    14
    wenn die nächste Wiederholungsstufe vom Leser gelesen wird
    15
    uzurückZuStufe (Baumstufe von Leser)
    16
    end while
    17
    zurückZuStufe (0)
    18
    alle veschachtelten Datensätze beenden
    19
    Datensatz zurück
    20
    Endvorgang
    21
    22
    GehenZuStufe (int neueStufe, Feldleser nächster Leser):
    23
    Beenden der verschachtelten Datensätze bis zur Stufe des niedrigsten gemeinsamen Vorgängers
    24
    des letztenLesers und nächstenLesers
    25
    Starten der verschachtelten Datensätzen von der Stufe des niedrigsten gemeinsamen Vorgängers
    26
    bis zu neueStufe
    27
    letzterLeser auf den auf neueStufe einstellen
    28
    Endvorgang
    29
    30
    ZurückZuStufe (int neueStufe) {
    31
    Beenden der verschachtelten Datensätze bis zu neueStufe
    32
    letzterLeser auf den auf neueStufe einstellen
    33
    Endvorgang
    Fig. 8Fig. 9
    SELECT Docld AS Id,
    COUNT (Name.Sprache.Code) GESCHRIEBENER Name ALS Cnt,
    Name.Url + ,,' + Name.Sprache.Code. AS Str
    FROM t
    WHERE REGEXP (Name.Url, '^http') AND Docld <20;
    Id: 10
    t1
    Name
    Cnt: 2
    Sprache
    Str: ,http://A,en-us'
    Str: ,http://A,en'
    Name
    Cnt: 0
    Nachricht Abfrageergebnis {
    obligatorisch int64 Id;
    wiederholte Gruppe Name {
    optionale unit64 Cnt;
    wiederholte Gruppe Sprache {
    optionale Zeichenkette Str; }}}
  • 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) [0075]
    • G. Czajkowski. Sorting 1PB with MapReduce. Official Google Blog, Nov. 2008 [0075]
    • http://googleblog.blogspot.com/2008/11/sorting-1pb-with-mapreduce.html. [0075]
    • S. Ghemawat, H. Gobioff und S.-T. Leung. The Google File System. In SOSP (2003) [0077]
    • F. Chang, J. Dean, S. Ghemawat, W. C. Hsieh, D. A. Wallach, M. Burrows, T. Chandra, A. Fikes und R. Gruber. Bigtable: A Distributed Storage System for Structured Data. In OSDI (2006) [0077]
    • J. Dean und S. Ghemawat. MapReduce: Simplified Data Processing an Large Clusters. In OSDI (2004) [0078]
    • J. Dean. Challenges in Building Large-Scale Information Retrieval Systems: Invited Talk. In WSDM (2009) [0079]
    • C. Olston, B. Reed, U. Srivastava, R. Kumar und A. Tomkins. Pig Latin: a Not-so-Foreign Language for Data Processing. In SIGMOD (2008) [0080]
    • Hive. http://wiki.apache.org/hadoop/Hive (2009) [0080]
    • D. J. Abadi, P. A. Boncz und S. Harizopoulos. Column-Oriented Database Systems. VLDB, 2(2) (2009) [0081]
    • R. Pike, S. Dorward, R. Griesemer und S. Quinlan. Interpreting the Data: Parallel Analysis with Sawzall. Scientific Programming, 13(4) (2005) [0081]
    • C. Chambers, A. Raniwala, F. Perry, S. Adams, R. Henry, R. Bradshaw und N. Weizenbaum. FlumeJava: Easy, Efficient Data-Parallel Pipelines. In PLDI, (2010) [0081]
    • Protocol Buffers: Developer Guide. Verfügbar unter http://code.google.com/apis/protocolbuffers/docs/overview.html [0093]

Claims (15)

  1. Computerimplementiertes Verfahren, umfassend: Zugreifen, durch ein Rechensystem, auf eine Sammlung von Datensätzen, die in einem Computerspeicher gespeichert sind, wobei jeder Satz in der Sammlung von Datensätzen eine Vielzahl von Datenwerten und eine Vielzahl von Datenelementen, welche die Semantik von entsprechenden Datenwerten aus der Vielzahl von Datenwerten identifizieren, umfasst, wobei einer oder mehrere der Datensätze in der Sammlung von Datensätzen jeweils mehrere Exemplare des gleichen Datenelements umfassen und Datenwerte umfassen, die den mehreren Exemplaren des gleichen Datenelements entsprechen; Erstellen, durch das Rechensystem, einer Sammlung von spaltenförmigen Streifen, wobei die Sammlung von spaltenförmigen Streifen die Datenwerte aus den einzelnen Datensätzen in der Sammlung von Datensätzen umfassen, wobei jeder spaltenförmige Streifen in der Sammlung von spaltenförmigen Streifen alle Datenwerte umfasst, die einem bestimmten Datenelement aus allen Datensätzen in der Sammlung von Datensätzen entspricht.
  2. Verfahren nach Anspruch 1, weiter umfassend: Erstellen, durch das Rechensystem und für jeden Datenwert in jedem spaltenförmigen Streifen in der Sammlung von spaltenförmigen Streifen, von Daten, die eine Position des jeweiligen Datenwerts in einem entsprechenden Datensatz aus der Sammlung von Datensätzen identifiziert.
  3. Verfahren nach Anspruch 2, wobei die Daten aus einem Wiederholungswert und einem Definitionswert bestehen.
  4. Verfahren nach irgendeinem der Ansprüche 2 bis 3, weiter das Rekonstruieren einer Gruppe von Datensätzen, die nur eine Teilmenge von Datenelementen aus den Datensätzen in der Sammlung von Datensätzen enthalten, aus (i) den spaltenförmigen Streifen in der Sammlung von spaltenförmigen Streifen und (ii) den Daten umfasst.
  5. Verfahren nach irgendeinem der Ansprüche 1 bis 4, weiter das Erstellen eines Wiederholungswerts für jeden einzelnen Datenwert in der Sammlung von spaltenförmigen Streifen zur Speicherung zusammen mit den Datenwerten in der Sammlung von spaltenförmigen Streifen umfasst, wobei ein Pfad für jedes einzelne Datenelement irgendein oder mehrere übergeordnete Datenelement für das jeweilige Datenelement umfasst; wobei der Wiederholungswert für jeden einzelnen Datenwert das zuletzt wiederholte Datenelement im Pfad des jeweiligen Datenelements identifiziert, das dem jeweiligen Datenwert entspricht; wobei das zuletzt wiederholte Datenelement im Pfad des jeweiligen Datenelements jenes Datenelement im Pfad des jeweiligen Datenelements ist, das während einer Analyse zum zweiten Mal angetroffen wird, und zwar von einem bestimmten Datensatz, der den jeweiligen Datenwert enthält, der von einer Position des jeweiligen Datenwerts in dem jeweiligen Datensatz nach oben zum Beginn des jeweiligen Datensatzes arbeitet.
  6. Verfahren nach irgendeinem der Ansprüche 1 bis 5, wobei jedes einzelne Datenelement der Datenelemente, die in der Sammlung von Datenelementen enthalten sind, mit einem jeweiligen Pfad assoziiert sind, der irgendeines oder mehrere der übergeordneten Datenelemente für das jeweilige Datenelement umfast; weiter das Erstellen eines Definitionswerts für jeden einzelnen Pfad oder Teil des jeweiligen Pfads in der Sammlung von Datensätzen zum Speichern zusammen mit den Datenwerten in den spaltenförmigen Streifen umfassend; wobei der Definitionsstufe für den jeweiligen Pfad oder Teil des jeweiligen Pfads die Menge der Datenelemente identifiziert, die in dem jeweiligen Pfad oder Teil des Pfads enthalten sind.
  7. Verfahren nach irgendeinem der Ansprüche 1 bis 6, weiter umfassend: das Empfangen von Informationen von einer Sammlung von Datenquellen durch das Rechensystem, wobei jede Datenquelle Informationen enthält, die gemäß einem Schema unstrukturiert sind; und das Erstellen der einzelnen Datensätze in der Sammlung von Datensätzen durch das Rechensystem durch Strukturieren der Informationen in den einzelnen Datenquellen gemäß dem Schema.
  8. Verfahren nach irgendeinem der Ansprüche 1 bis 7, weiter umfassend: das Durchführen einer Abfrage an der Sammlung von spaltenförmigen Streifen durch das Rechensystem; und das Ausgeben eines neuen spaltenförmigen Streifens, der eine Teilmenge der Werte aus einem spaltenförmigen Streifen aus der Sammlung von spaltenförmigen Streifen, enthält, die durch die Abfrage identifiziert werden durch das Rechensystem und als Reaktion auf die Durchführung der Abfrage.
  9. Verfahren nach Anspruch 8, wobei die Abfrage an der Sammlung von spaltenförmigen Streifen durchgeführt wird, ohne dass die Datenwerte, die in der Sammlung von spaltenförmigen Streifen enthalten sind, in eine Datenbank geladen werden.
  10. Verfahren nach irgendeinem der Ansprüche 1 bis 9, wobei zumindest ein erster spaltenförmiger Streifen der Sammlung von spaltenförmigen Streifen mehrere Datenblöcke umfasst, wobei zumindest einige der mehreren Datenblöcke einen Feststellungswert enthalten, der eine Art von Werten definiert, die in den Werten jedes Blocks vorkommen, sodass das Rechensystem bei Durchführung einer Abfrage am ersten spaltenförmigen Streifen einen oder mehrere Datenblöcke auslässt, die keinen durch die Abfrage spezifizierten Datenwert enthalten.
  11. Verfahren nach irgendeinem der Ansprüche 1 bis 10, worin: ein erster spaltenförmiger Streifen der Sammlung von spaltenförmigen Streifen als erste Datenwerte alle Datenwerte aus den Datensätzen in der Sammlung von Datensätzen enthält, die Exemplaren eines ersten Datenelements in der Sammlung entsprechen; und der erste spaltenförmige Streifen mehrere der ersten Datenwerte kontinuierlich im Speicher speichert, wobei die mehreren ersten Datenwerte nicht kontinuierlich in einem Speicher gespeichert wurden, wenn die mehreren ersten Datenwerte in Datensätzen in der Sammlung von Datensätzen gespeichert wurden.
  12. Verfahren nach irgendeinem der Ansprüche 1 bis 11, wobei zumindest ein Datensatz in der Sammlung von Datensätzen Datenelemente und entsprechende Datenwerte umfasst, die gemäß einem verschachtelten Datenmodell gespeichert sind.
  13. Verfahren nach irgendeinem der Ansprüche 1 bis 12, worin: wobei ein erster Datensatz ein erstes Datenelement und ein zweites Datenelement umfasst, wobei das erste Datenelement ein übergeordnetes Datenelement des zweiten Datenelements ist, und das zweite Datenelement ein untergeordnetes Datenelement des ersten Datenelements ist; ein erster spaltenförmiger Streifen einen Datenwert, der dem ersten Datenelement im ersten Datensatz entspricht, und alle andere Datenwerte, die Exemplaren des ersten Datenelements in der Sammlung von Datensätzen entsprechen, umfasst; und ein zweiter spaltenförmiger Streifen einen Datenwert, der dem zweiten Datenelement im ersten Datensatz entspricht, und alle anderen Datenwerte, die Exemplaren des zweiten Datenelements in der Sammlung von Datensätzen entsprechen, umfasst.
  14. Computerprogrammprodukt, das greifbar auf einer computerlesbaren Speichervorrichtung gespeichert ist, wobei das Produkt Computerprogrammanweisungen umfasst, die ausführbar sind, sodass ein oder mehrere Prozessoren Operationen ausführen, umfassend: Zugreifen, durch ein Rechensystem, auf eine Sammlung von Datensätzen, die in einem Computerspeicher gespeichert sind, wobei jeder Satz in der Sammlung von Datensätzen eine Vielzahl von Datenwerten und eine Vielzahl von Datenelementen, welche die Semantik von entsprechenden Datenwerten aus der Vielzahl von Datenwerten identifizieren, umfasst, wobei einer oder mehrere der Datensätze in der Sammlung von Datensätzen jeweils mehrere Exemplare des gleichen Datenelements umfassen und Datenwerte umfassen, die den mehreren Exemplaren des gleichen Datenelements entsprechen; Erstellen, durch das Rechensystem, einer Sammlung von spaltenförmigen Streifen, wobei die Sammlung von spaltenförmigen Streifen die Datenwerte aus den einzelnen Datensätzen in der Sammlung von Datensätzen umfassen, wobei jeder spaltenförmige Streifen in der Sammlung von spaltenförmigen Streifen alle Datenwerte umfasst, die einem bestimmten Datenelement aus allen Datensätzen in der Sammlung von Datensätzen entspricht.
  15. System, umfassend: einen oder mehrere programmierbare Prozessoren; und eine computerlesbare Speichervorrichtung, die mit dem Prozessor verbunden ist und in der Anweisungen gespeichert sind, die bei Ausführung durch den einen oder die mehreren programmierbaren Prozessoren den einen oder die mehreren programmierbaren Prozessoren dazu bringen, Operationen auszuführen, umfassend: Zugreifen, durch ein Rechensystem, auf eine Sammlung von Datensätzen, die in einem Computerspeicher gespeichert sind, wobei jeder Satz in der Sammlung von Datensätzen eine Vielzahl von Datenwerten und eine Vielzahl von Datenelementen, welche die Semantik von entsprechenden Datenwerten aus der Vielzahl von Datenwerten identifizieren, umfasst, wobei einer oder mehrere der Datensätze in der Sammlung von Datensätzen jeweils mehrere Exemplare des gleichen Datenelements umfassen und Datenwerte umfassen, die den mehreren Exemplaren des gleichen Datenelements entsprechen; Erstellen, durch das Rechensystem, einer Sammlung von spaltenförmigen Streifen, wobei die Sammlung von spaltenförmigen Streifen die Datenwerte aus den einzelnen Datensätzen in der Sammlung von Datensätzen umfassen, wobei jeder spaltenförmige Streifen in der Sammlung von spaltenförmigen Streifen alle Datenwerte umfasst, die einem bestimmten Datenelement aus allen Datensätzen in der Sammlung von Datensätzen entspricht.
DE112011101200T 2010-04-05 2011-04-04 Spaltenorientierte Speicher-Darstellungen von Datensätzen Pending DE112011101200T5 (de)

Applications Claiming Priority (5)

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
PCT/US2011/031123 WO2011126995A1 (en) 2010-04-05 2011-04-04 Columnar storage representations of records

Publications (1)

Publication Number Publication Date
DE112011101200T5 true DE112011101200T5 (de) 2013-01-17

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 Before (1)

Application Number Title Priority Date Filing Date
DE202011110863.9U Expired - Lifetime DE202011110863U1 (de) 2010-04-05 2011-04-04 Spaltenspeicher 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
US8918363B2 (en) 2011-11-14 2014-12-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 und 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 und R. Gruber. Bigtable: A Distributed Storage System for Structured Data. In OSDI (2006)
G. Czajkowski. Sorting 1PB with MapReduce. Official Google Blog, Nov. 2008
Hive. http://wiki.apache.org/hadoop/Hive (2009)
http://googleblog.blogspot.com/2008/11/sorting-1pb-with-mapreduce.html.
J. Dean und S. Ghemawat. MapReduce: Simplified Data Processing an 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)
Protocol Buffers: Developer Guide. Verfügbar unter http://code.google.com/apis/protocolbuffers/docs/overview.html
R. Pike, S. Dorward, R. Griesemer und S. Quinlan. Interpreting the Data: Parallel Analysis with Sawzall. Scientific Programming, 13(4) (2005)
S. Ghemawat, H. Gobioff und S.-T. Leung. The Google File System. In SOSP (2003)

Also Published As

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

Similar Documents

Publication Publication Date Title
DE112011101200T5 (de) Spaltenorientierte Speicher-Darstellungen von Datensätzen
DE202011110890U1 (de) System für die Bereitstellung eines Datenspeicherungs- und Datenverarbeitungsservices
DE202012013469U1 (de) Datenverarbeitungsdienst
US10509804B2 (en) Method and apparatus for storing sparse graph data as multi-dimensional cluster
Souza et al. Provenance data in the machine learning lifecycle in computational science and engineering
JP6144700B2 (ja) 半構造データのためのスケーラブルな分析プラットフォーム
JP6416194B2 (ja) 半構造データのためのスケーラブルな分析プラットフォーム
US8209297B2 (en) Data processing device and method
Rost et al. Analyzing temporal graphs with Gradoop
Marx et al. Torpedo: Improving the state-of-the-art rdf dataset slicing
Marx et al. Large-scale RDF dataset slicing
Bidoit et al. Evaluating queries and updates on big xml documents
Maheswari et al. Large-scale data analytics tools: apache hive, pig, and hbase
CN116010420B (zh) 一种基于位图存储的数据查询方法、系统、设备及介质
Saravana et al. A case study on analyzing Uber datasets using Hadoop framework
Levin et al. Processing large datasets of fined grained source code changes
Marx et al. Towards an efficient RDF dataset slicing
Duniam Big Data Architecture in Radio Astronomy: The effectiveness of the Hadoop/Hive/Spark ecosystem in data analysis of large astronomical data collections
Kishore et al. Analysis of Boston’s crime data using apache pig
Cao Big Data Database for Business
Dmitriyev et al. Building a big data analytical pipeline with Hadoop for processing enterprise XML data
Stengård MDX on Hadoop: A case study on OLAP for Big Data
Shekarpour et al. Large-scale RDF Dataset Slicing

Legal Events

Date Code Title Description
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 INC., MOUNTAIN VIEW, CALIF., US

R082 Change of representative

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

R012 Request for examination validly filed
R079 Amendment of ipc main class

Free format text: PREVIOUS MAIN CLASS: G06F0017300000

Ipc: G06F0016000000