Узел идентификаторы в СУБД Neo4j
Я новичок в Neo4j-только вчера вечером начал играть с ним.
Я заметил, что все узлы идентифицируются автоматически увеличенным целым числом, которое генерируется во время создания узла - это всегда так?
мой набор данных имеет естественные строковые ключи, поэтому я хотел бы избежать необходимости сопоставления между назначенными идентификаторами Neo4j и моими собственными. Можно ли вместо этого использовать строковые идентификаторы?
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 но есть еще много ограничений