Для большинства процессов файловой базы данных большой емкости я бы разработал его как рабочий процесс ETVL (extract-transform-validate-load).
Извлечение: откройте файл, получите строки данныхи поместите их в очередь для обработки слоем преобразования.
Преобразование: захватывает необработанные данные записи, разбивает их на нужные вам поля и создает новый объект домена с данными полей.Затем этот объект попадает в очередь для обработки слоем проверки.
Проверка: Выполните свой объект домена с помощью ряда бизнес-правил, разработанных для обеспечения того, чтобы запись находилась в действительном, согласованном состоянии.Действительные объекты помечаются как таковые (либо помещая их в «хорошую» очередь, либо помещая их в простой класс, содержащий объект и флаг перед помещением их в очередь), и помещают в последнюю очередь для загрузчика.Вы можете рассчитать свои метрики здесь для каждой партии или получить метрики в режиме реального времени, поместив «сбойные» записи в другую таблицу, с кодом ошибки, описывающим, что не так, и запросив цифры и причины на досуге для одной или нескольких партий..
Загрузка: сохранить объекты домена в базе данных вашей системы.
Каждый из этих этапов должен представлять собой отдельные методы или даже классы, управляемые процессом "супервизор".Прелесть этого дизайна в его масштабируемости;если у вас много логики проверки или преобразования, которая замедляет процесс, вы можете очень легко модифицировать супервизор для многопоточности этих этапов, добавляя дополнительную мощность процессора там, где вам это нужно.Это также модульно;если формат файла изменяется, вам нужно только изменить стадию преобразования процесса (возможно, извлечение, если изменение достаточно радикально).Если механизм сохранения меняется, вы просто вставляете новый слой загрузки.В зависимости от сложности вашего графа объектов и, следовательно, сложности этапов Transform и Validate, я думаю, вы найдете, что он способен обрабатывать сотни тысяч записей одновременно.