Graph 基于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连接起来。然而,

我知道有一些著名的图划分算法工具,比如METIS,它是由karypis实验室()实现的

但我想知道有什么方法可以划分存储在Neo4j中的图吗?
或者我必须转储Neo4j的数据并手动转换节点和边缘格式以适应METIS输入格式?

过去我与METIS和Neo4j单独工作过,我不知道有任何工具可以从Neo4j生成METIS文件。尽管如此,编写这样一个工具应该是一项简单的任务,并且将是一项巨大的社区贡献

另一种将METIS与NeN4J集成的方法可能是通过JNI将MeTIS与C++的NeN4J连接起来。然而,这将涉及更多的内容,因为它必须处理事务、并发等问题


关于分区图这一更一般的问题,通过合理的努力实现一些更为已知和简单的算法是完全可能的。

关于新的、有趣的算法,这并不是详尽的或最先进的,但这些是我首先要看的地方:

具体算法:-我在论文中用过一次()

  • 迭代所有节点,然后为每个节点检索所有邻居,以便将一些“某个单元”分散到所有邻居
  • 易于实现
  • 可以确定
  • 迭代-因为它是基于迭代的(就像Pregel中的超级步骤),所以您可以随时停止它。从理论上讲,保留时间越长,结果越好(尽管在某些情况下,在某些图形形状上,结果可能不稳定)
  • 当我们实现这一点时,我们在一台具有约30GB RAM的机器上运行了100次迭代,最多可运行约400万个节点—完成这一过程不超过两天
特定算法:-来自Microsoft的局部概率算法-

  • 难以实施
  • 局部算法-类似BFS的访问模式(随机游动)
  • 我已经有一段时间没有读过那篇论文了,但我记得它是建立在清晰的抽象之上的:
    • Evonible(可插拔)-决定要向当前集群添加多少邻居
    • EvoCut(多次调用Evonible以查找本地群集)
    • EvoPartition(反复调用EvoCut对整个图形进行分区)
  • 不确定
通用算法系列:

从高层次来看:

  • 通过将节点折叠为聚合节点来粗化图形
    • 粗化策略是可选的
  • 在粗化/更小的图中查找簇
    • 集群策略是可选的
  • 递增地对图形进行去砷化,在每一步的聚类中进行细化
    • 精炼策略是可选的
注:

  • 如果图形变化缓慢(或者结果不需要是最新的),可以粗化一次(或不经常),然后使用粗化的图形-以节省计算
  • 我不知道有什么具体的算法可以推荐
一般限制-少数群集算法所做的事情:

  • 未确认节点类型-即,所有节点均被同等对待
  • 未确认关系类型-即,所有关系都被同等对待
  • 未确认关系方向-即被视为无方向的关系

+1关于导出到分区库(如METIS)如果你不想自己实现一个算法,那么导入到Neo4j中。如果你想实现一个算法,我建议导出到,,;分区;然后导入到Neo4j中。其中一些框架还内置了分区算法。这将为社区做出巨大贡献!感谢你的支持救命!我现在不打算自己实现一个算法,但这是一个很好的来源,我可以跟进。谢谢。