Статьи

Выпущен Neo4j 2.0.0-M05

Первоначально созданный Андресом Тейлором и Тобиасом Линдаакером.

Мы рады выпустить
Neo4j 2.0.0-M05 на этой неделе. Проект 2.0 находится в полном развитии после летних каникул. Сейчас мы приближаемся к полноте функциональности и хотим, чтобы вы выпустили этот релиз, чтобы вы могли дать нам уточненный отзыв о финальном выпуске.

Уникальные ограничения


Neo4j ценит гибкость и скорость разработки, которые вы получаете от использования базы данных без схемы.
Это позволяет легко и легко приступить к созданию прототипа и обучению. В этом есть огромная ценность. С другой стороны, очень приятно иметь возможность более жестко ограничивать структуру графа по мере развития проекта в направлении производства (большая тема в нашей дорожной карте Neo4j 2.x). Мы считаем, что новая
схема Optional дает вам лучшее из обоих миров.

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

Например, запустив этот запрос Cypher, вы получите уникальное ограничение на метку Person для свойства email.

CREATE CONSTRAINT ON (n:Person) ASSERT n.email IS UNIQUE;

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

 CREATE (:Person {email: "dude@company.com"});
CypherExecutionException: Node 2 already exists with label Person and property "email"=[dude@company.com]

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

 neo4j-sh (?)$ schema
Indexes
 ON :Person(email) ONLINE (for uniqueness constraint)


Constraints
 ON (person:Person) ASSERT person.email IS UNIQUE

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

Магазин этикеток


Milestone выпускает до этого сохраненные ярлыки в магазине Node.
Если бы это было предназначено для поиска всех узлов с меткой Person на них, мы просканировали бы все хранилище узлов и посмотрели бы на каждый узел. В выпуске Neo4j 2.0.0-M05 у нас теперь есть хранилище Label, где мы храним эту информацию, что позволяет быстрее находить все узлы с определенной меткой на них.

Вам не нужно ничего делать, чтобы использовать этот новый магазин.
Cypher будет использовать его автоматически, и
GlobalGraphOperations.getAllNodesWithLabel (Label) также будет использовать его. Но не удивляйтесь, когда увидите новые файлы в вашем каталоге data / graph.db.

Автозаменяемые транзакции


Поскольку Neo4j 2.0 является продуктом Java 7, и мы пытаемся убедиться, что все ресурсы связаны с транзакцией, мы изменили старый интерфейс Transaction, чтобы он теперь реализовывал
AutoClosable .
AutoClosable — это интерфейс, который позволяет вам написать оператор
try и иметь неявный
блок
finally, который освобождает любые
ресурсы
AutoClosable, зарегистрированные в
блоке
try .

Это означает, что теперь вы можете писать в Core API следующим образом:

 try (Transaction tx = db.beginTransaction()){
  // do stuff inside the transaction
  tx.success();
}


Этот блок гарантирует, что транзакция закрыта, даже если исключение выдается внутри
блока
try .

Удалено множество устаревших методов / классов


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

Новый Cypher Синтаксис


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

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

Для получения дополнительной информации о диапазонах, буквенных картах и ​​списках, вы можете прочитать все о них здесь:
http://docs.neo4j.org/chunked/2.0.0-M05/syntax-collections.html

Минималистичный Сайфер и JSON


После того, как
синтаксис
START стал необязательным из-за выразительности
меток и новых
индексов , мы также делаем
необязательными
WHERE и
MATCH, если вам вообще не нужны переменные. И теперь вы можете возвращать
буквальные карты напрямую, что делает Cypher более дружественным к JSON.

RETURN { key : "Value", collectionKey: [ { inner: "Map1" }, { inner: "Map2" } ] } as JSON

Устаревший> / dev / null


Теперь мы удалили несколько устаревших API из Neo4j, как было объявлено по крайней мере двумя версиями ранее.
Смотрите журналы изменений.

Как всегда, мы сделали множество исправлений и улучшений производительности. Вот
заметки о выпуске . Кроме того, большое спасибо за все хорошие предложения, обсуждения и сообщения об ошибках, которые вошли в этот выпуск. Это имеет большое значение!

С уважением,

Андрес Тейлор и Тобиас Линдакер