Статьи

Выпущен Neo4j 2.0: 5 способов помочь вам надрать задницу

[Этот пост был изначально написан Питером Нойбауэром]

Рождество уже близко, и чтобы ослабить напряженность до большого события, мы подумали, что подарим вам ранний подарок в этом году. Neo4j 2.0 — графовая база данных для всех. Мы сфокусировали многие усовершенствования на том, чтобы сделать наших пользователей успешными и лучше всего использовать базу данных.

(Графы) — [: FOR] -> (все)

Мы с радостью анонсируем финальную версию 2.0 Neo4j, которая поставляется с новыми захватывающими функциями, о которых мы не можем дождаться, чтобы рассказать вам. Мы долго работали над этим выпуском и очень рады, что теперь все собрались вместе, и вы можете наслаждаться результатами наших усилий. Вот 5 лучших новых наборов функций Neo4j 2.0:

1. Все о U (X)

Новый, блестящий браузер Neo4j

Мы полностью переписали браузер Neo4j на полезную визуальную рабочую среду с большим акцентом на счастье пользователя.

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

Прежде всего, чистый пользовательский интерфейс и полезные руководства, разделы справки и ваше первое графическое приложение «Фильмы» помогут вам начать работу.

Тогда мощная комбинация многострочного редактора запросов Cypher с проницательными визуализациями, табличными представлениями, поддержкой перетаскивания и экспорта станет вашим ежедневным спутником. Стилизация вашего графика с помощью нескольких кликов поможет вам сделать свою точку зрения.

Чтобы сохранить вашу работу, браузер сохраняет историю, и вы можете сохранять соответствующие запросы в набор встроенных папок.

Визуализация запросов в новом браузере Neo4j набора данных MusicBrainz

Следите за новостями браузера Neo4j в ближайшем будущем. Сейчас загрузите и установите Neo4j , перейдите по адресу http: // localhost: 7474 и следуйте инструкциям! Обязательно изучите боковые панели слева для полезных инструментов и информации.

Установщик Windows

Большая часть сообщества пользователей Neo4j работает над Windows для разработки приложений. Чтобы сделать работу с этой платформой более удобной, мы теперь предлагаем собственный установщик Windows, который также обеспечивает правильную среду выполнения Java из коробки. Мы устанавливаем приложение Neo4j Desktop в вашей системе, которое поможет вам запустить, остановить и настроить сервер Neo4j.

2. Метки на узлах

Впервые с момента создания Neo4j в 2002 году мы решили внести существенные изменения в модель графа свойств (таким образом, увеличение номера основной версии). Теперь он был улучшен (необязательно) метками на узлах. Метки — это способ обозначить, какие «роли» будет иметь узел в вашем домене. В связи с этим это не просто «типовая» информация, но гораздо более гибкая и универсальная. Вы можете иметь столько меток на каждом узле, сколько захотите.

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

  • l  Метки могут обозначать узлы с одинаковыми характеристиками, по сути, давая вам возможность ввести «типы» или «теги» узлов — такие подграфы, как Person , Product или «вещи, которые имеют свойство временной метки» .
  • l  Метки — очень эффективный способ избежать «узлов типов» и других шаблонов, которые использовались в прошлом для представления типов на графике.
  • l  Метки являются якорем для прикрепления других функций, таких как автоматические индексы, ограничения и т. д., декларативным и предсказуемым образом.
  • l  Метки не являются обязательными, поэтому ваши существующие модели данных будут работать.

Модель графа с метками.

Если вы хотите найти один способ обновить существующую структуру графиков, чтобы получить выгоду от индексов, посмотрите другой пример обновления графиков с 1.9 до 2.0 .

Вы можете легко обновить свой график с помощью меток, выполнив операторы шифрования (опционально упакованные), например так:

MATCH (people)<-[r:IS_A]-(person)
WHERE id(people) = {id-of-type-node}
SET person:Person
DELETE r

3. Необязательная схема

Подождите, что мы слышим, вы говорите. Схема в базе данных NoSQL? Это не то же самое, что возвращаться к реляционным схемам, а скорее предоставлять некоторую дополнительную метаинформацию, чтобы ваши запросы работали лучше и ваши данные были более согласованными.

