zoukankan      html  css  js  c++  java
  • virtuoso装载大的rdf文件的方法

    本文详细介绍了将一个比较大的rdf文件装载到virtuoso数据库的过程。参考virtuoso网站的文档说明,通过实践,将一个大约4.6G左右的nt文件装载到virtuoso数据库中,用了大概6个多小时。参考网站:http://vos.openlinksw.com/owiki/wiki/VOS/VirtBulkRDFLoader

    以下是具体的步骤。

    一 准备条件

    1 virtuoso的版本要求。Open source version 6.1.3以上或者commercial version 06.02.3129以上,这些版本有大文件装载函数(方法)。

    2 在virtuoso.ini中设置参数”DirsAllowed”,设置完成后需要重新启动virtuoso。

    参考:http://docs.openlinksw.com/virtuoso/dbadm/

    参数设置的格式如下:

    DirsAllowed = <path> [, <path>]

    DirsDenied = <path> [, <path>]

     

    <path> := <absolute_path> or <relative_path>

    可以用下面的命令查看,在cmd中,进入bin目录,然后运行isql,可以进入sql命令模式。

    SQL> select server_root (), virtuoso_ini_path ();

    上面的命令可以查看服务器的工作目录和ini文件名称。

    用以下命令查看DirsAllowed参数的情况

    SQL> select cfg_item_value (virtuoso_ini_path (), 'Parameters',
    'DirsAllowed');

    这一步,我没有设置DirsAllowed,通过命令可以查看到vad目录。

    3 合理配置virtuoso.ini,保证有足够的内存和其他系统资源。

    参考:http://vos.openlinksw.com/owiki/wiki/VOS/VirtRDFPerformanceTuning

    主要设置两个参数,NumberOfBuffers 和 MaxDirtyBuffers。不同的系统内存对应设置不同的参数值。

    如下表所示:

    System RAM

    NumberOfBuffers?

    MaxDirtyBuffers?

    2 GB

    170000

    130000

    4 GB

    340000

    250000

    8 GB

    680000

    500000

    16 GB

    1360000

    1000000

    32 GB

    2720000

    2000000

    48 GB

    4000000

    3000000

    64 GB

    5450000

    4000000

    比如,我的系统是16G内存,就需要把对应的NumberOfBuffers设置为1360000, MaxDirtyBuffers设置为1000000。

    4 文件格式要求。

    Virtuoso只支持一下格式。

    .grdf

    Geospatial RDF

    .nq

    N-Quads

    .nt

    N-Triples

    .owl

    OWL

    .rdf

    RDF/XML

    .trig

    TriG

    .ttl

    Turtle

    .xml

    RDF/XML

    二 大文件加载的过程

    1 准备三个文件,放到vad目录(也就是DirsAllowed的目录)。一个是数据源文件,比如my_data.nt,一个是对应的图文件,和数据源文件的名称相同后面加.graph。比如my_data.nt.graph。一个是公共的图文件,用来处理那些没有对应的图文件的数据源文件,名称为global.graph。

    标准格式:

    <source-file>.<ext>
    <source-file>.<ext>.graph
    global.graph

    举例:

    myfile.n3          ;; RDF data
    myfile.n3.graph    ;; Contains Graph IRI name into which RDF data from myfile.n3 will be loaded
    global.graph       ;; Contains Graph IRI name into which RDF data from any files that do not have a specific graph name file will be loaded

    2 把图的标识名(the graph IRI)写到*.graph中。比如,图的标识名为:http://dbpedia.org,把http://dbpedia.org写到*.graph中。

    3 注册要加载的文件。使用isql,进入到SQL命令中,运行合适的方法。比如

    SQL> ld_dir ('/path/to/files', '*.n3', 'http://dbpedia.org');

    ld_dir() 里面的目录不包括子目录。ld_dir_all() 命令包括所有的子目录。

    4 用DB.DBA.load_list来查看注册的数据集装载情况和图标识名正在加载还是已经加载。ll_state字段有三个值:0表示数据集还没有加载;1表示数据集正在加载中;2表示数据集已经加载完成。如下所示

    SQL> select * from DB.DBA.load_list;
    ll_file               ll_graph        ll_state    ll_started              ll_done                 ll_host    ll_work_time    ll_error
    VARCHAR NOT NULL      VARCHAR         INTEGER     TIMESTAMP               TIMESTAMP               INTEGER    INTEGER         VARCHAR
    _____________________________________________________________________________________________________________________________
    ./dump/d1/file1.n3    http://file1    2           2010.10.20 9:21.18 0    2010.10.20 9:21.18 0    0          NULL            NULL
    ./dump/d2/file2.n3    http://file2    2           2010.10.20 9:21.18 0    2010.10.20 9:21.18 0    0          NULL            NULL
    ./dump/file.n3        http://file     2           2010.10.20 9:21.18 0    2010.10.20 9:21.18 0    0          NULL            NULL
     
    3 Rows. -- 1 msec.
    SQL> 

    5 最后,通过rdf_loader_run()命令完成大文件数据的加载。

    命令如下:

    SQL> rdf_loader_run();

    该命令执行后,如果文件比较大,会是一个漫长的等待过程,耐心等待,可以先不管他,做其他的工作去吧。

    漫长等待之后,如果装载成功,会有一个花费时间的显示。

    如果查看导入情况,可以另外打开一个cmd,然后进入isql,键入select * from DB.DBA.load_list;,可以查看导入正在进行(ll_state值为1),还是导入完成(ll_state值为2)。

    通过以上操作,就可以完成数据的加载。

    导入完成之后,需要清理一下load_list,否则下次装载其他文件时,load_list里面的文件还会导入。清理命令是delete from db.dba.load_list;。

  • 相关阅读:
    HTML5来了,7个混合式移动开发框架
    React Native
    Cordova
    Java Next: Groovy、Scala or Clojure?
    分页 Database Frist
    Kindeditor编译器
    sql内连接
    layer删除
    实现用户注册,要求输入用户名之后,焦点离开判断用户名是否存在,如果存在给出提示,不存在允许注册改用户。要求使用AJAX
    实现根据用户名查询用户信息,要求用AJAX
  • 原文地址:https://www.cnblogs.com/coodream2009/p/8375773.html
Copyright © 2011-2022 走看看