【问题标题】:Node identifiers in neo4jneo4j 中的节点标识符
【发布时间】:2012-02-21 12:19:22
【问题描述】:

我是 Neo4j 的新手 - 昨天晚上才开始使用它。

我注意到所有节点都由在节点创建期间生成的自动递增整数标识 - 总是这样吗?

我的数据集有自然的字符串键,所以我想避免在 Neo4j 分配的 id 和我自己的 id 之间进行映射。是否可以改用字符串标识符?

【问题讨论】:

    标签: neo4j


    【解决方案1】:

    将 node-id 视为一个实现细节(就像关系数据库的 rowid 一样,可用于标识节点,但不应依赖于永远不会重用)。

    您可以将自然键作为属性添加到节点,然后使用自然键索引您的节点(或为它们启用自动索引)。​​

    例如在 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

    【讨论】:

    • 谢谢迈克尔,正是我需要知道的。这东西显然还不是太主流,文档和讨论非常简单!
    • @Michael Hunger 当你调用 n.setProperty("id","my-natural-key");您正在创建与 neo4j 创建正确的自动生成节点 ide 不同的 id?或者这是试图覆盖 neo4j 正在使用的 id?
    • @michael-hunger 是否可以添加自动增量属性?还是我必须为我创建的节点创建唯一 ID?
    • 另一个需要注意的重点是,当你提供自己的 id 时,确保它的值不是很大。更好的是坚持增量性质。否则,在db close 时,Neo4j 引擎需要相当长的时间才能关闭,而且磁盘上的db 大小也非常大。
    【解决方案2】:

    这应该会有所帮助:

    创建索引以支持批量导入期间的自动索引我们 知道如果在 neo4j.properties 中启用了自动索引,每个节点 创建的将添加到名为 node_auto_index 的索引中。现在, 这是很酷的一点。如果我们加上原来的手动索引(当时 批量导入)并将其命名为 node_auto_index 并启用自动 在 neo4j 中进行索引,然后批量插入的节点将显示为 自动索引。从那里开始,每次您创建一个节点时,该节点 也会被编入索引。**

    来源:Identifying nodes with Custom Keys

    【讨论】:

      【解决方案3】:

      根据 Neo 文档,应该有自动索引 http://neo4j.com/docs/stable/query-schema-index.html 但是还是有很多限制

      【讨论】:

        【解决方案4】:

        除了所有答案之外,neo4j 仍会创建自己的 ID 以更快地工作并提供更好的服务。请确保内部系统的 id 之间没有冲突,然后它将创建具有相同属性的节点,并在系统中显示为空节点。

        【讨论】:

          【解决方案5】:

          生成的ID是默认的,用户不能修改。用户可以使用您的字符串标识符作为该节点的属性。

          【讨论】:

            猜你喜欢
            • 2016-11-15
            • 1970-01-01
            • 1970-01-01
            • 2023-03-22
            • 2015-11-24
            • 2020-08-04
            • 2022-12-11
            • 2018-02-28
            • 1970-01-01
            相关资源
            最近更新 更多