问题标签 [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.
neo4j - 如何在 py2neo 上进行交易后使用返回的节点?
我使用以下代码成功合并节点:
日志文件如下所示:
返回的结果变量是:
注意错误的 uri (0.0.0.0)
当我尝试使用返回的节点实例时,会引发连接异常。IE:
通过记录的跟踪,我可以看到它试图从错误的服务器获取数据:
我究竟做错了什么?
neo4j - 将大型数据集导入neo4j(有点扭曲) - 慢
我正在处理大约 17 毫米的处方声明,每个声明都包含以下字段(子集):
我的节点与上面的字段相同,关系是:
输入文件没有顺序,即patient / provider / drug
可以出现在文件中的任何位置。
我正在使用 py2neo、CypherMERGE
和 1,000 行的批量进行处理,以确保没有重复的患者、提供者或药物被创建。
Problem
:性能 - 每批大约需要一分钟(4 个节点 + 4 个关系 X 1,000),并且随着图表的增长,时间也在增加。
Question
: 有没有更好的方法?对非 python 建议开放。
lucene - 使用 py2neo - Neo4j 向索引添加多个值属性
我正在尝试将 py2neo 的多值属性存储在 Neo4j 数据库中。
我的代码是这样的:
可悲的是,使用 lukeall 检查生成的 Lucene 索引并执行搜索,它似乎不起作用,并且似乎所有内容都存储为如下字符串:[“Hello”,“Bye”] 有没有办法正确存储它以便它可以为所有不同的值编制索引?
提前致谢!
python-2.7 - 如何使用py2neo检查NEO4J中是否存在节点
我想在我的python代码中插入一个验证如下:
我需要在我的源代码中实现这个算法
python-2.7 - 检查我的数据库 Neo4j 中是否存在节点
请我无法检查和创建节点以及与预先存在的节点的关系。
我需要检查我的 Neo4j 数据库中是否预先存在节点并创建与该节点的节点加关系。
谢谢
python - 错误,太多值无法解压
我需要更正此异常:“要解压的值太多”
这是我的源代码:如果我的数据库中不存在节点,或者如果它存在,我需要插入一个节点,我只添加与新节点的新关系:)
谢谢你,我需要你的帮助
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[架构锁]'。
标签是否存在都没有关系,请求通常会失败。
python - py2neo 密码查询错误:neo4j.SyntaxException
我正在尝试执行一个简单的参数化密码查询,该查询实际上由于语法错误而失败。
我在烧瓶中使用 py2neo 1.6.3。
提前致谢!
/马克
py2neo - py2neo 事务未绑定模式
我正在尝试按照以下示例使用 py2neo 库创建 NEO4j 密码事务:
http://book.py2neo.org/en/latest/cypher/#id2
执行和提交事务时出现错误:
py2neo.cypher.InvalidSemantics:未绑定模式!
我正在使用 py2neo 1.6.3 库和 NEO4j 的最新 2.01。请问有人有见识吗?
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 转储。整个对话大约需要 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()
.