DE202016005239U1 - Graph-basierte Abfragen - Google Patents

Graph-basierte Abfragen Download PDF

Info

Publication number
DE202016005239U1
DE202016005239U1 DE202016005239.0U DE202016005239U DE202016005239U1 DE 202016005239 U1 DE202016005239 U1 DE 202016005239U1 DE 202016005239 U DE202016005239 U DE 202016005239U DE 202016005239 U1 DE202016005239 U1 DE 202016005239U1
Authority
DE
Germany
Prior art keywords
graph
query
database
subset
instructions
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
DE202016005239.0U
Other languages
English (en)
Other versions
DE202016005239U8 (de
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.)
Microsoft Technology Licensing LLC
Original Assignee
LinkedIn Corp
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 LinkedIn Corp filed Critical LinkedIn Corp
Publication of DE202016005239U1 publication Critical patent/DE202016005239U1/de
Publication of DE202016005239U8 publication Critical patent/DE202016005239U8/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/248Presentation of query results
    • 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/2433Query languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/282Hierarchical databases, e.g. IMS, LDAP data stores or Lotus Notes
    • 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/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational 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/33Querying
    • G06F16/335Filtering based on additional data, e.g. user or group profiles
    • G06F16/337Profile generation, learning or modification
    • 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
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/50Information retrieval; Database structures therefor; File system structures therefor of still image data
    • G06F16/53Querying
    • G06F16/532Query formulation, e.g. graphical querying
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9024Graphs; Linked lists

Landscapes

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

Abstract

Vorrichtung, umfassend: einen oder mehrere Prozessoren; Speicher; und ein Programmmodul, wobei das Programmmodul in dem Speicher gespeichert ist und, während des Betriebs der Vorrichtung, durch die ein oder mehreren Prozessoren ausgeführt wird, um eine Graph-Datenbank zu betreiben, wobei das Programmmodul umfasst: Instruktionen zum Ausführen einer Abfrage gegenüber der Graph-Datenbank nach gewünschter Information, wobei die Graph-Datenbank einen Graphen speichert, der Knoten, Kanten zwischen den Knoten und Prädikate umfasst, um Daten mit index-freier Nachbarschaft zu repräsentieren und zu speichern; und wobei die Abfrage eine erste Kante identifiziert, welche einem ersten Prädikat zugeordnet ist, welches einen oder mehrere Knoten in dem Graphen angibt; und Instruktionen zum Empfangen eines Ergebnisses in Antwort auf die Abfrage, wobei das Ergebnis eine Teilmenge des Graphen umfasst.

