问题标签 [py2neo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
601 浏览

neo4j - 如何在 py2neo 上进行交易后使用返回的节点?

我使用以下代码成功合并节点:

日志文件如下所示:

返回的结果变量是:

注意错误的 uri (0.0.0.0)

当我尝试使用返回的节点实例时,会引发连接异常。IE:

通过记录的跟踪,我可以看到它试图从错误的服务器获取数据:

我究竟做错了什么?

0 投票
3 回答
2226 浏览

neo4j - 将大型数据集导入neo4j(有点扭曲) - 慢

我正在处理大约 17 毫米的处方声明,每个声明都包含以下字段(子集):

我的节点与上面的字段相同,关系是:

输入文件没有顺序,即patient / provider / drug可以出现在文件中的任何位置。

我正在使用 py2neo、CypherMERGE和 1,000 行的批量进行处理,以确保没有重复的患者、提供者或药物被创建。

Problem:性能 - 每批大约需要一分钟(4 个节点 + 4 个关系 X 1,000),并且随着图表的增长,时间也在增加。

Question: 有没有更好的方法?对非 python 建议开放。

0 投票
1 回答
398 浏览

lucene - 使用 py2neo - Neo4j 向索引添加多个值属性

我正在尝试将 py2neo 的多值属性存储在 Neo4j 数据库中。

我的代码是这样的:

可悲的是,使用 lukeall 检查生成的 Lucene 索引并执行搜索,它似乎不起作用,并且似乎所有内容都存储为如下字符串:[“Hello”,“Bye”] 有没有办法正确存储它以便它可以为所有不同的值编制索引?

提前致谢!

0 投票
2 回答
3893 浏览

python-2.7 - 如何使用py2neo检查NEO4J中是否存在节点

我想在我的python代码中插入一个验证如下:

我需要在我的源代码中实现这个算法

0 投票
3 回答
3900 浏览

python-2.7 - 检查我的数据库 Neo4j 中是否存在节点

请我无法检查和创建节点以及与预先存在的节点的关系。

我需要检查我的 Neo4j 数据库中是否预先存在节点并创建与该节点的节点加关系。

谢谢

0 投票
1 回答
727 浏览

python - 错误,太多值无法解压

我需要更正此异常:“要解压的值太多”

这是我的源代码:如果我的数据库中不存在节点,或者如果它存在,我需要插入一个节点,我只添加与新节点的新关系:)

谢谢你,我需要你的帮助

0 投票
1 回答
601 浏览

python - 创建索引时死锁

我尝试使用 py2neo 1.6.2 和 neo4j 2.0.1 使用 Cypher 查询创建索引:

该查询在 neo4j Web 界面中运行良好,但在 py2neo 中引发死锁错误:


py2neo.neo4j.DeadlockDetectedException:不要惊慌。

已检测到并避免了死锁情况。这意味着两个或多个持有锁的事务想要等待彼此持有的锁,这将导致这些事务之间的死锁。这个异常被抛出而不是最终陷入死锁。

有关如何避免这种情况,请参阅 Neo4j 手册中的死锁部分:http: //docs.neo4j.org/chunked/stable/transactions-deadlocks.html

详细信息:'事务(15438,所有者:“qtp1927594840-9525”)[STATUS_ACTIVE,Resources=1] 无法等待资源 RWLock[SchemaLock],因为 => 事务(15438,所有者:“qtp1927594840-9525”)[STATUS_ACTIVE, Resources=1] <-[:HELD_BY]- RWLock[SchemaLock] <-[:WAITING_FOR]- Transaction(15233, owner:"qtp1927594840-9503")[STATUS_ACTIVE,Resources=1] <-[:HELD_BY]- RWLock[架构锁]'。


标签是否存在都没有关系,请求通常会失败。

0 投票
1 回答
1004 浏览

python - py2neo 密码查询错误:neo4j.SyntaxException

我正在尝试执行一个简单的参数化密码查询,该查询实际上由于语法错误而失败。

我在烧瓶中使用 py2neo 1.6.3。

提前致谢!

/马克

0 投票
1 回答
352 浏览

py2neo - py2neo 事务未绑定模式

我正在尝试按照以下示例使用 py2neo 库创建 NEO4j 密码事务:

http://book.py2neo.org/en/latest/cypher/#id2

执行和提交事务时出现错误:

py2neo.cypher.InvalidSemantics:未绑定模式!

我正在使用 py2neo 1.6.3 库和 NEO4j 的最新 2.01。请问有人有见识吗?

