Разработка системы для массовой обработки данных с помощью метрик - PullRequest
1 голос
/ 22 октября 2010

Я ищу идеи о том, как создать такую ​​систему:

Записи поступают навалом (скажем, 100 000 за раз) из разных источников, но в основном это простой текстовый файл.

Эти данные необходимо поместить как есть в таблицу базы данных SQL Server. Тем не менее, различные метрики должны быть рассчитаны. Например, одно поле представляет собой определенный 4-значный код. Действительны только определенные 4-значные коды, и нам нужно отслеживать, сколько записей поступило с неверными 4-значными кодами. Существуют и другие поля, которые необходимо проверить, и список полей может измениться в будущем.

Что такое хороший дизайн для такой системы? Лучше ли иметь события BadFourDigitCodeEncountered и процессоры событий OnBadFourDigitCodeEncountered или есть более чистый дизайн, который легко поддерживать в будущем?

(я не думаю, что это должно иметь значение, но я использую NHibernate в качестве своего ORM, но, может быть, это полезно знать, так как NHibernate имеет различные точки для подключения?)

Я должен упомянуть: использование C # .NET 4.0.

Заранее спасибо, Арлен

1 Ответ

2 голосов
/ 22 октября 2010

Для большинства процессов файловой базы данных большой емкости я бы разработал его как рабочий процесс ETVL (extract-transform-validate-load).

Извлечение: откройте файл, получите строки данныхи поместите их в очередь для обработки слоем преобразования.

Преобразование: захватывает необработанные данные записи, разбивает их на нужные вам поля и создает новый объект домена с данными полей.Затем этот объект попадает в очередь для обработки слоем проверки.

Проверка: Выполните свой объект домена с помощью ряда бизнес-правил, разработанных для обеспечения того, чтобы запись находилась в действительном, согласованном состоянии.Действительные объекты помечаются как таковые (либо помещая их в «хорошую» очередь, либо помещая их в простой класс, содержащий объект и флаг перед помещением их в очередь), и помещают в последнюю очередь для загрузчика.Вы можете рассчитать свои метрики здесь для каждой партии или получить метрики в режиме реального времени, поместив «сбойные» записи в другую таблицу, с кодом ошибки, описывающим, что не так, и запросив цифры и причины на досуге для одной или нескольких партий..

Загрузка: сохранить объекты домена в базе данных вашей системы.

Каждый из этих этапов должен представлять собой отдельные методы или даже классы, управляемые процессом "супервизор".Прелесть этого дизайна в его масштабируемости;если у вас много логики проверки или преобразования, которая замедляет процесс, вы можете очень легко модифицировать супервизор для многопоточности этих этапов, добавляя дополнительную мощность процессора там, где вам это нужно.Это также модульно;если формат файла изменяется, вам нужно только изменить стадию преобразования процесса (возможно, извлечение, если изменение достаточно радикально).Если механизм сохранения меняется, вы просто вставляете новый слой загрузки.В зависимости от сложности вашего графа объектов и, следовательно, сложности этапов Transform и Validate, я думаю, вы найдете, что он способен обрабатывать сотни тысяч записей одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...