У меня есть программа, которая используется для репликации / зеркалирования основных таблиц (около 20) из Oracle в MSSQL 2005 через веб-сервис (REST).
Программа периодически читает данные XML из веб-сервиса и преобразует их в список через сущность jpa. Этот список сущностей будет сохранен в MSSQL через JPA.
Вся сущность jpa будет предоставлена командой, создавшей веб-сервис.
Есть две проблемы, которые я замечаю и после некоторых поисков кажется неразрешимой.
1-й выпуск: Производительность вставки / обновления через JDBC jpa очень низкая, она занимает около 0,1 с на строку ...
Выполнение того же с помощью C # -> datatable -> bulkinsert для новой таблицы в DB -> вызов хранимой процедуры для выполнения массовой вставки / обновления базы объединений занимает 0,01 с для 4000 записей.
(Каждая таблица будет содержать около 500-5000 записей каждые 5 минут)
Ниже показан снимок кода Java, который выполняет задачу-> постоянная библиотека -> EclipseLink JPA2.0
private void GetEntityA(OurClient client, EntityManager em, DBWriter dbWriter){
//code to log time and others
List<EntityA> response = client.findEntityA_XML();
em.setFlushMode(FlushModeType.COMMIT);
em.getTransaction().begin();
int count = 0;
for (EntityA object : response) {
count++;
em.merge(object);
//Batch commit
if (count % 1000 == 0){
try{
em.getTransaction().commit();
em.getTransaction().begin();
commitRecords = count;
} catch (Exception e) {
em.getTransaction().rollback();
}
}
}
try{
em.getTransaction().commit();
} catch (Exception e) {
em.getTransaction().rollback();
}
//dbWriter write log to DB
}
Что-то сделано неправильно, вызывая медлительность? Как я могу улучшить скорость вставки / обновления?
2-й выпуск: Существует около 20 таблиц для репликации, и я создал такое же количество методов, как и выше, в основном скопировав вышеописанный метод 20 раз, заменив EntityA на EntityB и так далее, и вы получите идея ...
Есть ли способ обобщить метод так, чтобы я мог добавить любую сущность?