Содержание этой статьи было первоначально написано Андреасом Коллегером в блоге Neo4j.
Neo4j 1.8 обладает широкими возможностями для просмотра, рисования изображения с данными и размещения его в Интернете. В этом первом веховом выпуске хитрая работа над языком запросов Cypher дополняется живыми представлениями в документации Neo4j.
Cypher CREATE, SET, DELETE, FOREACH
Ведущий циферолог Андрес Тейлор начал работу, как Пабло Пикассо, с пустым музеем . Он поделился некоторыми своими мыслями о новой грамматике Cypher, доступной в 1.8.M01:
ABK : кажется, вы не можете выкинуть Cypher из головы достаточно быстро.
AT : Да, это действительно так. Моя семья устала слушать, как я обсуждаю за обеденным столом детали реализации Cypher, я просто не могу это отпустить.
АБК : Часть Cypher вдохновлена SQL, показывая ваши корни SQL, но новая грамматика не похожа на SQL.
ВПоначалу я не хотел, чтобы в нем были какие-либо мутационные вещи, это будет только для чтения язык. Тогда я не знал, чего хотел, но знал, чего не хотел. Как и в SQL, со всеми проблемами, которые могут возникнуть при вставке данных.
АБК : Какие проблемы?
А.Т . : Я думаю, что SQL — прекрасный язык, когда вы говорите об операторах SELECT, но когда вы выполняете манипулирование данными, он быстро превращается в обязательную вещь. Например, нормальная проблема — это «вставка или обновление», которая не имеет какого-либо чистого решения. Другая — над коллекциями вещей.
ABK : Ах, вот почему FOREACH теперь включен.
AT : Да.
ABK : И так каково было ваше решение?
ATБыть декларативным. Предоставляя нашим пользователям инструменты для выражения того, что они хотят, декларативным способом, чтобы им не приходилось придумывать шаблоны для работы с языком. И гораздо, гораздо проще понять, что происходит, для читателя запроса.
AT : Глядя на проблему, ошибку вчера, мне нужен был график для работы, поэтому я написал:
CREATE a,b, a-[:x]->b, a-[:y]->b;
Всего два узла, с двумя отношениями между ними, и это было потрясающе. На самом деле, первая версия этого выглядела бы намного хуже. Там была доводка. Была встреча, когда Aseem пришла с большим количеством предложений, и в сообществе было много дискуссий по этому поводу. Это результат.
Продолжая пример, вы можете дать им значения с помощью JSON-аналога:
CREATE a={name:"Andres", age:37}, b, a-[:x { foo:"bar" } ]->b, a-[:y]->b
Попробуйте,
затем обновите свойство следующим образом:
START n=node(0) SET n.name="Michael";
Try It
Простое удаление теперь возможно следующим образом:
START n=node(0) DELETE n;
ABK : А как насчет более сложных утверждений, таких как операции над подграфом?
AT : Вместо подзапросов вы можете связывать части операторов, используя WITH , который по существу объединяет RETURN и START . Как это:
view sourceprint? START lucy=node(1) MATCH lucy-->movie WITH lucy, collect(movie.title) AS movies SET lucy.movies = movies
Попробуйте.
Для работы над этими коллекциями вещей есть FOREACH:
START lucy=node(1) MATCH lucy-->movie WITH lucy, collect(movie) AS movies FOREACH (movie in movies : SET movie.actress=lucy.name )
Единственное правило, которое у нас есть, это то, что в одной части запроса вы можете только читать из графика или записывать в график. В приведенных выше кратких формах есть две логические части: запись, затем чтение, с подразумеваемым разделением. Чтобы быть явным и создавать более длинные запросы из частей, вы используете WITH . АБК : аккуратно. Ну, спасибо за всю тяжелую работу, Андрес. Не могу дождаться, чтобы попробовать это. AT : Это еще не все, но это хорошо. Наслаждаться.
Руководство по графикам Хогвартса
Выпустив живую
графическую консоль , следующим очевидным шагом стала анимация примеров Cypher в руководстве по
Neo4j . Теперь тот же графический код, который генерирует документацию, также создает интерактивные консоли для проведения экспериментов. Как живой, постоянно развивающийся документ, Руководство Neo4j изучает новые способы, которые помогут вам учиться.
Сама консоль превращается в красивый
REPL , в настоящее время поддерживающий Cypher и Geoff для первоначального создания графа и Cypher для запросов. Приятно отметить, что теперь визуализация выделяет созданные узлы и отношения. Когда все готово, график и начальный запрос могут быть переданы одним нажатием кнопки «Поделиться».
Эти общие графические списки действительно удобны для
твитоввопросы, сообщения о проблемах на
github и обсуждение моделирования графиков в
Neo4j Google Group .
подробности
Другие изменения примечания, включенные в этот выпуск:
- OSGi секция была добавлена к руководству
- потоковые результаты из REST API
- обычные неустанные улучшения производительности и исправления ошибок
Ветвь разработки 1.8 находится в многообещающем начале.
Получить его сегодня и дать нам обратную связь о направлении, в котором мы движемся.
Пользователи Heroku , вы сможете использовать 1.8.M01, предоставляя Neo4j следующим образом:
# heroku addons:add neo4j --neo4j-version 1.8.M01
Как всегда, спасибо всем за отзыв. Присоединяйтесь к нам в группе Google для обсуждения и задавайте вопросы о переполнении стека с тегом neo4j .
Ура,
Команда Neo4j