0 投票
1 回答
542 浏览

http - 从远程服务器提交 neo4j 批处理时出现 IncompleteRead 错误;格式错误的 HTTP 响应

我已经在服务器 A 上设置了 neo4j,并且我在服务器 B 上运行了一个应用程序来连接它。

如果我在服务器 A 上克隆应用程序并运行单元测试,它工作正常。但是在服务器 B 上运行它们,安装程序运行 30 秒并失败并出现 IncompleteRead:

当我提交足够大的批次时会发生异常。如果我减小数据集的大小,它就会消失。它似乎与请求大小而不是请求数量有关(如果我向正在创建的节点添加属性,我可以有更少的请求)。

如果我使用batch.run()而不是.submit(),我不会收到错误,但测试会失败;似乎该批次被默默地拒绝了。如果我使用.stream()并且不迭代结果,则会发生同样的事情.run();如果我对它们进行迭代,我会得到相同的错误.submit()(除了它是“0字节读取”)。

查看 httplib.py 表明,当 HTTP 响应Transfer-Encoding: Chunked包含且不包含预期的块大小时,我们将收到此错误。所以我在测试中运行了 tcpdump,事实上,这似乎就是正在发生的事情。最终块的长度为0x8000,其最终字节为

(为清楚起见,在 \n 之后添加了换行符。)这看起来像是正确的分块,但第 0x8000 个字节是第一个“/”,而不是第二个“.”。早八字节。它也不是一个完整的响应,是无效的 JSON。

有趣的是,在这个块中,我们得到以下数据:

也就是说,它看起来像是一个新块的开始,但嵌入在旧块中。如果我们注意到它开始了,这个新块将在正确的位置结束(上面的第二个“.”)。如果块头不存在,旧块将在正确的位置完成(8 个字节后)。

然后我提取了批处理的 POST 请求,并使用cat batch-request.txt | nc $SERVER_A 7474. 对此的响应是一个有效的分块 HTTP 响应,包含一个完整的有效 JSON 对象。

我想也许 netcat 发送请求的速度比 py2neo 快,所以我引入了一些减速

但它继续工作,尽管现在慢得多。

我也尝试在服务器 A 上执行 tcpdump,但对 localhost 的请求不会通过 tcp。

我还有一些尚未探索的途径:我还没有弄清楚请求失败的可靠性或在什么条件下(我曾经看到它通过通常失败的批处理成功,但我还没有探索边界)。而且我没有尝试直接从 python 发出请求,而不通过 py2neo。但我并不特别期望这些中的任何一个都能提供非常丰富的信息。除了使用wireshark的'follow TCP stream'来提取HTTP会话外,我还没有仔细研究过TCP转储;我真的不知道我会在那里寻找什么。在失败的转储中,wireshark 以黑色突出显示了很大一部分,而在成功的转储中只有孤立的黑色线条,也许这是相关的?

所以现在:有人知道会发生什么吗?还有什么我应该尝试诊断问题的吗?

TCP 转储在这里:失败成功

编辑:我开始了解失败的 TCP 转储。整个对话大约需要 30 秒,而两台服务器发送 ZeroWindow TCP 帧的时间间隔约为 28 秒——这些是我提到的黑线。

首先,py2neo 填满 neo4j 的窗口;neo4j 发送一个帧说“我的窗口已满”,然后另一个帧填满了 py2neo 的窗口。然后我们花了大约 28 秒的时间让他们每个人都说“是的,我的窗口还是满的”。最终 neo4j 再次打开它的窗口,py2neo 发送更多数据,然后 py2neo 打开它的窗口。他们都发送了更多的数据,然后 py2neo 完成了它的请求,neo4j 在完成之前发送了更多的数据。

所以我在想问题可能是这样的,他们都拒绝处理更多数据,直到他们发送更多数据,并且在其他处理一些数据之前都不能发送更多数据。最终,neo4j 进入“出了点问题”循环,py2neo 将其解释为“继续发送更多数据”。

这很有趣,但我不确定这意味着什么,从 neo4j 发送到 py2neo 的倒数第二个 TCP 帧开始\r\n1280\r\n- 伪块的开始。启动实际块的\r\n8000\r\n,只是在一个不起眼的 TCP 帧中出现。(这是 py2neo 完成发布请求后发送的第三帧。)

编辑2:我检查了python挂在哪里。不出所料,这是在发送请求时 - 所以BatchRequestList._execute()直到 neo4j 放弃后才返回,这就是为什么两者都没有.run().stream()没有比.submit().