Как правильно сопоставить большой объем информации?
Добрый день, есть три источника информации по объекту (информация берется из excel, потому назову источник ЛИСТ)
1ЛИСТ (внешний источник):
Артикул объекта
Дата создания объекта
Время на создание объекта
2ЛИСТ:
Тип объекта
Артикул объекта
Дата создания объекта (может отличаться от внешнего источника +-2мин)
Время на создание объекта
3ЛИСТ:
Тип объекта
Артикул объекта
Дата создания объекта
Процесс должен быть недолгим, примерно 15-20 минут, отсюда и проблема, как правильно это реализовать? Требуется сопоставить объекты и пометить их так:
Объект найден
Объект не найден
У объекта отличается время на создание объекта
Примечание:
1. SQL к сожалению здесь не подходит
2. Объем информации примерно по 50к строк на каждый источник
Для чтения екселя можно использовать либу ClosedXML
Читаешь все три листа, кладёшь в Dictionary и идёшь по всем.
Это будет как раз примерно то, как работает hashmap join в SQL-базах, и сработает это гораздо быстрее, тк все данные будут в ОЗУ.
По времени самое долгое будет - это чтение всех данных из файлов, и потом запись результата.
Если будет SSD-диск, то мб меньше чем за минуту всё пройдёт.
По описанию задачи не совсем понятно, что с чем надо сравнивать, и каком формате имеются данные, так что код не дам.
Парсишь листы через ClosedXml, для каждого листа создаёшь Dictionary, в который кладёшь каждую строку.
var dictionary=new Dictionary<string, Entry>();
foreach(var entry in entries)
dictionay.Add(entry.Id, entry);
Потом через словарь этот можно будет быстро проверять, есть ли объект с заданным артикулом на листе и проверять, какие значения у времени создания и даты.
entry - это
record Entry(string Id, DateTime Date, string? Type=null, int? TimeToCreate=null);
Всего 50к строк? Значит точно влезет в ОЗУ. Если влезет в ОЗУ, значит можно создать Dictionary просто, ну и по ключу брать значения. Если у вас компьютер не позволяет такие объемы перерабатывать, что можно воспользоваться любой keyvalue database на удаленном компьютере или в облаке(это шутка)
Проходите по каждой строке в Листе1, создаете обьект, это обьект кладете в Dictionary, в итоге у вас после прохода по Листу1 есть словарь. Ну потом проходите другие листы и сравниваете строки в них по артикулу с помощью созданного ранее Dictionary. И это занимает точно не 10 минут.