当前位置: 首页 > 知识库问答 >
问题:

使用Neo4HP在Neo4j中创建关系花费的时间太长

欧阳正德
2023-03-14

我一直在尝试使用neo4jphp为我们的新模块创建节点和关系[https://github.com/jadell/neo4jphp/wiki].

我使用cypher查询实现同样的功能。

$queryNodes = "CREATE (n:User { props } ) ";
$query      = new Everyman\Neo4j\Cypher\Query($client, $queryNodes, array('props' => $arrNodeProperties));
$result     = $query->getResultSet();
$queryRelations = "
   MATCH (authUser: User { userid: 0001 }),(friend)
     WHERE friend.userid IN ['" . implode("','",$relations) . "']
        CREATE UNIQUE (authUser)-[r:KNOWS { connection: 'user_friend' }]->(friend)";

到目前为止,节点创建工作在gr8中。

但是,当我尝试为节点创建独特的关系时,它花费的时间太长。。。。

注意:标签用户有唯一的约束userid,因此带有标签用户的节点由属性userid上的Neo4j索引。

CREATE CONSTRAINT ON (user:User) ASSERT user.userid IS UNIQUE
  1. 我们还有其他方法可以创造独特的关系吗?
  2. 我可以在关系上使用索引吗?如果是,我怎么能实现同样的目标。

共有2个答案

逑景铄
2023-03-14

最后我算出来了,几乎没有什么变化。。。

谢谢@MichaelHunger的帮助。

这就是我是怎么做到的。。。

$queryNodes = "
    FOREACH (nodeData IN {nodeProperties}|
        MERGE (n:User { userid: nodeData.userid })
            ON CREATE SET
                n.login = nodeData.login,
                n.userid = nodeData.userid,
                n.username = nodeData.username,
                n.name = nodeData.name,
                n.gender = nodeData.gender,
                n.profile_pic = nodeData.profile_pic,
                n.create_date = timestamp()
            ON MATCH SET
                n.update_date = timestamp()
    )
";
$query = new Everyman\Neo4j\Cypher\Query($client, $queryNodes, array('nodeProperties' => $arrNodeProperties));
$result = $query->getResultSet();
$queryRelations = "
    MATCH (authUser: User { userid: {authUserid} }), (friend:User)
        WHERE friend.userid IN {friendUserIds}
    CREATE UNIQUE (authUser)-[r:KNOWS { connection: 'user_friend' }]->(friend)
";
$query  = new Everyman\Neo4j\Cypher\Query($client, $queryRelations, array('friendUserIds' => $arrFriendUserId, 'authUserid' => $authUserid));
$result = $query->getResultSet();

如果我们能进一步改进,请评论。

胡景焕
2023-03-14

您可以尝试使用MERGE而不是CREATE UNIQUE。另外,对fried的列表使用Cypher参数,而不是在客户端连接,请参阅http://docs.neo4j.org/chunked/stable/cypher-parameters.html

 类似资料:
  • 附加信息-节点数(a类)-1791节点数(b类)-3341 有没有更快的方法来加载这个,加载csv操作需要这么多时间?我是不是哪里搞错了?

  • 问题内容: 我有一本书得很长。我使用setText()方法在JTextArea中显示它。它冻结了UI,并花费大量时间。我该如何解决? 这是SSCCE: 问题答案: 在与构造GUI分开的单独线程中创建DefaultStyledDocument似乎是创建巨大文本区域的最快方法。DefaultStyledDocument是线程安全的。 这是我用来测试DefaultStyledDocument的代码。我用

  • 问题内容: SQL: 用户索引: 个人资料索引 解释 : 上面的查询大约需要0.1221 我怎样才能使其运行更快? 问题答案: 我删除了此查询,因此搜索完成后不会显示总结果数。 似乎是临时解决方案,甚至是永久解决方案。

  • 我正在尝试训练一个模型,在我看来,与其他数据集相比,该模型花费的时间太长,因为完成一个历元需要大约1小时和20分钟。我认为问题是因为数据集没有存储在ram上,但我不确定这一点。 代码如下: 型号: 顺序模型 2个卷积层,32个神经元,激活=relu 1个卷积层,64个神经元,激活=relu 平整和致密层,激活=relu 退出0.5 具有sigmoid激活的输出层(致密) Adam optimize

  • 我希望它创建每个节点(而不是在已经存在具有相同ID的节点时创建新节点),并创建每个关系(在CSV中指定具有多个关系的节点中有多个关系from/to节点)。 实际发生的情况:它似乎创建了所有唯一的节点。它还创建了节点之间的关系,但它只为每个节点设置一个关系,而不考虑与多个其他节点进行通信的一些节点。 我很困惑,因为我的理解是,如果在数据库中还没有出现关系,它将创建关系,所以我认为它将创建CSV中指定

  • 我开始将Neo4J与Spring数据Rest一起使用。我有一个用于建模节点和边的节点实体和关系实体。我能够使用postman创建具有以下内容的新节点。 我不确定创建节点之间关系的JSON格式是什么。例如: 创建新节点并与现有节点关联 任何关于我需要使用什么JSON的例子都将不胜感激。 我的节点实体和关系实体如下: