2011-12-15 3 views
-1

У вас есть идея о наиболее эффективном способе анализа XML в базе данных.XML-анализ: вставка данных XML в базу данных: производительность

"Самый быстрый путь".

прочитайте XML, выполните некоторые проверки, а затем вставьте результат в базу данных.

Спасибо.

+0

Наиболее производительным способом является использовать хранилище данных XML и не выполнять синтаксический анализ. Если это неприемлемо, вам нужно сказать нам, почему. –

+0

@med_alpa: Добро пожаловать в Stackoverflow. Не забудьте внимательно прочитать все разделы [FAQ] (http://stackoverflow.com/faq). Вы получите значок и улучшите свой опыт Stackoverflow. – menjaraz

ответ

0

Главный вопрос заключается в

Хочет, чтобы это было сделано программно или с уже сделаны заявлениями?

Programatically

Это зависит от того, как написан XML. Если имена тегов/свойств соответствуют таблицам/столбцам базы данных, вы можете записать их довольно простым способом, если нет, вам нужно сначала сопоставить имена тегов xml и свойств, чтобы они соответствовали структуре базы данных.

Для правильного ответа мне нужно знать текущий язык, на котором вы его напишете.

Приложения

Один пример: http://www.altova.com/databasespy/database-import-export.html

+0

OK спасибо, я хочу это программно. Используемый язык - Java. Файлы XML соответствуют столбцам таблиц почти в каждом случае. Есть несколько счетных таблиц, где xmls содержит больше полей, чем таблица. –

0

Две вещи, чтобы рассмотреть следующие вопросы:

  1. Убедитесь, что вы разобрать ваш XML с помощью потокового API, таких как SAX или StAX, а не ходить по используя API DOM.
  2. Используйте готовое изделие и закажите свои вставки в пакетах, скажем, 1000 вставок.

В Java вы можете использовать StaxMate, что дает вам небольшой слой над StAX. Затем выполните проверку и вставку во внутренней петле:

Подготовка оператора вставки базы данных вне цикла как:

Connection conn = ... 
    PreparedStatement ps = conn.prepareStatement("INSERT INTO ... (...) VALUES (?, ?,...)"); 
    static int i=0; 

И во внутреннем цикле:

ps.setInt(1, a); 
ps.setString(2, b); 
... 
ps.addBatch(); 
if(++i % 1000==0) ps.executeBatch() 
Смежные вопросы