У нас немного грязная база данных.
Наша основная бэк-офисная система написана на Visual Fox Pro с локальными данными (да, я знаю!)
Для эффективной работы с данными на наших веб-сайтах мы решили регулярно экспортировать данные в базу данных SQL. Однако процесс, который делает это, в основном очищает таблицы каждый раз и выполняет повторную вставку.
Это означает, что у нас есть две базы данных SQL - одна, в которую пишет наш процесс экспорта FoxPro, и другая, из которой наши веб-сайты читают.
Этот вопрос касается преобразования из одной базы данных SQL в другую (SqlFoxProData -> SqlWebData).
Для конкретной таблицы (одной из наших основных таблиц приложений), поскольку во время этого процесса происходят различные преобразования данных, это не простые операторы UPDATE, INSERT и DELETE, использующие самостоятельные объединения, но вместо этого мы должны использовать курсоры (Я знаю!)
Это работало отлично в течение многих месяцев, но теперь мы начинаем сталкиваться с проблемами производительности, когда происходит обновление (это может происходить регулярно в течение дня)
В основном, когда мы обновляем SqlWebData.ImportantTable из SqlFoxProData.ImportantTable, это вызывает случайные тайм-ауты / тупики подключения / другие проблемы на живых веб-сайтах.
Я много работал над оптимизацией запросов, кэшированием и т. Д., Но настал момент, когда я искал другую стратегию для обновления данных.
Одна идея, которая пришла в голову, состоит в том, чтобы иметь две копии ImportantTable (A и B), некоторое представление о том, какая таблица в настоящий момент «активна», обновляет неактивную таблицу, затем переключает таблицу текущих действий
т.е. веб-сайты читаются из ImportantTableA, пока мы обновляем важные таблицы, а затем переключаем веб-сайты на чтение из важной таблицы.
Вопрос в том, возможно ли это и хорошая идея? Я делал что-то подобное раньше, но я не уверен, что это обязательно хорошо для оптимизации / индексации и т. Д.
Любые предложения приветствуются, я знаю, что это беспорядочная ситуация ... и долгосрочной целью было бы заставить наше приложение FoxPro указывать на SQL.
(мы используем SQL 2005, если это поможет)
Я должен добавить, что согласованность данных в данном случае не особенно важна, поскольку данные всегда немного устарели