2015-03-22 5 views
8

Kürzlich habe ich in Graph-Datenbanken wie Neo4j und in Logik-Programmierung in Prolog und MiniKanren untersucht. Von dem, was ich bisher gelernt habe, erlauben beide, Fakten und Beziehungen zwischen ihnen zu spezifizieren, und auch das resultierende System für einige Auswahlen abzufragen. So kann ich eigentlich keinen großen Unterschied zwischen ihnen sehen, da beide verwendet werden können, um einen Graphen zu erstellen und ihn abzufragen, aber mit unterschiedlicher Syntax. Sie werden jedoch als völlig unterschiedliche Arten von Software präsentiert.Ein Graph DB vs ein Prolog (oder MiniKanren)

Abgesehen von der technischen Fähigkeit, dass Datenbanken eine effektivere Speichertechnologie vorschlagen, und dass kleine Logikkerne wie miniKanren einfacher und einbettbar sind, ist der Unterschied zwischen Grafikdatenbanken und logischen Programmiersprachen, wenn beide vorhanden sind nur eine Graphdatenbank + Abfrage-API?

+3

Prolog ist eine * Programmiersprache *, während eine Graphdatenbank nur eine Datenbank ist. Die meisten Dinge, die Sie mit Prolog machen können, sind mit einer Datenbank nicht möglich. Zum Beispiel ist der Aufbau eines Webservers wie dem, der die SWI-Prolog [Website] (http://www.swi-prolog.org) betreibt, mit Prolog möglich, aber mit einer Datenbank-Engine nicht möglich. – mat

+1

fügen Sie gespeicherte Prozeduren und Trigger in Graph-Datenbank, laden Sie einige Quellcode in attributierten AST (es ist ein Diagramm nativ), und Sie erhalten Sie db ausführen oder transformieren diese AST –

Antwort

9

Nein, logische Programmierung wie diese Dinge und neo4j verkörpert sind sehr unterschiedlich.

Auf einer Ebene haben Sie Recht, dass sie konzeptionell sowohl Grafikspeicher als auch Grafikabfrage darstellen. Aber für die Logik-Programmierung ist es nur eine konzeptionelle Graph-Abfrage, es gibt keine Garantie, dass es tatsächlich auf diese Weise gespeichert wird (wo es mit neo4j ist).

Zweitens, mit Logik-Programmierung versuchen Sie in der Regel horn clauses, die Sie durch viele Daten zu begründen versuchen. Sie können sich eine Hornklausel als eine einfache Regel vorstellen, wie "Wenn eine Person männlich ist und der direkte Vorfahre eines biologischen Kindes ist, bedeutet das, dass diese Person ein Vater ist". In Chiffre mit Neo4j, würden Sie ein Diagramm Muster, das Sie passen wollen beschreiben, dass die Ergebnisse in Daten, z.B .:

MATCH (p:Person)-[:father*]->(maleAncestor:Person) 
RETURN maleAncestor 

Das die Grafik durch father Beziehungen zu durchqueren erzählt, und männliche Vorfahren zurück. In einer Logik-Programmiersprache würden Sie es nicht so machen. Sie können angeben, dass a ein Vater von b bedeutet, dass a männlich ist, und a ist ein Vorfahre von b. Dies würde implizit und transitiv für alle gültigen a/b-Paarungen angeben. Dann würden Sie eine Frage stellen: "Wer sind die männlichen Vorfahren?" Die Programmierumgebung würde das dann unter Ausnutzung Ihrer Regeln beantworten. Das würde den Effekt haben, eine Durchquerung durch die Daten zu erzeugen, die der oben angegebenen Chiffre sehr ähnlich ist, aber die Art, wie Sie Ihre Daten verstehen und diese Traversierung aufbauen, ist völlig anders.

Logische Programmiersprachen funktionieren normalerweise über predicate resolution. Eine Graphabfragesprache wie Cypher arbeitet mit einer Kombination aus Mustererkennung und expliziter Pfadangabe. Sie sind sehr unterschiedlich.

+0

große Antwort ... 2 Dinge sind mir eingefallen: (1) Demorgan-Regeln transformieren die Disjunktion in Implikation, so dass jeder Satz von Hornsätzen isomorph zu einem gerichteten Graphen sein sollte, wo alle Pfeile impliziert sind (dies könnte in eine Neo-Db passen). (2) das Interpretieren eines Neo-Datenbank-Metagraphs ergibt eine Beziehung zwischen Knotenbeschriftungen, Beziehungstypen und Eigenschaften, die leicht in der formalen Logik dargestellt und von einem Reasoner verarbeitet werden könnten. Der Punkt, den ich mache, ist genau das, während unterschiedliche, Graphabfragen und Logikprogrammierung kompatibel sind und sich möglicherweise ergänzen – smartcaveman

+0

Vereinbart, sie sind kompatibel und komplementär in dem Sinne, dass die Implementierung eines Reasoners über ein Neo4j-Diagramm mit eingeschränktem Schema relativ einfach wäre.Aber die meisten Menschen würden, wenn sie den einen oder anderen Ansatz wählen, implizit ein bestimmtes Modell des Denkens über Code/Daten wählen. Sie könnten sich berühren, aber normalerweise nicht. – FrobberOfBits

+0

für Prolog N-ary Prädikate auf Hypergraphen aussehen - sie sieht viel mehr native Darstellungen –

Verwandte Themen