2015-11-27 3 views
1

У меня возник вопрос о том, как создать запрос OrientDB. Запрос должен считать вершины друзей друзей в глубине.OrientDB запрос друга друга в социальной сети

Я бегу OrientDB 2.1.6.

Схемы: Лица является Vertex, со свойством идентификатора (интермедиат) Друга пограничного

Отношение Ищу, как это:

Person - Друг -> Человек - - Друг -> Лицо (# 12: 0) (# 12: 1) (№ 12: 2)

У меня есть 1 milion vertex и 100 milion edge. Каждая вершина имеет 100 ребер со случайными вершинами.

Я хочу начать с вершины # 12: 0 и подсчитать, сколько вершин у меня в глубинах 2,3,4 и 5. Я хочу сравнить производительность запросов в миллисекундах с Neo4j.

Может кто-нибудь мне помочь? Как самый быстрый способ запросить это на OrientDB? Извините за плохой английский.

Спасибо ребята

ответ

0

Попробуйте это: select @rid,out("Friend").size() from (traverse out() from #12:0 while $depth<=5)

С уважением

1

Если вы хотите, чтобы получить число вершин на глубине 2, число вершин на глубине 3, и т.д. Вы можете использовать этот запрос

select $depth,count(*) from (traverse out() from #12:0 while $depth<=5) where $depth>=2 group by $depth 

если вы хотите просуммировать, сколько вершин есть на глубине 2,3,4,5 вы можете использовать этот запрос

select count(*) from (traverse out() from #12:0 while $depth<=5) where $depth>=2 
+0

Возможно, вы захотите использовать («Друг»), а не просто out(), поскольку в базе данных могут быть другие типы внешних границ. – peak

+0

еще лучше, вы можете использовать оба («Друг»), если направление кромки не имеет значения в вашем домене (например, если я ваш друг, вы тоже должны быть моим другом) –

+0

также, согласно документации , если у вас фиксированная глубина, вы можете сделать («Друг»). («Друг») для 2-х уровней глубины, и это будет быстрее. – Sebastian