2015-03-22 1 views
8

Недавно я искал в таких базах данных, как Neo4j, и в логическое программирование в Prolog и miniKanren. Из того, что я узнал до сих пор, оба позволяют указывать факты и отношения между ними, а также запрашивать полученную систему для некоторых выборов. Таким образом, на самом деле я не вижу большой разницы между ними в том, что они оба могут использоваться для построения графика и запроса, но с использованием другого синтаксиса. Однако они представлены как совершенно разные виды программного обеспечения.Граф DB против Prolog (или miniKanren)

Помимо технической базы данных, возможно, предлагая более эффективную технологию хранения в пространстве и времени, за исключением того, что крошечные логические ядра, такие как miniKanren, проще и вставляются, какова фактическая разница между базами данных графов и языками логического программирования, если они оба просто графическая база данных + API запросов?

+3

Prolog - это * язык программирования *, тогда как база данных графа - это только база данных. Большинство вещей, которые вы можете делать с Prolog, невозможно выполнить только с помощью базы данных. Например, создание Pro-сервера, такого как сервер SWI-Prolog [веб-сайт] (http://www.swi-prolog.org), возможно, но невозможно с помощью только механизма базы данных. – mat

+1

добавьте хранимые процедуры и триггеры в базу данных графа, загрузите некоторый исходный код, обработанный в атрибут AST (это граф изначально), и вы получите db выполнить или преобразовать этот AST –

ответ

9

Нет, логическое программирование, воплощенное этими вещами и нео4j, совершенно иное.

На одном уровне вы правы, что они концептуально равны как для хранения графа, так и для графового запроса. Но для логического программирования это всего лишь концептуальный запрос графа, нет гарантии, что он фактически хранится таким образом (где с neo4j, это так).

Во-вторых, с логическим программированием вы обычно пытаетесь установить horn clauses, что позволяет вам рассуждать множеством данных. Вы можете думать о роговой оговорке как о простом правиле, например: «Если человек является мужчиной и является прямым предком биологического ребенка, это означает, что человек является отцом». В шифром с Neo4j, вы бы описать шаблон графа, который вы хотите, чтобы соответствовать, что приводит к данным, например .:

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

Это говорит, чтобы пересечь график по father отношений, и возвращения мужчин предков. На логическом языке программирования вы не сделали бы этого так. Вы можете указать, что a является отцом b означает, что a является мужчиной, а a является предком b. Это косвенно и транзитивно означает, что для всех допустимых пар a/b. Тогда вы зададите вопрос: «Кто такие мужские предки»? Тогда среда программирования ответит на это, используя ваши правила. Это повлияло бы на построение обхода через данные, которые очень похожи на шифр, указанный выше, но способ понимания ваших данных и построения этого обхода совершенно другой.

Языки программирования, как правило, работают через predicate resolution. Язык запросов графа, такой как cypher, работает комбинацией соответствия шаблонов и явным обозначением пути. Они совсем разные.

+0

отличный ответ ... Мне пришло 2 вещи: (1) демарговые правила трансформируют дизъюнкт к импликации, поэтому любой набор предложений рога должен быть изоморфен некоторому ориентированному графу, где все стрелки являются импликацией (это может вписываться в neo db). (2) интерпретация метаграфа нео-базы данных дает отношение между метками узлов, типами отношений и свойствами, которые могут быть легко представлены в формальной логике и обработаны аргументом. То, что я делаю, - это то, что, в то время как разные, графические запросы и логическое программирование совместимы и потенциально дополняют друг друга – smartcaveman

+0

Согласованные, они совместимы и дополняют друг друга в том смысле, что внедрение рассуждения по графику neo4j с ограниченной схемой было бы относительно простым.Но большинство людей, выбирая один из подходов или других, будут неявно выбирать конкретную модель мышления о коде/данных. Они * могут * прикоснуться, но обычно это не так. – FrobberOfBits

+0

для N-ary предикатов Prolog на гиперграфах - они выглядят гораздо более нативными представлениями –