Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j 多孤立图的数据库解决方案_Neo4j_Graph Databases - Fatal编程技术网

Neo4j 多孤立图的数据库解决方案

Neo4j 多孤立图的数据库解决方案,neo4j,graph-databases,Neo4j,Graph Databases,我有一个有趣的问题,我不知道如何解决。 我收集了一个包含8000万个图的大型数据集(它们是由我从Github分析的程序生成的控制流图),我需要能够高效地搜索这些图。 我研究了现有的解决方案,如Neo4j,但它们都是为存储全局单一图形而设计的。 在我的例子中,情况正好相反,所有的图都是独立的——就像表中的行一样——但我需要高效地搜索所有的图。 例如,我想找到所有具有特定IF条件或具有特定条件的WHILE循环的cfg。 这个用例的最佳数据库是什么?我认为没有理由不将所有这些图形存储在一个图形中,无论

我有一个有趣的问题,我不知道如何解决。 我收集了一个包含8000万个图的大型数据集(它们是由我从Github分析的程序生成的控制流图),我需要能够高效地搜索这些图。 我研究了现有的解决方案,如Neo4j,但它们都是为存储全局单一图形而设计的。 在我的例子中,情况正好相反,所有的图都是独立的——就像表中的行一样——但我需要高效地搜索所有的图。 例如,我想找到所有具有特定IF条件或具有特定条件的WHILE循环的cfg。
这个用例的最佳数据库是什么?

我认为没有理由不将所有这些图形存储在一个图形中,无论是Neo4j还是其他图形数据库。在一个图中有许多不同的图,而这些不同的图是彼此断开连接的,这不是一个问题

为了有效地搜索它们,您可以(1)在CFG中识别要搜索的属性并将其转换为图的某个索引值,或者(2)在CFG之间引入一些图结构(附加顶点/边),从而允许您通过图遍历进行所需的搜索

根据您需要搜索的内容,方法1可能对您来说不够灵活,尤其是在加载数据时,如果您不完全知道要搜索的内容。另外,需要注意的是,使用方法2,您不会因为提供了它们之间的某种连接而真正失去拥有8000万个不同图形的事实。这些物理连接并没有改变这个基本的逻辑事实。当您编写仅在单个CFG内发生的遍历时,只需要考虑这些附加连接。

我不确定NeN4J在这个领域支持什么,但是有了(一个开源的图形处理框架,允许你在不同的图形数据库,包括NeN4J)上写厂商无关代码,你可以考虑做一些方法来帮助方法2。或者,您可以使用更大的图形来仅包含CFG,然后在查询时在内存中使用CFG进行操作。这两种方法都可以帮助您将查询盲到只需要遍历的单个CFG


然而,最终,我认为这是一个建模问题。您只需要选择如何最好地为您的用例建立模式,实际上任何图形数据库都应该能够支持这一点。

您好,stephen,谢谢您的指点。在我将图形加载到图形数据库之前,您将使用什么格式存储图形?我使用一个基于S3的经典数据湖解决方案,我将存储CFG解析器的原始输出,然后执行ETL步骤加载它们。序列化它们的最佳格式是什么?有没有理由不存储CFG解析器的原始输出,然后再进行第二步,直接将CFG格式读取到图形数据库中?此外,对于这些文件中的8000万个,您可能需要考虑并行加载该数据。如果您使用TinkerPop,这可能意味着加载数据时使用over Spark。是的,这就是我的意思,TinkerPop批量导入似乎就是我想要的,谢谢!