【发布时间】:2018-03-02 22:27:32
【问题描述】:
我正在使用来自 Flask 调试服务器的 Py2Neo 3 (v3.1.1) 来访问 Neo4j。
Neo4j 服务器是 Ubuntu 16.04 上的基本 apt-get'd Neo4j 服务器 (3.3.3)。 Py2Neo 正在使用 Bolt 端口。
当更新 Neo4j 数据库的 Flask 请求时
tx = graph.begin();
....
tx.commit();
之后是同一客户端在四秒或更长时间内发出的请求,95% 的时间第二次查询的结果不会反映几秒前刚刚发生的更新。但是如果另一个客户端在更新后立即通过 Flask 服务器查询数据库,它每次都会看到更新的数据。似乎,如果第二个客户这样做,第一个客户看到旧数据的可能性下降到大约 75%。
我很确定 Neo4j 没有在因果一致模式下运行。 (我在安装 Neo4j 时进行了简单的 apt-get 安装。)我如何确认这一点?
我相信 Flask 服务器对所有请求都使用相同的 Py2Neo 图形对象。
正如您在上面看到的,Py2Neo 更新请求确实使用了显式事务,然后是显式 tx.commit()。但是该图形对象已用于一些自动提交查询以及显式事务之外。
我在 Py2Neo 3 文档中没有看到任何提及“因果”或“最终”或“缓存”的内容。
你有什么建议?
--- 更新 1 -----
这似乎不是 Neo4j 服务器的问题。打开 Py2Neo.watch('neo4j.bolt') 显示 Py2Neo 发送正确的请求到 Neo4j 服务器和更新的数据由 Py2Neo 从 Neo4j 服务器。但是 Py2Neo Cursor.data() 揭示了旧数据被返回给应用程序,尽管服务器为 Py2Neo 提供了新数据。
【问题讨论】: