Граф базы данных для подсчета прямых отношений - PullRequest
3 голосов
/ 03 августа 2011

Я пытаюсь построить график структуры ссылок на веб-сайте, чтобы смоделировать, как страницы в данном домене ссылаются друг на друга. Примечание. Я не отображаю ссылки на сайты не в корневом домене.

Очевидно, что этот график может быть значительным по размеру. Один из основных запросов, которые я хочу выполнить, - подсчитать, сколько страниц напрямую ссылаются на данный URL. Я хочу выполнить это для всего графа (дрожать) так, чтобы я получил список URL-адресов и количество входящих ссылок на этот URL-адрес.

Я знаю, что одним из популярных способов сделать это было бы с помощью некоторого сокращения карт - и я все равно могу пойти по этому пути - однако у меня есть требование, чтобы иметь возможность просматривать этот отчет в (почти) реальном времени, что не Как правило, карта уменьшает дружественный.

Я быстро взглянул на neo4j и OrientDb. Хотя оба они могут моделировать отношения, которые я хочу, неясно, смогу ли я запросить их для создания нужного отчета. На данный момент я не привержен какой-либо конкретной технологии.

Любая помощь будет принята с благодарностью. Спасибо, Пол

Ответы [ 4 ]

3 голосов
/ 04 августа 2011

и OrientDB и Neo4J поддерживают Blueprints как общий API для выполнения операций с графами, таких как обход, подсчет и т. Д.

Если я хорошо понял ваш вариант использования, ваш график кажется довольно простым: у вас есть вершина "URL", которая связывает друг друга с одним типом Edge "Links".

Чтобы выполнить операцию с графами, взгляните на Gremlin .

1 голос
/ 05 августа 2011

Возможно, вы посмотрите на structr .Это CMS с открытым исходным кодом, работающая поверх Neo4j и имеющая именно такие типы межстраничных ссылок.

Для получения количества ссылок, указывающих на страницу, вам просто нужно выполнить итерациювходящие ссылки LINKS_TO для текущего узла страницы.

Каков вариант использования вашего запроса?Популярный список страниц?Так что бы просто содержать топ-н страниц?Затем вы можете попытаться просто начать в случайных местах графика проходить через входящие отношения LINKS_TO к вашим текущим узлам (-ям) параллельно и поместить их в структуру сортировки, чтобы вы всегда начинали / продолжали с первых 20 или около того верхних узлов страницы.которые уже имеют наибольшее количество входящих ссылок (пока они не закончены).

У Марко Родригеса есть несколько похожих примеров «рейтинга страниц» в документации Gremlin .У него также есть несколько сообщений в блоге , где он говорит об этом.

0 голосов
/ 06 августа 2011

Вам также следует взглянуть на продукт с высокой степенью масштабируемости графических баз данных, такой как InfiniteGraph.Если вы отправите электронное письмо в службу технической поддержки, я думаю, что они смогут указать вам пример кода, который выполняет большую часть того, что вы описали здесь.

0 голосов
/ 04 августа 2011

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

...