Каковы хорошие стратегии для обновления таблицы активной базы данных? - PullRequest
1 голос
/ 25 июня 2011

У меня есть таблица БД, которая периодически пополняется свежими данными. Затем эти данные необходимо поместить в соответствующую живую таблицу базы данных, перезаписав предыдущие живые данные.

По мере увеличения размера таблицы время, необходимое для помещения данных в оперативную таблицу, также увеличивается, и приложение будет выглядеть как отсутствующие данные.

Одно из решений состоит в том, чтобы поместить новые данные в таблицу live_temp, а затем выполнить команду SQL RENAME для этой таблицы, чтобы переименовать ее в живую таблицу. Переименование обычно выполняется в секунду. Это «правильный» способ решить эту проблему?

Существуют ли другие стратегии или инструменты для решения этой проблемы? Спасибо.

Ответы [ 3 ]

1 голос
/ 25 июня 2011

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

Я оченьпредпочитайте добавлять столбец версии в таблицу и иметь отдельную таблицу для хранения текущей версии.

Таким образом, клиентский код становится

select * 
from myTable t, 
     myTable_currentVersion tcv
where t.versionID = tcv.CurrentVersion

Это также сохраняет историю - что может быть или не быть полезным;если он не удаляет старые записи после установки столбца CurrentVersion.

1 голос
/ 25 июня 2011

Создайте дублирующую таблицу - точную копию.

Создайте новую таблицу, которая не делает ничего, кроме отслеживания таблицы «в актуальном состоянии».MostCurrent (таблица) id (столбец) - содержит имя таблицы, содержащей «актуальные» данные.

При повторном заполнении заполните более старую таблицу и обновите MostCurrent.id, чтобы отразить эту таблицу.

Теперь в вашем приложении, где вы связываете данные со страницей, связываете новейшую таблицу.

0 голосов
/ 25 июня 2011

Было бы целесообразно вносить изменения только в живую таблицу БД?Для большинства приложений я работал с изменениями были минимальными.Вы должны иметь возможность применить все изменения в одной транзакции.При фиксации транзакции они будут видны без сбоев в таблице.

Если данные не изменятся полностью, вы можете настроить базу данных так, чтобы вы могли заменить все данные в одной транзакции.

...