多个孤立图的数据库解决方案
database solution for multiple isolated graphs
我有一个有趣的问题,但我不知道如何解决。
我已经收集了一个包含 8000 万个图表的大型数据集(它们是 CFG,就像我从 Github 分析的程序生成的控制流图中),我需要能够有效地搜索这些图表。
我研究了 Neo4j 等现有解决方案,但它们都是为存储全局单个图而设计的。
在我的例子中,这是相反的,所有图表都是独立的 - 就像 table 中的行 - 但我需要有效地搜索所有图表。
例如,我想找到所有具有特定 IF 条件或具有特定条件的 WHILE 循环的 CFG。
这个用例的最佳数据库是什么?
我认为没有理由不将所有这些图形简单地存储在一个图形中,无论是 Neo4j 还是其他图形数据库。在一个图中有许多不同的图不是问题,其中不同的图彼此断开连接。
至于有效地搜索它们,您可以 (1) 识别您要搜索的 CFG 中的属性并将它们转换为图形的某个索引值,或者 (2) 引入一些图形结构(附加 vertices/edges) 允许您通过图形遍历进行搜索的 CFG 之间。
根据您需要搜索的内容,方法 1 对您来说可能不够灵活,尤其是当您打算搜索的内容在加载数据时尚未完全了解时。此外,重要的是要注意,使用方法 2 并不会仅仅因为您在它们之间提供了某种联系就失去了您拥有 8000 万个不同图形的事实。这些物理连接不会改变这个基本的逻辑事实。当您编写希望仅在单个 CFG 中发生的遍历时,您只需要考虑这些额外的连接。
我不确定 Neo4j 在这方面支持什么,但是 Apache TinkerPop (an open source graph processing framework that lets you write vendor agnostic code over different graph databases, including Neo4j), you might consider doing some form of graph partitioning to help with approach 2. Or you might subgraph() 更大的图只包含 CFG,然后在查询时纯粹在内存中操作。这两种方法都将帮助您将查询隐藏到您想要遍历的单个 CFG。
然而,最终,我将此问题视为建模问题。您只需要就如何最好地为您的用例建立模式做出一些选择,几乎任何图形数据库都应该能够支持它。
我有一个有趣的问题,但我不知道如何解决。 我已经收集了一个包含 8000 万个图表的大型数据集(它们是 CFG,就像我从 Github 分析的程序生成的控制流图中),我需要能够有效地搜索这些图表。 我研究了 Neo4j 等现有解决方案,但它们都是为存储全局单个图而设计的。 在我的例子中,这是相反的,所有图表都是独立的 - 就像 table 中的行 - 但我需要有效地搜索所有图表。 例如,我想找到所有具有特定 IF 条件或具有特定条件的 WHILE 循环的 CFG。 这个用例的最佳数据库是什么?
我认为没有理由不将所有这些图形简单地存储在一个图形中,无论是 Neo4j 还是其他图形数据库。在一个图中有许多不同的图不是问题,其中不同的图彼此断开连接。
至于有效地搜索它们,您可以 (1) 识别您要搜索的 CFG 中的属性并将它们转换为图形的某个索引值,或者 (2) 引入一些图形结构(附加 vertices/edges) 允许您通过图形遍历进行搜索的 CFG 之间。
根据您需要搜索的内容,方法 1 对您来说可能不够灵活,尤其是当您打算搜索的内容在加载数据时尚未完全了解时。此外,重要的是要注意,使用方法 2 并不会仅仅因为您在它们之间提供了某种联系就失去了您拥有 8000 万个不同图形的事实。这些物理连接不会改变这个基本的逻辑事实。当您编写希望仅在单个 CFG 中发生的遍历时,您只需要考虑这些额外的连接。
我不确定 Neo4j 在这方面支持什么,但是 Apache TinkerPop (an open source graph processing framework that lets you write vendor agnostic code over different graph databases, including Neo4j), you might consider doing some form of graph partitioning to help with approach 2. Or you might subgraph() 更大的图只包含 CFG,然后在查询时纯粹在内存中操作。这两种方法都将帮助您将查询隐藏到您想要遍历的单个 CFG。
然而,最终,我将此问题视为建模问题。您只需要就如何最好地为您的用例建立模式做出一些选择,几乎任何图形数据库都应该能够支持它。