Несколько лет назад я создал для своих коллег файл Excel, который отображает множество данных из внешнего источника данных ODBC.Данные разбиты на множество таблиц данных на разных листах.Файл также содержит кнопку, которая позволяет пользователю обновлять данные.
Поскольку доступ к данным из внешнего источника был очень медленным, я реализовал некоторую логику кэширования, в которой сохранялись части результатов, которые вряд ли могли измениться., во внешних таблицах на нашем сервере SQL и сделал некоторую магию, чтобы синхронизировать данные.Сам файл Excel получает доступ только к SQL-серверу.Каждая таблица данных использует SPROC для получения части данных.
Перемотка вперед на 5 лет.Файл Excel увеличился в размере и содержит так много листов и данных, что у нашего Excel (все еще версия 2003) возникли проблемы с ним.Поэтому мои коллеги разбили файл на две половины.
Проблема в том, что оба файла Excel содержат логику для обновления данных, и может случиться так, что пользователь нажимает кнопку обновления в файле №.1, пока другой пользователь уже обновляет файл №.2.
В этот момент логика обновления приходит в бешенство и создает мусор.
Запуск обновления требуется только один раз для обоих файлов Excel, поскольку он обновляет все данные, отображаемые в обоих файлах.Это довольно дорого и длится от 5 до 15 минут.
Я также могу разбить прогон обновления на две половины, но это не ускорит процесс, и обновление двух файлов займет вдвое больше времени.
Я думаю о каком-то мьютексе: пользователь A нажимает кнопку обновления, и начинается обновление.Пользователь B тоже хочет обновить, но логика (VBA / SPROC) обнаруживает, что обновление уже запущено, и ожидает его завершения.