py2neo 缓存在烧我吗?
Is py2neo caching burning me?
我正在运行宁此代码:
c = """
match(r:XX)
optional match(r)-[]-(m) with count(m) as mc, r match(x)
return count(x) as all, r, mc
"""
(snip!)
while(True):
tx = remote_graph.cypher.begin()
res = remote_graph.cypher.execute(c)
tx.rollback()
time.sleep(15)
(snip!)
我知道 XX 节点的属性每秒都在变化 - 有一个守护进程 运行ning。但是,当我 运行 这个时,我总是在 res
中得到相同的值,但是对于 r
只有 - all
正在改变.查询没有改变。我想知道 py2neo 是否注意到了这一点并且没有执行查询,而是返回给我一个缓存的副本?如果是这样,我该如何阻止这种情况发生?
编辑 - 更多信息 - 我 运行 以上来自 ipython.
你说节点的属性是什么意思?你是说属性吗?或者关系 added/removed 也是?
您希望在 r
得到什么?从查询来看,除非你提到的守护进程是 adding/removing :XX
标签 to/from 节点,否则它总是 return 完全相同的节点。
有趣的是,py2neo 'remembers' 当你 return 节点时的节点:
MATCH (n:Node) RETURN n
但是当您 return 个别属性时,它们将始终更新:
MATCH (n:Node) RETURN n.value
对于您的查询,这意味着当您在 while
循环中 return 同一节点两次时,您必须 运行 my_node.pull()
:
while True:
q = "MATCH (n:Node) RETURN n"
result = graph.cypher.execute(q)
my_node = result[0][0]
my_node.pull()
print(my_node)
您还可以将 pull()
以外的所有内容移出循环:
q = "MATCH (n:Node) RETURN n"
result = graph.cypher.execute(q)
my_node = result[0][0]
while True:
my_node.pull()
print(my_node)
这是一个描述行为的最小示例:http://paste.ubuntu.com/14015568/
我不太确定为什么在您 运行 新查询时 py2neo 不 return 更新节点数据。
我正在运行宁此代码:
c = """
match(r:XX)
optional match(r)-[]-(m) with count(m) as mc, r match(x)
return count(x) as all, r, mc
"""
(snip!)
while(True):
tx = remote_graph.cypher.begin()
res = remote_graph.cypher.execute(c)
tx.rollback()
time.sleep(15)
(snip!)
我知道 XX 节点的属性每秒都在变化 - 有一个守护进程 运行ning。但是,当我 运行 这个时,我总是在 res
中得到相同的值,但是对于 r
只有 - all
正在改变.查询没有改变。我想知道 py2neo 是否注意到了这一点并且没有执行查询,而是返回给我一个缓存的副本?如果是这样,我该如何阻止这种情况发生?
编辑 - 更多信息 - 我 运行 以上来自 ipython.
你说节点的属性是什么意思?你是说属性吗?或者关系 added/removed 也是?
您希望在 r
得到什么?从查询来看,除非你提到的守护进程是 adding/removing :XX
标签 to/from 节点,否则它总是 return 完全相同的节点。
有趣的是,py2neo 'remembers' 当你 return 节点时的节点:
MATCH (n:Node) RETURN n
但是当您 return 个别属性时,它们将始终更新:
MATCH (n:Node) RETURN n.value
对于您的查询,这意味着当您在 while
循环中 return 同一节点两次时,您必须 运行 my_node.pull()
:
while True:
q = "MATCH (n:Node) RETURN n"
result = graph.cypher.execute(q)
my_node = result[0][0]
my_node.pull()
print(my_node)
您还可以将 pull()
以外的所有内容移出循环:
q = "MATCH (n:Node) RETURN n"
result = graph.cypher.execute(q)
my_node = result[0][0]
while True:
my_node.pull()
print(my_node)
这是一个描述行为的最小示例:http://paste.ubuntu.com/14015568/
我不太确定为什么在您 运行 新查询时 py2neo 不 return 更新节点数据。