Автоматические индексы

Имея метки, мы можем обеспечить индексирование метаинформации, решая некоторые наиболее распространенные шаблоны индексации — автоматический индекс . Теперь вы можете объявить автоматически проиндексированное свойство на помеченном узле, как это в Cypher :

CREATEINDEXON:Person(name)

Этот индекс будет индексировать существующие данные в фоновом режиме. После того, как он становится ОНЛАЙН, он обновляется транзакцией Индекс затем автоматически используется базой данных в запросе, подобном следующему:

MATCH (n:Person {name:'Andres'})
RETURN n

Ограничения уникальности

При работе с любыми данными очень распространенным является то, что определенные сущности существуют в вашей базе данных только один раз, известные как ограничения уникальности . Neo4j теперь поддерживает это автоматически, используя автоматические индексы для меток, поэтому вы можете определить их следующим образом:

CREATECONSTRAINTON(person:Person) ASSERTperson.name ISUNIQUE

Это гарантирует, что вы не сможете создать второй узел «Person» с тем же значением свойства «name». Такой запрос не удастся. Мы также предоставляем семантику «Получить или создать» с помощью MERGE (см. Ниже).

4. Транзакционная конечная точка HTTP

Чтобы объединить удобство HTTP с мощью реальных транзакций по сети по нескольким HTTP-запросам, содержащим много операторов Cypher, мы создали транзакционную конечную точку Cypher HTTP . Это позволяет вам создавать транзакции, отправляя операторы и параметры POST в URL-адрес / db / data / транзакции. Это создаст для вас транзакцию и вернет URL внутренней транзакции. Затем вы можете опубликовать больше операторов по этому URL-адресу, например / db / data / транзакция / 4, и, наконец, зафиксировать транзакцию с POST в / db / data / транзакции / 4 / commit, Эта конечная точка также передает все данные с сервера на сервер, поэтому с обеих сторон требуется минимальное использование памяти. И, наконец, мы сократили объем информации, передаваемой по узлам, отношениям и путям, до абсолютного минимума, только их свойства.

5. Больше возможностей Cypher

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

ДОПОЛНИТЕЛЬНЫЙ МАТЧ

Instead of having the (a)-[?]-() pattern for optional relationships, we have opted for the more powerful approach of declaring OPTIONAL MATCHes, giving the possibility to not only declare single relationships, but whole patterns as optional. A simple example is the statement to delete all nodes and relationships in the database:

MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r

MERGE

This is the equivalent of “Get or Create” semantics. If a node with this pattern already exists, it is matched and returned, otherwise a new one is created. These two options are exposed and can be acted on, like the following:

MERGE (keanu:Person { name:'Keanu Reeves' })
ONCREATESET keanu.created = timestamp()
ONMATCHSET keanu.lastSeen = timestamp()
RETURN keanu

Literal Node Patterns

If there are now special conditions to observe, simple property matches can be stated directly in the MATCH clause, making the MATCH statement more readable. For example, matching a simple node with a “name” property can look like this:

MATCH (keanu:Person { name:'Keanu Reeves' })
RETURN keanu

Returning Documents Structures with Literal Maps and Collections

This is a very convenient way to return JSON-documents as results from a Cypher query, making client-side parsing much easier. Any expression (including paths), collections and even nested maps can be used and returned. Here is an example:

MATCH (a:Person { name: "Andres" })<-[:FATHER_OF]-(child)
RETURN a.name as property,
  "literal" as string,
  (a)--() as path,
  [0,1] as collection,
  {name:a.name, kids:collect(child.name), _id:ID(a), _labels:labels(a)} as document

Will return:

Of course the Neo4j Manual has been updated to reflect all the changes and the Cypher Reference card too.

We are extremely excited about this Neo4j release and really want to ask you for your feedback, comments and contributions to our beloved graph database project and and its wonderful community.

Enjoy Neo4j 2.0, and Happy Coding and Happy Holidays!

/peter and the whole Neo4j developer community