2012-11-22 7 views
2

Нужно дать совет, как лучше всего подойти к этому. В основном у нас есть несколько таблиц в нашей базе данных вместе с архивными версиями этих таблиц для удаленных данных (например, Booking and Booking_archive). Структура таблицы в обеих этих таблицах точно такая же, за исключением двух дополнительных столбцов в таблице архива: DateDeleted и DeletedBy.Архивирование данных в SQL

Я удалил эти архивные таблицы и просто добавил столбцы DateDeleted и DeletedBy в фактическую таблицу. Мой план состоит в том, чтобы затем разбить эту таблицу, чтобы я мог отделить архивированную информацию от неархивированного.

Это лучший подход? Мне просто не нравилась идея иметь две таблицы, чтобы различать архивные и неархивированные данные.

Любые другие предложения/указатели для этого?

+0

Выполнение «partioning» с использованием имен таблиц в определенный момент будет сложным. Если вы * можете * разбить их, перейдите к разделу. Какие СУБД вы используете? –

+0

Я использую SQL Server 2005 (возможно, обновление до 2008 года r2). – Umair

ответ

4

Пункт архивации заключается в повышении производительности, поэтому я бы сказал, что определенно лучше разделить данные на другую таблицу. Фактически, я бы дошел до создания базы данных архива на отдельном сервере и сохранил там архивные данные. Это принесет наибольшую прибыль. Архитектура второго уровня - это вторая база данных «архива» на том же сервере с точно подобранными таблицами.

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

Что касается хранения архивированной даты, я не думаю, что я бы потрудился сделать это в производственной базе данных. Также можно сделать так, чтобы ваша временная метка была занесена в таблицы archive-db, поэтому, когда вы вставляете запись, она автоматически штампует ее с датой, когда она была заархивирована.

+0

Я согласен с приростом производительности, но архивные данные в нашей базе данных не так уж плохи, возможно, около нескольких сотен тысяч строк. Однако для больших таблиц, возможно, отдельная таблица (или отдельная база данных, как вам было предложено) - это способ ... – Umair

+0

Если это «не так уж плохо», то действительно, зачем вообще ее архивировать? MS-SQL может справиться с этим.Просто обновите свое оборудование, пока вам не понадобится архивировать данные. Зачем создавать дополнительные головные боли для себя? –

+0

Да, сейчас я буду хранить все в одном столе. Пока не возникнет необходимость в отдельной структуре. Благодаря! – Umair

4

подход решение зависит от:

  1. Количество таблиц, имеющих такие архивные таблицы
  2. Что скорость поступления данных в архивных таблицах?
  3. Вы хотите инвестировать в программное обеспечение/оборудование отдельного сервера

На основании выше - различные варианты могут быть:

  1. же база данных, различные схемы на одном сервере
  2. Архив базы данных по тот же сервер
  3. Архив базы данных на другом сервере

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

Смежные вопросы