Определение проблемы в понимании .
Допустим, ваш файл содержит
ID,Name,Age
1,Jim,20
2,Tim,30
3,Kim,40
Как вы указали, строка может быть добавлена / обновлена, поэтому файл становится
ID,Name,Age
1,Jim,20 -- to be discarded
2,Tim,35 -- to be updated
3,Kim,40 -- to be discarded
4,Zim,30 -- to be inserted
Теперь требуется обновить базу данных, вставив / обновив только более 2 записей в два SQL-запроса или 1 пакетный запрос, содержащий два SQL-оператора.
Я делаю следующее предположения здесь
- Вы не можете изменить существующий процесс для создания файлов.
- Вы используете некоторую пакетную обработку [Чтение из файла - Обработка в память - Запись в БД] для загрузки данных в базу данных.
Сохранение хэш-значений Record [Name, Возраст] против идентификатора на карте в памяти, где идентификатор - это ключ, а значение - хеш [Если вам требуется масштабируемость, используйте hazelcast].
Ваша Batch Framework для загрузки данных [Опять-таки, при условии, что одна строка файла обрабатывается как одна запись], необходимо проверить вычисленное значение хеш-функции по отношению к идентификатору в памяти Map.Первое время создание также можно выполнить с помощьюваш пакетный фреймворк для чтения файлов.
If (ID present)
--- compare hash
---found same then discard it
—found different create an update sql
In case ID not present in in-memory hash,create an insert sql and insert the hashvalue
Вы можете пойти на параллельную обработку, обработку фрагментов и разделение данных в памяти, используя spring-batch и hazelcast.
http://www.hazelcast.com/
http://static.springframework.org/spring-batch/
Надеюсь, это поможет.