Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 与命令行相比,在Eclipse中SPARQL查询需要更长的时间_Java_Eclipse_Rdf_Sparql_Jena - Fatal编程技术网

Java 与命令行相比,在Eclipse中SPARQL查询需要更长的时间

Java 与命令行相比,在Eclipse中SPARQL查询需要更长的时间,java,eclipse,rdf,sparql,jena,Java,Eclipse,Rdf,Sparql,Jena,我需要比较SPARQL和SQL(基于Oracle)。 所以我从Jena和Eclipse开始。我在SPARQL中创建了我的RDF文件和查询,但是当我在命令行中执行查询时,需要5秒钟才能得到结果,而在Eclipse中则需要15秒钟! 两个计算时间之间的差异很大,我无法正确比较这些数据库 有人知道为什么吗 我以RDF/XML模式保存RDF文件(默认情况下) 谢谢 我使用的代码如下: String q = "SELECT ?appID ?appLibelle ?droit ?login ?passwor

我需要比较SPARQL和SQL(基于Oracle)。 所以我从Jena和Eclipse开始。我在SPARQL中创建了我的RDF文件和查询,但是当我在命令行中执行查询时,需要5秒钟才能得到结果,而在Eclipse中则需要15秒钟! 两个计算时间之间的差异很大,我无法正确比较这些数据库

有人知道为什么吗

我以RDF/XML模式保存RDF文件(默认情况下)

谢谢

我使用的代码如下:

String q = "SELECT ?appID ?appLibelle ?droit ?login ?password ?prenom ?nom "
            + "WHERE { "
            + "?empdroitapp EMPDROITAPP:EMP_ID ?emp . "
            + "?empdroitapp EMPDROITAPP:APP_ID ?app . "
            + "?empdroitapp EMPDROITAPP:EMPDroitAPP_Droit ?droit . "
            + "OPTIONAL { ?empapp EMPAPP:EMP_ID ?emp . "
            + "?empapp EMPAPP:APP_ID ?app . "
            + "?empapp EMPAPP:EMPAPP_Login ?login . "
            + "?empapp EMPAPP:EMPAPP_Password ?password . } . "
            + "?emp EMP:EMP_ID ?empID . "
            + "?emp EMP:EMP_Prenom ?prenom . "
            + "?emp EMP:EMP_Nom ?nom . "
            + "?app APP:APP_ID ?appID . "
            + "?app APP:APP_Libelle ?appLibelle . "
            + "} ORDER BY ASC(?empID)";

    String prefix = "PREFIX LDAP:      <http://example.com/property#>";
    String prefixEMP = "PREFIX EMP:      <http://example.com/property/emp#>";
    String prefixAPP = "PREFIX APP:      <http://example.com/property/app#>";
    String prefixEMPAPP = "PREFIX EMPAPP:      <http://example.com/property/empapp#>";
    String prefixEMPDROITAPP = "PREFIX EMPDROITAPP:      <http://example.com/property/empdroitapp#>";
    String queryString = prefix + NL + prefixEMP + NL + prefixAPP + NL
            + prefixEMPAPP + NL + prefixEMPDROITAPP + q;

    Query query = QueryFactory.create(queryString);
    //query.serialize(new IndentedWriter(System.out, false));
    QueryExecution qexec = QueryExecutionFactory.create(query, m);
    long chrono = java.lang.System.currentTimeMillis();
    try {
        // Assumption: it's a SELECT query.
        ResultSet rs = qexec.execSelect();

        //String str = "appID\tappLibelle\tdroit\tlogin\tpassword\tprenom\tnom\n";
        // The order of results is undefined.
        for (; rs.hasNext();) {
            QuerySolution rb = rs.nextSolution();

            // Get title - variable names do not include the '?' (or '$')
            RDFNode appID = rb.get("appID");
            RDFNode appLibelle = rb.get("appLibelle");
            RDFNode droit = rb.get("droit");
            RDFNode login = rb.get("login");
            RDFNode password = rb.get("password");
            RDFNode prenom = rb.get("prenom");
            RDFNode nom = rb.get("nom");

            // Check the type of the result value

            if (appID.isResource()) {
                Resource res = (Resource) appID;
                System.out.print("\t" + res);
            } else {
                System.out.print("\t" + appID);
            }

            if (appLibelle != null) {
                System.out.print("\t" + appLibelle);
            } else System.out.print("\tnull");

            if (droit != null) {
                System.out.print("\t" + droit);
            } else System.out.print("\tnull");

            if (login != null) {
                System.out.print("\t" + login);
            } else System.out.print("\tnull");

            if (password != null) {
                System.out.print("\t" + password);
            } else System.out.print("\tnull");

            if (prenom != null) {
                System.out.print("\t" + prenom);
            } else System.out.print("\tnull");

            if (nom != null) {
                System.out.print("\t" + nom);
            } else System.out.print("\tnull");
            System.out.println();
            //str += "\n";
        }
        //System.out.println(str);
    } finally {
        // QueryExecution objects should be closed to free any system
        // resources
        qexec.close();
    }
    long tmp = java.lang.System.currentTimeMillis();
    System.out.println("Temps écoulé : " + (tmp - chrono) + "ms");
