Последний выпуск M03
Neo4j 2.0 — это, как вы и ожидали, улучшения в Cypher. В этом посте также обсуждаются некоторые изменения, внесенные в последний этап (M02), который мы не полностью рассмотрели.
MERGE
Cypher теперь содержит довольно
широкое предложение MERGE : он заменит CREATE UNIQUE, поскольку он также учитывает индексы и метки в учетных записях и может даже использоваться для создания одного узла. MERGE либо сопоставляет график и возвращает то, что есть (один или несколько результатов), либо, если он ничего не находит, создает заданный путь. Таким образом, после завершения операции MERGE, Neo4j гарантирует, что заявленный шаблон находится там.
Мы также добавили дополнительные предложения в оператор MERGE, которые позволяют вам создавать или обновлять свойства в зависимости от того, был ли выбран узел. Обратите внимание, что — поскольку шаблоны могут содержать несколько именованных узлов и отношений — вам придется указать элемент, для которого вы хотите инициировать операцию обновления при создании или сопоставлении.
MERGE (keanu:Person { name:'Keanu Reeves' }) ON CREATE keanu SET keanu.created = timestamp() ON MATCH keanu SET keanu.lastSeen = timestamp() RETURN keanu
Мы выкладываем MERGE в основном для сбора отзывов о синтаксисе и использовании, есть еще несколько предостережений, например, не захватывание блокировок для уникального создания, поэтому вы можете получить дублирующиеся узлы на данный момент. Это все будет исправлено в финальной версии.
Вместе с MERGE, MATCH теперь также поддерживает шаблоны с одним узлом, как с метками, так и без них.
Изменения Сайфера
Две новые функции
startNode (rel) и endNode (rel) обеспечивают быстрый доступ к обоим концам отношений.
Помимо существующих подсказок индекса USING, теперь вы также можете потребовать, чтобы Cypher
сканировал указанные метки на наличие узлов (если это не происходит автоматически).
Cypher ExecutionResult теперь является закрываемым и будет немедленно освобождать ресурсы после закрытия. Больше не нужно его исчерпывать.
Мы исправили проблему с UNION и текстовым выводом, закрыли результаты индексации только для чтения и исправили проблему, при которой поиск индекса не удался с литеральными коллекциями.
Конечная точка Transactional Cypher HTTP
Уже с Milestone 2 мы добавили новую
конечную точку Cypher HTTP, позволяющую транзакциям охватывать несколько HTTP-запросов. Эта конечная точка работает только с операторами Cypher, из которых вы можете опубликовать несколько за один раз. Он передает данные с сервера на сервер и имеет гораздо более краткий формат для возврата данных. Возвращенные узлы и отношения просто представлены их свойствами (карта JSON). Помимо улучшенной поддержки транзакционности, этот API должен работать лучше, чем существующая (более старая) конечная точка REST Cypher из-за уменьшенной детализации ответа.
Вы можете использовать эту конечную точку, чтобы публиковать несколько операторов за один раз или последовательно публиковать несколько операторов чтения и записи. Откат запрашивается с помощью HTTP-запроса DELETE и фиксируется посредством POSTing в коммит-URL.
Вот пример сеанса:
Create Transaction and do some work. >> POST http://localhost:7474/db/data/transaction { "statements" : [ { "statement" : "CREATE (n {props}) RETURN n", "parameters" : { "props" : { "name": "My Node" } } } ] } << 201: Created Location: http://localhost:7474/db/data/transaction/3 { "commit" : "http://localhost:7474/db/data/transaction/3/commit", "results" : [ { "columns" : [ "n" ], "data" : [ [ { "name" : "My Node" } ] ] } ], "transaction" : { "expires" : "Tue, 28 May 2013 13:19:59 +0000" }, "errors" : [ ] } Commit transaction >> POST http://localhost:7474/db/data/transaction/3/commit { "statements" : [ { "statement" : "MATCH n RETURN id(n)" } ] } << 200: OK { "results" : [ { "columns" : [ "id(n)" ], "data" : [ [ 2 ] ] } ], "errors" : [ ] }
периферия
В Neo4j-Shell мы добавили команды для отображения автоматических индексов и их состояния.
Также BatchInserter теперь поддерживает метки, что позволяет вам создавать начальные хранилища Neo4j, содержащие метки.
Ломать перемены
Milestone 2 содержит некоторые важные изменения:
-
Замененные защищенные поля из org.neo4j.graphdb.factory.GraphDatabaseFactory
-
Удаленные org.neo4j.graphdb.index.BatchInserterIndex и BatchInserterIndexProvider, пожалуйста, используйте те из пакета org.neo4j.unsafe.batchinsert
-
BatchInserter и BatchGraphDatabase не двоично совместимы с 1.9, поскольку некоторые методы теперь принимают массив меток varargs в качестве последнего аргумента, пожалуйста, перекомпилируйте ваш код
-
Мы удалили альтернативный синтаксис WITH (==== a, b, c ====)
Как всегда, мы приглашаем вас опробовать
новый выпуск и сообщить о любых отзывах, проблемах или предложениях.
Большое спасибо Майклу Баху, Ричу Саймону, Роберту Гершке, Уэсу Фриману, Асем Кишоре, Мортезе Милани, Хавьеру де ла Росе и многим другим за отличные отзывы о Neo4j 2.0. Продолжай.