Сценарий: данные принимаются и записываются в базу данных с отметками времени.Мне нужно обработать необработанные данные в порядке, полученном на основе метки времени, и записать их обратно в базу данных, другую таблицу, снова поддерживая порядок на основе метки времени.
Я придумал следующую схему: создал две очереди, одну для хранения необработанных данных из базы данных, другую для хранения обработанных данных перед их записью в БД.У меня есть два потока, одно чтение в исходную очередь и другое чтение из очереди результатов.Между ними я порождаю несколько потоков для обработки данных из исходной очереди и записи их в очередь результатов.
Я экспериментировал с SortedList (ручная блокировка) и BlockingCollection.Я использовал два подхода к параллельной обработке: Parallel.For (ForEach) и TaskFactory.Task.StartNew.
Каждая единица данных может занимать различное количество времени для обработки, основываясь на нескольких факторах.Один поток все еще может обрабатывать первую точку данных, в то время как другие потоки работают с тремя или четырьмя точками данных каждый, что портит порядок отметок времени.
Недавно я узнал о OrderingPartitioner и подумал, что это решит проблемуно, следуя примеру MSDN, я вижу, что это не сортировка базовой коллекции.Может быть, мне нужно реализовать пользовательский разделитель, чтобы заказать мою коллекцию сложных типов данных?или, может быть, есть лучший способ решения проблемы?
Любые предложения и / или ссылки на статьи, обсуждающие подобную проблему, высоко ценятся.