У меня есть требование, когда я должен выбрать около 60 миллионов плюс записи из базы данных. После того, как у меня есть все записи в ResultSet, я должен сформировать некоторые столбцы в соответствии с требованиями клиента (формат даты и формат номера), а затем я должен записать все записи в файле (вторичная память).Лучший дизайн для сценария
- В настоящее время я выбираю записи на основе дня (7 выбирает на 7 дней) из БД и помещает их в HashMap. Чтение из HashMap и формирование некоторых столбцов и, наконец, запись в файл (отдельный файл в течение 7 дней).
Наконец, я объединю все 7 файлов в одном файле.
Но весь этот процесс занимает 6 часов. Чтобы улучшить этот процесс, я создал 7 потоков в течение 7 дней, и все потоки записывают отдельные файлы.
И наконец, я объединю все 7 файлов в одном файле. Этот процесс занимает 2 часа. Но моя программа собирается OutOfMemory через 1 час и так далее.
Пожалуйста, предложите лучший дизайн для этого сценария, должен ли я использовать какой-либо механизм кеширования, если да, то какой и как?
Примечание: Клиент не хочет ничего менять в базе данных, например, создавать индексы или хранимые процедуры, они не хотят касаться базы данных. Спасибо заранее.
Можете ли вы рассказать нам, что RDMS вы используете? Это повлияет на то, какие решения, ориентированные на базу данных, могут быть доступны. Кроме того, можете ли вы рассказать нам, предназначена ли база данных для обработки транзакций (высоко нормированная) или более аналитическая обработка (сильно денормализованная)? –
Клиент не хочет ничего менять в БД. Они не готовы создавать новый индекс или SP или нормализовать таблицы. –