neo4j - 高性能邻居导航
问题描述
我已经使用 neo4j 一段时间了,遇到了性能问题。
我有一种情况,我(基本上)在图形数据库中对元胞自动机进行建模。它不像 GoL 那样简单,需要大量数据,这就是我选择图形数据库的原因。但类似于元胞自动机,节点连接到它们的邻居,并根据邻居的状态计算它们的状态。
因此,我想要一个这样的系统:
TriggerNode --> CalculatesValue --> TriggersEventToNeighbours
ListeningNeighbour --> CalculatesValue --> TriggersEventToTheirNeighbours
ListeningNeighbour --> CalculatesValue --> TriggersEventToTheirNeighbours
ListeningNeighbour --> CalculatesValue --> TriggersEventToTheirNeighbours
...
然而,在 Neo4j 中,使用各种驱动程序,我可以看到我的编程环境和数据库之间通过套接字协议会产生大量的通信开销。
我正在寻找消除这种开销。
是否有一个 Neo4j 驱动程序在运行时没有性能开销node-->relationship-->node
?如果没有,是否还有另一个可以以这种方式使用的图形数据库?
解决方案
根据组成自动机的连接节点“集群”的大小,您可能需要考虑 InfiniteGraph。
客户端库中的 InfiniteGraph 内核缓存应用程序当前正在使用的数据库数据页。这可能包括数百万个在客户端缓存的节点和边缘。缓存使用最近最少使用的策略来刷新数据库页面,写入已更新的页面。事务提交后,剩余的更新页面被写入,数据库反映所有更改。
从本质上讲,InfiniteGraph 变成了一个内存中的图形数据库,它通过一个大规模可扩展和完全分布式的磁盘后备存储来调整每个用户的使用模式。
推荐阅读
- python - 是否可以在 Python 中使用 PIL 生成进度条?
- python-3.x - %R 魔术输入参数在 Jupyter 笔记本中无法正常工作
- java - @Valid 不会在 @Repository 中触发验证
- c - 如何反转和重新反转(闪烁)另一个进程的 X11 窗口?
- sql - 选择下一个可用日期并加入另一个表
- c# - 对控制器操作代码进行基准测试以查找慢点
- html - 在 CSS 中调整边框大小
- python - 对嵌套列表中的每个子列表进行排序
- javascript - 如果 index.html 和 javascript 不在同一个文件夹下,js 不起作用。否则,它确实
- tensorflow - 在 fp16 中使用 Keras/TensorFlow 进行训练/RTX 卡的半精度