内存中的SPARQL查询图联合?

内存中的SPARQL查询图联合?,sparql,rdf,jena,triplestore,named-graphs,Sparql,Rdf,Jena,Triplestore,Named Graphs,我在读一篇文章时,遇到了这样一句话: “SPARQL FROM子句提供了定义自定义联合图的另一种方法。FROM子句用于标识查询的默认图。最典型的用途是标识单个RDF图。但是,如果在查询中指定了多个FROM子句,则这些图的内容将被合并(通常在内存中)提供将形成查询的默认图形的联合图。因此,SPARQL的此功能可以提供另一种方法来组装数据集的有用的图形无关视图。” 这里它说“这些图被合并(通常在内存中)以提供联合图” 我刚接触ApacheJena,所以这让我想到内存中是否会发生如此大的图形联合 因此

我在读一篇文章时,遇到了这样一句话:

“SPARQL FROM子句提供了定义自定义联合图的另一种方法。FROM子句用于标识查询的默认图。最典型的用途是标识单个RDF图。但是,如果在查询中指定了多个FROM子句,则这些图的内容将被合并(通常在内存中)提供将形成查询的默认图形的联合图。因此,SPARQL的此功能可以提供另一种方法来组装数据集的有用的图形无关视图。”

这里它说“这些图被合并(通常在内存中)以提供联合图”

我刚接触ApacheJena,所以这让我想到内存中是否会发生如此大的图形联合

因此,我使用TDB存储我的图形,并使用SPARQL查询它们,我想查询“在多个FROM子句中给定的两个特定图形的图形并集”或“所有命名图形的图形并集”:

这些联合会发生在我使用ARQ查询TDB的Java代码的内存中吗??

这会不会导致OutOfMemory错误很多次,因为图形可能很多


这似乎是个新手问题,请原谅我在耶拿的初学者经历。

我当然只能猜测作者的意图,但是,他们可能只是想说,通过从每个命名图检索数据,然后作为查询处理的一部分,生成这些子句的并集并作为查询结果,可以处理多个FROM子句。请注意,这并不意味着整个命名图都保存在内存中,只是当查询在单个结果(内存中)上执行和迭代时,它将来自两个源的结果合并为“联合”结果


在任何情况下:任何严肃的SPARQL数据库(包括Jena)都不太可能通过首先将整个数据集加载到内存中来处理带有多个FROM子句的查询。

我不能具体地说Apache Jena,但一般来说这是不正确的。我并没有立即意识到有任何SPARQL引擎或数据库系统会计算内存中多个FROM子句的并集(当然,除非您计算内存中的实际数据库)。可能有一些我不知道的例子,但这绝对不是“典型”的情况,它不在ApacheJena的内存中。对图的并集的每次访问都使其看起来像一个图(没有重复)。在最坏的情况下,这可能需要一些内存,但它只与访问的三元组成比例,而不是整个图。再次引用“图被合并(通常在内存中),以提供一个联合图,该联合图将形成查询的默认图。”。所以union graph形成了查询的默认图。因此,作者阅读这种观点并不是指单个的查询结果。但是,一般来说,将命名图放入内存是没有意义的。如果从远程URL读入这些图,那么该图很可能位于内存中-没有本地存储数据库。当存在来自本地数据库的图的并集时,实际上不需要具体化合并的图。所有mattersis访问看起来都是这样的-这就是抑制重复项。@AndyS:你是说对于本地存储,图形将不在内存中,而对于远程存储,它们将在内存中??因为,如果我连接到Fuseki服务器,并且使用ARQ执行查询,这将在Fuseki服务器上运行,而我的应用程序中几乎没有内存消耗?是的。TDB查询引擎将在访问时执行联合,而不是在图形本身上执行联合。@AndyS:很抱歉,没有得到它。在访问时执行?将在Fuseki服务器上进行联合?