Мы рады выпустить
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: "[email protected]"}); CypherExecutionException: Node 2 already exists with label Person and property "email"=[[email protected]]
В машинном отделении уникальные ограничения реализуются с использованием уникального индекса. Вы можете увидеть это, глядя на схему, например, используя оболочку:
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 .
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, как было объявлено по крайней мере двумя версиями ранее. Смотрите журналы изменений.
Как всегда, мы сделали множество исправлений и улучшений производительности. Вот
заметки о выпуске . Кроме того, большое спасибо за все хорошие предложения, обсуждения и сообщения об ошибках, которые вошли в этот выпуск. Это имеет большое значение!
С уважением,
Андрес Тейлор и Тобиас Линдакер