Статьи

Neo4j — [: Loves] -> Cypher

Продолжение вебинара

Спасибо всем за участие в вебинаре, я был в восторге от посещаемости и замечательных дискуссий в чате.

Как и было обещано, мы опубликуем этот пост, чтобы ответить на вопросы, на которые не были даны ответы, и предоставим удобное место для ознакомления с ресурсами, упомянутыми на вебинаре.

Ваши вопросы

Олег Окунь: Как легко можно перейти с графической базы данных на неграфовую базу данных NoSQL?
Экспортируйте свои данные с помощью любого из API (Java, REST, Cypher) и импортируйте их на другой стороне.

Александр Мейно: Должны ли мы беспокоиться о производительности при определении шаблонов шифров?
Есть некоторые проблемы, связанные с производительностью шифров в Neo4j 1.9, сейчас попробуйте сосредоточиться на простом шаблоне с одним или двумя связанными узлами и необязательными отношениями. Вы можете использовать шаблоны как выражения вместо необязательных отношений

Олег Окунь: Можете ли вы указать на реализацию Cypher некоторых алгоритмов машинного обучения / интеллектуального анализа данных?
Я не знаю ни одной, может быть интересная тема, чтобы внести свой вклад. В руководстве Neo4j есть несколько примеров моделирования данных  .

Мартин: Будут ли будущие версии Cypher обратно совместимы?
Старые версии синтаксического анализатора Cypher поддерживаются до двух основных версий Neo4j, парсер oder может быть активирован путем добавления префикса, подобного CYPHER 1.7, к вашему запросу.

Александр Мейно: Предвидите ли вы «стандартный» язык запросов графов в ближайшие годы (или десятилетия)?
Не совсем, для нас мы ориентируемся на то, чтобы позволить нашим пользователям и пользователям сообщества решать их проблемы. Мы обсуждали это с другими поставщиками, но пока рано соглашаться со стандартом, пока мы все так заняты и сосредоточены на разработке продукта.

Аджинкья: Можете ли вы обсудить причины, по которым было принято решение использовать шифр с использованием Scala?
Это более длительное обсуждение, о котором я рассказывал в выступлении на Geekout Tallinn, см. Раздел ресурсов ниже.

Слайды

Запись видео

0830 — Cypher и Neo4j  от  Neo Technology  на  Vimeo .

Больше ресурсов

Отличный Вебинар Чат!

Чат  во время вебинар был здоров, спасибо много к  Andreas Kollegger  для ответа на все вопросы.

Hassan: Washington DC here
Chris Skardon: evening from Cornwall, UK
Matt Taylor: hello from Chicago
ASHISH M: wow! looks like we have an internnational crowd on today!! Anyone from Australia?
MilanSK: eveninig from Humenne, Slovakia
Harald: Frankfurt, Germany
Martin: Hi from Spain (and Gibraltar)
...
Alexandre Meynaud: Yes, the great thing about Cypher is that you express *what* you want to retreive from the graph, and not how
Aki Ristkari: It's easy to visualize and you don't have to explain any table-row-kill_me_now-hibernate stuff to people. That marketing term 'Whiteboard friendly' is actually very accurate
Andreas Kollegger: @Hisao you can't do sub-queries, but you can "chain" queries using a "WITH" clause to sort-of pipe the results to another query instead of returning them
Amit: is there a way to indicate in cypher to prune conditionally like we can using the traverser API
Hisao Motoyama: ok, thanks
Andreas Kollegger: @Ivan the query performance is not affected by the database size, though it is affected by an increase in "local" data
Alex Guerrieri: I love how intuitive it is
...
IvanTraveso: nice presentation. thanks!
Alexandre Meynaud: Great presentation Michael, thanks a lot
Wes: Thanks a lot guys.
Andreas Kollegger: thanks everyone, thanks Michael!
James Camfield: cheers
Chris Skardon: Thanks!
Mylène: Thanks. this was absolutely cool!
Aki Ristkari: Thanks for the show  
 

 

Как использовать Cypher из других языков программирования

Эта тема настолько обширна, что мы рассмотрим ее в отдельном блоге, а пока вот  ссылка на суть .

ExecutionEngine engine = new ExecutionEngine(graphDB);

String query = "start n=node:Person(name={name})
 match n-[:ACTS_IN]->movie<-[:ACTS_IN]-friend
 return friend";
ExecutionResult result = engine.query(query, map("name", "Keanu");

for (Map<String,Object> row : result) {
    Node friend = row.get("friend");
}

Iterator<Node> friends = result.columnAs("friend");

for (Node friend : friends) {
    friend.getProperty("name");