Description

  • Die beschriebenen Ausführungsformen betreffen Techniken zum Ausführen einer Abfrage einer Datenbank. Insbesondere betreffen die beschriebenen Ausführungsformen Techniken zum Ausführen einer Abfrage einer Graph-Datenbank.
  • Anwendungen zugeordnete Daten werden häufig in Datenbanken organisiert und gespeichert. Beispielsweise werden in einer relationalen Datenbank Daten basierend auf einem relationalen Modell in einer oder mehreren Tabellen aus Zeilen und Spalten organisiert, in welchen die Zeilen Instanzen von Typen von Datenentitäten repräsentieren und die Spalten zugeordnete Werte repräsentieren. Information kann aus einer relationalen Datenbank unter Verwendung von Abfragen extrahiert werden, welche in einer strukturierten Abfragesprache (”Structured Query Language”, SQL) ausgedrückt werden.
  • Im Prinzip können in einer relationalen Datenbank durch Verknüpfen oder Zuordnen der Zeilen in verschiedenen Tabellen komplizierte Beziehungen dargestellt werden. In der Praxis beinhaltet das Extrahieren solcher komplizierten Beziehungen das Durchführen einer Menge von Abfragen und das nachfolgende Bestimmen der Schnittmenge der Ergebnisse oder das Verknüpfen (”Join”) der Ergebnisse. Im Allgemeinen kann durch Ausnutzen der Kenntnis des zugrunde liegenden relationalen Modells die Menge an Abfragen bestimmt und dann auf eine optimale Weise ausgeführt werden.
  • Jedoch kennen Anwendungen oft das relationale Modell in einer relationalen Datenbank nicht. Aus der Sicht eine Anwendung werden Daten stattdessen üblicherweise als eine Hierarchie von Objekten im Speicher mit zugeordneten Zeigern (Pointern) betrachtet. Als Folge davon erzeugen viele Anwendungen Abfragen auf eine stückweise, wenig systematische Weise, was es schwierig machen kann, einen Satz von Anfragen an eine relationalen Datenbank zu identifizieren oder auf eine optimale Weise durchzuführen. Das kann die Leistungsfähigkeit und die Benutzererfahrung beim Verwenden von Anwendungen beeinträchtigen.
  • In einem Versuch, dieses Problem anzugehen, wurden vielfache Ansätze angewendet, einschließlich der Verwendung einer objektrelationalen Abbildung, so dass eine Anwendung im Ergebnis ein Verständnis oder eine Kenntnis des relationalen Modells in einer relationalen Datenbank hat. Es ist jedoch häufig schwierig, die objektrelationale Abbildung insbesondere für große Echtzeitanwendungen zu erzeugen und aufrechtzuerhalten.
  • Alternativ hierzu kann eine Spaltendatenbank (”key-value store”) (wie etwa eine NoSQL-Datenbank) anstatt einer relationalen Datenbank verwendet werden. Eine Spaltendatenbank kann eine Ansammlung von Objekten oder Einträgen und den Einträgen zugeordneter Felder mit Werten umfassen. Daten in einer Spaltendatenbank können unter Verwendung eines Schlüsselwerts, welcher einen Eintrag eindeutig bezeichnet, gespeichert oder entnommen werden. Durch Vermeiden der Verwendung eines vorbestimmten relationalen Modells kann es eine Spaltendatenbank Anwendungen erlauben, auf Daten als Objekte im Speicher mit zugeordneten Zeigern zuzugreifen, das heißt auf eine Weise, die aus der Sicht der Anwendung konsistent ist. Jedoch bedeutet das Fehlen eines relationalen Modells, das es schwierig sein kann, eine Spaltendatenbank zu optimieren. Folglich kann es auch schwierig sein, komplizierte Beziehungen aus einer Spaltendatenbank zu extrahieren (das heißt, es können mehrere Abfragen nötig sein), was die Leistungsfähigkeit und die Benutzererfahrung beim Verwenden von Anwendungen ebenfalls beeinträchtigen kann.
  • Gemäß der vorliegenden Erfindung führt ein System eine Abfrage gegenüber einer Graph-Datenbank aus, um gewünschte Information aus einer Graph-Datenbank zu erhalten. Die Graph-Datenbank kann einen Graphen speichern, welcher Knoten, Kanten zwischen den Knoten und Prädikate umfasst, um die Daten mit index-freier Nachbarschaft zu repräsentieren und zu speichern. Insbesondere kann die Abfrage eine erste Kante identifizieren, welche einem Prädikat zugeordnet ist, das einen oder mehrere Knoten in dem Graphen angibt. In Antwort auf die Anfrage erhält das System ein Ergebnis, welches eine Teilmenge des Graphen umfasst. Insbesondere kann die Teilmenge des Graphen die gewünschte Information enthalten, und zwar ausgedrückt in der zugeordneten Strukturen des Graphen.
  • Ausführungsformen der vorliegenden Erfindung werden nachfolgend unter Bezugnahme auf die Zeichnungen erläutert:
  • 1 ist ein Blockdiagramm, welches ein System gemäß einer Ausführungsform der vorliegenden Offenbarung zeigt.
  • 2 ist ein Blockdiagramm, welches einen Graphen in einer Graph-Datenbank in dem System der 1 gemäß einer Ausführungsform der vorliegenden Offenbarung zeigt.
  • 3 ist ein Flussdiagramm, welches ein Verfahren zum Abfragen gewünschter Information aus einer Graph-Datenbank gemäß einer Ausführungsform der vorliegenden Offenbarung zeigt.
  • 4 eine Zeichnung, welche eine Interaktion mit einer Graph-Datenbank in dem System der 1 gemäß einer Ausführungsform der vorliegenden Offenbarung zeigt.
  • 5 ist ein Flussdiagramm, welches ein Verfahren zum Abfragen gewünschter Information aus einer Graph-Datenbank gemäß einer Ausführungsform der vorliegenden Offenbarung zeigt.
  • 6 ist eine Zeichnung, welche zusammengesetzte Abfragen gemäß einer Ausführungsform der vorliegenden Offenbarung zeigt.
  • 7 ist ein Flussdiagramm, welches ein Verfahren zum Abfragen gewünschter Information aus einer Graph-Datenbank gemäß einer Ausführungsform der vorliegenden Offenbarung zeigt.
  • 8 ist eine Zeichnung, welche die Verifikation eines Abfrageergebnisses gemäß einer Ausführungsform der vorliegenden Offenbarung zeigt.
  • 9 ist ein Flussdiagramm, welches ein Verfahren zum Übersetzen einer ersten Abfrage in eine Kanten-Abfrage gemäß einer Ausführungsform der vorliegenden Offenbarung zeigt.
  • 10 ist eine Zeichnung, welche eine Interaktion mit einer Graph-Datenbank in dem System der 1 gemäß einer Ausführungsform der vorliegenden Offenbarung zeigt.
  • 11 ist eine Zeichnung, welche ein Verfahren zum Übersetzen einer ersten Abfrage in eine Kanten-Abfrage gemäß einer Ausführungsform der vorliegenden Offenbarung zeigt.
  • 12 ist ein Flussdiagramm, welches ein Verfahren zum Darstellen einer zusammengesetzten Beziehung in einem in einer Graph-Datenbank gespeicherten Graphen gemäß einer Ausführungsform der vorliegenden Offenbarung zeigt.
  • 13 ist eine Zeichnung, welche eine Interaktion mit einer Graph-Datenbank in dem System der 1 gemäß einer Ausführungsform der vorliegenden Offenbarung zeigt.
  • 14 ist eine Zeichnung eines Graphen, welcher einen Zentralknoten enthält, welcher eine zusammengesetzte Beziehung gemäß einer Ausführungsform der vorliegenden Offenbarung repräsentiert.
  • 15 ist ein Blockdiagramm, welches ein Computersystem zeigt, das die Verfahren der 3, 5, 7, 9 und 12 gemäß einer Ausführungsform der vorliegenden Offenbarung ausführt.
  • Tabelle 1 zeigt eine Kanten-Abfrage gemäß einer Ausführungsform der vorliegenden Offenbarung.
  • Tabelle 2 zeigt Daten in der JavaScript Object Notation (JSON) gemäß einer Ausführungsform der vorliegenden Offenbarung.
  • Tabelle 3 zeigt eine Kanten-Abfrage gemäß einer Ausführungsform der vorliegenden Offenbarung.
  • Tabelle 4 zeigt ein Ergebnis einer Kanten-Abfrage gemäß einer Ausführungsform der vorliegenden Offenbarung.
  • Tabelle 5 zeigt einen Satz von Befehlen, welcher eine zusammengesetzte Beziehung gemäß einer Ausführungsform der vorliegenden Offenbarung definiert.
  • Tabelle 6 zeigt einen Satz von Befehlen, welcher eine zusammengesetzte Beziehung gemäß einer Ausführungsform der vorliegenden Offenbarung definiert.
  • Man beachte, dass einander entsprechende Bezugszeichen in den Zeichnungen einander entsprechende Teile bezeichnen. Ferner werden mehrfache Vorkommnisse des gleichen Teils mit einem gemeinsamen Präfix bezeichnet, welches von einer Vorkommnis-Nummer durch einen Bindestrich getrennt ist.
  • Um gewünschte Information aus einer Graph-Datenbank zu erhalten, führt ein System eine Abfrage (welche manchmal als eine ”Kanten-Abfrage” bezeichnet wird) gegenüber der Graph-Datenbank aus. Die Graph-Datenbank kann einen Graphen speichern, welcher Knoten, Kanten zwischen den Knoten und Prädikate umfasst, um Daten mit index-freier Nachbarschaft zu repräsentieren. Insbesondere kann die Abfrage eine erste Kante identifizieren, welcher ein Prädikat zugeordnet ist, das einen oder mehrere Knoten des Graphen spezifiziert. In Antwort auf die Abfrage erhält das System ein Ergebnis, welches eine Teilmenge des Graphen umfasst. Insbesondere muss die Teilmenge des Graphen typischerweise die gewünschte Information enthalten, welche in einer zugeordneten Struktur des Graphen ausgedrückt ist.
  • Ferner kann das Ergebnis der Abfrage in einem Satz zusammengesetzter oder aufeinanderfolgender Abfragen verwendet werden. Insbesondere kann das System eine zweite Abfrage gegenüber der Teilmenge des Graphen ausführen, welche in Antwort auf die ursprüngliche Abfrage erhalten wurde. Diese zweite Abfrage kann eine zweite Kante identifizieren, welcher ein zweites Prädikat zugeordnet ist, das einen oder mehrere der Knoten spezifiziert. Das System kann dann, in Antwort auf die zweite Abfrage, ein zweites Ergebnis erhalten, welches eine zweite Teilmenge des Graphen enthält.
  • Zudem kann das System eine Teilmenge des Graphen, welche in Antwort auf eine Abfrage zurückgegeben wird, verifizieren. Insbesondere kann das System verifizieren, dass die Teilmenge des Graphen eine oder mehrere bestimmte Kanten enthält, wie etwa Kanten, die einem Prädikat in der Abfrage entsprechen. Allgemeiner ausgedrückt, kann das System verifizieren, dass die Teilmenge des Graphen in dem Teil des Graphen Daten und/oder zugeordnete Strukturen enthält.
  • Um das Abfragen von gewünschter Information aus der Graph-Datenbank zu erleichtern, kann das System eine anfängliche Abfrage in eine Abfrage übersetzen, welche gegenüber der Graph-Datenbank ausgeführt werden kann. Insbesondere kann das System unter Verwendung von Basisausdrücken die anfängliche Abfrage, welche einer Art von Datenbank zugeordnet ist, die von der Graph-Datenbank verschieden ist (wie etwa einer relationalen Datenbank), in die Abfrage übersetzen. Man beachte, dass die Basisausdrücke eine auf den Kanten in dem Graphen basierende Regel, welche ein relationales Schema oder Modell in der Art von Datenbank ausdrückt, und Information umfassen können, welche einem zusammengesetzten Schlüsselwort zugeordnet ist, das eine Beziehung zwischen den Knoten, den Kanten und den Prädikaten in dem Graphen spezifiziert, die einer Tabelle in der Art von Datenbank entspricht.
  • Um das effiziente Speichern und Extrahieren von Daten zu erleichtern, kann das System ferner eine zusammengesetzte Beziehung in dem in der Graph-Datenbank gespeicherten Graphen repräsentieren. Das System (oder ein Benutzer) kann die zusammengesetzte Beziehung basierend auf zwei oder mehreren der Prädikate definieren, welche zwei oder mehreren der Kanten zwischen zwei oder mehreren der Knoten in dem Graphen zugeordnet sind. Das System kann in dem Graphen einen Zentralknoten erzeugen, welcher der zusammengesetzten Beziehung entspricht und welcher den Benutzern des Graphen verborgen ist, so dass der Bezeichner des Zentralknotens von außerhalb der Graph-Datenbank nicht sichtbar ist. Man beachte, dass der Bezeichner des Zentralknotens in der Abfrage unter Verwendung der zwei oder mehr Prädikate spezifiziert werden kann, wodurch es ermöglicht wird, Daten, welche der zusammengesetzten Beziehung zugeordnet sind, einfach zu identifizieren, zu modifizieren und oder zu extrahieren.
  • Diese Technik der Speicherung von Graphen kann es auf diese Weise ermöglichen, Information, die komplizierten Beziehungen zugeordnet ist, effizient aus der Graph-Datenbank zu extrahieren. Anstatt mehrfache Abfragen auszuführen, Zwischenergebnisse in einem Datenspeicher zu speichern und dann die Zwischenergebnisse zusammenzuführen, um die gewünschte Information zu erhalten, können die Ergebnisse von Abfragen, welche an die Graph-Datenbank gestellt werden, die gewünschte Information insbesondere ohne Zusammenführung (”joining”) bereitstellen. Folglich kann die Technik der Speicherung von Graphen die Rechenzeit und die Speicheranforderungen, welche von einem Computersystem zum Extrahieren der gewünschten Information aus der Graph-Datenbank für eine Anwendung notwendig ist, im Vergleich zu anderen Arten von Datenbanken, wie etwa einer relationalen Datenbank oder einer Spaltendatenbank (”key-value store”) reduzieren. Insbesondere kann die Technik der Speicherung von Graphen die Leistungsfähigkeit von Anwendungen, welche die Graph-Datenbank benutzen, verbessern, ohne die Art und Weise zu ändern, in welcher die Anwendungen auf die Daten in der Graph-Datenbank zugreifen (das heißt durch Betrachten der Daten als eine Hierarchie von Objekten im Speicher mit zugeordneten Zeigern (”pointern”)). Zudem kann die verbesserte Leistungsfähigkeit der Anwendungen auch die Benutzererfahrung beim Verwenden der Anwendungen verbessern.
  • In der nachfolgenden Diskussion kann ein Individuum oder ein Benutzer eine Person sein (beispielsweise ein bestehender Benutzer eines sozialen Netzwerks oder ein neuer Benutzer eines sozialen Netzwerks). Zudem oder stattdessen kann die Technik der Speicherung von Graphen durch jegliche Art von Organisation, wie etwa einem Betrieb, verwendet werden, welche gewinnorientierte Firmen, gemeinnützige Firmen, Gruppen (oder Kohorten) von Individuen, Einzelkaufmänner, Regierungsbehörden, Partnerschaften, usw. umfasst.
  • Es werden nun Ausführungsformen des Systems und dessen Verwendung beschrieben. 1 zeigt ein Blockdiagramm, welches ein System 100 erläutert, das eine Technik zur Speicherung von Graphen ausführt. In diesem System können Benutzer von elektronischen Geräten 110 einen Dienst benutzen, welcher wenigstens teilweise unter Verwendung von ein oder mehreren Software-Produkten oder Anwendungen bereitgestellt ist, welche in dem System 100 ausgeführt werden. Wie nachfolgend beschrieben wird, können die Anwendungen durch Maschinen (”engines”) in dem System 100 ausgeführt werden.
  • Zudem kann der Dienst wenigstens teilweise unter Verwendung von Instanzen einer Software-Anwendung bereitgestellt werden, welche auf elektronischen Geräten 110 liegt und auf diesen ausgeführt wird. In einigen Implementierungen können die Benutzer mit einer Web-Seite interagieren, welche durch einen Kommunikationsserver 114 über ein Netzwerk 112 bereitgestellt wird und welche durch Webbrowser auf den elektronischen Geräten 110 dargestellt wird. Beispielsweise kann wenigstens ein Teil der Software-Anwendung, welche auf den elektronischen Geräten 110 ausgeführt wird, ein Anwendungswerkzeug sein, das in die Web-Seite eingebettet ist und das in einer virtuellen Umgebung des Webbrowsers das ausgeführt wird. Das Anwendungswerkzeug kann den Benutzern somit über eine Client-Server-Architektur bereitgestellt werden.
  • Die durch die Benutzer betriebene Software-Anwendung kann eine alleinstehende Anwendung oder ein Teil einer weiteren Anwendung sein, welche auf den elektronischen Geräten 110 liegt und auf diesen ausgeführt wird (wie etwa eine Software-Anwendung, welche durch den Kommunikationsserver 114 bereitgestellt ist oder die auf den elektronischen Geräten 110 installiert ist und auf diesen ausgeführt wird).
  • Unter Verwendung des Systems 100 kann eine Vielfalt von Diensten bereitgestellt werden. In der nachfolgenden Diskussion wird ein soziales Netzwerk (allgemeiner: ein Netzwerk von Benutzern), wie etwa ein berufsbezogenes Netzwerk, welches Interaktionen zwischen den Benutzern erleichtert, als ein erläuterndes Beispiel verwendet. Unter Verwendung eines der elektronischen Geräte 110 (wie etwa des elektronischen Geräts 110-1) als erläuterndes Beispiel, kann ein Benutzer des elektronischen Geräts die Software-Anwendung und eine oder mehrere der durch Maschinen des Systems 100 ausgeführte Anwendungen verwenden, um mit anderen Benutzern in dem sozialen Netzwerk zu interagieren. Beispielsweise kann eine Administrator-Maschine 118 Benutzerkonten und Benutzerprofile handhaben, eine Aktivitätsmaschine 120 kann verschiedene Benutzerverhalten in dem sozialen Netzwerk über die Zeit verfolgen und aggregieren, eine Inhaltsmaschine 122 kann durch Nutzer bereitgestellte Inhalte (Audio, Video, Text, Graphik, Multimedia-Inhalt, sprachliche, geschriebene und/oder aufgezeichnete Information) erhalten und Dokumente (wie etwa Präsentationen, Spread-Sheets, Textverarbeitungsdokumente, Web-Seiten, usw.) für Benutzer bereitstellen, und ein Speichersystem 124 kann Datenstrukturen in einem computerlesbaren Speicher aufrechterhalten, welcher mehrere Geräte, das heißt ein großes Speichersystem, umfasst.
  • Es sei angemerkt, dass jeder der Benutzer des sozialen Netzwerks ein zugeordnetes Benutzerprofil haben kann, welches persönliche und berufsbezogene Charakteristiken und Erfahrungen umfasst, welche gelegentlich insgesamt als ”Attribute” oder ”Charakteristiken” bezeichnet werden. Beispielsweise kann ein Benutzerprofil umfassen: demographische Information (wie etwa Alter und Geschlecht), geographische Anordnung, Arbeitsgebiet für einen momentanen Arbeitgeber, ein Datum eines Anstellungsbeginns, ein optionales Datum eines Anstellungsendes, ein Arbeitsgebiet (zum Beispiel Technik, Verkauf, Beratung), Dienstalter in einer Organisation, Arbeitgebergröße, Ausbildung (wie etwa besuchte Schulen und erreichte Abschlüsse), Anstellungshistorie (wie etwa frühere Arbeitgeber und gegenwärtiger Arbeitgeber), berufliche Entwicklung, Interessensgebiete, Gruppen, denen der Benutzer angehört oder die der Benutzer beobachtet oder verfolgt, eine Tätigkeitsbezeichnung, zusätzliche berufsbezogene Attribute (wie etwa Fähigkeiten) und/oder abgeleitete Attribute (welche Verhaltensweisen des Benutzers umfassen oder auf diesen basieren). Verhaltensweisen des Benutzers können insbesondere umfassen: Anmeldehäufigkeiten, Suchhäufigkeiten, Suchthemen, das Browsen bestimmter Web-Seiten, Orte (wie etwa IP-Adressen), welche den Benutzern zugeordnet sind, Angebote oder Empfehlungen, welche Benutzern gegeben werden, Benutzerantworten auf Angebote oder Empfehlungen, Likes oder Teilungen, welche durch die Benutzer ausgetauscht werden, Interessengebiete für die Likes oder Teilungen und/oder eine Historie von Benutzeraktivitäten beim Benutzen des sozialen Netzwerks. Die Interaktionen zwischen den Benutzern können ferner dabei helfen, einen sozialen Graphen zu definieren, bei welchem Knoten den Benutzern entsprechen und Kanten zwischen den Knoten den Interaktionen, den Beziehungen und/oder den Verbindungen der Benutzer entsprechen. Wie nachfolgend beschrieben wird, können die Knoten in dem in der Graph-Datenbank gespeicherten Graphen zusätzlichen oder anderer Information entsprechen als den Mitgliedern des sozialen Netzwerks (wie etwa Benutzern, Firmen usw.). Beispielsweise können die Knoten Attributen, Eigenschaften oder Charakteristiken der Benutzer entsprechen.
  • Es kann, wie vorangehend erwähnt, schwierig für die Anwendungen sein, Daten in bestehenden Datenbanken in dem Speichersystem 124 zu speichern und aus diesen zu extrahieren, da die Anwendungen möglicherweise keinen Zugriff auf das relationale Modell haben, welches einer bestimmten relationalen Datenbank zugeordnet ist (was gelegentlich als ein ”object-relational impedance mismatch” bezeichnet wird). Wenn die Anwendungen eine relationale Datenbank oder eine Spaltendatenbank als eine Hierarchie von Objekten im Speicher mit zugeordneten Zeigern behandeln, können Abfragen, welche gegenüber der bestehenden Datenbank ausgeführt werden, ferner möglicherweise nicht auf eine optimale Weise ausgeführt werden. Wenn eine Anwendung beispielsweise Daten verlangt, welche einer komplizierten Beziehung (welche zwei oder mehr Kanten beinhaltet und welche gelegentlich als eine ”zusammengesetzte Beziehung” bezeichnet wird) zugeordnet sind, kann ein Satz von Abfragen durchgeführt werden, und es können dann die Ergebnisse verknüpft oder zusammengefügt werden. Zur Erläuterung dieses Problems kann das Darstellen einer Web-Seite für einen Blog eine erste Abfrage nach den letzten drei Blog-Posts, eine zweite Abfrage nach zugeordneten Kommentaren und eine dritte Abfrage nach Information bezüglich der Autoren der Kommentare umfassen. Da der Satz von Abfragen suboptimal sein kann, kann der Erhalt der Ergebnisse deshalb zeitaufwändig sein. Diese beeinträchtigte Leistungsfähigkeit kann wiederum die Benutzererfahrung beim Verwenden der Applikation und/oder des sozialen Netzwerks beeinträchtigen.
  • Um dieses Problem anzugehen, kann das Speichersystem 124 eine Graph-Datenbank umfassen, welche einen Graphen speichert (beispielsweise als Teil eines Systems oder einer Maschine zum Speichern und Gewinnen und Abrufen von Information). Der Graph kann insbesondere ein beliebig genaues Datenmodell ermöglichen, welches für Daten zu erhalten ist, welche schnelles Zusammenführen beinhalten (wie etwa für eine komplizierte Beziehung mit unausgewogenen Daten (”skew”) oder mit großen Verzweigungen (”fan-out”) in dem Speichersystem 124), wodurch nahezu die Geschwindigkeit eines Zeigers auf einen Speicherort erreicht wird (und dadurch für den durch Anwendungen verfolgten Ansatz gut geeignet ist).
  • 2 stellt ein Blockdiagramm dar, welches einen Graphen 210 zeigt, der in einer Graph-Datenbank 200 in dem System 100 (1) gespeichert ist. Der Graph 210 kann Knoten 212, Kanten 214 zwischen den Knoten 212 und Prädikate 216 (welches primäre Schlüsselworte sind, die Kanten 214 spezifizieren oder bezeichnen), um Daten mit index-freier Nachbarschaft zu repräsentieren und zu speichern, so dass jeder Knoten 212 in dem Graphen 210 eine direkte Kante zu seinen benachbarten Knoten aufweist, ohne eine Indexsuche zu verwenden.
  • Die Graph-Datenbank 200 kann insbesondere eine Implementierung eines relationalen Modells mit Konstant-Zeit-Navigation sein, das heißt unabhängig von der Größe N, im Gegensatz zu einer Abhängigkeit gemäß log(N). Ferner können alle Beziehungen in der Graph-Datenbank 200 erster Klasse (das heißt gleich) sein. In einer relationalen Datenbank hingegen können die Zeilen in einer Tabelle erster Klasse sein, eine Beziehung, welche das Zusammenführen (”joining”) von Tabellen beinhaltet, kann zweiter Klasse sein. Ferner kann eine Schemaänderung in der Graph-Datenbank 200 (wie etwa eine dem Hinzufügen oder Löschen einer Spalte in einer relationalen Datenbank entsprechende Maßnahme) in Konstant-Zeit ausgeführt werden (in einer relationalen Datenbank kann das Ändern des Schemas problematisch sein, da es oft in zugeordneten Anwendungen implementiert ist). Ferner kann bei der Graph Datenbank 200 das Ergebnis einer Abfrage eine Teilmenge des Graphen 210 sein, welche die Struktur (das heißt die Knoten, die Kanten) der Teilmenge des Graphen 210 beibehält.
  • Die Technik des Speicherns von Graphen kann Ausführungsformen von Verfahren umfassen, welche es ermöglichen, die Daten, welche den Anwendungen und/oder dem sozialen Netzwerk zugeordnet sind, effizient in der Graph-Datenbank 200 zu speichern und aus dieser zu gewinnen. Wie nachfolgend unter Bezugnahme auf die 3 und 4 beschrieben wird, kann die Technik zum Speichern von Graphen beispielsweise eine Teilmenge des Graphen 210 in Antwort auf eine Abfrage bereitstellen. Wie nachfolgend unter Bezugnahme auf die 5 und 6 beschrieben wird, können die Ergebnisse einer Abfrage ferner in zusammengesetzten oder aufeinanderfolgenden Abfragen verwendet werden. Anstatt eine erste Anfrage und eine zweite Anfrage unabhängig an die Graph-Datenbank 200 zu stellen, kann die zweite Abfrage insbesondere an die Ergebnisse der ersten Abfrage (welche eine Teilmenge des Graphen 210 umfasst) gestellt werden. Auf diese Weise können komplizierte Beziehungen direkt erhalten werden, ohne Zwischenergebnisse nachfolgend zusammenzuführen oder zu verknüpfen, wodurch die Zeit verringert wird, welche benötigt wird, um gewünschte Information zu erhalten, und die benötigten Systemressourcen reduziert werden, um die gewünschte Information zu erhalten.
  • Wie nachfolgend unter Bezugnahme auf die 7 und 8 beschrieben wird, können die Ergebnisse einer gegenüber der Graph-Datenbank 200 ausgeführten Abfrage verifiziert werden, indem die Ergebnisse mit bekannter oder erwarteter Information verglichen werden. Da beispielsweise die Ergebnisse einer Abfrage eine Teilmenge des Graphen 210 enthalten, können Sie basierend auf einer vordefinierten Struktur des Graphen 210 oder einer bestimmten Information in der Teilmenge, wie etwa Kanten oder Prädikaten, welche denen der Abfrage entsprechen, verifiziert werden.
  • Wie nachfolgend unter Bezugnahme auf die 9 bis 11 beschrieben wird, kann eine Abfrage, welche einer anderen Art von Datenbank zugeordnet ist oder welche in einer Sprache ist, die von einer der Graph-Datenbank 200 zugeordneten Sprache verschieden ist (wie etwa JavaScript Object Notation oder JSON) in einigen Ausführungsformen in das kanten-basierte Format übersetzt werden, das mit der Graph-Datenbank 200 verwendet wird, bevor die Abfrage gegenüber der Graph-Datenbank 200 ausgeführt wird. Wie nachfolgend unter Bezugnahme auf die 12 bis 14 erläutert wird, können zudem komplizierte Beziehungen in der Graph-Datenbank 200 repräsentiert werden, indem ein Graph 210 für eine zusammengesetzte Beziehung definiert wird, welcher einen Bezeichner eines Zentralknotens umfasst, der vor einem Benutzer der Graph-Datenbank 200 verborgen ist. Beispielsweise kann der Bezeichner des Zentralknotens von außerhalb der Graph-Datenbank 200 nicht sichtbar sein. Stattdessen kann der Bezeichner des Zentralknotens (und somit die zusammengesetzte Beziehung) basierend auf zwei oder mehr Kanten spezifiziert oder identifiziert werden, welche in einer Abfrage enthalten sein können.
  • Unter erneuter Bezugnahme auf 1 kann die hier beschriebene Technik zum Speichern von Graphen es dem System 100 ermöglichen, Daten, welche den Anwendungen und dem sozialen Netzwerk zugeordnet sind, effizient und schnell (das heißt optimal) zu speichern und zu erhalten bzw. abzufragen, ohne dass die Anwendungen Kenntnis über das in der Graph-Datenbank 200 implementierte relationale Modell haben müssen. Folglich können die Techniken zur Speicherung von Graphen die Verfügbarkeit und die Leistungsfähigkeit oder das Funktionieren der Anwendungen, des sozialen Netzwerks und des Systems 100 verbessern, was Enttäuschungen der Benutzer reduzieren kann und was die Benutzererfahrung verbessern kann. Deshalb können die Techniken zum Speichern von Graphen die Beschäftigung mit dem sozialen Netzwerk oder die Verwendung des sozialen Netzwerks verbessern, und sie können somit den Gewinn eines Betreibers des sozialen Netzwerks verbessern.
  • Das Informationssystem 100 kann an einem oder an mehreren Orten (das heißt Lokal und/oder entfernt) gespeichert sein. Da diese Daten vertraulicher Natur sein können, können sie ferner verschlüsselt sein. Beispielsweise können die gespeicherten Daten und/oder die über die Netzwerke 112 und/oder 116 übertragenen Daten verschlüsselt sein.
  • Es werden nun Ausführungsformen der Technik zum Speichern von Graphen beschrieben. 3 stellt ein Flussdiagramm dar, welches ein Verfahren 300 zum Abfragen gewünschter Information aus einer Graph-Datenbank zeigt, welches durch ein Computersystem (wie etwa das System 100 in 1 oder ein Computersystem 1500 in 15) ausgeführt werden kann. Während des Betriebs führt das Computersystem eine Abfrage gegenüber der Graph-Datenbank (Operation 316) aus, welche einen Graphen speichert. Graphen können insbesondere Knoten, Kanten zwischen den Knoten und Prädikate umfassen, um Daten mit index-freier Nachbarschaft zu repräsentieren und zu speichern. Insbesondere kann die Abfrage eine erste Kante identifizieren, welche einem Prädikat zugeordnet ist, das einen oder mehrere der Knoten in dem Graphen spezifiziert. Dann erhält das Computersystem ein Ergebnis (Operation 318) in Antwort auf die Abfrage, wobei das Ergebnis eine Teilmenge des Graphen umfasst. Die gewünschte Information kann in einer zugeordneten Struktur des Graphen ausgedrückt sein und/oder das Ergebnis kann hierarchische Randbedingungen und relationale Randbedingungen ausschließen.
  • Das Computersystem kann ferner optional die Abfrage erzeugen (Operation 310), und zwar mit einem Subjekt, einem Prädikat und einem Objekt basierend auf der gewünschten Information. Beispielsweise kann die Abfrage Entitäten in einem berufsbezogenen Netzwerk zugeordnet sein.
  • Alternativ hierzu kann das Computersystem optional eine andere Abfrage erhalten (Operation 312), und das Computersystem kann die andere Abfrage in die Abfrage umwandeln (Operation 314). Die andere Abfrage kann beispielsweise mit einer Art von Datenbank kompatibel sein, welche ein anderes Datenmodell aufweist und/oder welche von der Graph-Datenbank verschieden ist (wie etwa eine relationale Datenbank und oder eine hierarchische Datenbank). In einigen Ausführungsformen ist die andere Abfrage mit JSON kompatibel.
  • In einer beispielhaften Ausführungsform ist das Verfahren 300 unter Verwendung von einer oder mehreren Anwendungen und einem Speichersystem (oder Maschine) in dem Computersystem implementiert, welche miteinander interagieren. Dies ist in 4 dargestellt. Während dieses Verfahrens kann eine Anwendung 410, welche in einem Computersystem 412 (welches einen Teil oder die gesamte Funktionalität des Systems 100 in 1 implementieren kann) ausgeführt wird, eine Abfrage 414 einem Speicher-Subsystem 124 bereitstellen. Alternativ hierzu kann das Speicher-Subsystem 124 die Abfrage 414 erzeugen (beispielsweise basierend auf gewünschter Information, welche von der Anwendung 410 verlangt wird), oder es kann eine von der Anwendung 410 erhaltene ursprüngliche Abfrage (welche in einer anderen Sprache vorliegen kann, die mit der Graph-Datenbank 416 nicht kompatibel ist) in die Abfrage 414 übersetzen (welches eine Kantenabfrage ist, die mit der Graph-Datenbank 416 kompatibel ist). Insbesondere kann die anfängliche Abfrage einem anderen Datenmodell zugeordnet sein und gegenüber der Graph-Datenbank 416 nicht ausführbar sein bevor sie in die Abfrage 414 übersetzt ist.
  • Dann kann das Speichersystem 124 die Abfrage 414 gegenüber der Graph-Datenbank 416 ausführen, um ein Ergebnis 418 zu erhalten (welches eine Teilmenge eines in der Graph-Datenbank 416 gespeicherten Graphen umfassen kann). Dann kann das Speichersystem 124 ein Ergebnis 420 (welches das gleiche sein kann wie das Ergebnis 418 oder welches ein Teil des Ergebnisses 418 sein kann) der Anwendung 410 bereitstellen.
  • In einer beispielhaften Ausführungsform weist die Graph-Datenbank ein Schema auf, welches Kanten unter Verwendung von Tripeln (Subjekt, Prädikat, Objekt) repräsentiert, welche Relationen erster Klasse spezifizieren. Die Verwendung eines Tripels als die fundamentale Relation in den Daten stellt eine Bedeutung bereit, welche von einem Menschen direkt verarbeitet werden kann. In einigen Ausführungsformen wird ein Vier-Tupel (”Quad”) verwendet, um zusätzliche Information, wie etwa Besitz oder Herkunft, zu erfassen bzw. zu repräsentieren. In weiteren Ausführungsformen wird jedoch eine Relation variabler Länge in dem Graphen verwendet.
  • Jedes Feld in einem Tripel kann insbesondere einen ganzzahligen ”Entitäten-Bezeichner” aufweisen. Diese Kantenstruktur kann es ermöglichen, dass eine Zusammenführung in der Domäne der ganzen Zahlen auftritt, insbesondere mit Sätzen von ganzen Zahlen, wie sie durch einen inversen Index verwaltet werden. Insbesondere kann diese Domäne eine prägnante Repräsentierung und eine schnelle Implementierung des Zusammenführens erlauben. Ferner können diesen Tripeln Strukturhierarchien zugeordnet werden, wie etwa JSON oder Schablonen (”templates”) der HyperText Markup Language (HTML), welche häufig in höheren Bereichen des Anwendungsstapels (”stack”) verwendet werden. Abfrageergebnisse können somit in JSON umgewandelt werden.
  • In der Graph-Datenbank muss es das separate Konzept eines ”Attributs” nicht unbedingt geben. Stattdessen können zwei verschiedene Kantentypen durch zwei verschiedene Tripel repräsentiert werden, welche einen gemeinsamen Zwischenknoten aufweisen. Beispielsweise kann eine Mitglied-zu-Mitglied-Verbindung zwischen Mitgliedern 1234 und 4567 in dem sozialen Netzwerk als eine Kante (Edge(x, 'left_member', 'member/1234')), Kante (Edge(x, 'left_score', 6.7)), Kante (Edge(x, 'right_member', 'member/4567')), Kante (Edge(x, 'right_score', 23.78)) und Kante (Edge(x, 'creation_date', '2014-sep-26)) repräsentiert werden, wobei ”x” den Zwischenknoten angibt. Die zuvor als ”Attribute” bekannten Daten können als Tripel existieren, welche separat geändert werden können, vollständig indiziert sein können und ohne zusätzliche Komplexität abfragbar sind. Wie andere Prädikate können als Attribute verwendete Prädikate nach Bedarf erzeugt werden.
  • Die physikalische Speicherung des Graphen und der Indizes kann Log-strukturiert bzw. Protokoll-strukturiert sein und kann direkt in den Speicher abgebildet sein. Knoten und Kanten können durch ihren Offset in dem physikalischen Log identifiziert sein. Diese Log-Struktur kann eine natürliche virtuelle Zeit erzeugen, welche für Konsistenzzwecke ausgenutzt werden kann und welche ungehinderten parallelen Zugriff auf die physikalischen Daten und Indizes für eine leistungsfähige Zusammenführung (”join”) ermöglichen kann.
  • Wie vorangehend erwähnt, können Kanten über inverse Indizes zugänglich sein. Beispielsweise kann ”iSub(1234)” einen Satz von ganzzahligen Knoten identifizieren und Log-Offsets der Kante bzw. der Kanten ergeben, deren Subjekt ”1234” ist. Inverse Indizes mit vorausberechneten Subjekt-Prädikat- und Objekt-Prädikat-Schnittmengen können Navigation mit Konstant-Zeit erlauben, welche aus einer Hash-Tabellen-Abfrage besteht, um einen Satz von Kanten gefolgt von einem Feldzugriff zu erhalten, um zwischen Kanten zu navigieren.
  • Die inversen Indizes können insbesondere in dem Sinne ”normalisiert” werden, als dass sie Kopien jeglicher Daten, welche sie indizieren, nicht enthalten. Somit kann das Schema eines inversen Index eine Abbildung von einem Subjekt-Bezeichner auf einen Satz von Kanten-Bezeichnern (S → {I}), eine Abbildung von Prädikat-Bezeichnern auf einen Satz von Kanten-Bezeichnern (P → {I}), eine Abbildung von Objekt-Bezeichnern auf einen Satz von Kanten-Bezeichnern (O → {I}), eine Abbildung von einem Subjekt-Bezeichner und einem Prädikat-Bezeichner auf einen Satz von Kanten-Bezeichnern (S,P → {I}), und eine Abbildung von einem Objekt-Bezeichner und einem Prädikat-Bezeichner auf einen Satz von Kanten-Bezeichnern (O,P → {I}) umfassen. Ferner kann der Satz von Kanten-Bezeichnern wiederum ein Tripel (I[i] → {S:s, P:p, O:o}) spezifizieren.
  • Ferner kann unter Verwendung einer dreistufigen Speicherhierarchie die de-Normalisierung (das heißt das Kopieren von Teilen der Kante in die Indizes) eine schnellere Ausführung und einen geringeren Speicherverbrauch (S → {P,O}, P → {S,O}, O → {P,S}, S,P → {O} und O,P → {S}) ergeben. Dieser Ansatz kann einer Posting-Liste entsprechen. Insbesondere ist es nicht nötig, dass der Index überhaupt Kanten enthält. In einigen Ausführungsformen kann dieser Ansatz weitergeführt werden, so dass (S → P → {O}, P → S → {O}, P → O → {S} und O → P → {S}. Somit kann es zwei Prädikat-Indizes geben, nämlich einen vorwärts von S nach O und einen weiteren in umgekehrter Richtung. Im Prinzip können alle sechs Permutationen benötigt werden, in der Praxis können jedoch vier für die meisten Abfragen ausreichend sein.
  • In einigen Ausführungsformen der de-Normalisierung werden Graphen für einige oder alle Entitäten in dem sozialen Netzwerk (einzelne Mitglieder, Firmen usw.) erzeugt. In diesem Beispiel kann ein Graph eine vollständige Nachbarschaft von Verbindungen erster Ordnung umfassen, mit Zehntausenden oder sogar Hunderttausenden von Kanten. Während dieser Ansatz eine große Menge an Daten duplizieren würde, gibt es möglicherweise keinen Bedarf zur Indizierung. Stattdessen kann ein einziger sequenzieller Scan der Kanten im Speicher gespeichert werden.
  • Ein Graph kann größer sein, als dass ihn eine einzige Maschine zusammenhängend speichern kann, so dass er in Fragmente (”Shards”) aufgeteilt wird, wobei jedem Fragment eine Maschine zugeordnet wird. In einigen Ausführungsformen wird ein hybrider Fragmentierungsansatz verwendet, bei welchem eine große Indexmenge auf viele Maschinen aufgeteilt wird, um Parallelisierung zu erlauben, während gleichzeitig kleine Indexmengen zusammen auf einer einzigen Maschine gehalten werden, so dass eine Abfrageevaluierung Entscheidungen basierend auf einer ”lokal geschlossenen Welt” treffen kann. Eine solche Graphenaufteilung kann beispielsweise die Unterhaltungsindustrie in einem Fragment, Computerprogrammierer in einem anderen Segment, Finanzindustrie in einem weiteren Segment usw. aufweisen. Umgekehrt (da es eine große Indexmenge ist) kann ein einflussreiches Mitglied eines berufsbezogenen Netzwerks, wie etwa Richard Branson, Millionen von Follower-Kanten haben, die über mehrere Fragmente verteilt sind.
  • Indem spezifiziert wird, dass jedes Fragment für sich selbst genommen eine Datenbank ist und durch Veranlassen, dass ein anfänglicher Abfrage-Evaluierer der obersten Ebene mit einem Bündel von Datenbanken arbeitet, kann Flexibilität bei der Implementierung der Fragmentierung (”Sharding”) erreicht werden. Insbesondere kann eine gebündelte Abfrage-Evaluierung begonnen werden, indem die vollständige Abfrage allen Fragmenten angeboten wird, in der Erwartung, dass jedes Fragment alles zurückgibt, was es über das Ergebnis oder die Antwort weiß. Antworten können somit von der vollständigen Antwort bis zu einem Satz von Mitglieder-zu-Mitglieder-Verknüpfungen in dem sozialen Netzwerk reichen, welche eine Rolle für das Ergebnis spielen können.
  • In einigen Ausführungsformen verwendet die Graph-Datenbank (oder die Datenbanken) einen statischen Abfrage-Plan. In diesen Ausführungsformen kann ein Optimierer eine Abfrage inspizieren und unter Zuhilfenahme von Statistiken über die Daten und Indizes einen Plan erzeugen, der dann ausgeführt wird. Dieser statische Ansatz kann dann gut arbeiten, wenn der Overhead zum Starten und zum Stoppen der Ausführung groß ist (beispielsweise wenn die Daten von einer Festplatte gestreamt werden), und die Daten können unter Verwendung der Statistiken einfach zusammengefasst werden.
  • Da jedoch im Speicher gespeicherte Graph-Daten diese Eigenschaften typischerweise nicht aufweisen (es bedarf üblicherweise nicht mehr als einem L3 cache-miss von einem Prozessor, und unausgewogene Daten sind verbreitet), verwendet die Graph-Datenbank (oder die Datenbanken) in einigen Ausführungsformen dynamische Abfrage-Optimierung. Wie in Tabelle 1 gezeigt, kann ein 3-Schritt-Pfad ”a.b.c” in einer größeren Abfrage q eingebettet sein. Die Anzahl der Kanten mit den Prädikaten a, b und c kann basierend auf den Indizes bestimmt werden. Es sei angenommen, dass diese 400, 10 Millionen bzw. 200.000 Kanten beträgt. Die Evaluierung kann mit a starten. Diese kann Sätze von Kandidaten für x1 und x2 identifizieren, und diese Sätze können kleiner als die Anzahl der Kanten sein, beispielsweise 400 bzw. 300. Wenn es 300 x2s gibt, kann es vernünftig sein, mit den b-Kanten fortzufahren, obwohl es von diesen 10 Millionen gibt. Wenn beispielsweise b der ”Geburtsort” ist, kann es höchstens 300 Kandidaten für x3 geben. Wenn jedoch b so etwas wie ”Follows” ist, kann x2[0] 20 Kanten haben, x2[1] kann 243 Kanten haben und x2[2] kann 5 Millionen Kanten haben. Mit einem statischen Plan gäbe es keine andere Wahl, als durch die 5 Millionen Möglichkeiten zu suchen. Alternativ kann ein dynamischer Evaluierer die Verarbeitung der großen Ausfächerung solange verschieben wie sie aufwändiger verbleibt als andere Alternativen, indem entweder c evaluiert wird oder eine weitere Randbedingung in der Auslassung, welche x2[2] aus der Betrachtung entfernt.
  • Figure DE202016005239U1_0002
    Tabelle 1
  • In einer beispielhaften Ausführungsform ist eine anfängliche Abfrage von einer Anwendung nach Daten für einen Blog in JSON. Diese ist in Tabelle 2 gezeigt, welche eine JSON-Abfrage nach Blog-Posts zeigt, und zwar sortiert nach absteigendem Datum. Wie in Tabelle 3 gezeigt, kann eine anfängliche Abfrage in eine Kanten-Abfrage, welche mit einer Graph-Datenbank kompatibel ist (wie etwa eine unter Verwendung von Datalog oder Prolog ausgedrückte Kanten-Abfrage) übersetzt werden oder als solche ausgedrückt werden. In dieser Kanten-Abfrage werden Schlüsselworte aus der anfänglichen Abfrage zu Prädikaten, wie etwa ”Text”, ”Kommentare”, und ”Autor”. Ferner kann die Kanten-Abfrage einen String (wie etwa ”Kommentar”) und/oder eine Variable (wie etwa ”P” oder ”C”) umfassen. Beispielsweise kann die Kanten-Abfrage Syntax umfassen, welche das Datum, Ordnen nach Datum, eine Begrenzung auf drei Blog-Posts usw. spezifiziert. In Tabelle 3 sind insbesondere Dinge links von ”:-” als Regeln bekannt oder als solche bezeichnet. In dem Kanten-Abfrageformat sind mehrfache Definitionen der gleichen Regel Disjunktionen (Ors, Oder-Verknüpfungen), und durch Komma getrennte Dinge sind Konjunktionen (ANDs, Und-Verknüpfungen).
  • Figure DE202016005239U1_0003
  • Figure DE202016005239U1_0004
    Tabelle 2
  • Figure DE202016005239U1_0005
    Tabelle 3
  • Tabelle 4 zeigt Ergebnisse einer Kanten-Abfrage, welche eine Gruppe von Kanten in einer Teilmenge eines Graphen umfassen, von denen eine jede durch ein Subjekt, ein Prädikat und ein Objekt spezifiziert ist. Im Allgemeinen ist eine Kanten-Abfrage insbesondere ein Satz von Randbedingungen, welche auf eine Datenbank angewendet werden, und die Ausgabe oder das Ergebnis ist ein Teil oder eine Teilmenge eines Graphen, welcher die Randbedingungen erfüllt (ohne hierarchische oder relationale Randbedingungen). Da das Ergebnis einen Teil des Graphen (mit seiner zugeordneten Struktur) umfasst, kann das Ergebnis verwendet werden, ohne dass ein Schema oder eine Kenntnis des relationalen Modells in der Graph-Datenbank implementiert ist. Beispielsweise kann die Abfrage auf das Ergebnis (das heißt die Ausgabe der Abfrage) angewendet werden, und es wird das gleiche Ergebnis erhalten. Eine solche verbundene Abfrage ist mit einer SQL-Abfrage für eine relationale Datenbank typischerweise nicht möglich.
  • Figure DE202016005239U1_0006
    Tabelle 4
  • Da die Ausgabe oder das Ergebnis einer Abfrage eine Teilmenge des Graphen umfasst (ohne die zugeordnete Struktur zu verlieren), können Abfragen aneinandergefügt werden und auf das vorangegangene Ergebnis anstatt auf den gesamten Graphen angewendet werden. Dies ist in 5 gezeigt, welche ein Flussdiagramm zeigt, das ein Verfahren 500 zum Abfragen gewünschter Information von einer Graph-Datenbank erläutert, welches durch ein Computersystem (wie etwa das System 100 in 1 oder das Computersystem 1500 in 15) ausgeführt werden kann. Während des Betriebs führt das Computersystem eine Abfrage gegenüber der Graph-Datenbank aus (Operation 316), welche einen Graphen gespeichert. Der Graph kann insbesondere Knoten, Kanten zwischen den Knoten und Prädikate umfassen, um Daten mit index-freier Nachbarschaft zu repräsentieren und zu speichern. Insbesondere kann die Abfrage eine erste Kante identifizieren, welche einem Prädikat zugeordnet ist, welches einen oder mehrere der Knoten in dem Graphen spezifiziert. Das Computersystem erhält dann ein Ergebnis (Operation 318) in Antwort auf die Abfrage, wobei das Ergebnis eine Teilmenge des Graphen umfasst.
  • Dann führt das Computersystem eine zweite Abfrage gegenüber der Teilmenge des Graphen aus (Operation 510), wobei die zweite Abfrage eine zweite Kante identifiziert, welche einem zweiten Prädikat zugeordnet ist, welches einen oder mehrere der Knoten spezifiziert. Ferner erhält das Computersystem ein zweites Ergebnis (Operation 512) in Antwort auf die zweite Abfrage, wobei das zweite Ergebnis eine zweite Teilmenge des Graphen umfasst. Das Ausführen der zweiten Abfrage an der ersten Teilmenge des Graphen kann das Ausführen der zweiten Abfrage an der Graph-Datenbank unnötig machen.
  • Die Operationen in dem Verfahren 500 können wiederholt werden. Beispielsweise kann das Computersystem eine oder mehrere zusätzliche Abfragen an der Teilmenge des Graphen ausführen, und/oder es kann eine dritte Abfrage an der zweiten Teilmenge des Graphen ausführen.
  • Die Abfrage in der Operation 316 kann insbesondere durch das Computersystem erzeugt werden, oder sie kann, wie vorangehend unter Bezugnahme auf die 3 beschrieben, erhalten werden und/oder übersetzt werden.
  • Es wird wieder auf 4 Bezug genommen. Vor dem Bereitstellen des Ergebnisses 420 kann das Computersystem 412 eine oder mehrere Abfragen 422 an dem Ergebnis 418 ausführen, um das Ergebnis 420 zu erhalten.
  • Durch das Aneinanderführen (”piping”) der Ergebnisse einer Abfrage an eine weitere Abfrage kann eine Gruppe von miteinander in Bezug stehenden Abfragen effizient ausgeführt werden (das heißt berechnungsmäßig schneller), indem eine Unterabfrage definiert wird, die der Gruppe gemeinsam ist. Zusammengesetzte Abfragen sind in 6 dargestellt. Solche zusammengesetzten Abfragen sind insbesondere bei Abfragen, welche gegenüber einer relationalen Datenbank ausgeführt werden, typischerweise nicht möglich, da das relationale Modell, welches in der relationalen Datenbank realisiert oder implementiert ist, in den Ergebnissen dieser Abfragen nicht enthalten ist (anders ausgedrückt, ist es typischerweise nicht möglich, eine einzige Abfrage (z. B. in SQL) zu schreiben, welche mehrere Tabellen zurückgibt. Da hingegen das Ergebnis einer Kanten-Abfrage eine Teilmenge eines Graphen ist und die zugeordnete Struktur enthält, kann es einer nachfolgenden Abfrage zugeführt werden, was die Zeit reduziert, welche notwendig ist, um gewünschte Information aus einer Graph-Datenbank zu extrahieren, im Vergleich zu der Zeit, welche nötig ist, um gewünschte Information aus einer relationalen Datenbank zu extrahieren.
  • In einer beispielhaften Ausführungsform wird eine Menge von Kanten-Abfragen dazu verwendet, Filme in einer Graph-Datenbank zu identifizieren. Während ein einfaches Nachschlagen in einer Tabelle (wie etwa das Nachschlagen in einer Reihe in einer Tabelle) unter Verwendung einer SQL-Abfrage einer relationalen Datenbank schnell ausgeführt werden kann (beispielsweise innerhalb von 2 μs) kann die Zeit, welche benötigt wird, um das gewünschte Ergebnis oder die gewünschte Information zu erhalten, schnell ansteigen, da die Anzahl der Zusammenführungen (”joins”) in einer komplizierten Beziehung (beispielsweise den Oscar gewinnende Filme mit bestimmten Darstellern) für eine Menge von SQL-Abfragen zunimmt.
  • Die Zeit, welche benötigt wird, um die gewünschte Information unter Verwendung einer Menge von Kanten-Abfragen einer Graph-Datenbank zu erhalten, kann hingegen unabhängig von der Anzahl der Kanten-Abfragen (welche der Anzahl von Zusammenführungen (”joins”) entspricht) sein. Beispielsweise kann die Zeit, welche benötigt wird, um die gewünschte Information unter Verwendung von einer oder von mehreren Kantenabfragen zu erhalten, konstant sein, wie etwa 20 μs. Wenn die komplizierte Beziehung deshalb viele Zusammenführungen (”joins”) der Ergebnisse für eine Menge von SQL-Abfragen beinhaltet (wie etwa einige zehn bis einige hundert Zusammenführungen), kann die Menge von Kanten-Abfragen der Graph-Datenbank eine überlegene Leistungsfähigkeit aufweisen (das heißt reduzierte Zeit, welche benötigt wird, um die gewünschte Information zu erhalten).
  • Da das Ergebnis einer Kanten-Abfrage eine Teilmenge eines Graphen ist, kann das Ergebnis ferner verifiziert werden, um zu bestätigen, dass die Kanten-Abfrage korrekt ausgeführt wurde. Dies ist in 7 gezeigt, welche ein Flussdiagramm darstellt, welches ein Verfahren 700 zum Abfragen gewünschter Information aus einer Graph-Datenbank zeigt, welche durch ein Computersystem (wie etwa das System 100 in 1 oder das Computersystem 1500 in 15) ausgeführt werden kann. Während des Betriebs führt das Computersystem eine Abfrage gegenüber der Graph-Datenbank (Operation 316) aus, welche einen Graphen speichert. Graphen können insbesondere Knoten, Kanten zwischen den Knoten und Prädikate umfassen, um Daten mit index-freier Nachbarschaft zu repräsentieren und zu speichern. Ferner kann die Abfrage eine erste Kante identifizieren, welche einem Prädikat zugeordnet ist, das einen oder mehrere der Knoten in dem Graphen spezifiziert. Dann erhält das Computersystem ein Ergebnis (Operation 318) in Antwort auf die Abfrage, wobei das Ergebnis eine Teilmenge des Graphen umfasst.
  • Das Computersystem verifiziert dann die Teilmenge des Graphen (Operation 710). Die Teilmenge des Graphen kann beispielsweise verifiziert werden, wenn die Teilmenge des Graphen mit einem entsprechenden Teil des Graphen übereinstimmt. Insbesondere kann die Verifizierung (Operation 710) beinhalten, dass das Computersystem die Teilmenge des Graphen mit einer vorbestimmten Teilmenge des Graphen vergleicht. Alternativ oder zusätzlich kann die Teilmenge des Graphen verifiziert werden, wenn die Teilmenge des Graphen eine erwartete Teilmenge der Kanten enthält (wie etwa eine oder mehrere Kanten oder einen oder mehrere Knoten, welche einem bestimmten Prädikat zugeordnet sind).
  • In einigen Ausführungsformen beinhaltet das Verifizieren (Operation 710), dass das Computersystem Folgendes ausführt: Ausführen einer weiteren Abfrage gegenüber der Graph-Datenbank; Erhalten eines weiteren Ergebnisses in Antwort auf die Abfrage, wobei das weitere Ergebnis eine andere Teilmenge des Graphen enthält; und Vergleichen der anderen Teilmenge des Graphen mit der Teilmenge des Graphen. Die Teilmenge des Graphen kann beispielsweise verifiziert werden, wenn es eine Übereinstimmung zwischen einem überlappenden Bereich der Teilmenge des Graphen und der anderen Teilmenge des Graphen gibt. Alternativ oder zusätzlich beinhaltet das Verifizieren (Operation 710), dass das Computersystem ausführt: Ausführen einer weiteren Abfrage gegenüber der Graph-Datenbank; Erhalten eines weiteren Ergebnisses in Antwort auf die Abfrage, wobei das Ergebnis Information enthält, welche der Teilmenge der Kanten (wie etwa eine oder mehrere Kanten oder einen oder mehrere Knoten, welche einem bestimmten Prädikat zugeordnet sind) entspricht; und Vergleichen der Information der Teilmenge der Kanten.
  • Die Abfrage in der Operation 316 kann insbesondere durch das Computersystem erzeugt werden, oder sie kann, wie vorangehend unter Bezugnahme auf die 3 beschrieben, erhalten werden und/oder übersetzt werden.
  • Es wird wieder auf 4 Bezug genommen. Das Computersystem 412 kann das Ergebnis 418 oder 420 verifizieren 424. Beispielsweise kann das Computersystem basierend auf einem Prädikat in der Abfrage 414 verifizieren, dass eine oder mehrere erwartete Kanten oder ein oder mehrere erwartete Knoten in dem Ergebnis 418 oder dem Ergebnis 420 enthalten sind. Die Verifikation ist in 8 weiter erläutert. Insbesondere kann das Ergebnis 814 für die Abfrage 812 der Graph-Datenbank 810 mit dem vordefinierten oder vorbestimmten Ergebnis 816 verglichen werden. Wenn die Abfrage 812 ein Prädikat für eine Firma enthält, sollte somit das Ergebnis 814 wenigstens einen Angestellten der Firma enthalten, und dies kann verifiziert werden, indem das Ergebnis 814 mit einer Liste von Angestellten der Firma in dem vorbestimmten Ergebnis 816 verglichen wird. Wenn die Abfrage 812 ein Prädikat enthält, kann das Verifizieren der Ergebnisse 814, allgemeiner ausgedrückt, das Suchen nach dem Vorhandensein gewisser Kanten in den Ergebnissen 816 beinhalten.
  • Wie vorangehend beschrieben, kann die Technik des Speicherns von Graphen eine Übersetzung beinhalten. Dies ist in 9 gezeigt, welche ein Flussdiagramm darstellt, welches ein Verfahren 900 zum Übersetzen einer ersten Abfrage in eine Kanten-Abfrage zeigt, und welches durch ein Computersystem (wie etwa das System 100 in 1 oder das Computersystem 1500 in 15) durchgeführt werden kann. Während des Betriebs erhält das Computersystem die erste Abfrage (Operation 910), welche einer ersten Art von Datenbank (beispielsweise einer relationalen Datenbank, einer hierarchischen Datenbank oder einer weiteren Art von Datenbank, wie etwa einer mit SQL kompatiblen Datenbank) zugeordnet ist und welche, allgemeiner ausgedrückt, ein weiteres oder ein anderes Datenmodell aufweist. Dann übersetzt das Computersystem unter Verwendung von Primitivausdrücken die erste Abfrage in die Kanten-Abfrage (Operation 914), welche der den Graphen speichernden Graph-Datenbank zugeordnet ist.
  • Die erste Art von Datenbank weist insbesondere ein anderes Datenmodell auf als die Graph-Datenbank und/oder ist verschieden von der Graph-Datenbank (beispielsweise kann die erste Art von Datenbank SQL verwenden), und der Graph umfasst Knoten, Kanten zwischen den Knoten und Prädikate, um Daten mit index-freier Nachbarschaft zu repräsentieren und zu speichern. Die Primitivausdrücke umfassen ferner: Eine auf Kanten in dem Graphen basierende Regel, welche ein relationales Schema in der ersten Art von Datenbank ausdrückt, und Information, welche einem zusammengesetzten Schlüsselwort zugeordnet ist, welches ein Verhältnis zwischen den Knoten spezifiziert, wobei die Kanten und die Prädikate in dem Graphen einer Tabelle in der ersten Art von Datenbank entsprechen. Nachfolgend wird die Verwendung von Primitivausdrücken zum Übersetzen einer Abfrage in eine Form, welche mit einer Graph-Datenbank kompatibel ist, weiter erläutert.
  • Das Computersystem führt dann die Kanten-Abfrage gegenüber der Graph-Datenbank aus (Operation 916), wobei die Kanten-Abfrage eine Kante identifiziert, welche einem Prädikat zugeordnet ist, das einen oder mehrere der Knoten in dem Graphen spezifiziert. Das Computersystem erhält ferner ein Ergebnis (Operation 918) in Antwort auf die Kanten-Abfrage, wobei das Ergebnis eine Teilmenge des Graphen enthält.
  • Die Kanten-Abfrage kann beispielsweise mit Datalog kompatibel sein. Die Kanten-Abfrage kann, allgemeiner ausgedrückt, mit einer Abfragesprache kompatibel sein, welche deklarativ ist, so dass sie Berechnungslogik ausdrückt, ohne einen zugeordneten Kontrollfluss auszudrücken, und sie kann vollständig sein, so dass durch die Abfragesprache eine beliebige Berechnung ausgedrückt ist.
  • In einigen Ausführungsformen bestimmt das Computersystem optional die Primitivausdrücke (Operation 912).
  • In einer beispielhaften Ausführungsform ist das Verfahren 900 unter Verwendung von einer oder mehreren Anwendungen und einem Speichersystem (oder Maschine) in dem Computersystem implementiert, welche miteinander Wechselwirken. Dies ist in 10 gezeigt. Während des Verfahrens kann die Anwendung 410, welche auf dem Computersystem 412 ausgeführt wird, eine anfängliche Abfrage 1010 an das Speicher-Subsystem 124 bereitstellen. Diese anfängliche Abfrage kann in einer anderen Sprache vorliegen, welche mit der Graph-Datenbank 416 nicht kompatibel ist. Das Speicher-Subsystem 124 (oder eine Evaluierungsschicht, welche dem Speicher-Subsystem 124 Kanten oder Graphen zuführt) kann die anfängliche Abfrage 1010 in eine Kanten-Abfrage 1014 (welche mit der Graph-Datenbank 416 kompatibel ist) unter Verwendung von Primitivausdrücken 1012 übersetzen. Die Primitivausdrücke 1012 können insbesondere vorbestimmt sein, oder sie können optional durch das Computersystem 412 bestimmt werden.
  • Das Speicher-Subsystem 124 kann die Kanten-Abfrage 1014 gegenüber der Graph-Datenbank 416 ausführen, um ein Ergebnis 418 (welches eine Teilmenge eines in der Graph-Datenbank 416 gespeicherten Graphen umfassen kann) zu erhalten. Das Speicher-Subsystem 124 kann dann ein Ergebnis 420 (welches dem Ergebnis 418 gleich sein kann oder ein Teil des Ergebnisses 418 sein kann) der Anwendung 410 bereitstellen.
  • In einer beispielhaften Ausführungsform wird die Kanten-Abfrage von der anfänglichen Abfrage in eine für viele Zwecke geeignete, deklarative Abfragesprache (das heißt eine, welche dem Computersystem ein gewünschtes Resultat mitteilt, ohne zu spezifizieren, wie dies zu erhalten ist, so dass sie optimiert werden kann) übersetzt. Diese Abfragesprache kann auf Datalog basieren oder mit Datalog kompatibel sein. Insbesondere kann die Abfragesprache im Hinblick auf deren Ausdrucksfähigkeit mit SQL vergleichbar sein. Anders ausgedrückt kann die Abfragesprache umfassend sein, so dass eine beliebige Berechnung dargestellt oder ausgedrückt werden kann. Die Abfragesprache kann Merkmale wie etwa Transformation, Komposition und Abfrage durch Beispiel aufweisen.
  • Die Graph-Transformation kann eine beliebige Funktion sein, welche einen komplizierten Graphen annimmt und einen einfacheren erzeugt. Im Allgemeinen gibt es ein Spannungsverhältnis zwischen Leuten, welche Daten kuratieren, und Leuten, welche Daten für einen bestimmten Zweck verwenden. Anwendungsentwickler wünschen typischerweise bestimmte Grobinformation (z. B. einen momentanen Arbeitgeber eines Mitglieds), aber eine einfache Kuratierung verlangt häufig, dass nur sich nicht ändernde Tatsachen aufgezeichnet werden. Wenn der momentane Arbeitgeber direkt gespeichert wird, kann eine Verpflichtung zur nicht endenden Kuratierung erzeugt werden (das heißt das Überprüfen des Angestelltenstatus des Mitglieds). Während die Kuratierung einfacher möglich ist, ist sie auch eine kompliziertere Angestelltenbeziehung, welche einen Arbeitnehmer, einen Arbeitgeber, Start- und Enddaten, Beförderungen usw. beinhaltet, welche sich mit der Zeit nicht ändern. Der komplizierte Graph, welcher entstehen kann, kann dann in eine einfachere vom Benutzer gewünschte Struktur transformiert werden. Ein allgemeines Beispiel für eine Graph-Transformation ist die Abstandskennzeichnung (”distance badging”). Eine Zwei-Schritt-Beziehung kann insbesondere in eine einzige ”Kennzeichnungskante” (”badge edge”) umgewandelt werden, deren Objekt die Zahl ”2” ist.
  • Graph-Komposition erlaubt es Benutzern, komplizierte Abfragen durch Bezugnahme auf einfachere zu erstellen. Unter der Annahme, dass die zu Grunde liegenden Graph-Daten häufig reichhaltig und kompliziert sind, kann es einen Bedarf danach geben, Abfragen zur Wiederverwendung zu Kapseln. Beispielsweise kann eine Abfrage nach ”Veteranen im Bereich von Datenbanken”, wie etwa nach Leuten mit zehn Jahren Erfahrung im Bereich von Datenbanken, wenigstens einer Beförderung und Bestätigungen für datenbankbezogene Fähigkeiten durch andere Leute im Datenbankbereich, in Abfragen wiederverwendbar sein, wie: ”Häufigste Abschlussschulen von Veteranen im Bereich der Datenbanken”, ”durch ... besuchte Konferenzen” und ”Startups in der Bay Area, welche ... im letzten Jahr attraktiv waren”.
  • Bei der Abfrage gemäß Beispielen, können einfache konjunktive Abfragen, welche häufig sind, einfach ausgedrückt werden, indem ein Beispiel für die Art von Daten, von denen man hofft weitere zu finden, erzeugt wird. Bei der Abfrage aufgrund von Beispielen kann insbesondere eine Hierarchie von Prädikatnamen verwendet werden. Insbesondere kann die Abfrage aufgrund von Beispielen einen Mechanismus zur Interaktion mit relationalen Datenbanken auf hoher Ebene bereitstellen.
  • Die Abfragesprache bei der Technik zur Speicherung von Graphen kann es dem Computersystem ermöglichen, viele verschiedene anfängliche Abfragen (mit verschiedenen zugeordneten Datenbanken) zu unterstützen, ohne für jede anfängliche Abfragesprache eine Optimierung durchzuführen. Die Technik zur Speicherung von Graphen kann ferner die Verwendung der Kompilierung einer einfachen Kern-Sprach-Abfrage (oder auf Primitivausdrücken basierter Sprache) und eines Auswertungscompilers umfassen, welcher die anfängliche Abfrage unter Verwendung von Primitivausdrücken ausdrückt. Die Primitivausdrücke können eine auf Kanten in dem Graphen basierende Regel umfassen, welche ein relationales Schema in der ersten Art von Datenbank ausdrückt oder auferlegt. Beispielsweise kann die Regel, welche auf Mitglied-zu-Mitglied-Beziehungen a zu b und b zu c basiert, a, b und c miteinander in Bezug setzen. Die Primitivausdrücke können ferner ein zusammengesetztes Schlüsselwort oder Information umfassen, welche einem zusammengesetzten Schlüsselwort zugeordnet ist, das eine Beziehung zwischen den Knoten, den Kanten und den Prädikaten in dem Graphen spezifiziert, welche einer Tabelle in der ersten Art von Datenbank entsprechen (die Verwendung eines zusammengesetzten Schlüsselworts kann von der Implementierung abhängen. Der Benutzer definiert, allgemeiner ausdrückt, die zusammengesetzte Beziehung unter Verwendung von Primitivausdrücken der Sprache. Die Datenbank kann dann in einer Implementierungsschicht das zusammengesetzte Schlüsselwort erzeugen, um die zusammengesetzte Beziehung zu bezeichnen. Der Benutzer des Systems muss sich somit der Existenz des zusammengesetzten Schlüsselworts nicht bewusst sein). Die Tabelle kann insbesondere Attribute enthalten, welche Prädikaten entsprechen. Das zusammengesetzte Schlüsselwort kann beispielsweise eine oder mehrere Beziehungen zwischen einem Knoten mit Kanten zu Mitgliedern und deren Attributen (wie etwa Start- und Enddaten, Punktzahlen, welche angeben, wie Mitglieder verbunden sind, usw.) definieren.
  • Eine anfängliche oder erste Abfrage (wie etwa eine SQL-Abfrage) kann in eine Kanten-Abfrage (wie etwa eine Datalog-kompatible Abfrage) unter Verwendung von Primitivausdrücken umgewandelt werden. Eine SQL-Abfrage kann beispielsweise einer oder mehreren Tabellen mit Spalten zugeordnet sein, und sie kann in zu vereinigende Konstituenten (beispielsweise select * x, y, z U select * a, b, c) aufgebrochen werden, welche die Tabellen bezeichnen (beispielsweise können die Spalten Variablen in dem Regelkopf sein). Dann kann die SQL-Abfrage explizit als eine oder mehrere Regeln ausgedrückt werden, oder sie kann implizit mit einem oder mehreren zusammengesetzten Schlüsselwörtern ausgedrückt werden (welche auf einem oder mehreren gemeinsamen Knoten in einer Graph-Datenbank basieren können). Dieser Prozess ist in 11 gezeigt, welche eine Zeichnung darstellt, die die Übersetzung einer ersten Abfrage in eine Kanten-Abfrage erläutert.
  • Beispielsweise kann in SQL eine Tabelle definiert sein als: M2M, Spalte a und b. In dem Graphen kann diese Beziehung äquivalent ausgedrückt werden als: M2M(a, b):- Edge(a, 'lin', h), Edge(b, 'rin', h). Dann wählt eine SQL-Abfrage a, b aus, und zwar von M2M, MFC (mit Splaten a, b und c), wobei a = 'Sri', M2M.a = MFC.c ergibt: M2M(a, b), Equal(a, 'Sri'), MFC(a2, b2, c2), Equal(a, c2). In einem weiteren Beispiel kann die SQL-Abfrage select a, b from M2M union select a, b from MFC ausgedrückt werden als query(a, b):- M2M(a, b), query(a, b):- MFC(a, b), query(_,_)? mit einem Satz Regeln und R('Sri', _)?
  • Man beachte, dass die Übersetzung auch umgekehrt ausgeführt werden kann, und zwar von einer Kanten-Abfrage in eine Abfrage in einem anderen Format, wie etwa SQL. Beispielsweise kann die anfängliche Kanten-Abfrage sein: create view M2M(a, b), select e1.s, e2.s from edge e1, edge e2 where e1.O = e2.O, e1.P = 'lin' and e2.P = 'rin'.
  • In einigen Ausführungsformen wird die Technik zur Speicherung von Graphen dazu verwendet, eine zusammengesetzte Beziehung zu definieren. Dies ist in 12 gezeigt, welche ein Flussdiagramm darstellt, das ein Verfahren 1200 zum Repräsentieren einer zusammengesetzten Beziehung in einem in einer Graph-Datenbank gespeicherten Graphen zeigt, welches durch ein Computersystem (wie etwa das System 100 in 1 oder das Computersystem 1500 in 15) ausgeführt werden kann. Während des Betriebs definiert das Computersystem die zusammengesetzte Beziehung (Operation 1210) basierend auf zwei oder mehr Prädikaten, welche zwei oder mehr Kanten zwischen zwei oder mehr Knoten in dem Graphen zugeordnet sind. (Alternativ oder ergänzend hierzu kann der Benutzer die zusammengesetzte Beziehung über ein Schema definieren.) Dann kann das Computersystem eine Abfrage mit Kanten, welche die zwei oder mehr Prädikate enthalten, erzeugen oder empfangen (Operation 2212). Ferner kann das Computersystem die Abfrage gegenüber der Graph-Datenbank ausführen (Operation 1214).
  • Ferner erzeugt das Computersystem in dem Graphen einen Zentralknoten (Operation 1216), welcher der zusammengesetzten Beziehung entspricht. Diese Identität eines Zentralknotens kann durch die eingehenden zusammengesetzten Kanten bestimmt sein. Diese Kanten können für einen Benutzer sichtbar sein. Intern kann das Computersystem eine verschiedene Kodierung für diese Identität oder einen verschiedenen Bezeichner für diese Identität verwenden oder solche nicht verwenden. Insbesondere kann der Bezeichner eines Zentralknotens vor dem Benutzer des Graphen verborgen werden, so dass der Bezeichner des Zentralknotens von außerhalb der Graph-Datenbank nicht sichtbar ist.
  • Zudem kann das Computersystem optional eine oder mehrere zusätzliche Operationen ausführen (Operation 1218). Beispielsweise kann das Computersystem dem Zentralknoten basierend auf den zwei oder mehr Prädikaten einen lokalen Bezeichner zuordnen. Zudem kann das Computersystem, wie dies nachfolgend unter Bezugnahme auf die 14 weiter beschrieben wird, zwischen dem Zentralknoten und einem Knoten, welcher den lokalen Bezeichner enthält, eine Kante hinzufügen, welche einem Bezeichner-Prädikat zugeordnet ist, und/oder das Computersystem kann zwischen dem Zentralknoten und einem Knoten, welcher ein Attribut eines der zwei oder mehr Knoten enthält, eine Kante hinzufügen, welche einem Attribut-Prädikat zugeordnet ist.
  • (Man beachte, dass die Kante nur hinzugefügt werden kann, wenn sie in der Benutzerabfrage spezifiziert ist. Beispielsweise unter der Annahme, dass die Prädikate lm und rm eine zusammengesetzte Beziehung bilden, wie sie zuvor durch den Benutzer spezifiziert wurde. Dann können --Edge(h, ”lm”, ”m1”), Edge(h, ”rm”, ”m2”), Edge(h, ”score”, ”123”) eine Mitglied-zu-Mitglied-Verbindung mit einer Punktzahl von 123 erzeugen. Wenn nun der Benutzer zu einer späteren Zeit das Folgende eingibt: --Edge(h, ”lm”, ”m1”), Edge(h, ”rm”, ”m2”), Edge(h, ”score”, ”456”), kann das Computersystem unter Verwendung der zusammengesetzten Relation zwischen ”lm” und ”rm” den Zentralknoten als den identifizieren, der bei dem ersten Schreiben erzeugt wurde, und es kann diesem Zentralknoten das neue ”Punktzahl”-Attribut hinzufügen).
  • Je nachdem, wie das Attribut-Prädikat definiert oder konfiguriert ist, kann das Attribut-Prädikat entweder geändert oder ersetzt werden. Wenn beispielsweise eine Kardinalität des Attribut-Prädikats größer als eins ist, kann das Computersystem eine weitere Kante hinzufügen, welche dem Attribut-Prädikat zugeordnet ist, und zwar zwischen dem Zentralknoten und einem weiteren Knoten, welcher ein aktualisiertes Attribut von einem der zwei oder mehr Knoten enthält. Alternativ hierzu kann das Computersystem, wenn die Kardinalität des Attribut-Prädikats gleich eins ist, das Attribut mit dem aktualisierten Attribut des einen der zwei oder mehr Knoten ersetzen.
  • In einer beispielhaften Ausführungsform ist das Verfahren 1200 unter Verwendung von einer oder mehreren Anwendungen und einem Speichersystem (oder Maschine) in dem Computersystem implementiert, welche miteinander interagieren. Dies ist in 13 gezeigt. Während des Verfahrens kann das Speichersystem 124 eine zusammengesetzte Beziehung 1310 in der Graph-Datenbank 416 basierend auf den zwei oder mehr Prädikaten definieren.
  • Dann kann die in dem Computersystem 412 ausgeführte Anwendung 410 eine Abfrage 1312 an das Speicher-Subsystem 124 bereitstellen. Alternativ hierzu kann das Speicher-Subsystem 124 die Abfrage 1312 erzeugen (beispielsweise basierend auf von der Anwendung 410 verlangter gewünschter Information), oder es kann eine von der Anwendung 410 erhaltende anfängliche Abfrage (welche in einer anderen Sprache vorliegen kann, welche mit der Graph-Datenbank 416 nicht kompatibel ist) in die Abfrage 1312 (welches eine Kanten-Abfrage ist, die mit der Graph-Datenbank 416 kompatibel ist) übersetzen.
  • Dann kann das Speicher-Subsystem 124 die Abfrage 1312 gegenüber der Graph-Datenbank 416 ausführen, um ein Ergebnis 418 (welches eine Teilmenge eines in der Graph-Datenbank 416 gespeicherten Graphen enthalten kann) zu erhalten. Ferner kann das Speicher-Subsystem 124 ein Ergebnis 420 (welches das gleiche sein kann wie das Ergebnis 418 oder ein Teil des Ergebnisses 418) der Anwendung 410 bereitstellen.
  • In einer beispielhaften Ausführungsform wird die Technik zum Speichern von Graphen dazu verwendet, eine zusammengesetzte Beziehung durch Schreiben auf eine Graph-Datenbank zu erzeugen. Diese zusammengesetzte Beziehung kann eine Beziehung repräsentieren, welche mehr als eine Kante, wie etwa eine Mitglied-zu-Mitglied-Verbindung, enthält. Es kann beispielsweise eine Kante für ein linkes Mitglied, einen anonymen oder verborgenen Bezeichner eines Zentralknotens (welcher den Unter-Graphen zusammenhält) und eine Kante eines rechten Mitglieds geben. Somit kann eine zusammengesetzte Beziehung eine Gruppe von Beziehungen (im Gegensatz zu einer Beziehung) spezifizieren. Eine zusammengesetzte Beziehung kann, anders ausgedrückt, eine Beziehung oder mehrere Beziehungen spezifizieren.
  • 14 zeigt eine Zeichnung eines Graphen, welcher einen Zentralknoten 1410 umfasst, welcher eine zusammengesetzte Beziehung 1400 repräsentiert. Der Zentralknoten 1410, kann die Kanten spezifizieren, welche die zusammengesetzte Beziehung 1400 eindeutig definieren.
  • Wie in 14 gezeigt, kann die zusammengesetzte Beziehung 1400 eine Firma-Mitglied-Beziehung basierend auf vordefinierten Prädikaten (einem Schema) spezifizieren, welche Kanten von einem Subjekt zu einem Objekt spezifiziert. Die vordefinierten Prädikate können beispielsweise umfassen: Prädikat Firma 1412, Prädikat beschäftigt 1414, Prädikat Startdatum 1416 und optional Prädikat Enddatum 1422. Zudem kann die zusammengesetzte Beziehung 1400 Attribute oder Charakteristiken umfassen, wie etwa Attribut Ort 1418 und Attribut Position 1420. Insbesondere können in diesem Beispiel ”Ort” und ”Position” nicht Teil der zusammengesetzten Beziehung sein, da sie der Relation keine Identität geben. Attribute oder Charakteristiken können sich im Allgemeinen ändern. Wie nachfolgend beschrieben, kann somit in Abhängigkeit von der Kardinalität das Prädikat Position 1420 ersetzt werden oder die zusammengesetzte Beziehung 1400 kann geändert werden mit einer Kante von dem Zentralknoten 1410 zur dem optionalen Attribut Position 1424. Anstatt den Graphen zu duplizieren, wenn sich die Position des Angestellten ändert, kann die zusammengesetzte Beziehung 1400 geändert werden.
  • Anstatt einen globalen Bezeichner für den Zentralknoten 1410 zu definieren (was möglicherweise nicht gut skaliert und mehrere Lese-Abfragen vor dem Schreiben auf den Graphen nötig machen kann), kann ein temporärer Bezeichner erzeugt werden, wenn eine Schreib-Operation die mehreren Prädikate spezifiziert, welche dem Zentralknoten 1410 zugeordnet sind. Beispielsweise kann, wie in Tabelle 5 gezeigt, eine zusammengesetzte Beziehung durch einen Satz von Befehlen definiert werden. Wenn der Benutzer eine zusammengesetzte Beziehung in einem Schema spezifiziert, können alternativ die Schemainformation und eingehende Schreibbefehle dazu verwendet werden, einen zusammengesetzten Bezeichner für den Knoten h zu erzeugen. Dies ist Tabelle 6 gezeigt, und das Computersystem kann diese Schreibbefehle verwenden, um einen zusammengesetzten Bezeichner zu erzeugen als {Firma: Firma A, Startdatum: 0/2/11/09, Angestellte: Karen}, das heißt basierend auf drei Prädikaten.
  • Figure DE202016005239U1_0007
    Tabelle 5
  • Figure DE202016005239U1_0008
    Tabelle 6
  • Da der zusammengesetzte Knoten h verborgen ist (und durch den zusammengesetzten Bezeichner identifiziert wird), kann es keine Änderung dahingehend geben, wie ein Benutzer Information aus der Graph-Datenbank abfragt (das heißt, die Abfrage kann die ersten drei in Tabelle 6 gezeigten Kanten enthalten). Die zusammengesetzte Beziehung kann somit einen bequemen Weg bereitstellen, um Beziehungen in der Graph-Datenbank zu repräsentieren, ohne dass der Benutzer wissen muss, dass die zusammengesetzte Beziehung und/oder der Bezeichner des Zentralknotens existieren.
  • In einigen Ausführungsformen gibt es zusätzlich zu dem Definieren einer zusammengesetzten Beziehung unter Verwendung mehrerer Prädikate Metadaten. Diese Metadaten können Subjekt-Metadaten (wie etwa einen Typ eines Knotens und eine Kardinalität) und/oder Objekt-Metadaten (wie etwa einen Typ eines Knotens und eine Kardinalität) umfassen. Beispielsweise kann eine Person in einer zusammengesetzten Beziehung nur durch eine Firma beschäftigt werden, so dass die Kardinalität der Firma eins sein kann. Jedoch können mehrere Personen an dem gleichen Startdatum mit der Arbeit beginnen, so dass die Kardinalität des Start-Datums unbestimmt sein kann.
  • In einigen Ausführungsformen umfasst die Graph-Datenbank verschiedene Typen von zusammengesetzten Beziehungen. Eine zusammengesetzte Beziehung für Kanten kann änderbar sein, so dass zu der zusammengesetzten Beziehung für Kanten Kanten hinzugefügt oder entfernt werden können und, im Allgemeinen, die zusammengesetzte Beziehung für Kanten gelöscht werden kann (eine Kante, welche einen Bezeichner angibt, kann jedoch nicht hinzugefügt oder entfernt werden). Eine wörtliche zusammengesetzte Beziehung kann nicht-änderbar sein. Der Inhalt der wörtlichen zusammengesetzten Beziehung kann nicht geändert werden, und die wörtliche zusammengesetzte Beziehung kann nur gelöscht werden, wenn keine andere Einheit, die durch die wörtliche zusammengesetzte Beziehung spezifizierte Beziehung absorbiert. Beispielsweise kann der Ort (Breitengrad und Längengrad) des Gebäudes, in welchem eine Firma ansässig ist, in einer wörtliche n zusammengesetzten Beziehung enthalten sein. Diese wörtliche zusammengesetzte Beziehung kann nur gelöscht werden, wenn eine weitere Firma in dem Gebäude ansässig ist.
  • In einigen Ausführungsformen der Verfahren 300 (3 und 4), 500 (5), 700 (7), 900 (9 und 10) und 1200 (12 und 13) kann es zusätzliche oder weniger Operationen geben. Zudem kann die Reihenfolge der Operationen geändert werden, und/oder zwei oder mehr Operationen können in eine einzige Operation zusammengefasst werden.
  • Es werden nun Ausführungsformen eines Computersystems zum Durchführen der Technik zum Speichern von Graphen und dessen Verwendung beschrieben. 15 zeigt ein Blockdiagramm, welches ein Computersystem 1500 erläutert, welches die Verfahren 300 (3 und 4), 500 (5), 700 (7), 900 (9 und 10) und 1200 (12 und 13) ausführt, wie etwa das System 100 in 1. Das Computersystem 1500 umfasst eine oder mehrere Prozessierungseinheiten oder Prozessoren 1510 (welche gelegentlich auch als ”Prozessierungsmodule” bezeichnet werden), eine Kommunikationsschnittstelle 1512, eine Benutzerschnittstelle 1514, Speicher 1524 und eine oder mehrere Signalleitungen 1522, welche diese Komponenten miteinander koppeln. Insbesondere kann der eine oder die mehreren Prozessoren 1510 paralleles Prozessieren und/oder Multithread-Betrieb unterstützen, die Kommunikationsschnittstelle 1512 kann eine persistente Kommunikationsverbindung aufweisen, und die ein oder mehreren Signalleitungen 1522 können einen Kommunikationsbus bilden. Ferner kann die Benutzerschnittstelle 1514 umfassen: Eine Anzeige 1516 (wie etwa einen Touchscreen), eine Tastatur 1518 und/oder einen Zeiger 1520 (wie etwa eine Maus).
  • Der Speicher 1524 in dem Computersystem 1500 kann flüchtigen Speicher und/oder nicht flüchtigen Speicher umfassen. Insbesondere kann der Speicher 1524 umfassen: ROM, RAM, EPROM, EEPROM, Flash memory, eine oder mehrere Smart-Karten, eine oder mehrere Magnetplatten-Speichervorrichtungen und/oder eine oder mehrere optische Speichervorrichtungen. Der Speicher 1524 kann ein Betriebssystem 1526 speichern, welches Prozeduren (oder einen Satz von Instruktionen) zum Behandeln verschiedener grundlegender Systemdienste zum Ausführen Hardware-abhängiger Aufgaben umfasst. Der Speicher 1524 kann auch Prozeduren (oder Sätze von Instruktionen) in einem Kommunikationsmodul 1528 speichern. Diese Kommunikationsprozeduren können zum Kommunizieren mit einem oder mehreren Computern und/oder Servern verwendet werden, einschließlich Computern und/oder Servern, welche in Bezug auf das Computersystem 1500 entfernt angeordnet sind.
  • Der Speicher 1524 kann auch mehrere Programmmodule umfassen, einschließlich: Ein soziales-Netzwerk-Modul 1530, ein Administrator-Modul 1532, ein Aktivitätsmodul 1534 ein Speichermodul 1586 und/oder ein Verschlüsselungsmodul 1538. Insbesondere können ein oder mehrere dieser Programmmodule (oder Sätze von Instruktionen) einen Computerprogrammmechanismus, das heißt eine Software, bilden.
  • Während des Betriebs des Computersystems 1500 können Benutzer eines sozialen Netzwerks, welches durch das soziale-Netzwerk-Modul 1530 ermöglicht wird, Konten unter Verwendung des Administrator-Moduls 1532 erstellen und verwalten. Das soziale-Netzwerk-Modul 1530 kann Interaktionen zwischen den Benutzern über das Kommunikationsmodul 1528 und die Kommunikationsschnittstelle 1512 ermöglichen. Diese Interaktionen können durch das Aktivitätsmodul 1534 verfolgt (”getrackt”) werden, wie beispielsweise das Betrachtungsverhalten des Benutzers beim Betrachten von Dokumenten (und allgemeiner von Inhalten), welche in dem sozialen Netzwerk bereitgestellt werden, welches unter Verwendung des sozialen-Netzwerk-Moduls 1530 implementiert ist.
  • Das Speichermodul 1536 kann Daten, welche dem sozialen Netzwerk zugeordnet sind, in einer Graph-Datenbank 1540 speichern, welche einen Graphen 1542 mit Knoten 1544, Kanten 1546 und Prädikaten 1548 speichert. Wenn das Speichermodul 1536 von einer Anwendung 1552 eine Abfrage 1554 erhält, kann das Speichermodul 1536 eine Abfrage 1554 gegenüber der Graph-Datenbank 1540 ausführen, um Ergebnisse 1556 zu erhalten, welche eine Teilmenge des Graphen 1042 enthalten können. Ferner kann das Speichermodul 1536 eine nachfolgende Abfrage 1558 gegenüber den Ergebnissen 1556 ausführen anstatt gegenüber dem Graphen 1542. Das Speichermodul kann insbesondere die Ergebnisse 1556 verifizieren, indem es wenigstens einen Teil der Ergebnisse 1556 mit einem erwarteten oder vorbestimmten (oder vordefinierten) Ergebnis 1560 vergleicht, wie etwa die Gegenwart von einer oder mehreren Kanten 1546 basierend auf einem oder mehreren Prädikaten 1548 in der Abfrage 1554.
  • In einigen Ausführungsformen übersetzt das Speichermodul 1536 eine anfängliche Abfrage 1562, welche von einer Anwendung 1552 erhalten wird, in die Abfrage 1554, und zwar unter Verwendung von einer oder mehreren Regeln oder einem oder mehreren zusammengesetzten Schlüsselworten, bevor die Abfrage 1554 gegenüber der Graph-Datenbank 1540 ausgeführt wird. Die anfängliche Abfrage 1562 kann beispielsweise einer anderen Art von Datenbank als der Graph-Datenbank 1540 zugeordnet sein, und die Abfrage 1554 kann eine Kantenabfrage sei.
  • Zudem kann das Speichermodul 1536 eine zusammengesetzte Beziehung 1564 in der Graph-Datenbank 1540 repräsentieren, indem ein Bezeichner eines Zentralknotens 1550 unter Verwendung von zwei oder mehr Kanten 1546 definiert wird.
  • Da die Information in dem Computersystem 1500 vertraulicher Natur sein kann, werden in einigen Ausführungsformen wenigstens einige der in dem Speicher 1524 gespeicherten Daten und/oder einige der unter Verwendung des Kommunikationsmoduls 1528 kommunizierten Daten unter Verwendung des Verschlüsselungsmoduls 1538 verschlüsselt.
  • Die Instruktionen in den verschiedenen Modulen in dem Speicher 1524 können in einer prozeduralen Hochsprache, einer objektorientierten Programmiersprache und/oder in einer Assembler- oder Maschinensprache implementiert sein. Die Programmiersprache kann insbesondere kompiliert oder interpretiert sein, das heißt konfigurierbar oder dazu konfiguriert, um durch die einen oder mehreren Prozessoren ausgeführt zu werden.
  • Obwohl das dargestellte Computersystem 1500 eine Anzahl diskreter Elemente aufweist, soll 15 eine funktionale Beschreibung der verschiedenen Merkmale sein, welche in dem Computersystem 1500 vorhanden sind und nicht ein strukturelles Schema der hier beschriebenen Ausführungsformen. In der Praxis können die Funktionen des Computersystems 1500, wie der Fachmann erkennt, über eine große Anzahl von Servern oder Computern verteilt sein, wobei verschiedene Gruppen der Server bzw. Computer bestimmte Teilmengen der Funktion ausführen. In einigen Ausführungsformen sind einige oder alle der Funktionalitäten des Computersystems 1500 in einer oder mehreren applikationsspezifischen integrierten Schaltungen (ASICs) und/oder einem oder mehreren digitalen Signalprozessoren (DSPs) implementiert.
  • Computersysteme (wie etwa das Computersystem 1500) sowie elektronische Vorrichtungen, Computer und Server in dem System 100 (1) können eine Vielzahl von verschiedenen Vorrichtungen umfassen, welche in der Lage sind, computerlesbare Daten zu manipulieren oder Daten zwischen zwei oder mehr Computersystemen über ein Netzwerk zu kommunizieren, einschließlich: Ein Personal-Computer, ein Laptop-Computer, ein Tablet-Computer, ein Mainframe-Computer, eine portable elektronische Vorrichtung (wie etwa ein Mobiltelefon oder PDA), ein Server-Computer und/oder ein Client-Computer (in einer Client-Server-Architektur). Ferner kann das Netzwerk 112 (1) umfassen: Das Internet, das World Wide Web (WWW), ein Intranetz, ein zellulares Telefonnetzwerk, ein LAN, ein WAN, ein MAN oder eine Kombination von Netzwerken oder anderen Technologien, welche die Kommunikation zwischen Computersystemen ermöglichen.
  • Das System 100 (1) und/oder das Computersystem 1500 können weniger Komponenten oder zusätzliche Komponenten umfassen. Ferner können zwei oder mehr Komponenten in eine einzige Komponente kombiniert werden, und/oder eine Position von ein oder mehreren Komponenten kann geändert werden. In einigen Ausführungsformen kann die Funktionalität des Systems 100 (1) und/oder des Computersystems 1500 in mehr Hardware und weniger Software oder in weniger Hardware und mehr Software implementiert sein, wie dies herkömmlicherweise bekannt ist.
  • Während ein soziales Netzwerk in den vorangegangenen Ausführungsformen zur Erläuterung verwendet wurde, kann die Technik zum Speichern von Graphen allgemeiner verwendet werden, um Daten, welche einer Vielzahl von verschiedenen Anwendungen, Diensten oder Systemen zugeordnet sind, zu speichern und wiederzugewinnen oder abzufragen. Die Technik zum Speichern von Graphen kann ferner in Anwendungen verwendet werden, in denen die Kommunikation oder die Interaktionen zwischen verschiedenen Einheiten (wie etwa Personen, Organisationen usw.) durch einen sozialen Graphen beschrieben werden können. Die Personen können insbesondere einer Webseite locker zugehörig sein (wie etwa die Betrachter oder Verwender der Webseite), und sie können somit Personen umfassen, die nicht formell zugeordnet sind (im Gegensatz zu Benutzern eines sozialen Netzwerks, welche Benutzerkonten haben). Deshalb können die Verbindungen in dem sozialen Graphen weniger stringent definiert sein als durch die explizite Annahme von Anfragen durch Individuen danach, miteinander in Verbindung zu treten, wie etwa Personen, welche unter Verwendung eines Kommunikationsprotokolls zuvor miteinander kommuniziert haben (oder nicht) oder Personen, welche zuvor gegenseitig ihre Homepages betrachtet haben (oder nicht) usw. Auf diese Weise kann die Technik zum Speichern von Graphen dazu verwendet werden, die Qualität der Interaktionen und der Mehrwertdienste zwischen relevanten oder potentiell interessierten Personen in einer etwas loser definierten Gruppe von Personen zu erweitern.
  • In der vorangehenden Beschreibung wird auf ”einige Ausführungsformen” Bezug genommen. ”Einige Ausführungsformen” beschreibt insbesondere eine Teilmenge von allen möglichen Ausführungsformen, bezeichnet allerdings nicht immer die gleiche Teilmenge von Ausführungsformen.
  • Die vorangehende Beschreibung soll es einem Fachmann ermöglichen, die Offenbarung auszuführen und zu verwenden, und sie ist in dem Kontext einer bestimmten Anwendung und deren Erfordernissen angegeben. Ferner wurden die vorhergehenden Beschreibungen von Ausführungsformen der vorliegenden Offenbarung lediglich zum Zwecke der Erläuterung und der Beschreibung angegeben. Sie sollen nicht erschöpfend sein oder die vorliegende Offenbarung auf die beschriebenen Formen beschränken. Entsprechend werden sich dem Fachmann viele Modifikationen und Variationen erschließen, und die hier definierten allgemeinen Prinzipien können auf andere Ausführungsformen und Anwendungen angewendet werden, ohne von dem Gedanken und dem Schutzbereich der vorliegenden Erfindung abzuweichen. Ferner soll die Diskussion der vorangehenden Ausführungsformen die vorliegende Offenbarung nicht beschränken. Deshalb soll die vorliegende Offenbarung nicht auf die gezeigten Ausführungsformen beschränkt sein und es soll ihr vielmehr die breiteste Bedeutung zukommen, welche mit den hier beschriebenen Prinzipien und Merkmalen konsistent ist.
  • In den nachfolgenden nummerierten Klauseln werden verschiedene Ausführungsformen offenbart. Diese Klauseln werden in vier Gruppen (A, B, C und D) dargestellt, wobei der Fachmann jedoch erkennen wird, dass Merkmale von verschiedenen Gruppen von Ausführungsformen je nach den Bedürfnissen und Umständen einer gegebenen Implementierung auf geeignete Weise kombiniert werden können.
    • A1. Ein in einem Computersystem implementiertes Verfahren zum Abfragen gewünschter Informationen von einer Graph-Datenbank, wobei das Verfahren umfasst: Ausführen einer ersten Abfrage gegenüber der Graph-Datenbank, welche einen Graphen speichert, wobei der Graph Knoten, Kanten zwischen den Knoten und Prädikate umfasst, um Daten mit index-freier Nachbarschaft zu repräsentieren und zu speichern; und wobei die erste Abfrage eine erste Kante identifiziert, welcher ein erstes Prädikat zugeordnet ist, welches einen oder mehrere Knoten in dem Graphen angibt; Empfangen eines ersten Ergebnisses in Antwort auf die erste Abfrage, wobei das erste Ergebnis eine erste Teilmenge des Graphen umfasst; Ausführen einer zweiten Abfrage gegenüber der ersten Teilmenge des Graphen, wobei die zweite Abfrage eine zweite Kante identifiziert, welcher ein zweites Prädikat zugeordnet ist, welches einen oder mehrere der Knoten angibt; und Empfangen eines zweiten Ergebnisses in Antwort auf die zweite Abfrage, wobei das zweite Ergebnis eine zweite Teilmenge des Graphen umfasst.
    • A2. Das Verfahren nach Klausel A1, wobei das Verfahren ferner ein Ausführen von ein oder mehreren zusätzlichen Abfragen gegenüber der ersten Teilmenge des Graphen umfasst.
    • A3. Das Verfahren nach Klausel A1 oder A2, wobei das Verfahren ferner ein Ausführen von einer dritten Abfrage gegenüber der zweiten Teilmenge des Graphen umfasst.
    • A4. Das Verfahren nach einer der vorangehenden Klauseln, wobei das Ausführen der zweiten Abfrage gegenüber der ersten Teilmenge des Graphen es unnötig macht, die zweite Abfrage gegenüber der Graph-Datenbank auszuführen.
    • A5. Das Verfahren nach einer der vorangehenden Klauseln, wobei das Verfahren ferner ein Erzeugen der ersten Abfrage basierend auf der gewünschten Information umfasst.
    • A6. Das Verfahren nach einer der vorangehenden Klauseln, wobei das Verfahren ferner umfasst: Empfangen einer weiteren Abfrage, welche mit einer Art von Datenbank kompatibel ist, welche von der Graph-Datenbank verschieden ist; und Umwandeln der weiteren Abfrage in die Abfrage.
    • A7. Das Verfahren nach einer der vorangehenden Klauseln, wobei die Art von Datenbank eine relationale Datenbank oder eine hierarchische Datenbank umfasst.
    • A8. Das Verfahren nach einer der vorangehenden Klauseln, wobei das Verfahren ferner umfasst: Empfangen einer weiteren Abfrage, welche mit der JavaScript Object Notation kompatibel ist; und Umwandeln der weiteren Abfrage in die Abfrage.
    • A9. Das Verfahren nach einer der vorangehenden Klauseln, wobei die erste Teilmenge des Graphen die gewünschte Information enthält, und zwar ausgedrückt in einer zugeordneten Struktur des Graphen.
    • A10. Eine Vorrichtung, umfassend: einen oder mehrere Prozessoren; Speicher; und ein Programmmodul, wobei das Programmmodul in dem Speicher gespeichert ist und, während des Betriebs der Vorrichtung, durch die ein oder mehreren Prozessoren ausgeführt wird, um von einer Graph-Datenbank gewünschte Information anzufordern, wobei das Programmmodul umfasst: Instruktionen zum Ausführen einer ersten Abfrage gegenüber der Graph-Datenbank, welche einen Graphen speichert, wobei der Graph Knoten, Kanten zwischen den Knoten und Prädikate umfasst, um Daten mit index-freier Nachbarschaft zu repräsentieren und zu speichern; und wobei die erste Abfrage eine erste Kante identifiziert, welcher ein erstes Prädikat zugeordnet ist, welches einen oder mehrere Knoten in dem Graphen angibt; Instruktionen zum Empfangen eines ersten Ergebnisses in Antwort auf die erste Abfrage, wobei das erste Ergebnis eine erste Teilmenge des Graphen umfasst; Instruktionen zum Ausführen einer zweiten Abfrage gegenüber der ersten Teilmenge des Graphen, wobei die zweite Abfrage eine zweite Kante identifiziert, welcher ein zweites Prädikat zugeordnet ist, welches einen oder mehrere der Knoten angibt; und Instruktionen zum Empfangen eines zweiten Ergebnisses in Antwort auf die zweite Abfrage, wobei das zweite Ergebnis eine zweite Teilmenge des Graphen umfasst.
    • A11. Die Vorrichtung nach Klausel A10, wobei das Programmmodul ferner Instruktionen zum Ausführen von ein oder mehreren zusätzlichen Abfragen gegenüber der ersten Teilmenge des Graphen umfasst.
    • A12. Die Vorrichtung nach Klausel A10 oder A11, wobei das Programmmodul ferner Instruktionen zum Ausführen von einer dritten Abfrage gegenüber der zweiten Teilmenge des Graphen umfasst.
    • A13. Die Vorrichtung nach einer der Klauseln A10 bis A12, wobei das Ausführen der zweiten Abfrage gegenüber der ersten Teilmenge des Graphen es unnötig macht, die zweite Abfrage gegenüber der Graph-Datenbank auszuführen.
    • A14. Die Vorrichtung nach einer der Klauseln A10 bis A13, wobei das Programmmodul ferner Instruktionen zum Erzeugen der ersten Abfrage basierend auf der gewünschten Information umfasst.
    • A15. Die Vorrichtung nach einer der Klauseln A10 bis A14, wobei das Programmmodul ferner Instruktionen umfasst, um: eine weitere Abfrage zu empfangen, welche mit einer Art von Datenbank kompatibel ist, welche von der Graph-Datenbank verschieden ist; und die weitere Abfrage in die Abfrage umzuwandeln.
    • A16. Die Vorrichtung nach Klausel A15, wobei die Art von Datenbank eine relationale Datenbank oder eine hierarchische Datenbank umfasst.
    • A17. Die Vorrichtung nach einer der Klauseln A10 bis A16, wobei das Programmmodul ferner Instruktionen umfasst, um: eine weitere Abfrage zu empfangen, welche mit der JavaScript Object Notation kompatibel ist; und die weitere Abfrage in die Abfrage zu konvertieren.
    • A18. Die Vorrichtung nach einer der Klauseln A10 bis A17, wobei die erste Teilmenge des Graphen die gewünschte Information enthält, und zwar ausgedrückt in einer zugeordneten Struktur des Graphen.
    • A19. Ein System, umfassend: ein Verarbeitungsmodul, welches ein nicht-transitorisches computerlesbares Medium umfasst, welches Instruktionen speichert, welche, wenn sie ausgeführt werden, das System veranlassen, eine erste Abfrage gegenüber einer Graph-Datenbank auszuführen, welche einen Graphen speichert, wobei der Graph Knoten, Kanten zwischen den Knoten und Prädikate umfasst, um Daten mit index-freier Nachbarschaft zu repräsentieren und zu speichern; und wobei die erste Abfrage eine erste Kante identifiziert, welcher ein erstes Prädikat zugeordnet ist, welches einen oder mehrere Knoten in dem Graphen angibt; in Antwort auf die erste Abfrage ein erstes Ergebnis zu empfangen, wobei das erste Ergebnis eine erste Teilmenge des Graphen umfasst; eine zweite Abfrage gegenüber der ersten Teilmenge des Graphen auszuführen, wobei die zweite Abfrage eine zweite Kante identifiziert, welcher ein zweites Prädikat zugeordnet ist, welches einen oder mehrere der Knoten angibt; und in Antwort auf die zweite Abfrage ein zweites Ergebnis zu empfangen, wobei das zweite Ergebnis eine zweite Teilmenge des Graphen umfasst.
    • A20. Das System nach Klausel A19, wobei das nicht-transitorische computerlesbare Medium ferner Instruktionen speichert, welche, wenn sie ausgeführt werden, das System veranlassen, ein oder mehrere zusätzliche Abfragen gegenüber der ersten Teilmenge des Graphen auszuführen.
    • B1. Ein in einem Computersystem implementiertes Verfahren zum Abfragen gewünschter Informationen von einer Graph-Datenbank, wobei das Verfahren umfasst: Ausführen einer Abfrage gegenüber der Graph-Datenbank, welche einen Graphen speichert, wobei der Graph Knoten, Kanten zwischen den Knoten und Prädikate umfasst, um Daten mit index-freier Nachbarschaft zu repräsentieren und zu speichern; und wobei die Abfrage eine Kante identifiziert, welcher ein Prädikat zugeordnet ist, welches einen oder mehrere Knoten in dem Graphen angibt; Empfangen eines Ergebnisses in Antwort auf die Abfrage, wobei das Ergebnis eine Teilmenge des Graphen umfasst; und Verifizieren der Teilmenge des Graphen.
    • B2. Das Verfahren nach Klausel B1, wobei die Teilmenge des Graphen verifiziert wird, wenn die Teilmenge des Graphen mit einem entsprechenden Teil des Graphen übereinstimmt.
    • B3. Das Verfahren nach Klausel B1 oder B2, wobei das Verifizieren der Teilmenge des Graphen ein Vergleichen der Teilmenge des Graphen mit einer vorbestimmten Teilmenge des Graphen umfasst.
    • B4. Das Verfahren nach einer der Klauseln B1 bis B3, wobei die Teilmenge des Graphen verifiziert wird, wenn die Teilmenge des Graphen eine erwartete Teilmenge der Kanten umfasst.
    • B5. Das Verfahren nach einer der Klauseln B1 bis B4, wobei das Verifizieren umfasst: Ausführen einer weiteren Abfrage gegenüber der Datenbank; Empfangen eines weiteren Ergebnisses in Antwort auf die Abfrage, wobei das weitere Ergebnis eine weitere Teilmenge des Graphen umfasst; und Vergleichen der weiteren Teilmenge des Graphen mit der Teilmenge des Graphen.
    • B6. Das Verfahren nach Klausel B5, wobei die Teilmenge des Graphen verifiziert wird, wenn es eine Übereinstimmung zwischen einem überlappenden Bereich der Teilmenge des Graphen und der weiteren Teilmenge des Graphen gibt.
    • B7. Das Verfahren nach einer der Klauseln B1 bis B6, wobei das Verifizieren umfasst: Ausführen einer weiteren Abfrage gegenüber der Datenbank; Empfangen eines weiteren Ergebnises in Antwort auf die Abfrage, wobei das Ergebnis Information umfasst, welche der Teilmenge der Kanten des Graphen entspricht; und Vergleichen der Information mit der Teilmenge der Kanten.
    • B8. Das Verfahren nach einer der Klauseln B1 bis B7, wobei das Verfahren ferner umfasst: Erzeugen der Abfrage basierend auf der gewünschten Information.
    • B9. Das Verfahren nach einer der Klauseln B1 bis B8, wobei das Verfahren ferner umfasst: Empfangen einer weiteren Abfrage, welche mit einer Art von Datenbank kompatibel ist, welche von der Graph-Datenbank verschieden ist; und Umwandeln der weiteren Abfrage in die Abfrage.
    • B10. Das Verfahren nach einer der Klauseln B1 bis B9, wobei das Verfahren ferner umfasst: empfangen einer weiteren Abfrage, welche mit der JavaScript Object Notation kompatibel ist; und Umwandeln der weiteren Abfrage in die Abfrage.
    • B11. Eine Vorrichtung, umfassend: einen oder mehrere Prozessoren; Speicher; und ein Programmmodul, wobei das Programmmodul in dem Speicher gespeichert ist und, während des Betriebs der Vorrichtung, durch die ein oder mehreren Prozessoren ausgeführt wird, um von einer Graph-Datenbank gewünschte Information anzufordern, wobei das Programmmodul umfasst: Instruktionen zum Ausführen einer Abfrage gegenüber der Graph-Datenbank, welche einen Graphen speichert, wobei der Graph Knoten, Kanten zwischen den Knoten und Prädikate umfasst, um Daten mit index-freier Nachbarschaft zu repräsentieren und zu speichern; und wobei die Abfrage eine Kante identifiziert, welcher ein Prädikat zugeordnet ist, welches einen oder mehrere Knoten in dem Graphen angibt; Instruktionen zum Empfangen eines Ergebnisses in Antwort auf die Abfrage, wobei das Ergebnis eine Teilmenge des Graphen umfasst; und Instruktionen zum Verifizieren der Teilmenge des Graphen.
    • B12. Die Vorrichtung nach Klausel B11, wobei die Teilmenge des Graphen verifiziert wird, wenn die Teilmenge des Graphen mit einem entsprechenden Teil des Graphen übereinstimmt.
    • B13. Die Vorrichtung nach einer der Klauseln B11 bis B12, wobei die Instruktionen zum Verifizieren Instruktionen zum Vergleichen der Teilmenge des Graphen mit einer vorbestimmten Teilmenge des Graphen umfassen.
    • B14. Die Vorrichtung nach einer der Klauseln B11 bis B13, wobei die Teilmenge des Graphen verifiziert wird, wenn die Teilmenge des Graphen eine erwartete Teilmenge der Kanten umfasst.
    • B15. Die Vorrichtung nach einer der Klauseln B11 bis B14, wobei die Instruktionen zum Verifizieren Instruktionen umfassen, um eine weitere Abfrage gegenüber der Datenbank auszuführen; in Antwort auf die Abfrage ein weiteres Ergebnis zu empfangen, wobei das weitere Ergebnis eine weitere Teilmenge des Graphen umfasst; und die weitere Teilmenge des Graphen mit der Teilmenge des Graphen zu vergleichen.
    • B16. Die Vorrichtung nach Klausel B15, wobei die Teilmenge des Graphen verifiziert wird, wenn es eine Übereinstimmung zwischen einem überlappenden Bereich der Teilmenge des Graphen und der weiteren Teilmenge des Graphen gibt.
    • B17. Die Vorrichtung nach einer der Klauseln B11 bis B16, wobei die Instruktionen zum Verifizieren Instruktionen umfassen, um eine weitere Abfrage gegenüber der Datenbank auszuführen; in Antwort auf die Abfrage ein weiteres Ergebnis zu empfangen, wobei das weitere Ergebnis Information umfasst, welche der Teilmenge der Kanten des Graphen entspricht; und die Information mit der Teilmenge der Kanten zu vergleichen.
    • B18. Die Vorrichtung nach einer der Klauseln B11 bis B17, wobei das Programmmodul ferner Instruktionen umfasst, um die Abfrage basierend auf der gewünschten Information zu erzeugen.
    • B19. Die Vorrichtung nach einer der Klauseln B11 bis B18, wobei das Programmmodul ferner Instruktionen umfasst, um eine weitere Abfrage zu empfangen, welche mit einer Art von Datenbank kompatibel ist, welche von der Graph-Datenbank verschieden ist; und die weitere Abfrage in die Abfrage umzuwandeln.
    • B20. Ein System, umfassend: ein Verarbeitungsmodul, welches ein nicht-transitorisches computerlesbares Medium umfasst, welches Instruktionen speichert, welche, wenn sie ausgeführt werden, das System veranlassen, eine Abfrage gegenüber einer Graph-Datenbank auszuführen, welche einen Graphen speichert, wobei der Graph Knoten, Kanten zwischen den Knoten und Prädikate umfasst, um Daten mit index-freier Nachbarschaft zu repräsentieren und zu speichern; und wobei die Abfrage eine Kante identifiziert, welcher ein Prädikat zugeordnet ist, welches einen oder mehrere Knoten in dem Graphen angibt; und in Antwort auf die Abfrage ein Ergebnis zu empfangen, wobei das Ergebnis eine Teilmenge des Graphen umfasst; und die Teilmenge des Graphen zu verifizieren.
    • C1. Ein in einem Computersystem implementiertes Verfahren zum Übersetzen einer ersten Abfrage in eine Kantenabfrage, wobei das Verfahren umfasst: Empfangen der ersten Abfrage, welche einer ersten Art von Datenbank zugeordnet ist; Übersetzen der erste Abfrage in die Kanten-Abfrage, welche einer Graph-Datenbank zugeordnet ist, welche einen Graphen speichert, unter Verwendung von Primitivausdrücken; wobei die erste Art von Datenbank ein Datenmodell aufweist, welches von dem der Graph-Datenbank verschieden ist; wobei der Graph Knoten, Kanten zwischen den Knoten und Prädikate umfasst, um Daten mit index-freier Nachbarschaft zu repräsentieren und zu speichern; und wobei die Primitivausdrücke umfassen: eine auf Kanten in dem Graphen basierende Regel, welche ein relationales Schema in der ersten Art von Datenbank ausdrückt, und Information, welche einem zusammengesetzten Schlüsselwort zugeordnet ist, welches ein Verhältnis zwischen den Knoten spezifiziert, wobei die Kanten und die Prädikate in dem Graphen einer Tabelle in der ersten Art von Datenbank entsprechen; Ausführen der Kanten-Abfrage gegenüber der Graph-Datenbank, wobei die Kanten-Abfrage eine Kante identifiziert, welcher ein Prädikat zugeordnet ist, welches einen oder mehrere der Knoten in dem Graphen angibt; und Empfangen eines Ergebnisses in Antwort auf die Abfrage, wobei das Ergebnis eine Teilmenge des Graphen umfasst.
    • C2. Das Verfahren nach Klausel C1, wobei die erste Art von Datenbank eine relationale Datenbank oder eine hierarchische Datenbank umfasst.
    • C3. Das Verfahren nach Klausel C1, wobei die erste Art von Datenbank von einer relationalen Datenbank verschieden ist.
    • C4. Das Verfahren nach einer der Klauseln C1 bis C3, wobei die erste Abfrage mit einer strukturierten Abfragesprache SQL kompatibel ist.
    • C5. Das Verfahren nach einer der Klauseln C1 bis C4, wobei die Kanten-Abfrage mit Datalog kompatibel ist.
    • C6. Das Verfahren nach einer der Klauseln C1 bis C5, wobei die Kanten-Abfrage mit einer Abfragesprache kompatibel ist, welche deklarativ ist, so dass sie Berechnungslogik ausdrückt, ohne einen zugeordneten Kontrollfluss auszudrücken, und vollständig ist, so dass durch die Abfragesprache eine beliebige Berechnung ausgedrückt ist.
    • C7. Das Verfahren nach einer der Klauseln C1 bis C6, wobei das Verfahren ferner ein Bestimmen der Primitivausdrücke umfasst.
    • C8. Eine Vorrichtung, umfassend: einen oder mehrere Prozessoren; Speicher; und ein Programmmodul, wobei das Programmmodul in dem Speicher gespeichert ist und, während des Betriebs der Vorrichtung, durch die ein oder mehreren Prozessoren ausgeführt wird, um eine erste Abfragen in eine Kanten-Abfrage zu übersetzen, wobei das Programmmodul umfasst: Instruktionen zum Empfangen der ersten Abfrage, welche einer ersten Art von Datenbank zugeordnet ist; Instruktionen zum Übersetzen der erste Abfrage in die Kanten-Abfrage, welche einer Graph-Datenbank zugeordnet ist, welche einen Graphen speichert, unter Verwendung von Primitivausdrücken; wobei die erste Art von Datenbank ein Datenmodell aufweist, welches von dem der Graph-Datenbank verschieden ist; wobei der Graph Knoten, Kanten zwischen den Knoten und Prädikate umfasst, um Daten mit index-freier Nachbarschaft zu repräsentieren und zu speichern; und wobei die Primitivausdrücke umfassen: eine auf Kanten in dem Graphen basierende Regel, welche ein relationales Schema in der ersten Art von Datenbank ausdrückt, und Information, welche einem zusammengesetzten Schlüsselwort zugeordnet ist, welches ein Verhältnis zwischen den Knoten spezifiziert, wobei die Kanten und die Prädikate in dem Graphen einer Tabelle in der ersten Art von Datenbank entsprechen; Instruktionen zum Ausführen der Kanten-Abfrage gegenüber der Graph-Datenbank, wobei die Kanten-Abfrage eine Kante identifiziert, welcher ein Prädikat zugeordnet ist, welches einen oder mehrere der Knoten in dem Graphen angibt; und Instruktionen zum Empfangen eines Ergebnisses in Antwort auf die Abfrage, wobei das Ergebnis eine Teilmenge des Graphen umfasst.
    • C9. Die Vorrichtung nach Klausel C8, wobei die erste Art von Datenbank eine relationale Datenbank oder eine hierarchische Datenbank umfasst.
    • C10. Die Vorrichtung nach Klausel C8, wobei die erste Art von Datenbank von einer relationalen Datenbank verschieden ist.
    • C11. Die Vorrichtung nach einer der Klauseln C8 bis C10, wobei die erste Abfrage mit einer strukturierten Abfragesprache SQL kompatibel ist.
    • C12. Die Vorrichtung nach einer der Klauseln C8 bis C11, wobei die Kanten-Abfrage mit Datalog kompatibel ist.
    • C13. Die Vorrichtung nach einer der Klauseln C8 bis C12, wobei die Kanten-Abfrage mit einer Abfragesprache kompatibel ist, welche deklarativ ist, so dass sie Berechnungslogik ausdrückt, ohne einen zugeordneten Kontrollfluss auszudrücken, und vollständig ist, so dass durch die Abfragesprache eine beliebige Berechnung ausgedrückt ist.
    • C14. Die Vorrichtung nach einer der Klauseln C8 bis C13, wobei das Programmmodul ferner Instruktionen umfasst, um die Primitivausdrücke zu bestimmen.
    • C15. Ein System, umfassend: ein Verarbeitungsmodul, welches ein nicht-transitorisches computerlesbares Medium umfasst, welches Instruktionen speichert, welche, wenn sie ausgeführt werden, das System veranlassen, eine erste Abfrage zu empfangen, welche einer ersten Art von Datenbank zugeordnet ist; die erste Abfrage unter Verwendung von Primitivausdrücken in eine Kanten-Abfrage zu übersetzen, welche einer Graph-Datenbank zugeordnet ist, welche einen Graphen speichert; wobei die erste Art von Datenbank ein Datenmodell aufweist, welches von dem der Graph-Datenbank verschieden ist; wobei der Graph Knoten, Kanten zwischen den Knoten und Prädikate umfasst, um Daten mit index-freier Nachbarschaft zu repräsentieren und zu speichern; und wobei die Primitivausdrücke umfassen: eine auf Kanten in dem Graphen basierende Regel, welche ein relationales Schema in der ersten Art von Datenbank ausdrückt, und Information, welche einem zusammengesetzten Schlüsselwort zugeordnet ist, welches ein Verhältnis zwischen den Knoten spezifiziert, wobei die Kanten und die Prädikate in dem Graphen einer Tabelle in der ersten Art von Datenbank entsprechen; die Kanten-Abfrage gegenüber der Graph-Datenbank auszuführen, wobei die Kanten-Abfrage eine Kante identifiziert, welcher ein Prädikat zugeordnet ist, welches einen oder mehrere der Knoten in dem Graphen angibt; und in Antwort auf die Abfrage ein Ergebnis zu empfangen, wobei das Ergebnis eine Teilmenge des Graphen umfasst.
    • C16. Das System nach Klausel C15, wobei die erste Art von Datenbank eine relationale Datenbank oder eine hierarchische Datenbank umfasst.
    • C17. Das System nach Klausel C15, wobei die erste Art von Datenbank von einer relationalen Datenbank verschieden ist.
    • C18. Das System nach einer der Klauseln C15 bis C17, wobei die erste Abfrage mit einer strukturierten Abfragesprache SQL kompatibel ist.
    • C19. Das System nach einer der Klauseln C15 bis C18, wobei die Kanten-Abfrage mit einer Abfragesprache kompatibel ist, welche deklarativ ist, so dass sie Berechnungslogik ausdrückt, ohne einen zugeordneten Kontrollfluss auszudrücken, und vollständig ist, so dass durch die Abfragesprache eine beliebige Berechnung ausgedrückt ist.
    • C20. Das System nach einer der Klauseln C15 bis C19, wobei das nicht-transitorische computerlesbare Medium ferner Instruktionen speichert, welche, wenn sie ausgeführt werden, das System veranlassen, die Primitivausdrücke zu bestimmen.
    • D1. Ein in einem Computersystem implementiertes Verfahren zum Repräsentieren einer zusammengesetzten Beziehung in einer Graph-Datenbank, wobei das Verfahren umfasst: Definieren der zusammengesetzten Beziehung basierend auf zwei oder mehr Prädikaten, welche zwei oder mehreren Kanten zwischen zwei oder mehreren Knoten zugeordnet sind; und Erzeugen eines Zentralknotens in dem Graphen, wobei der Zentralknoten der zusammengesetzten Beziehung entspricht und einen Bezeichner aufweist, der Benutzern des Graphen verborgen ist.
    • D2. Das Verfahren nach Klausel D1, wobei das Verfahren ferner umfasst: Erzeugen einer Abfrage mit Kanten, welche die zwei oder mehreren Prädikate umfassen; und wobei die zwei oder mehreren Prädikate den Bezeichner des Zentralknotens angeben.
    • D3. Das Verfahren nach Klausel D2, wobei das Verfahren ferner umfasst: Ausführen der Abfrage gegenüber der Graph-Datenbank.
    • D4. Das Verfahren nach einer der Klauseln D1 bis D3, wobei das Verfahren ferner umfasst: Zuordnen des Bezeichners, welcher ein lokaler Bezeichner ist, zu dem Zentralknoten, und zwar basierend auf den zwei oder mehreren Prädikaten.
    • D5. Das Verfahren nach einer der Klauseln D1 bis D4, wobei das Verfahren ferner umfasst: Hinzufügen einer Kante, welche einem Bezeichner-Prädikat zugeordnet ist, zwischen dem Zentralknoten und einem Knoten, welcher den lokalen Bezeichner enthält.
    • D6. Das Verfahren nach einer der Klauseln D1 bis D5, wobei das Verfahren ferner umfasst: Hinzufügen eines Kante, welche einem Attribut-Prädikat zugeordnet ist, zwischen dem Zentralknoten und dem Knoten, der ein Attribut eines der ein oder mehreren Knoten enthält.
    • D7. Das Verfahren nach Klausel D6, wobei das Verfahren ferner umfasst: Hinzufügen einer weiteren Kante, welche dem Attribut-Prädikat zugeordnet ist, zwischen dem Zentralknoten und einem weiteren Knoten, welcher ein aktualisiertes Attribut des einen oder der mehreren Knoten enthält, wenn eine Kardinalität des Attribut-Prädikats größer als eins ist.
    • D8. Das Verfahren nach Klausel D6, wobei das Verfahren ferner umfasst: Ersetzen des Attributs mit einem aktualisierten Attribut des einen der zwei oder mehr Knoten, wenn eine Kardinalität des Attribut-Prädikats gleich eins ist
    • D9. Das Verfahren nach einer der Klauseln D1 bis D8, wobei der Bezeichner des Zentralknotens den Benutzern des Graphen verborgen ist, so dass der Bezeichner des Zentralknotens von außerhalb der Graph-Datenbank nicht sichtbar ist.
    • D10. Das Verfahren nach einer der Klauseln D1 bis D9, wobei der Graph die Knoten, die Kanten zwischen den Knoten und die Prädikate umfasst, um Daten mit index-freier Nachbarschaft zu repräsentieren und zu speichern.
    • D11. Eine Vorrichtung, umfassend: einen oder mehrere Prozessoren; Speicher; und ein Programmmodul, wobei das Programmmodul in dem Speicher gespeichert ist und, während des Betriebs der Vorrichtung, durch die ein oder mehreren Prozessoren ausgeführt wird, um eine zusammengesetzte Beziehung in einem Graphen zu repräsentieren, welcher in einer Graph-Datenbank gespeichert ist, wobei das Programmmodul umfasst: Instruktionen zum Definieren der zusammengesetzten Beziehung basierend auf zwei oder mehr Prädikaten, welche zwei oder mehreren Kanten zwischen zwei oder mehreren Knoten zugeordnet sind; und Instruktionen zum Erzeugen eines Zentralknotens in dem Graphen, wobei der Zentralknoten der zusammengesetzten Beziehung entspricht und einen Bezeichner aufweist, der Benutzern des Graphen verborgen ist.
    • D12. Die Vorrichtung nach Klausel D11, wobei das Programmmodul ferner Instruktionen umfasst, um eine Abfrage mit Kanten zu erzeugen, welche die zwei oder mehreren Prädikate umfassen; und wobei die zwei oder mehreren Prädikate den Bezeichner des Zentralknotens angeben.
    • D13. Die Vorrichtung nach Klausel D12, wobei das Programmmodul ferner Instruktionen umfasst, um die Abfrage gegenüber der Graph-Datenbank auszuführen.
    • D14. Die Vorrichtung nach einer der Klauseln D11 bis D13, wobei das Programmmodul ferner Instruktionen umfasst, um dem Zentralknoten basierend auf den zwei oder mehreren Prädikaten den Bezeichner, welcher ein lokaler Bezeichner ist, zuzuordnen.
    • D15. Die Vorrichtung nach einer der Klauseln D11 bis D14, wobei das Programmmodul ferner Instruktionen umfasst, um zwischen dem Zentralknoten und einem Knoten, welcher den lokalen Bezeichner enthält, eine Kante hinzuzufügen, welche einem Bezeichner-Prädikat zugeordnet ist.
    • D16. Die Vorrichtung nach einer der Klauseln D11 bis D15, wobei das Programmmodul ferner Instruktionen umfasst, um zwischen dem Zentralknoten und einem Knoten, welcher ein Attribut eines der ein oder mehreren Knoten enthält, eine Kante hinzuzufügen, welche einem Attribut-Prädikat zugeordnet ist.
    • D17. Die Vorrichtung nach Klausel D16, wobei das Programmmodul ferner Instruktionen umfasst, um, wenn eine Kardinalität des Attribut-Prädikats größer als eins ist, zwischen dem Zentralknoten und einem weiteren Knoten, welcher ein aktualisiertes Attribut des einen oder der mehreren Knoten enthält, eine weitere Kante hinzuzufügen, welche dem Attribut-Prädikat zugeordnet ist.
    • D18. Die Vorrichtung nach Klausel D16, wobei das Programmmodul ferner Instruktionen umfasst, um, wenn eine Kardinalität des Attribut-Prädikats gleich eins ist, das Attribut mit einem aktualisierten Attribut des einen oder der mehreren Knoten zu ersetzen.
    • D19. Die Vorrichtung nach einer der Klauseln D11 bis D18, wobei der Bezeichner des Zentralknotens den Benutzern des Graphen verborgen ist, so dass der Bezeichner des Zentralknotens von außerhalb der Graph-Datenbank nicht sichtbar ist.
    • D20. Ein System, umfassend: ein Verarbeitungsmodul, welches ein nicht-transitorisches computerlesbares Medium umfasst, welches Instruktionen speichert, welche, wenn sie ausgeführt werden, das System veranlassen, eine zusammengesetzten Beziehung zu definieren, welche eine zusammengesetzte Beziehung in einem in einer Graph-Datenbank gespeicherten Graphen repräsentiert, wobei die zusammengesetzte Beziehung auf zwei oder mehreren Prädikaten basiert, welche zwei oder mehreren Kanten zwischen zwei oder mehreren Knoten in dem Graphen zugeordnet sind; und einen Zentralknoten in dem Graphen zu erzeugen, wobei der Zentralknoten der zusammengesetzten Beziehung entspricht und einen Bezeichner aufweist, der Benutzern des Graphen verborgen ist.

Claims (92)

  1. Vorrichtung, umfassend: einen oder mehrere Prozessoren; Speicher; und ein Programmmodul, wobei das Programmmodul in dem Speicher gespeichert ist und, während des Betriebs der Vorrichtung, durch die ein oder mehreren Prozessoren ausgeführt wird, um eine Graph-Datenbank zu betreiben, wobei das Programmmodul umfasst: Instruktionen zum Ausführen einer Abfrage gegenüber der Graph-Datenbank nach gewünschter Information, wobei die Graph-Datenbank einen Graphen speichert, der Knoten, Kanten zwischen den Knoten und Prädikate umfasst, um Daten mit index-freier Nachbarschaft zu repräsentieren und zu speichern; und wobei die Abfrage eine erste Kante identifiziert, welche einem ersten Prädikat zugeordnet ist, welches einen oder mehrere Knoten in dem Graphen angibt; und Instruktionen zum Empfangen eines Ergebnisses in Antwort auf die Abfrage, wobei das Ergebnis eine Teilmenge des Graphen umfasst.
  2. Vorrichtung nach Anspruch 1, wobei das Programmmodul ferner Instruktionen zum Erzeugen der Abfrage basierend auf der gewünschten Information umfasst; und wobei die Abfrage ein Subjekt, ein Prädikat und ein Objekt umfasst.
  3. Vorrichtung nach Anspruch 2, wobei das Subjekt und das Objekt Entitäten in einem durch den Graphen repräsentierten berufsbezogenen Netzwerk repräsentieren.
  4. Vorrichtung nach einem der Ansprüche 1 bis 3, wobei das Programmmodul ferner Instruktionen umfasst, um: eine nachfolgende Abfrage zu empfangen, welche eine zweite Kante identifiziert, der ein zweites Prädikat zugeordnet ist; und die nachfolgende Abfrage gegenüber der Teilmenge des Graphen auszuführen; wobei ein Ergebnis der nachfolgenden Abfrage eine zweite Teilmenge des Graphen ist.
  5. Vorrichtung nach einem der Ansprüche 1 bis 4, wobei das Programmmodul ferner Instruktionen umfasst, um: basierend auf wenigstens zwei Prädikaten, die wenigstens zwei Kanten des Graphen zugeordnet sind, eine zusammengesetzte Beziehung zu definieren; und in dem Graphen einen Zentralknoten zu erzeugen, der der zusammengesetzten Beziehung entspricht; wobei der Zentralknoten Benutzern des Graphen verborgen ist.
  6. Vorrichtung nach einem der Ansprüche 1 bis 5, wobei das Programmmodul ferner Instruktionen umfasst, um: eine weitere Abfrage zu empfangen, welche mit einer Art von Datenbank kompatibel ist, welche von der Graph-Datenbank verschieden ist; und die weitere Abfrage in die Abfrage umzuwandeln.
  7. Vorrichtung nach Anspruch 6, wobei die Art von Datenbank eine relationale Datenbank oder eine hierarchische Datenbank umfasst.
  8. Vorrichtung nach einem der Ansprüche 1 bis 7, wobei das Programmmodul ferner Instruktionen umfasst, um: eine weitere Abfrage zu empfangen, welche mit der JavaScript Object Notation kompatibel ist; und die weitere Abfrage in die Abfrage zu konvertieren.
  9. Vorrichtung nach einem der Ansprüche 1 bis 8, wobei die Teilmenge des Graphen die gewünschte Information enthält, und zwar ausgedrückt in einer zugeordneten Struktur des Graphen.
  10. Vorrichtung nach einem der Ansprüche 1 bis 9, wobei das Ergebnis hierarchische Randbedingungen und relationale Randbedingungen ausschließt.
  11. System, umfassend: ein Verarbeitungsmodul, welches ein nicht-transitorisches computerlesbares Medium umfasst, welches Instruktionen speichert, welche, wenn sie ausgeführt werden, das System veranlassen, eine Abfrage gegenüber der Graph-Datenbank nach gewünschter Information auszuführen, wobei die Graph-Datenbank einen Graphen speichert, der Knoten, Kanten zwischen den Knoten und Prädikate umfasst, um Daten mit index-freier Nachbarschaft zu repräsentieren und zu speichern; und wobei die Abfrage eine erste Kante identifiziert, welcher ein erstes Prädikat zugeordnet ist, welches einen oder mehrere Knoten in dem Graphen angibt; und in Antwort auf die Abfrage ein Ergebnis zu empfangen, wobei das Ergebnis eine Teilmenge des Graphen umfasst.
  12. System nach Anspruch 11, wobei das Verarbeitungsmodul ferner Instruktionen speichert, welche, wenn sie ausgeführt werden, das System veranlassen, die Abfrage basierend auf der gewünschten Information zu erzeugen; und wobei die Abfrage ein Subjekt, ein Prädikat und ein Objekt umfasst.
  13. System nach Anspruch 12, wobei das Subjekt und das Objekt Entitäten in einem durch den Graphen repräsentierten berufsbezogenen Netzwerk repräsentieren.
  14. System nach einem der Ansprüche 11 bis 13, wobei das Verarbeitungsmodul ferner Instruktionen speichert, welche, wenn sie ausgeführt werden, das System veranlassen, eine nachfolgende Abfrage zu empfangen, welche eine zweite Kante identifiziert, der ein zweites Prädikat zugeordnet ist; und die nachfolgende Abfrage gegenüber der Teilmenge des Graphen auszuführen; wobei ein Ergebnis der nachfolgenden Abfrage eine zweite Teilmenge des Graphen ist.
  15. System nach einem der Ansprüche 11 bis 14, wobei das Verarbeitungsmodul ferner Instruktionen speichert, welche, wenn sie ausgeführt werden, das System veranlassen, basierend auf wenigstens zwei Prädikaten, die wenigstens zwei Kanten des Graphen zugeordnet sind, eine zusammengesetzte Beziehung zu definieren; und in dem Graphen einen Zentralknoten zu erzeugen, der der zusammengesetzten Beziehung entspricht; wobei der Zentralknoten Benutzern des Graphen verborgen ist.
  16. System nach einem der Ansprüche 11 bis 51, wobei das Verarbeitungsmodul ferner Instruktionen speichert, welche, wenn sie ausgeführt werden, das System veranlassen, eine weitere Abfrage zu empfangen, welche mit einer Art von Datenbank kompatibel ist, welche von der Graph-Datenbank verschieden ist; und die weitere Abfrage in die Abfrage umzuwandeln.
  17. System nach Anspruch 16, wobei die Art von Datenbank eine relationale Datenbank oder eine hierarchische Datenbank umfasst.
  18. System nach einem der Ansprüche 11 bis 17, wobei das Verarbeitungsmodul ferner Instruktionen speichert, welche, wenn sie ausgeführt werden, das System veranlassen, eine weitere Abfrage zu empfangen, welche mit der JavaScript Object Notation kompatibel ist; und die weitere Abfrage in die Abfrage zu konvertieren.
  19. System nach einem der Ansprüche 11 bis 18, wobei die Teilmenge des Graphen die gewünschte Information enthält, und zwar ausgedrückt in einer zugeordneten Struktur des Graphen.
  20. Vorrichtung nach einem der Ansprüche 11 bis 19, wobei das Ergebnis hierarchische Randbedingungen und relationale Randbedingungen ausschließt.
  21. Vorrichtung, umfassend: einen oder mehrere Prozessoren; Speicher; und ein Programmmodul, wobei das Programmmodul in dem Speicher gespeichert ist und, während des Betriebs der Vorrichtung, durch die ein oder mehreren Prozessoren ausgeführt wird, um von einer Graph-Datenbank gewünschte Information anzufordern, wobei das Programmmodul umfasst: Instruktionen zum Ausführen einer ersten Abfrage gegenüber der Graph-Datenbank, welche einen Graphen speichert, wobei der Graph Knoten, Kanten zwischen den Knoten und Prädikate umfasst, um Daten mit index-freier Nachbarschaft zu repräsentieren und zu speichern; und wobei die erste Abfrage eine erste Kante identifiziert, welcher ein erstes Prädikat zugeordnet ist, welches einen oder mehrere Knoten in dem Graphen angibt; Instruktionen zum Empfangen eines ersten Ergebnisses in Antwort auf die erste Abfrage, wobei das erste Ergebnis eine erste Teilmenge des Graphen umfasst; Instruktionen zum Ausführen einer zweiten Abfrage gegenüber der ersten Teilmenge des Graphen, wobei die zweite Abfrage eine zweite Kante identifiziert, welcher ein zweites Prädikat zugeordnet ist, welches einen oder mehrere der Knoten angibt; und Instruktionen zum Empfangen eines zweiten Ergebnisses in Antwort auf die zweite Abfrage, wobei das zweite Ergebnis eine zweite Teilmenge des Graphen umfasst.
  22. Vorrichtung nach Anspruch 21, wobei das Programmmodul ferner Instruktionen zum Ausführen von ein oder mehreren zusätzlichen Abfragen gegenüber der ersten Teilmenge des Graphen umfasst.
  23. Vorrichtung nach Anspruch 21 oder 22, wobei das Programmmodul ferner Instruktionen zum Ausführen von einer dritten Abfrage gegenüber der zweiten Teilmenge des Graphen umfasst.
  24. Vorrichtung nach einem der Ansprüche 21 bis 23, wobei das Ausführen der zweiten Abfrage gegenüber der ersten Teilmenge des Graphen es unnötig macht, die zweite Abfrage gegenüber der Graph-Datenbank auszuführen.
  25. Vorrichtung nach einem der Ansprüche 21 bis 24, wobei das Programmmodul ferner Instruktionen zum Erzeugen der ersten Abfrage basierend auf der gewünschten Information umfasst.
  26. Vorrichtung nach einem der Ansprüche 21 bis 25, wobei das Programmmodul ferner Instruktionen umfasst, um: eine weitere Abfrage zu empfangen, welche mit einer Art von Datenbank kompatibel ist, welche von der Graph-Datenbank verschieden ist; und die weitere Abfrage in die Abfrage umzuwandeln.
  27. Vorrichtung nach Anspruch 26, wobei die Art von Datenbank eine relationale Datenbank oder eine hierarchische Datenbank umfasst.
  28. Vorrichtung nach einem der Ansprüche 21 bis 27, wobei das Programmmodul ferner Instruktionen umfasst, um: eine weitere Abfrage zu empfangen, welche mit der JavaScript Object Notation kompatibel ist; und die weitere Abfrage in die Abfrage zu konvertieren.
  29. Vorrichtung nach einem der Ansprüche 21 bis 28, wobei die erste Teilmenge des Graphen die gewünschte Information enthält, und zwar ausgedrückt in einer zugeordneten Struktur des Graphen.
  30. System, umfassend: ein Verarbeitungsmodul, welches ein nicht-transitorisches computerlesbares Medium umfasst, welches Instruktionen speichert, welche, wenn sie ausgeführt werden, das System veranlassen, eine erste Abfrage gegenüber einer Graph-Datenbank auszuführen, welche einen Graphen speichert, wobei der Graph Knoten, Kanten zwischen den Knoten und Prädikate umfasst, um Daten mit index-freier Nachbarschaft zu repräsentieren und zu speichern; und wobei die erste Abfrage eine erste Kante identifiziert, welcher ein erstes Prädikat zugeordnet ist, welches einen oder mehrere Knoten in dem Graphen angibt; in Antwort auf die erste Abfrage ein erstes Ergebnis zu empfangen, wobei das erste Ergebnis eine erste Teilmenge des Graphen umfasst; eine zweite Abfrage gegenüber der ersten Teilmenge des Graphen auszuführen, wobei die zweite Abfrage eine zweite Kante identifiziert, welcher ein zweites Prädikat zugeordnet ist, welches einen oder mehrere der Knoten angibt; und in Antwort auf die zweite Abfrage ein zweites Ergebnis zu empfangen, wobei das zweite Ergebnis eine zweite Teilmenge des Graphen umfasst.
  31. System nach Anspruch 30, wobei das nicht-transitorische computerlesbare Medium ferner Instruktionen speichert, welche, wenn sie ausgeführt werden, das System veranlassen, ein oder mehrere zusätzliche Abfragen gegenüber der ersten Teilmenge des Graphen auszuführen.
  32. System nach Anspruch 30 oder 31, wobei das nicht-transitorische computerlesbare Medium ferner Instruktionen speichert, welche, wenn sie ausgeführt werden, das System veranlassen, eine dritte Abfrage gegenüber der zweiten Teilmenge des Graphen auszuführen.
  33. System nach einem der Ansprüche 30 bis 32, wobei das Ausführen der zweiten Abfrage gegenüber der ersten Teilmenge des Graphen es unnötig macht, die zweite Abfrage gegenüber der Graph-Datenbank auszuführen.
  34. System nach einem der Ansprüche 30 bis 33, wobei das nicht-transitorische computerlesbare Medium ferner Instruktionen speichert, welche, wenn sie ausgeführt werden, das System veranlassen, die erste Abfrage basierend auf der gewünschten Information zu erzeugen.
  35. System nach einem der Ansprüche 30 bis 34, wobei das nicht-transitorische computerlesbare Medium ferner Instruktionen speichert, welche, wenn sie ausgeführt werden, das System veranlassen, eine weitere Abfrage zu empfangen, welche mit einer Art von Datenbank kompatibel ist, welche von der Graph-Datenbank verschieden ist; und die weitere Abfrage in die Abfrage umzuwandeln.
  36. System nach Anspruch 35, wobei die Art von Datenbank eine relationale Datenbank oder eine hierarchische Datenbank umfasst.
  37. System nach einem der Ansprüche 30 bis 36, wobei das nicht-transitorische computerlesbare Medium ferner Instruktionen speichert, welche, wenn sie ausgeführt werden, das System veranlassen, eine weitere Abfrage zu empfangen, welche mit der JavaScript Object Notation kompatibel ist; und die weitere Abfrage in die Abfrage zu konvertieren.
  38. System nach einem der Ansprüche 30 bis 37, wobei die erste Teilmenge des Graphen die gewünschte Information enthält, und zwar ausgedrückt in einer zugeordneten Struktur des Graphen.
  39. Vorrichtung, umfassend: einen oder mehrere Prozessoren; Speicher; und ein Programmmodul, wobei das Programmmodul in dem Speicher gespeichert ist und, während des Betriebs der Vorrichtung, durch die ein oder mehreren Prozessoren ausgeführt wird, um von einer Graph-Datenbank gewünschte Information anzufordern, wobei das Programmmodul umfasst: Instruktionen zum Ausführen einer Abfrage gegenüber der Graph-Datenbank, welche einen Graphen speichert, wobei der Graph Knoten, Kanten zwischen den Knoten und Prädikate umfasst, um Daten mit index-freier Nachbarschaft zu repräsentieren und zu speichern; und wobei die Abfrage eine Kante identifiziert, welcher ein Prädikat zugeordnet ist, welches einen oder mehrere Knoten in dem Graphen angibt; Instruktionen zum Empfangen eines Ergebnisses in Antwort auf die Abfrage, wobei das Ergebnis eine Teilmenge des Graphen umfasst; und Instruktionen zum Verifizieren der Teilmenge des Graphen.
  40. Vorrichtung nach Anspruch 39, wobei die Teilmenge des Graphen verifiziert wird, wenn die Teilmenge des Graphen mit einem entsprechenden Teil des Graphen übereinstimmt.
  41. Vorrichtung nach Anspruch 39 oder 40, wobei die Instruktionen zum Verifizieren der Teilmenge des Graphen Instruktionen zum Vergleichen der Teilmenge des Graphen mit einer vorbestimmten Teilmenge des Graphen umfassen.
  42. Vorrichtung nach einem der Ansprüche 39 bis 41, wobei die Teilmenge des Graphen verifiziert wird, wenn die Teilmenge des Graphen eine erwartete Teilmenge der Kanten umfasst.
  43. Vorrichtung nach einem der Ansprüche 39 bis 42, wobei die Instruktionen zum Verifizieren Instruktionen umfassen, um eine weitere Abfrage gegenüber der Datenbank auszuführen; in Antwort auf die Abfrage ein weiteres Ergebnis zu empfangen, wobei das weitere Ergebnis eine weitere Teilmenge des Graphen umfasst; und die weitere Teilmenge des Graphen mit der Teilmenge des Graphen zu vergleichen.
  44. Vorrichtung nach Anspruch 43, wobei die Teilmenge des Graphen verifiziert wird, wenn es eine Übereinstimmung zwischen einem überlappenden Bereich der Teilmenge des Graphen und der weiteren Teilmenge des Graphen gibt.
  45. Vorrichtung nach einem der Ansprüche 39 bis 44, wobei die Instruktionen zum Verifizieren Instruktionen umfassen, um eine weitere Abfrage gegenüber der Datenbank auszuführen; in Antwort auf die Abfrage ein weiteres Ergebnis zu empfangen, wobei das weitere Ergebnis Information umfasst, welche der Teilmenge der Kanten des Graphen entspricht; und die Information mit der Teilmenge der Kanten zu vergleichen.
  46. Vorrichtung nach einem der Ansprüche 39 bis 45, wobei das Programmmodul ferner Instruktionen umfasst, um die Abfrage basierend auf der gewünschten Information zu erzeugen.
  47. Vorrichtung nach einem der Ansprüche 39 bis 46, wobei das Programmmodul ferner Instruktionen umfasst, um eine weitere Abfrage zu empfangen, welche mit einer Art von Datenbank kompatibel ist, welche von der Graph-Datenbank verschieden ist; und die weitere Abfrage in die Abfrage umzuwandeln.
  48. Vorrichtung nach einem der Ansprüche 39 bis 47, wobei das Programmmodul ferner Instruktionen umfasst, um: eine weitere Abfrage zu empfangen, welche mit der JavaScript Object Notation kompatibel ist; und die weitere Abfrage in die Abfrage zu konvertieren.
  49. System, umfassend: ein Verarbeitungsmodul, welches ein nicht-transitorisches computerlesbares Medium umfasst, welches Instruktionen speichert, welche, wenn sie ausgeführt werden, das System veranlassen, eine Abfrage gegenüber einer Graph-Datenbank auszuführen, welche einen Graphen speichert, wobei der Graph Knoten, Kanten zwischen den Knoten und Prädikate umfasst, um Daten mit index-freier Nachbarschaft zu repräsentieren und zu speichern; und wobei die Abfrage eine Kante identifiziert, welcher ein Prädikat zugeordnet ist, welches einen oder mehrere Knoten in dem Graphen angibt; und in Antwort auf die Abfrage ein Ergebnis zu empfangen, wobei das Ergebnis eine Teilmenge des Graphen umfasst; und die Teilmenge des Graphen zu verifizieren.
  50. System nach Anspruch 49, wobei die Teilmenge des Graphen verifiziert wird, wenn die Teilmenge des Graphen mit einem entsprechenden Teil des Graphen übereinstimmt.
  51. System nach Anspruch 49 oder 50, wobei das Verifizieren der Teilmenge des Graphen ein Vergleichen der Teilmenge des Graphen mit einer vorbestimmten Teilmenge des Graphen umfasst.
  52. System nach einem der Ansprüche 49 bis 51, wobei die Teilmenge des Graphen verifiziert wird, wenn die Teilmenge des Graphen eine erwartete Teilmenge der Kanten umfasst.
  53. System nach einem der Ansprüche 49 bis 52, wobei das Verifizieren der Teilmenge des Graphen umfasst: Ausführen einer weiteren Abfrage gegenüber der Datenbank; Empfangen eines weiteren Ergebnisses in Antwort auf die Abfrage, wobei das weitere Ergebnis eine weitere Teilmenge des Graphen umfasst; und Vergleichen der weiteren Teilmenge des Graphen mit der Teilmenge des Graphen.
  54. System nach Anspruch 53, wobei die Teilmenge des Graphen verifiziert wird, wenn es eine Übereinstimmung zwischen einem überlappenden Bereich der Teilmenge des Graphen und der weiteren Teilmenge des Graphen gibt.
  55. System nach einem der Ansprüche 49 bis 54, wobei das Verifizieren der Teilmenge des Graphen umfasst: Ausführen einer weiteren Abfrage gegenüber der Datenbank; Empfangen ein weiteres Ergebnisses in Antwort auf die Abfrage, wobei das weitere Ergebnis Information umfasst, welche der Teilmenge der Kanten des Graphen entspricht; und Vergleichen der Information mit der Teilmenge der Kanten.
  56. System nach einem der Ansprüche 49 bis 55, wobei das Programmmodul ferner Instruktionen umfasst, um die Abfrage basierend auf der gewünschten Information zu erzeugen.
  57. System nach einem der Ansprüche 49 bis 56, wobei das nicht-transitorische computerlesbare Medium ferner Instruktionen speichert, welche, wenn sie ausgeführt werden, das System veranlassen, eine weitere Abfrage zu empfangen, welche mit einer Art von Datenbank kompatibel ist, welche von der Graph-Datenbank verschieden ist; und die weitere Abfrage in die Abfrage umzuwandeln.
  58. System nach einem der Ansprüche 59 bis 57, wobei das nicht-transitorische computerlesbare Medium ferner Instruktionen speichert, welche, wenn sie ausgeführt werden, das System veranlassen, eine weitere Abfrage zu empfangen, welche mit der JavaScript Object Notation kompatibel ist; und die weitere Abfrage in die Abfrage zu konvertieren.
  59. Vorrichtung, umfassend: einen oder mehrere Prozessoren; Speicher; und ein Programmmodul, wobei das Programmmodul in dem Speicher gespeichert ist und, während des Betriebs der Vorrichtung, durch die ein oder mehreren Prozessoren ausgeführt wird, um eine erste Abfragen in eine Kanten-Abfrage zu übersetzen, wobei das Programmmodul umfasst: Instruktionen zum Empfangen der ersten Abfrage, welche einer ersten Art von Datenbank zugeordnet ist; Instruktionen zum Übersetzen der erste Abfrage in die Kanten-Abfrage, welche einer Graph-Datenbank zugeordnet ist, welche einen Graphen speichert, unter Verwendung von Primitivausdrücken; wobei die erste Art von Datenbank ein Datenmodell aufweist, welches von dem der Graph-Datenbank verschieden ist; wobei der Graph Knoten, Kanten zwischen den Knoten und Prädikate umfasst, um Daten mit index-freier Nachbarschaft zu repräsentieren und zu speichern; und wobei die Primitivausdrücke umfassen: eine auf Kanten in dem Graphen basierende Regel, welche ein relationales Schema in der ersten Art von Datenbank ausdrückt, und Information, welche einem zusammengesetzten Schlüsselwort zugeordnet ist, welches ein Verhältnis zwischen den Knoten spezifiziert, wobei die Kanten und die Prädikate in dem Graphen einer Tabelle in der ersten Art von Datenbank entsprechen; Instruktionen zum Ausführen der Kanten-Abfrage gegenüber der Graph-Datenbank, wobei die Kanten-Abfrage eine Kante identifiziert, welcher ein Prädikat zugeordnet ist, welches einen oder mehrere der Knoten in dem Graphen angibt; und Instruktionen zum Empfangen eines Ergebnisses in Antwort auf die Abfrage, wobei das Ergebnis eine Teilmenge des Graphen umfasst.
  60. Vorrichtung nach Anspruch 59, wobei die erste Art von Datenbank eine relationale Datenbank oder eine hierarchische Datenbank umfasst.
  61. Vorrichtung nach Anspruch 59, wobei die erste Art von Datenbank von einer relationalen Datenbank verschieden ist.
  62. Vorrichtung nach einem der Ansprüche 59 bis 61, wobei die erste Abfrage mit einer strukturierten Abfragesprache SQL kompatibel ist.
  63. Vorrichtung nach einem der Ansprüche 59 bis 62, wobei die Kanten-Abfrage mit Datalog kompatibel ist.
  64. Vorrichtung nach einem der Ansprüche 59 bis 63, wobei die Kanten-Abfrage mit einer Abfragesprache kompatibel ist, welche deklarativ ist, so dass sie Berechnungslogik ausdrückt, ohne einen zugeordneten Kontrollfluss auszudrücken, und vollständig ist, so dass durch die Abfragesprache eine beliebige Berechnung ausgedrückt ist.
  65. Vorrichtung nach einem der Ansprüche 59 bis 64, wobei das Programmmodul ferner Instruktionen umfasst, um die Primitivausdrücke zu bestimmen.
  66. System, umfassend: ein Verarbeitungsmodul, welches ein nicht-transitorisches computerlesbares Medium umfasst, welches Instruktionen speichert, welche, wenn sie ausgeführt werden, das System veranlassen, eine erste Abfrage zu empfangen, welche einer ersten Art von Datenbank zugeordnet ist; die erste Abfrage unter Verwendung von Primitivausdrücken in eine Kanten-Abfrage zu übersetzen, welche einer Graph-Datenbank zugeordnet ist, welche einen Graphen speichert; wobei die erste Art von Datenbank ein Datenmodell aufweist, welches von dem der Graph-Datenbank verschieden ist; wobei der Graph Knoten, Kanten zwischen den Knoten und Prädikate umfasst, um Daten mit index-freier Nachbarschaft zu repräsentieren und zu speichern; und wobei die Primitivausdrücke umfassen: eine auf Kanten in dem Graphen basierende Regel, welche ein relationales Schema in der ersten Art von Datenbank ausdrückt, und Information, welche einem zusammengesetzten Schlüsselwort zugeordnet ist, welches ein Verhältnis zwischen den Knoten spezifiziert, wobei die Kanten und die Prädikate in dem Graphen einer Tabelle in der ersten Art von Datenbank entsprechen; die Kanten-Abfrage gegenüber der Graph-Datenbank auszuführen, wobei die Kanten-Abfrage eine Kante identifiziert, welcher ein Prädikat zugeordnet ist, welches einen oder mehrere der Knoten in dem Graphen angibt; und in Antwort auf die Abfrage ein Ergebnis zu empfangen, wobei das Ergebnis eine Teilmenge des Graphen umfasst.
  67. System nach Anspruch 66, wobei die erste Art von Datenbank eine relationale Datenbank oder eine hierarchische Datenbank umfasst.
  68. System nach Anspruch 66, wobei die erste Art von Datenbank von einer relationalen Datenbank verschieden ist.
  69. System nach einem der Ansprüche 66 bis 68, wobei die erste Abfrage mit einer strukturierten Abfragesprache SQL kompatibel ist.
  70. System nach einem der Ansprüche 66 bis 69, wobei die Kanten-Abfrage mit Datalog kompatibel ist.
  71. System nach einem der Ansprüche 66 bis 70, wobei die Kanten-Abfrage mit einer Abfragesprache kompatibel ist, welche deklarativ ist, so dass sie Berechnungslogik ausdrückt, ohne einen zugeordneten Kontrollfluss auszudrücken, und vollständig ist, so dass durch die Abfragesprache eine beliebige Berechnung ausgedrückt ist.
  72. System nach einem der Ansprüche 66 bis 71, wobei das nicht-transitorische computerlesbare Medium ferner Instruktionen speichert, welche, wenn sie ausgeführt werden, das System veranlassen, die Primitivausdrücke zu bestimmen.
  73. Vorrichtung, umfassend: einen oder mehrere Prozessoren; Speicher; und ein Programmmodul, wobei das Programmmodul in dem Speicher gespeichert ist und, während des Betriebs der Vorrichtung, durch die ein oder mehreren Prozessoren ausgeführt wird, um eine zusammengesetzte Beziehung in einem Graphen zu repräsentieren, welcher in einer Graph-Datenbank gespeichert ist, wobei das Programmmodul umfasst: Instruktionen zum Definieren der zusammengesetzten Beziehung basierend auf zwei oder mehr Prädikaten, welche zwei oder mehreren Kanten zwischen zwei oder mehreren Knoten zugeordnet sind; und Instruktionen zum Erzeugen eines Zentralknotens in dem Graphen, wobei der Zentralknoten der zusammengesetzten Beziehung entspricht und einen Bezeichner aufweist, der Benutzern des Graphen verborgen ist.
  74. Vorrichtung nach Anspruch 73, wobei das Programmmodul ferner Instruktionen umfasst, um eine Abfrage mit Kanten zu erzeugen, welche die zwei oder mehreren Prädikate umfassen; und wobei die zwei oder mehreren Prädikate den Bezeichner des Zentralknotens angeben.
  75. Vorrichtung nach Anspruch 74, wobei das Programmmodul ferner Instruktionen umfasst, um die Abfrage gegenüber der Graph-Datenbank auszuführen.
  76. Vorrichtung nach einem der Ansprüche 73 bis 75, wobei das Programmmodul ferner Instruktionen umfasst, um dem Zentralknoten basierend auf den zwei oder mehreren Prädikaten den Bezeichner, welcher ein lokaler Bezeichner ist, zuzuordnen.
  77. Vorrichtung nach einem der Ansprüche 73 bis 76, wobei das Programmmodul ferner Instruktionen umfasst, um zwischen dem Zentralknoten und einem Knoten, welcher den lokalen Bezeichner enthält, eine Kante hinzuzufügen, welche einem Bezeichner-Prädikat zugeordnet ist.
  78. Vorrichtung nach einem der Ansprüche 73 bis 77, wobei das Programmmodul ferner Instruktionen umfasst, um zwischen dem Zentralknoten und einem Knoten, welcher ein Attribut eines der ein oder mehreren Knoten enthält, eine Kante hinzuzufügen, welche einem Attribut-Prädikat zugeordnet ist.
  79. Vorrichtung nach Anspruch 78, wobei das Programmmodul ferner Instruktionen umfasst, um, wenn eine Kardinalität des Attribut-Prädikats größer als eins ist, zwischen dem Zentralknoten und einem weiteren Knoten, welcher ein aktualisiertes Attribut des einen oder der mehreren Knoten enthält, eine weitere Kante hinzuzufügen, welche dem Attribut-Prädikat zugeordnet ist.
  80. Vorrichtung nach Anspruch 78, wobei das Programmmodul ferner Instruktionen umfasst, um, wenn eine Kardinalität des Attribut-Prädikats gleich eins ist, das Attribut mit einem aktualisierten Attribut des einen oder der mehreren Knoten zu ersetzen.
  81. Vorrichtung nach einem der Ansprüche 73 bis 80, wobei der Bezeichner des Zentralknotens den Benutzern des Graphen verborgen ist, so dass der Bezeichner des Zentralknotens von außerhalb der Graph-Datenbank nicht sichtbar ist.
  82. Vorrichtung nach einem der Ansprüche 73 bis 81, wobei der Graph die Knoten, die Kanten zwischen den Knoten und die Prädikate umfasst, um Daten mit index-freier Nachbarschaft zu repräsentieren und zu speichern.
  83. System, umfassend: ein Verarbeitungsmodul, welches ein nicht-transitorisches computerlesbares Medium umfasst, welches Instruktionen speichert, welche, wenn sie ausgeführt werden, das System veranlassen, eine zusammengesetzten Beziehung zu definieren, welche eine zusammengesetzte Beziehung in einem in einer Graph-Datenbank gespeicherten Graphen repräsentiert, wobei die zusammengesetzte Beziehung auf zwei oder mehreren Prädikaten basiert, welche zwei oder mehreren Kanten zwischen zwei oder mehreren Knoten in dem Graphen zugeordnet sind; und einen Zentralknoten in dem Graphen zu erzeugen, wobei der Zentralknoten der zusammengesetzten Beziehung entspricht und einen Bezeichner aufweist, der Benutzern des Graphen verborgen ist.
  84. System nach Anspruch 83, wobei das nicht-transitorische computerlesbare Medium ferner Instruktionen speichert, welche, wenn sie ausgeführt werden, das System veranlassen, eine Abfrage mit Kanten zu erzeugen, welche die zwei oder mehreren Prädikate umfassen; wobei die zwei oder mehreren Prädikate den Bezeichner des Zentralknotens angeben.
  85. System nach Anspruch 84, wobei das nicht-transitorische computerlesbare Medium ferner Instruktionen speichert, welche, wenn sie ausgeführt werden, das System veranlassen, die Abfrage gegenüber der Graph-Datenbank auszuführen.
  86. System nach einem der Ansprüche 83 bis 85, wobei das nicht-transitorische computerlesbare Medium ferner Instruktionen speichert, welche, wenn sie ausgeführt werden, das System veranlassen, dem Zentralknoten basierend auf den zwei oder mehreren Prädikaten den Bezeichner, welcher ein lokaler Bezeichner ist, zuzuordnen.
  87. System nach einem der Ansprüche 83 bis 86, wobei das nicht-transitorische computerlesbare Medium ferner Instruktionen speichert, welche, wenn sie ausgeführt werden, das System veranlassen, zwischen dem Zentralknoten und einem Knoten, welcher den lokalen Bezeichner enthält, eine Kante hinzuzufügen, welcher ein Bezeichner-Prädikat zugeordnet ist.
  88. System nach einem der Ansprüche 83 bis 87, wobei das nicht-transitorische computerlesbare Medium ferner Instruktionen speichert, welche, wenn sie ausgeführt werden, das System veranlassen, zwischen dem Zentralknoten und einem Knoten, welcher ein Attribut eines der ein oder mehreren Knoten enthält, eine Kante hinzuzufügen, welcher ein Attribut-Prädikat zugeordnet ist.
  89. System nach Anspruch 88, wobei das nicht-transitorische computerlesbare Medium ferner Instruktionen speichert, welche, wenn sie ausgeführt werden, das System veranlassen, wenn eine Kardinalität des Attribut-Prädikats größer als eins ist, zwischen dem Zentralknoten und einem weiteren Knoten, welcher ein aktualisiertes Attribut des einen oder der mehreren Knoten enthält, eine weitere Kante hinzuzufügen, welcher das Attribut-Prädikat zugeordnet ist.
  90. System nach Anspruch 88, wobei das nicht-transitorische computerlesbare Medium ferner Instruktionen speichert, welche, wenn sie ausgeführt werden, das System veranlassen, wenn eine Kardinalität des Attribut-Prädikats gleich eins ist, das Attribut mit einem aktualisierten Attribut des einen oder der mehreren Knoten zu ersetzen.
  91. System nach einem der Ansprüche 83 bis 90, wobei der Bezeichner des Zentralknotens den Benutzern des Graphen verborgen ist, so dass der Bezeichner des Zentralknotens von außerhalb der Graph-Datenbank nicht sichtbar ist.
  92. System nach einem der Ansprüche 83 bis 91, wobei der Graph die Knoten, die Kanten zwischen den Knoten und die Prädikate umfasst, Daten mit index-freier Nachbarschaft zu repräsentieren und zu speichern.
DE202016005239.0U 2015-09-18 2016-08-30 Graph-basierte Abfragen Active DE202016005239U1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/858,178 2015-09-18
US14/858,178 US9535963B1 (en) 2015-09-18 2015-09-18 Graph-based queries

Publications (2)

Publication Number Publication Date
DE202016005239U1 true DE202016005239U1 (de) 2016-10-21
DE202016005239U8 DE202016005239U8 (de) 2016-12-22

Family

ID=54608953

Family Applications (1)

Application Number Title Priority Date Filing Date
DE202016005239.0U Active DE202016005239U1 (de) 2015-09-18 2016-08-30 Graph-basierte Abfragen

Country Status (4)

Country Link
US (1) US9535963B1 (de)
CN (1) CN108027818B (de)
DE (1) DE202016005239U1 (de)
WO (1) WO2017048303A1 (de)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114996791A (zh) * 2022-08-01 2022-09-02 湖南高至科技有限公司 一种基于ear的人机交互仿真模型构建方法
US20220335086A1 (en) * 2021-04-15 2022-10-20 Vesoft Inc. Full-text indexing method and system based on graph database

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10831771B2 (en) * 2015-07-06 2020-11-10 Sap Se Interactive exploration of large graphs
US11468053B2 (en) 2015-12-30 2022-10-11 Dropbox, Inc. Servicing queries of a hybrid event index
US11423082B2 (en) * 2016-06-29 2022-08-23 Intel Corporation Methods and apparatus for subgraph matching in big data analysis
NO20161737A1 (en) * 2016-11-02 2018-05-03 Intelligent Operations As A method and system for managing, analyzing, navigating or searching of data information across one or more sources within a computer network
US10671671B2 (en) 2017-06-09 2020-06-02 Microsoft Technology Licensing, Llc Supporting tuples in log-based representations of graph databases
US11354348B2 (en) 2017-06-29 2022-06-07 Microsoft Technology Licensing, Llc Optimized record placement in graph database
US11151031B2 (en) 2017-06-29 2021-10-19 Microsoft Technology Licensing, Llc Optimized record placement in defragmenting graph database
US10585944B2 (en) 2017-07-06 2020-03-10 International Business Machines Corporation Directed graph compression
US10628492B2 (en) 2017-07-20 2020-04-21 Microsoft Technology Licensing, Llc Distributed graph database writes
CN110209885B (zh) * 2018-04-26 2023-05-12 腾讯科技(深圳)有限公司 一种图查询方法及系统
CN110889000B (zh) * 2018-09-10 2022-08-16 百度在线网络技术(北京)有限公司 用于输出信息的方法和装置
US11205050B2 (en) * 2018-11-02 2021-12-21 Oracle International Corporation Learning property graph representations edge-by-edge
CN110232078B (zh) * 2019-04-26 2021-03-30 上海合合信息科技股份有限公司 一种企业集团关系获取方法及系统
US11567995B2 (en) * 2019-07-26 2023-01-31 Microsoft Technology Licensing, Llc Branch threading in graph databases
CN110489986B (zh) * 2019-08-22 2021-03-23 网易(杭州)网络有限公司 图数据功能的响应方法、系统及电子设备
US11113267B2 (en) * 2019-09-30 2021-09-07 Microsoft Technology Licensing, Llc Enforcing path consistency in graph database path query evaluation
CN111026747A (zh) * 2019-10-25 2020-04-17 广东数果科技有限公司 一种分布式的图数据管理系统、方法及存储介质
US11074476B2 (en) 2019-11-21 2021-07-27 AstrumU, Inc. Data ingestion platform
US11487758B2 (en) 2020-01-30 2022-11-01 Adobe Inc. Query processing using hybrid inverted index of predicates
US11550848B2 (en) 2020-01-30 2023-01-10 Adobe Inc. Query processing using matrix and reduced predicate statements
US11354290B2 (en) * 2020-01-30 2022-06-07 Adobe Inc. Query processing using inverted index of predicate statements
CN111680036B (zh) * 2020-05-12 2022-09-27 国网宁夏电力有限公司信息通信公司 一种基于图存储的配置管理数据库
CN111984828A (zh) * 2020-06-30 2020-11-24 联想(北京)有限公司 一种邻居节点检索方法和装置
US11074509B1 (en) 2020-10-30 2021-07-27 AstrumU, Inc. Predictive learner score
US11928607B2 (en) 2020-10-30 2024-03-12 AstrumU, Inc. Predictive learner recommendation platform
WO2022165321A1 (en) 2021-01-31 2022-08-04 Ab Initio Technology Llc Data processing system with manipulation of logical dataset groups
US11704309B2 (en) * 2021-06-29 2023-07-18 Microsoft Technology Licensing, Llc Selective use of data structure operations for path query evaluation
US11741093B1 (en) 2021-07-21 2023-08-29 T-Mobile Usa, Inc. Intermediate communication layer to translate a request between a user of a database and the database
US20230129994A1 (en) * 2021-10-27 2023-04-27 Bank Of America Corporation System and Method for Transpilation of Machine Interpretable Languages
CN113722520B (zh) * 2021-11-02 2022-05-03 支付宝(杭州)信息技术有限公司 图数据的查询方法及装置
CN113901279B (zh) * 2021-12-03 2022-03-22 支付宝(杭州)信息技术有限公司 一种图数据库的检索方法和装置
US11847172B2 (en) * 2022-04-29 2023-12-19 AstrumU, Inc. Unified graph representation of skills and acumen

Family Cites Families (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6912524B2 (en) 1998-05-20 2005-06-28 Lucent Technologies, Inc. Join synopsis-based approximate query answering
US7698267B2 (en) 2004-08-27 2010-04-13 The Regents Of The University Of California Searching digital information and databases
US7933915B2 (en) 2006-02-27 2011-04-26 The Regents Of The University Of California Graph querying, graph motif mining and the discovery of clusters
US7870087B2 (en) 2006-11-02 2011-01-11 D-Wave Systems Inc. Processing relational database problems using analog processors
US8868620B2 (en) 2007-06-08 2014-10-21 International Business Machines Corporation Techniques for composing data queries
US8156134B2 (en) 2007-11-15 2012-04-10 International Business Machines Corporation Using different groups of query graph transform modules to generate execution plans for queries for different database types
US8095515B2 (en) 2008-03-19 2012-01-10 Semmle Limited Approximating relation sizes using field dependencies
US8326847B2 (en) 2008-03-22 2012-12-04 International Business Machines Corporation Graph search system and method for querying loosely integrated data
US8185558B1 (en) 2010-04-19 2012-05-22 Facebook, Inc. Automatically generating nodes and edges in an integrated social graph
US8219591B2 (en) 2010-05-03 2012-07-10 Hewlett-Packard Development Company, L.P. Graph query adaptation
US9177346B2 (en) 2010-07-01 2015-11-03 Facebook, Inc. Facilitating interaction among users of a social network
US9495429B2 (en) 2010-07-09 2016-11-15 Daniel Paul Miranker Automatic synthesis and presentation of OLAP cubes from semantically enriched data sources
US8983990B2 (en) * 2010-08-17 2015-03-17 International Business Machines Corporation Enforcing query policies over resource description framework data
US20120096043A1 (en) * 2010-10-19 2012-04-19 7 Degrees, Inc. Data graph cloud system and method
JP5100820B2 (ja) 2010-11-25 2012-12-19 株式会社東芝 問合せ式変換装置、方法およびプログラム
US9116955B2 (en) * 2011-05-02 2015-08-25 Ab Initio Technology Llc Managing data queries
US8775517B1 (en) 2011-07-12 2014-07-08 Relationship Science LLC Viewing connectivity between user and entity of an information service
US8977611B2 (en) 2011-10-18 2015-03-10 Facebook, Inc. Ranking objects by social relevance
US20150026158A1 (en) 2012-01-31 2015-01-22 Kent State University Systems, methods, and software for unified analytics environments
US8533182B1 (en) 2012-05-31 2013-09-10 David P. Charboneau Apparatuses, systems, and methods for efficient graph pattern matching and querying
GB201210234D0 (en) * 2012-06-12 2012-07-25 Fujitsu Ltd Reconciliation of large graph-based data storage
US9053210B2 (en) 2012-12-14 2015-06-09 Microsoft Technology Licensing, Llc Graph query processing using plurality of engines
EP2755148A1 (de) 2013-01-15 2014-07-16 Fujitsu Limited Datenspeichersystem und Programm und Verfahren zur Ausführung in einem Datenspeichersystem
US10713261B2 (en) 2013-03-13 2020-07-14 Google Llc Generating insightful connections between graph entities
US20140310302A1 (en) 2013-04-12 2014-10-16 Oracle International Corporation Storing and querying graph data in a key-value store
US20140330867A1 (en) * 2013-05-01 2014-11-06 Silicon Graphics International Corp. Software design pattern for adapting a graph database visualization software
US20140337373A1 (en) 2013-05-07 2014-11-13 Magnet Systems, Inc. System for managing graph queries on relationships among entities using graph index
US9317557B2 (en) 2013-10-24 2016-04-19 Microsoft Technology Licensing, Llc Answering relational database queries using graph exploration
US20150120717A1 (en) 2013-10-25 2015-04-30 Marketwire L.P. Systems and methods for determining influencers in a social data network and ranking data objects based on influencers
US9542440B2 (en) 2013-11-04 2017-01-10 Microsoft Technology Licensing, Llc Enterprise graph search based on object and actor relationships
IN2013CH05115A (de) 2013-11-12 2015-05-29 Inmobi Pte Ltd
US20150302300A1 (en) * 2014-04-18 2015-10-22 Voalte, Inc. Efficient graph-based rule engine for complex, dynamic, unstructured data
US20150302063A1 (en) 2014-04-21 2015-10-22 Linkedln Corporation System and method for searching a distributed node-sharded graph
US20160171540A1 (en) 2014-12-12 2016-06-16 Suryanarayana MANGIPUDI Dynamic Omnichannel Relevant Content And Services Targeting In Real Time
US9378303B1 (en) 2015-09-18 2016-06-28 Linkedin Corporation Representing compound relationships in a graph database

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220335086A1 (en) * 2021-04-15 2022-10-20 Vesoft Inc. Full-text indexing method and system based on graph database
CN114996791A (zh) * 2022-08-01 2022-09-02 湖南高至科技有限公司 一种基于ear的人机交互仿真模型构建方法
CN114996791B (zh) * 2022-08-01 2022-11-22 湖南高至科技有限公司 一种基于ear的人机交互仿真模型构建方法

Also Published As

Publication number Publication date
DE202016005239U8 (de) 2016-12-22
WO2017048303A1 (en) 2017-03-23
US9535963B1 (en) 2017-01-03
CN108027818B (zh) 2019-08-27
CN108027818A (zh) 2018-05-11

Similar Documents

Publication Publication Date Title
DE202016005239U1 (de) Graph-basierte Abfragen
EP3144826B1 (de) Verfahren und vorrichtung zur darstellung von verbindungsbeziehungen in einer graphendatenbank
US9672247B2 (en) Translating queries into graph queries using primitives
DE112018004946B4 (de) Kognitive datenanonymisierung
US9378241B1 (en) Concatenated queries based on graph-query results
DE60004385T2 (de) Verfahren und systeme um olap hierarchien zusammenfassbar zu machen
DE102013206281B4 (de) Optimieren von zerstreuten schemalosen Daten in relationalen Speichern
DE112016002395T5 (de) Zugriffskontrolle für Datenressourcen
DE112012005037B4 (de) Verwalten von redundanten unveränderlichen Dateien unter Verwendung von Deduplizierungen in Speicher-Clouds
DE60130475T2 (de) Durchführung von kalkulationen eines tabellenkalkulationstyps in einem datenbanksystem
DE112020003820T5 (de) Erkennung von Anomalien und Abweichungen unter Verwendung eines domänenindizierten Einschränkungs-Repository
DE112016003626T5 (de) Natürlichsprachliche Schnittstelle zu Datenbanken
DE102013222384B4 (de) Sicherheits-Screening auf Kontextgrundlage für Zugriff auf Daten
US11775859B2 (en) Generating feature vectors from RDF graphs
DE202011110124U1 (de) Hybridabfrageausführungsplan
DE112015000347T5 (de) Verarbeiten von Datensätzen in einer Ablage für große Datenmengen
US9378239B1 (en) Verifying graph-based queries
DE102013216273A1 (de) Umwandlung von Datenbanktabellenformaten auf der Grundlage von Benutzerdatenzugriffsmustern in einer vernetzten Datenverarbeitungsumgebung
DE102014103279A1 (de) Pivot-Facets für Text-Mining und Suche
DE112014000976T5 (de) Garantieren der Anonymität von Linked Data-Graphen
DE102013200355A1 (de) Zusammenfügen von Dokumenten aud der Grundlage der Kenntnis eines Dokumentenschemas
DE112018005725T5 (de) Daten-deidentifikation auf der grundlage eines erkennens von zulässigen konfigurationen für daten-deidentifikationsprozesse
DE112021000338B4 (de) Auslagern der statistikerfassung
DE112020004814T5 (de) Ontologiegestützte abfrageweiterleitung für verteilte wissensdatenbanken
DE112020000554T5 (de) Verfahren zum zugreifen auf datensätze eines stammdatenverwaltungssystems

Legal Events

Date Code Title Description
R207 Utility model specification
R081 Change of applicant/patentee

Owner name: MICROSOFT TECHNOLOGY LICENSING, LLC, REDMOND, US

Free format text: FORMER OWNER: LINKEDIN CORPORATION, MOUNTAIN VIEW, CALIF., US

R082 Change of representative

Representative=s name: DIEHL & PARTNER PATENT- UND RECHTSANWALTSKANZL, DE

Representative=s name: PATENT- UND RECHTSANWAELTE DIEHL & PARTNER GBR, DE

R081 Change of applicant/patentee

Owner name: MICROSOFT TECHNOLOGY LICENSING, LLC, REDMOND, US

Free format text: FORMER OWNER: LINKEDIN CORP. (N.D.GES.D. STAATES DELAWARE), SUNNYVALE, CALIF., US

R082 Change of representative

Representative=s name: DIEHL & PARTNER PATENT- UND RECHTSANWALTSKANZL, DE

Representative=s name: PATENT- UND RECHTSANWAELTE DIEHL & PARTNER GBR, DE

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

Free format text: PREVIOUS MAIN CLASS: G06F0017300000

Ipc: G06F0016000000

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