вставка миллионов файлов XML в basex

1

Можно ли хранить миллион записей (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();
            } 

}

Теги:
basex

2 ответа

0
Лучший ответ

Да, это возможно. Почему бы и нет (миллион - относительно небольшое число)?

Предел составляет 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

Добавляя к ответу @icza с правильной статистикой для BaseX, я хотел бы добавить несколько вещей:

Верхние ограничения на количество файлов, узлов и т.д. Всегда применяются к каждой базе данных. Это означает, что вы можете просто создать другую базу данных, чтобы обойти эти ограничения. Во многих ситуациях может быть даже полезно разбить большую базу данных на несколько небольших, поскольку блокировка выполняется на уровне базы данных, то есть, если у вас есть одна большая база данных и вы пишете, все заблокировано. Если вы разделите его на несколько баз данных, только небольшая часть будет заблокирована.

Поскольку XQuery может легко обращаться к нескольким базам данных в одном запросе, разделенные базы данных могут быть легко объединены в ваши запросы.

  • 0
    вы, ребята, правы. Но когда я пытаюсь сохранить миллион записей с помощью нового метода add () в java (например, new Add (id, xmlFile) .execute (context);), это занимает слишком много времени, даже если это не гарантирует сохранение записей , И выдает ошибку Ошибка: «База данных« Транс »обновляется или обновление не было завершено». когда я пытаюсь увидеть XML-файлы в базе данных BaseX с помощью командной строки. Так есть ли способ быстро сохранить миллион записей?
  • 0
    Что ж, вам обязательно нужно отредактировать свой вопрос и показать соответствующие фрагменты кода (например, storeIntoBaseXDB), поскольку ваш текущий фрагмент на самом деле не имеет к этому никакого отношения. Кроме того, что означает «слишком много времени», как долго это слишком долго (вставка миллиона документов, очевидно, занимает некоторое время). Кроме того, как я уже говорил вам много раз (здесь, в SO и нашем списке рассылки): скорее всего, будет быстрее использовать XQuery Update вместо того, чтобы сначала сериализовать и записать файл на диск.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню