-
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.
-
-
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).
-
-
-
-
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.
-
-
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.
-
-
-
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.