1

我正在使用Virtuoso。它安装在服务器机器上。我正在尝试从我的 Virtuoso 中删除一个大型 RDF 图。它包含 2,590,994,053 个三元组。我试图使用以下命令删除图表。

SPARQL DROP SILENT GRAPH <http://ndssl.bi.vt.edu/chicago/>

但是运行了很长时间后,Virtuoso 给了我以下错误。

*** Error 08S01: [Virtuoso Driver]CL065: Lost connection to server at line 6 of Top-Level:SPARQL DROP SILENT GRAPH <http://ndssl.bi.vt.edu/chicago/>

这个删除命令也会关闭我的 Virtuoso 服务器。我也尝试使用 SPARQLCLEAR命令。运行了很长时间后,它也终止了。

顺便说一句,我已将内存大小增加到 128 GB 并设置以下配置值。但是,它不起作用。

NumberOfBuffers          = 10900000
MaxDirtyBuffers          = 8000000
MaxCheckpointRemap       = 650000000

请让我知道如何从我的 Virtuoso 三重商店中删除这个大图。我在 Virtuoso 中还有其他一些图表。我不想删除那些。

4

1 回答 1

1

我如何从 Virtuoso Quad Store 中删除包含大量三元组的图形中所述?--

默认情况下,三重删除作为事务的一部分执行,该事务存储在内存中,直到操作完成并提交到数据库。在典型的服务器操作期间,删除一个或多个包含大量三元组(通常为数百万或更多)的图可能会消耗可用内存,导致操作无法完成,因此无法删除图。

可以通过将事务日志模式更改为autocommit在删除图或三元组之前清除此类大图。这很容易使用 Virtuosolog_enable()功能和设置完成log_enable(3,1)

此函数可以在删除操作之前通过 iSQL(命令行或 Conductor 变体)自行调用,如下所示:

SQL> log_enable(3,1);
SQL> SPARQL CLEAR GRAPH <graph-name>;

log_enable()也可以作为在 SPARQL/Update 查询中指定的 pragma 调用(注意:此查询是为通过 SPARQL 接口执行而编写的;如果通过 SQL 接口执行,则必须预先添加SPARQL关键字):

DEFINE sql:log-enable 3
CLEAR GRAPH <graph-name>

三元组也可以RDF_QUAD通过 SQL 直接从表中删除,但请注意,此方法不会删除任何可能与图形关联的自由文本索引数据,这CLEAR GRAPH ...会自动删除。SQL 操作看起来像这样:

SQL> log_enable(3,1);
SQL> DELETE FROM rdf_quad WHERE g = iri_to_id ('http://mygraph.org');

于 2016-09-09T16:27:18.187 回答