String q=“选择?应用ID?应用贝尔?所有权?登录?密码?prenom?nom”
+“其中{”
+“?empdroitapp empdroitapp:EMP_ID?EMP。”
+“?empdroitapp empdroitapp:APP_ID?APP”
+“?empdroitapp empdroitapp:empdroitapp_Droit?Droit。”
+“可选{?empapp empapp:EMP_ID?EMP。”
+“?empapp empapp:APP_ID?APP”
+“?empapp empapp:empapp\u登录?登录。”
+“?empapp empapp:empapp_密码?密码。}”
+“emp emp:emp_ID?empID”
+“emp emp:emp_Prenom?Prenom”
+“emp emp:emp_Nom?Nom”
+“应用程序:应用程序ID?应用程序ID”
+“应用程序应用程序:应用程序库?应用程序库。”
+“}ASC命令(?empID)”;
字符串前缀=“前缀LDAP:”;
字符串prefixEMP=“PREFIX EMP:”;
字符串prefixAPP=“PREFIX APP:”;
字符串prefixEMPAPP=“PREFIX emapp:”;
字符串prefixEMPDROITAPP=“PREFIX EMPDROITAPP:”;
字符串queryString=prefix+NL+prefixEMP+NL+prefixAPP+NL
+prefixEMPAPP+NL+prefixEMPDROITAPP+q;
Query=QueryFactory.create(queryString);
//序列化(新缩进写入程序(System.out,false));
QueryExecution qexec=QueryExecutionFactory.create(query,m);
long chrono=java.lang.System.currentTimeMillis();
试一试{
//假设:这是一个SELECT查询。
ResultSet rs=qexec.execSelect();
//String str=“appID\tappLibelle\tdroit\tlogin\tpassword\tprenom\tnom\n”;
//结果的顺序未定义。
对于(;rs.hasNext();){
QuerySolution rb=rs.nextSolution();
//获取标题-变量名不包括“?”(或“$”)
RDFNode appID=rb.get(“appID”);
RDFNode appLibelle=rb.get(“appLibelle”);
RDFNode droit=rb.get(“droit”);
RDFNode login=rb.get(“login”);
RDFNode password=rb.get(“密码”);
RDFNode prenom=rb.get(“prenom”);
RDFNode nom=rb.get(“nom”);
//检查结果值的类型
if(appID.isResource()){
资源res=(资源)appID;
系统输出打印(“\t”+res);
}否则{
系统输出打印(“\t”+appID);
}
if(appLibelle!=null){
系统输出打印(“\t”+appLibelle);
}else系统输出打印(“\t完整”);
if(droit!=null){
系统输出打印(“\t”+droit);
}else系统输出打印(“\t完整”);
如果(登录名!=null){
系统输出打印(“\t”+登录);
}else系统输出打印(“\t完整”);
if(密码!=null){
系统输出打印(“\t”+密码);
}else系统输出打印(“\t完整”);
如果(prenom!=null){
系统输出打印(“\t”+prenom);
}else系统输出打印(“\t完整”);
如果(nom!=null){
系统输出打印(“\t”+nom);
}else系统输出打印(“\t完整”);
System.out.println();
//str+=“\n”;
}
//系统输出打印项次(str);
}最后{
//QueryExecution对象应关闭以释放任何系统
//资源
qexec.close();
}
long tmp=java.lang.System.currentTimeMillis();
System.out.println(“Tempsécoulé:”+(tmp-chrono)+“ms”);

代码中没有明显的错误,但运行时性能当然不仅取决于代码,还取决于数据的大小和形状、如何将数据添加到存储/模型、JRE的可用内存量等等。换言之,这有点过于宽泛,以其当前的形式无法回答。作为一般观点,我还想说,如果您比较SPARQL和SQL,我个人的观点是,您不应该真正关注一个特定SPARQL实现(Jena)与一个特定SQL实现(Oracle)的性能,而是关注表现力、适用性等,这是我首先在Eclipse上运行的数据文件和查询,另一方面是通过命令行运行的数据文件和查询。这也是运行一切的同一台计算机。我和Jena一起添加数据,如果你愿意,我可以编辑我的第一篇文章,把它放进去。我的JRE内存在Eclipse和shell之间没有变化。为了回答你的第二篇文章,我必须将使用jena的SPARQL与单个关系数据库进行比较,所以我选择Oracle。。这并不是我的全部选择一个更一般的评论:一般来说,数据库通常需要“预热”它们的索引,然后才能变得性能良好。只运行一次查询可能会得到不正确的结果。尝试在一行中运行查询十次(使用一个简单的
for
-循环或其他方法)并平均响应时间。运行Eclipse与在Eclipse中运行您自己的代码不同。确保您正在配置自己的程序以使用足够的RAM。见例。