2015-05-29 3 views
2

Я получаю большое количество xml-файлов (нумерация в десятках тысяч раз в несколько минут) из MQ. Файлы xml не очень большие. Я должен извлечь информацию и сохранить ее в базе данных. К сожалению, я не могу использовать сторонние библиотеки (кроме apache commons). Какие стратегии/методы обычно используются в этом сценарии? Есть ли какой-либо анализатор xml в java или apache, который может хорошо справляться с такими ситуациями?Разбор большого количества xml-файлов в java

Я мог бы также добавить, что я использую JDK 1.4

+0

STAX встроен в систему и работает хорошо. [Linkage.] (Https://docs.oracle.com/javase/tutorial/jaxp/stax/using.html) – markspace

+0

должно ли это быть атомная операция? Я имею в виду, что должно быть, если в каком-то xml есть ошибка? –

+0

wow, что было быстро :) Спасибо, я посмотрю. Однако как мне обрабатывать эти вставки базы данных? –

ответ

1

На основе комментариев и дискуссий вокруг этой темы - я хотел бы предложить консолидированное решение.

  1. Разбор файлов XML с помощью SAX - Как @markspace упоминалось, вы должны пойти с SAX, который встроен в систему и имеет хорошую производительность.

  2. Использования BULK Вставка, если это возможно - Так вы планируете вставить большой объем данных считает, что типа данных вы читаете и хранение в базу данных. Все XML-файлы содержат одну и ту же схему (что означает, что они соответствуют одной таблице в базе данных ). Или они представляют разные объекты (что означает, что в конечном итоге вставляет данные в несколько таблиц).

    В случае, если схема всех XML-файлов, которые необходимо вставить в , та же таблица в базе данных, а затем рассмотрите возможность их дозирования и вставить их в базу данных. Это будет определенно более эффективным с точки зрения времени, а также ресурсами (вы должны открыть только одно соединение, чтобы сохранить пакет, как , против нескольких соединений для каждого объекта). Конечно, вы придется потратить некоторое время в настройке вашей размер партии, а также определении стратегии обработки ошибок для пакетных вставок (отбрасывания все v/s отбрасывания ошибочными)

    Если схема в XML файлы разные, а затем подумайте о том, чтобы сгруппировать схожими XML-группами в группы, чтобы вы могли BULK INSERT эти группы позже.

  3. Наконец - и это очень важно: Убедитесь, что вы отпускаете все ресурсов, такие как дескрипторы файлов, соединение с базами данных и т.д., как только вы сделаны с обработкой или в случае, если вы столкнулись с ошибками. В простых словах используйте try-catch-finally в правильных местах.

Хотя далеко не полный, надеюсь, этот ответ дает вам множество критических контрольных точек, которые необходимо учитывать при написании масштабируемую производительную код

+0

Спасибо, Prahalad. Другой вопрос - как мы будем определять частоту этих объемных вставок? –

+0

@lemonTea На этот вопрос нет определенного ответа. Вам необходимо будет определить частоту объемных вставок в зависимости от различных факторов, таких как потребление памяти, ограничения на срок, в течение которого данные должны сохраняться в базе данных и так далее. Единственным способом определения правильных параметров является наблюдение производительности приложения для ряда значений в среде, имитирующей производство –

Смежные вопросы