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;。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM