我正在使用py2neo从neo4j图形数据库中查询一组数据,并在python脚本中实现适当的信息后创建节点之间的关系。
这是脚本的基本结构。
import py2neo
### get a set of data from a graph database
graph = Graph()
query = graph.cypher.execute("MATCH (p:LABEL1))-[:relationship]->(c:Label2 {Name:'property'} \
RETURN p.Id, p.value1, c.value2 LIMIT 100")
### do a data analysis within a python script here
~ ~ ~
### update newly found information through the analysis to the graph database
tx = graph.cypher.begin()
qs1 = "UNWIND range(0,{size}-1) AS r \
MATCH (p1:Label1 {Id:{xxxx}[r]}),(p2:Label2 {Id:{yyyy}[r]}) \
MERGE (p1)-[:relationship {property:{value}[r]]->(p2)"
tx.append(qs1, parameters = {"size":size, \
"xxxx":xxxx, \
"yyyy":yyyy, \
"value":value})
tx.commit()
当查询结果限制为100时,脚本确实执行了它应该执行的操作,但是当我增加200或更高时,程序崩溃,留下以下错误消息:
- > 263 tx.commit()
SocketError:套接字的协议错误类型
不幸的是,除了上述声明之外,没有其他有用的信息可能暗示问题可能是什么。有没有人有这类问题,你能否提出潜在的问题?
谢谢。
答案 0 :(得分:0)
我还没有深入研究过这个问题。 使用时遇到了同样的错误:
commit
我在每个File "/usr/local/Cellar/python3/3.4.3/Frameworks/Python.framework/Versions/3.4/lib/python3.4/http/client.py", line 888, in send
self.sock.sendall(data)
OSError: [Errno 41] Protocol wrong type for socket
来电和每2000个陈述 <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>MESSAGE</faultstring>
</soap:Fault>
</soap:Body>
</soap:Envelope>
之间追加了1000条陈述。
当我减少进程和语句之间的语句数量时提交到250/500它工作正常(类似于你限制为100)。
堆栈跟踪中的实际错误来自python的http / client:
@WebFault
public class OurException extends Exception
{
public OurException (){
super();
}
public OurException (String message)
{
super(message);
}
}
这是EPROTOTYPE错误,因此它发生在客户端而不是neo4j。
你是OS X吗? (我是。)这看起来可能是问题: Chasing an EPROTOTYPE Through Rust, Sendto, and the OSX Kernel With C-Reduce。我对底层套接字行为的了解不足以告诉您为什么减少我们通过连接发送的数量会消除竞争条件。