Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x neo4j事务变慢,然后使用python引发异常_Python 3.x_Neo4j - Fatal编程技术网

Python 3.x neo4j事务变慢,然后使用python引发异常

Python 3.x neo4j事务变慢,然后使用python引发异常,python-3.x,neo4j,Python 3.x,Neo4j,在带有16GB RAM、i7 cpu和ssd驱动器的windows 10机器上运行Neo 2.2.5。我正在将mssql应用程序转换为python3.5/neo。我正在连接py2neo(2.0.8)。我正在尝试从web api运行批处理加载。我正在收集200张唱片,并将它们分批放入Neo中。前几批以每秒2100条语句的速率加载。15分钟后,速率持续下降到300/s以下 我的代码非常简单: graph = Graph("http://127.0.0.1:7474/db/data/") graph.

在带有16GB RAM、i7 cpu和ssd驱动器的windows 10机器上运行Neo 2.2.5。我正在将mssql应用程序转换为python3.5/neo。我正在连接py2neo(2.0.8)。我正在尝试从web api运行批处理加载。我正在收集200张唱片,并将它们分批放入Neo中。前几批以每秒2100条语句的速率加载。15分钟后,速率持续下降到300/s以下

我的代码非常简单:

graph = Graph("http://127.0.0.1:7474/db/data/")
graph.cypher.execute("CREATE CONSTRAINT ON (d:Document) ASSERT d.id IS UNIQUE")
graph.cypher.execute("CREATE CONSTRAINT ON (k:Keyword) ASSERT k.ui IS UNIQUE")
graph.cypher.execute("CREATE CONSTRAINT ON (c:Chemical) ASSERT c.ui IS UNIQUE")
然后我循环执行以下语句

"MERGE (d:Document {id: {ID}}) ON CREATE SET d.name={NAME}, d.created={CR}, d.abstract={AB}"
"MERGE (k:Keyword  {ui: {ID}}) ON CREATE SET k.word={WORD}"
"MERGE (c:Chemical {ui: {ID}}) ON CREATE SET c.name={NAME}"
'MATCH (d:Document {id: {ID}}), (k:Keyword {ui: {UID}}) \
 MERGE (d)-[r:HAS_TOPIC]->(k)'
'MATCH (d:Document {id: {ID}}), (c:Chemical {ui: {UID}}) \
 MERGE (d)-[r:INCLUDES]->(c)'

我在这个循环的200次迭代后提交。 开始时,我运行
tx=graph.cypher.begin()
在200次循环之后,我运行
tx.commit()

如果我在一次提交后退出程序,那么数据库就拥有了所有的数据,而且一切看起来都很好。当我让它运行时,问题就开始了

每个
tx.commit()
都比前一个花费更长的时间,最终我得到一个套接字超时错误。neo-community.exe的CPU从未超过12%。我从防病毒软件中排除了
default.graphdb
目录,并且计算机上没有运行其他任何程序

我尝试了各种VMO选项,最后一个选项是:

-d64
-server
-Xmx2G
有一次,它以以下方式退出:

py2neo.cypher.error.request.InvalidFormat: Unable to deserialize request: Unexpected character ('s' (code 115)): was expecting comma to separate OBJECT entries at [Source: HttpInputOverHTTP@4440958a; line: 1, column: 679940]
其他时候,它会超过这一点,并在几分钟后以套接字超时错误退出

我知道我可以批量导出到csv并使用导入实用程序,但我想知道为什么它不能按原样处理这个问题


如果您有任何帮助/建议,我们将不胜感激。

我认为您遇到了一个问题,Cypher将您的关系从错误的一方融合到了一起。在2.2中,它有时并不那么聪明

目前这两种关系的顺序如下:

MATCH (d:Document {id: {ID}}), (k:Keyword {ui: {UID}}) 
MERGE (d)-[r:HAS_TOPIC]->(k)

(k)<-[:HAS_TOPIC]-(d)

MATCH (d:Document {id: {ID}}), (c:Chemical {ui: {UID}}) 
MERGE (d)-[r:INCLUDES]->(c)

(d)-[:INCLUDES]->(c)
MATCH(d:Document{id:{id}),(k:Keyword{ui:{UID})
合并(d)-[r:HAS_TOPIC]->(k)
(k) (c)
(d) -[:包括]->(c)
因此,如果第一种情况下的关键字,或第二种情况下的文档节点具有许多关系(或比另一方的关系多),则需要的时间将越来越长

您可以通过将标识符更改为
(a)-->(b)

左边的那个应该总是有较少的(或者还没有)关系


在2.3中,它将更聪明。当RC很快出来时,您可能希望使用它进行测试。

我似乎遇到了“急切”的问题,如中所述:


我将关系与节点分开,性能跳到每秒处理6000条语句。

这是一个“设置”操作,即一次性加载到空数据库?循环一次迭代中的五条语句的
:Document
节点是否相同?这些语句是独立的吗?或者全部集中到一个?都一样慢还是有一个很突出?设置部分是在空数据库上一次性运行的。循环在一个事务中全部运行(x200)。我尝试过不同的批量大小,从1到500,结果都是随着时间的推移速度大大减慢。我试过在不同的运行中注释:关键字,然后:化学,但速度仍然显著减慢。其他注释…neo4j的cpu最大值为11%,我有6个内核,所以它甚至没有最大化一个内核。在每次提交过程中,它将在10秒以上保持在11%。有趣的是,该驱动器几乎没有以150kB/s速度运行的活动。尝试将java更新为8u60,并尝试运行neo 2.3M3,没有任何更改。MSSQL仍在同一台机器上以超过100k/s的速度运行,并使用相同的驱动器。当我运行Neo4j时,我停止了MSSQL服务。我按照建议反转了关系代码,性能没有差异。只有80000个文档,您可以使用2.3.0重试吗?我发布了一个解决方案,该解决方案在2.2.6上运行,并在下面的2.3上重新测试。如果它看起来不错,你可以将其标记为已接受。一旦我将create relationship和节点分离为单独的事务,它就会每秒添加6000多个项目。