从gitHub上下载rdf-3x(基于ubuntu操作)
git clone https://github.com/YeXiaoRain/rdf3x-0.3.8.git
进入根目录后,调出命令行:执行make操作,对程序进行编译
加载数据,编译成功后bin文件夹下会生成可执行文件。首先对数据进行加载
./rdf3xload lubm lubm.nt
其中第一个为调用的操作命令,第二个参数是生成数据库名字,第三个为原始数据文件(路径+文件名)。
对数据进行查询,使用标准的spaRql语句
使用以下命令调出查询接口仍然在输入行输入语句,第二个参数为刚才构建的数据库
./rdf3xquery lubm
命令行出现">"标识后输入查询语句
注意查询语句的书写
- 查询变量之间用空格分开,不使用逗号
- 花括号开始和结尾要空格
- 每一条语句结束紧跟.
- 每一条语句空格即可
LUBM查询2书写示例:
即一行写完。
SELECT ?X ?Y ?Z WHERE { ?X <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl#GraduateStudent>. ?Y <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl#University>. ?Z <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl#Department>. ?X <http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl#memberOf> ?Z. ?Z <http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl#subOrganizationOf> ?Y. ?X <http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl#undergraduateDegreeFrom> ?Y }
获得RDF查询时间
这个问题困扰了我好久,我们知道在linux终端下可以使用time()函数可以获得程序的执行时间。但是按照上面那种先载入数据库,再分别查询。则无法使用time()函数。
终端使用命令rdf3xquery dataDB query.sparql
即可查询即
time(./rdf3xquery lubm100 query1.sparql)
我真的服了这个,连个说明文档都没有,让我搞了好久。
time输出的三个参数:
- Real 是时钟时间-程序从开始至结束的总时间。他包括期间其他进程所占用的时间片和进程被阻塞的时间(如IO等待的时间)
- User 被测试程序在用户模式下所花的CPU时间。他是进程执行的正真的CPU时间。其他进程调度的时间片以及阻塞(如IO)的时间不包含在内。
- Sys 是进程在内核中所花费的CPU时间。他表示进程在内核调用中所花的CPU时间,而程序的库调用仍然运行在用户空间下。
所以测试时间为Real的时间。
最后我发了邮件问了作者
他的建议是:
Having said that you can use the evalsparql program instead of
rdf3xquery. (It is not build by default, but you can make it with "make
bin/evalsparql"). It outputs more information, including the execution
time. Which might be easier and more precise than trying to measure this in the shell
- make bin/evalsparql
bin/evalsparql dbName query.sparql
这个输出只有查询时间而没有查询个数,其中输出时间包括I/O时间,即输出到屏幕或者文件.
有一些查询系统的输出时间是不包含I/O的,如gStore。
若想只计算匹配时间,而不包括I/O时间,则使用命令,加上–silent即可
bin/evalsparql dbName query.sparql --silent
参考:[1]:
[1]https://github.com/YeXiaoRain/rdf3x-0.3.8