Graph 基于Neo4j图形数据库的图形划分算法
我知道有一些著名的图划分算法工具,比如METIS,它是由karypis实验室()实现的 但我想知道有什么方法可以划分存储在Neo4j中的图吗?Graph 基于Neo4j图形数据库的图形划分算法,graph,neo4j,partitioning,metis,Graph,Neo4j,Partitioning,Metis,我知道有一些著名的图划分算法工具,比如METIS,它是由karypis实验室()实现的 但我想知道有什么方法可以划分存储在Neo4j中的图吗? 或者我必须转储Neo4j的数据并手动转换节点和边缘格式以适应METIS输入格式?过去我与METIS和Neo4j单独工作过,我不知道有任何工具可以从Neo4j生成METIS文件。尽管如此,编写这样一个工具应该是一项简单的任务,并且将是一项巨大的社区贡献 另一种将METIS与NeN4J集成的方法可能是通过JNI将MeTIS与C++的NeN4J连接起来。然而,
或者我必须转储Neo4j的数据并手动转换节点和边缘格式以适应METIS输入格式?过去我与METIS和Neo4j单独工作过,我不知道有任何工具可以从Neo4j生成METIS文件。尽管如此,编写这样一个工具应该是一项简单的任务,并且将是一项巨大的社区贡献
另一种将METIS与NeN4J集成的方法可能是通过JNI将MeTIS与C++的NeN4J连接起来。然而,这将涉及更多的内容,因为它必须处理事务、并发等问题
关于分区图这一更一般的问题,通过合理的努力实现一些更为已知和简单的算法是完全可能的。关于新的、有趣的算法,这并不是详尽的或最先进的,但这些是我首先要看的地方: 具体算法:-我在论文中用过一次()
- 迭代所有节点,然后为每个节点检索所有邻居,以便将一些“某个单元”分散到所有邻居
- 易于实现李>
- 可以确定
- 迭代-因为它是基于迭代的(就像Pregel中的超级步骤),所以您可以随时停止它。从理论上讲,保留时间越长,结果越好(尽管在某些情况下,在某些图形形状上,结果可能不稳定)
- 当我们实现这一点时,我们在一台具有约30GB RAM的机器上运行了100次迭代,最多可运行约400万个节点—完成这一过程不超过两天
- 难以实施
- 局部算法-类似BFS的访问模式(随机游动)
- 我已经有一段时间没有读过那篇论文了,但我记得它是建立在清晰的抽象之上的:
- Evonible(可插拔)-决定要向当前集群添加多少邻居
- EvoCut(多次调用Evonible以查找本地群集)
- EvoPartition(反复调用EvoCut对整个图形进行分区)
- 不确定
- 通过将节点折叠为聚合节点来粗化图形
- 粗化策略是可选的
- 在粗化/更小的图中查找簇
- 集群策略是可选的
- 递增地对图形进行去砷化,在每一步的聚类中进行细化
- 精炼策略是可选的
- 如果图形变化缓慢(或者结果不需要是最新的),可以粗化一次(或不经常),然后使用粗化的图形-以节省计算
- 我不知道有什么具体的算法可以推荐
- 未确认节点类型-即,所有节点均被同等对待
- 未确认关系类型-即,所有关系都被同等对待
- 未确认关系方向-即被视为无方向的关系