Узел идентификаторы в СУБД Neo4j


Я новичок в Neo4j-только вчера вечером начал играть с ним.

Я заметил, что все узлы идентифицируются автоматически увеличенным целым числом, которое генерируется во время создания узла - это всегда так?

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

5 52

5 ответов:

подумайте о Node-id как о деталях реализации (например, rowid реляционных баз данных может использоваться для идентификации узлов, но не следует полагаться на то, что он никогда не будет использоваться повторно).

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

E..g в Java API:

Index<Node> idIndex = db.index().forNodes("identifiers");

Node n = db.createNode();
n.setProperty("id", "my-natural-key");
idIndex.add(n, "id",n.getProperty("id"));

// later
Node n = idIndex.get("id","my-natural-key").getSingle(); // node or null

авто-индексатора вы бы включить автоматическое индексирование свой "ID" поле.

// via configuration 
GraphDatabaseService db = new EmbeddedGraphDatabase("path/to/db",
 MapUtils.stringMap( 
    Config.NODE_KEYS_INDEXABLE, "id", Config.NODE_AUTO_INDEXING, "true" ));

// programmatic (not persistent)
db.index().getNodeAutoIndexer().startAutoIndexingProperty( "id" );

// Nodes with property "id" will be automatically indexed at tx-commit
Node n = db.createNode();
n.setProperty("id", "my-natural-key");

// Usage
ReadableIndex<Node> autoIndex = db.index().getNodeAutoIndexer().getAutoIndex();
Node n = autoIndex.get("id","my-natural-key").getSingle();

см.:http://docs.neo4j.org/chunked/milestone/auto-indexing.html И: http://docs.neo4j.org/chunked/milestone/indexing.html

Это должно помочь:

создать индекс для поддержки автоматического индексирования во время пакетного импорта мы знайте, что если автоматическое индексирование включено в neo4j. properties, каждый узел то, что будет создано, будет добавлено в индекс с именем node_auto_index. Сейчас, вот это круто немного. Если мы добавим исходный ручной индекс (в то время пакетного импорта) и назовите его как node_auto_index и включите авто индексирование в neo4j, то пакетная вставка узлов будет выглядеть так, как будто автоматически индексируется. И от там на каждый раз, когда вы создаете узел, Узел будет индексироваться также.**

источник : идентификация узлов с помощью пользовательских ключей

согласно NEO docs должны быть автоматические индексы на месте http://neo4j.com/docs/stable/query-schema-index.html но есть еще много ограничений

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

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