SQL Server: дедушка-отец-сын архивирование - PullRequest
0 голосов
/ 14 декабря 2011

А) Возможно ли архивирование деда-отца-сына?Например, мы хотели бы, чтобы всегда производился предварительный расчет следующего значения и ничего другого: • 1001 *

  • Суточные итоги за последнюю неделю
  • Еженедельные итоги за предыдущие 5-6 недель
  • Ежемесячные итоги всех предыдущих месяцев

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

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

B) Нам бы хотелось иметь некоторые функции, такие как версия StackExchanges (и, как правило, вики).Существуют ли способы как-то заархивировать старые версии в производственной среде и сделать более новые версии более доступными?Мы изучали Partitioning , но, похоже, он не справляется с таким сложным сценарием (мы не хотим, чтобы ВСЕ сообщения до X даты были разделены, а не нужны все версии, которые старше, чемновейшая версия)

Каковы лучшие практики по этим вопросам?

1 Ответ

1 голос
/ 08 августа 2012

A: Вы описываете хранение данных временных рядов с разным сроком хранения / степенью детализации, которые SQL Server не предоставляет ни в какой форме.Конечно, вы можете создать эту стратегию самостоятельно довольно легко, и, к счастью, у вас есть несколько замечательных примеров в проектах с открытым исходным кодом для руководства:

  1. RRD Tool - база данных временных рядов и библиотека графиков.
  2. Графит - вдохновлено RRD Tool, созданным

B: Трудно говорить в таких общих терминах, но, возможно, вы можете поддерживать столбец Versionна вашем столе, где 0 всегда отражает последнюю версию.Каждый раз, когда вы продвигаете новую версию, вы понижаете все остальные версии, увеличивая это значение.Увеличение версий по мере старения позволяет вам создать отфильтрованный индекс для детерминированного значения (Version = 0), что делает его очень быстрым для получения текущей версии.
Затем можно выполнить очистку, основываясь на количестве версий назад а не дата.Просто delete yourTable where Version > 5.Схема разбиения может работать с использованием этого метода.

...