将数百万个xml文件插入basex

时间:2014-08-04 07:45:19

标签: 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","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);         
}

// StoreIntoBaseXDB方法

public static void storeIntoBaseXDB(int i,String id,String xmlFile)抛出BaseXException     {

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

    }
}

// executeInsertQuery()方法

          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();
            } 

}

2 个答案:

答案 0 :(得分:2)

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

限制为2 ^ 29,即546,870,912(存储的XML文档数)。

XML元素的限制是2 ^ 31,即2,147,483,648(尽管这包括所有节点,包括属性,文本等)。

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

http://docs.basex.org/wiki/Statistics

答案 1 :(得分:2)

为了提供有关BaseX的正确统计信息的@icza,我想添加一些内容:

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

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