Динамическое архивирование строк - PullRequest
1 голос
/ 02 июня 2010

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

Каковы наилучшие методы для достижения этой цели? Должен ли я просто оставить все это в одной таблице и пропустить выполненные задачи из запросов? Боюсь, что со временем таблица станет огромной (1 000 000 строк в год или меньше). Или я должен создать другую таблицу, например task_archive, и запрашивать эту строку всякий раз, когда требуются данные из нее?

Я знаю, что подобные вопросы задавались и раньше, но большинство из них касалось одновременного архивирования тысяч строк, мне просто нужно знать, как лучше всего (и почему) архивировать по 1 строке за раз, когда она помечена как завершенная

Ответы [ 2 ]

3 голосов
/ 02 июня 2010

Для скорости и простоты использования я обычно оставляю строку в той же таблице (и отмечаю ее как завершенную), а затем перемещаю ее в архивную таблицу.Таким образом, пользователь не берет на себя задержку с этим движением на месте;перемещение может происходить как пакетный процесс во время незанятых периодов.

Когда это произойдет, зависит от вашего приложения.Например, если у них есть виджет панели мониторинга, на котором отображаются «Недавно выполненные задачи», в котором отображаются все задачи, выполненные за последнюю неделю (и позволяющие развернуть детали для просмотра деталей), может иметь смысл переместить строки в архив.неделю после того, как они были завершены.Или, если им часто приходится смотреть на задачи из текущего семестра (для академического приложения), но редко в течение предыдущих семестров, сделайте пакетное перемещение выполненным в конце семестра.

Если таблица проиндексирована 1 000 000 строкчестно, не должно быть ничего особенного.

0 голосов
/ 02 июня 2010

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

Или вы можете создать хранимую процедуру, которая выполняла архив. Например

sp_markcompleted (TaskID)

начать транзакцию;

вставить в newtable select * from oldtable, где id = taskid;

удалить из oldtable, где id = taskid;

совершить;

...