监控 neo4j 查询结果的实时变化?
Monitoring real-time changes to results of a neo4j query?
我有一个来自 MMO 的玩家交互的传入事件流。我想构建玩家即时交互的图表,连续 运行 查询过去 ~30-240 秒的活动,并实时更新图形视图。
关于我的具体案例的更多细节:
我每秒有大约 100-500 个传入事件。这些看起来像:
(PlayerA)->[:TAKES_ACTION]->(Event)->[:RECIPIENT]->(PlayerB)
每个事件都带有时间戳。时间戳精确到秒。我计划将每个事件附加到一个表示时间戳的节点,这样我就可以将查询限制为附加到一组 X 个最新时间戳的事件。
我预计在任何给定的时间范围内都会有大约 1000-2000 名活跃玩家。
我的问题是根据相互的互动将玩家分组,以确定哪些组目前正在与哪些其他组进行战斗。
我的主要问题是:
Neo4j 是否具有任何类型的 "incremental update" 功能来有效地更新查询结果,而无需为每组更改重新运行整个查询?
Neo4j 是否有能力 "push" 对客户端的查询结果进行任何更改?或者客户端是否必须不断轮询数据库?
是否有任何优化或技巧可以使连续重复的查询尽可能高效?
答案
1) 不能。您只能执行查询并获得结果。
2) 不能。目前您只能发出客户端 -> 服务器请求。
3) 是的。
详情
让我们一探究竟。默认情况下,Neo4j 可以为您提供:
- 休息 API
- 交易密码 ednpoint
- 遍历端点
- 自定义插件
- 自定义非托管扩展
在您的情况下,您应该实施 unmanaged extension。这是获得所需功能的最佳选择 - 自行开发。
有关扩展的更多信息:
在扩展中你可以做你想做的一切:
- 使用核心API高效查询最新数据
- 为客户端和服务器之间的全双工通信通道创建 WebSocket 端点
- 为format/represent您的数据正确实施任何附加逻辑
查询和性能
密码查询在第一次执行时被编译和缓存。之后 - 使用缓存的查询版本。而且查询本身的执行速度非常快。
建议:
- 尽可能使用查询参数。这允许 Neo4j 有效地重用查询
- 巧妙地编写查询。尽可能降低基数。
- 考虑数据模型。当查询始终仅获取最新数据时,您可能可以以这种方式对数据进行建模。在你的情况下,关系
:LAST_EVENT
、:PREVIOUS_EVENT
等可能会有所帮助。
我有一个来自 MMO 的玩家交互的传入事件流。我想构建玩家即时交互的图表,连续 运行 查询过去 ~30-240 秒的活动,并实时更新图形视图。
关于我的具体案例的更多细节:
我每秒有大约 100-500 个传入事件。这些看起来像:
(PlayerA)->[:TAKES_ACTION]->(Event)->[:RECIPIENT]->(PlayerB)
每个事件都带有时间戳。时间戳精确到秒。我计划将每个事件附加到一个表示时间戳的节点,这样我就可以将查询限制为附加到一组 X 个最新时间戳的事件。
我预计在任何给定的时间范围内都会有大约 1000-2000 名活跃玩家。
我的问题是根据相互的互动将玩家分组,以确定哪些组目前正在与哪些其他组进行战斗。
我的主要问题是:
Neo4j 是否具有任何类型的 "incremental update" 功能来有效地更新查询结果,而无需为每组更改重新运行整个查询?
Neo4j 是否有能力 "push" 对客户端的查询结果进行任何更改?或者客户端是否必须不断轮询数据库?
是否有任何优化或技巧可以使连续重复的查询尽可能高效?
答案
1) 不能。您只能执行查询并获得结果。
2) 不能。目前您只能发出客户端 -> 服务器请求。
3) 是的。
详情
让我们一探究竟。默认情况下,Neo4j 可以为您提供:
- 休息 API
- 交易密码 ednpoint
- 遍历端点
- 自定义插件
- 自定义非托管扩展
在您的情况下,您应该实施 unmanaged extension。这是获得所需功能的最佳选择 - 自行开发。
有关扩展的更多信息:
在扩展中你可以做你想做的一切:
- 使用核心API高效查询最新数据
- 为客户端和服务器之间的全双工通信通道创建 WebSocket 端点
- 为format/represent您的数据正确实施任何附加逻辑
查询和性能
密码查询在第一次执行时被编译和缓存。之后 - 使用缓存的查询版本。而且查询本身的执行速度非常快。
建议:
- 尽可能使用查询参数。这允许 Neo4j 有效地重用查询
- 巧妙地编写查询。尽可能降低基数。
- 考虑数据模型。当查询始终仅获取最新数据时,您可能可以以这种方式对数据进行建模。在你的情况下,关系
:LAST_EVENT
、:PREVIOUS_EVENT
等可能会有所帮助。