Java 将数百万xml文件插入basex

Java 将数百万xml文件插入basex,java,xml,basex,Java,Xml,Basex,是否可以将一百万条记录(xml文件)存储到Basex数据库中 for(int j=1;j<1000000;j++) { String id=String.valueOf(j); String[] elems={"firstname","lastname","nickname","salary","permanentAddress","currentAddress","contactNo","email","alternateMail","FacebookName","C

是否可以将一百万条记录(xml文件)存储到Basex数据库中

for(int j=1;j<1000000;j++) {
     String id=String.valueOf(j);
     String[] elems={"firstname","lastname","nickname","salary","permanentAddress","currentAddress","contactNo","email","alternateMail","FacebookName","Color"};
     String[] childs = {id,"yong"+id,"mook kim"+id,"mkyong"+id,"100000"+id,"Bhopal"+id,"pune"+id,"999999999"+id ,"test"+id+"@basex.com","testA"+id+"@basex.com","Tom"+id,"grey"+id};

    try {
        xmlFile= x.CreateXMLDoc("test","transperfect",elems,childs);
    } catch (TransformerConfigurationException exception) { 
        exception.printStackTrace(); 
    }

    storeIntoBaseXDB(j,id,xmlFile);         
}
//executeInsertQuery()方法


}是的,这是可能的。为什么不是(一百万是一个相对较小的数字)

限制为2^29,即
546870912
(存储的XML文档数)

XML元素的限制为2^31,即
2147483648
(尽管这包括所有节点,包括属性、文本等)

这是一个有关现有数据库示例的BaseX统计信息的网页,表的第一行还包含限制(
#Files
表示存储的XML文档的数量,
#Nodes
表示元素、属性、文本等XML节点的数量):


在回答@icza提供的BaseX的正确统计数据时,我想补充几点:

每个数据库的文件数、节点数等的上限始终适用。这意味着您可以简单地创建另一个数据库来绕过这些限制。在许多情况下,将一个大型数据库拆分为几个小型数据库甚至可能是有益的,因为锁定是在数据库级别进行的,即,如果您有一个大型数据库并执行写入操作,则所有数据库都会被锁定。如果将其拆分为多个数据库,则只会锁定较小的部分


由于XQuery可以在一个查询中轻松访问多个数据库,所以在您的查询中可以轻松地将拆分的数据库合并在一起。

你们说得对。但是,当我试图在java中使用new add()方法(比如new add(id,xmlFile).execute(context);)来存储一百万条记录时,即使不能确保存储记录,也会花费太长的时间。当我试图通过命令提示符查看BaseX数据库中的xml文件时,它给出了错误:“数据库‘Trans’正在更新,或者更新未完成。”。那么,有没有办法快速存储一百万条记录呢?当然,你应该编辑你的问题并显示适当的代码片段(例如storeIntoBaseXDB),因为你当前的代码片段实际上与之无关。还有,“太长时间”是什么意思,多长时间太长(插入一百万个文档显然需要一些时间)。此外,正如我现在多次告诉您的(这里是SO和我们的邮件列表):使用XQuery Update可能会更快,而不是先序列化文件并将其写入磁盘。我不能说需要多少时间,因为当我尝试存储100000条记录时,大约需要一个小时,因此我无法预测是否会有一百万条记录记录。
    if(i==1)
    {   
        System.out.println("=========================Store into Database=========================");


        //System.out.println("Check database existence");
        con.getDatabaseConnection(dbNmae);
        con.executeInsertQuery(dbNmae,id,xmlFile);
    }
    else
    {
        con.executeInsertQuery(dbNmae,id,xmlFile);

    }
}
          public long executeInsertQuery(String dbname,String id,String xmlFile) throws BaseXException
    {

           //System.out.println(path);
            new Open(dbname).execute(context);



            try 
            {


                /* String query = "db:add('db','C:/Users/manish/Desktop/BaseX65/xml/books.xml')";
                 QueryProcessor proc = new QueryProcessor(query, context);
                    proc.execute();
                    proc.close();
                    context.close();*/

                new Add(id,xmlFile).execute(context);

                //System.out.println(new Find(id));


            }

            catch (Exception e)
            {
                System.out.println("ERROR executing query: ");
                e.printStackTrace();
            }