Зачем нам временная база данных? - PullRequest
46 голосов
/ 29 апреля 2009

Я читал о временных базах данных, и кажется, что они встроены во временные аспекты. Интересно, зачем нам такая модель?

Насколько он отличается от обычной РСУБД? Разве у нас не может быть нормальной базы данных, т.е. СУБД, и, скажем, есть триггер, который связывает отметку времени с каждой происходящей транзакцией? Может быть, будет хит производительности. Но я все еще скептически отношусь к временным базам данных, имеющим сильные позиции на рынке.

Поддерживает ли какая-либо из существующих баз данных такую ​​функцию?

Ответы [ 11 ]

66 голосов
/ 10 июля 2010

Рассмотрите вашу запись в дневнике - с 1 января по 31 декабря. Теперь мы можем запросить дневник для встреч / записей в журнале в любой день. Этот порядок называется действительное время . Тем не менее, встречи / записи обычно не вставляются в порядке.

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

Учитывая, что встречи / записи могут создаваться и удаляться и т. Д. Типичная запись имеет начальное и конечное действительное время, которое охватывает период записи, а также время начала и окончания транзакции, которое указывает период, в течение которого запись появилась в дневник.

Эта договоренность необходима, когда дневник может подвергнуться историческому пересмотру . Предположим, 5 апреля я понимаю, что встреча, которая была у меня 14 февраля, действительно произошла 12 февраля, то есть я обнаружил ошибку в своем дневнике - я могу исправить ошибку так, чтобы исправить действительное время, но теперь мой запрос о том, что было в дневнике за 4 апреля было бы неправильно, ЕСЛИ МЕНЬШЕ, время транзакций для встреч / записей также сохраняется. В этом случае, если я сделаю запрос на свой дневник по состоянию на 4 апреля, он покажет, что встреча существовала 14 февраля, но если я сделаю запрос по состоянию на 6 апреля, это будет означать встречу 12 февраля.

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

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

Ограничительные ограничения PostgreSQL 9.0 должны обеспечивать новые способы организации временных данных, например. Периоды транзакций и действительного времени не должны перекрываться для одного и того же кортежа.

14 голосов
/ 29 апреля 2009

Временная база данных эффективно хранит временные ряды данных, обычно имея некоторый фиксированный временной масштаб (например, секунды или даже миллисекунды), а затем сохраняет только изменения в измеренных данных. Временная метка в RDBMS - это дискретно сохраненное значение для каждого измерения, которое очень неэффективно. Временная база данных часто используется в приложениях мониторинга в реальном времени, таких как SCADA. Хорошо зарекомендовавшей себя системой является база данных PI от OSISoft (http://www.osisoft.com/).

11 голосов
/ 29 апреля 2009

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

6 голосов
/ 13 декабря 2010

Временные базы данных часто используются в индустрии финансовых услуг. Одна из причин заключается в том, что вам редко (если вообще) разрешается удалять любые данные, поэтому поля типа ValidFrom - ValidTo в записях используются для указания того, когда запись была правильной.

2 голосов
/ 02 ноября 2016

Помимо того, «что нового я могу с этим сделать», было бы полезно подумать «с какими старыми вещами это объединяет?». Временная база данных представляет собой конкретное обобщение «нормальной» базы данных SQL. Таким образом, это может дать вам единое решение проблем, которые ранее казались несвязанными. Например:

  • Веб-параллелизм Если в вашей базе данных есть веб-интерфейс, позволяющий нескольким пользователям выполнять стандартные модификации создания / обновления / удаления (CRUD), вам придется столкнуться с проблемой одновременных веб-изменений . По сути, вам нужно убедиться, что изменение входящих данных не влияет на записи, которые изменились с тех пор, как этот пользователь последний раз видел эти записи. Но если у вас есть временная база данных, она, вероятно, уже ассоциирует что-то вроде «идентификатора ревизии» с каждой записью (из-за сложности создания временных меток, уникальных и монотонно восходящих). Если это так, то это становится естественным, «уже встроенным» механизмом для предотвращения скопления данных других пользователей во время обновления базы данных.
  • Юридические / налоговые отчеты Правовая система (включая налоги) уделяет гораздо больше внимания историческим данным, чем большинство программистов. Таким образом, вы часто найдете совет о схемах для счетов-фактур и таких, которые предупреждают вас остерегаться удаления записей или их нормализации естественным образом, что может привести к невозможности ответить на основные юридические вопросы, такие как «Забудьте их». текущий адрес, на какой адрес вы отправили этот счет в 2001 году? " С базой временной структуры все махинации с этими проблемами (они обычно являются полпути к временной базе данных) исчезают. Вы просто используете наиболее естественную схему и удаляете ее, когда это имеет смысл, зная, что вы всегда можете вернуться назад и точно ответить на исторические вопросы.

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

Простое ветвление с простым средством слияния может также упростить некоторые распространенные проблемы рабочего процесса. Например, у некоммерческих организаций могут быть добровольцы или низкооплачиваемые работники, выполняющие ввод данных. Предоставление каждому работнику их собственной ветви может позволить руководителю просматривать свою работу или улучшать ее (например, дедупликацию), прежде чем объединить ее с основной ветвью, где она станет видимой для «обычных» пользователей. Филиалы также могут упростить разрешения. Если пользователю предоставляется только разрешение на использование / просмотр своей уникальной ветви, вам не нужно беспокоиться о предотвращении всех возможных нежелательных изменений; В любом случае вы будете объединять только те изменения, которые имеют смысл.

2 голосов
/ 12 июня 2015

Просто обновление, временная база данных выходит на SQL Server 2016.

Чтобы устранить все ваши сомнения, зачем нужна временная база данных, а не конфигурирование с помощью пользовательских методов, и как эффективно и эффективно SQL Server настраивает ее для вас, посмотрите подробное видео и демонстрацию на Channel9.msdn здесь: https://channel9.msdn.com/Shows/Data-Exposed/Temporal-in-SQL-Server-2016

Ссылка MSDN: https://msdn.microsoft.com/en-us/library/dn935015(v=sql.130).aspx

В настоящее время с выходом SQL Server 2016 CTP2 (бета-версия 2) вы можете поиграть с ним.

Проверьте это видео о том, как использовать временные таблицы в SQL Server 2016.

2 голосов
/ 29 апреля 2009

На ум приходят две причины:

  1. Некоторые оптимизированы для вставки и только чтения и могут предложить существенные улучшения
  2. Некоторые понимают время лучше, чем традиционный SQL - с возможностью группировки операций по секундам, минутам, часам и т. Д.
2 голосов
/ 29 апреля 2009

Вы можете представить простую временную базу данных, которая регистрирует ваше местоположение GPS каждые несколько секунд. Возможности для сжатия этих данных велики, обычная база данных, вам нужно будет хранить временную метку для каждой строки. Если вам требуется большая пропускная способность, знание того, что данные являются временными и что обновления и удаление строки никогда не потребуются, позволяет программе отбрасывать большую часть сложности, унаследованной в типичной СУБД.

Несмотря на это, временные данные обычно просто хранятся в обычной РСУБД. Например, в PostgreSQL есть временных расширений , что немного облегчает эту задачу.

2 голосов
/ 29 апреля 2009

Кроме чтения статьи в Википедии ? База данных, в которой хранится «журнал аудита» или аналогичный журнал транзакций, будет иметь некоторые свойства «временного». Если вам нужны ответы на вопросы о , кто что сделал, с кем и когда , то у вас есть хороший кандидат для временной базы данных.

1 голос
/ 29 апреля 2009

Другой пример, где временная база данных полезна, это когда данные меняются со временем. Я провел несколько лет, работая в розничной сети, где мы сохраняли показания счетчиков в течение 30 минут. Эти показания счетчиков могут быть пересмотрены в любой момент, но нам все еще необходимо иметь возможность посмотреть историю изменений показаний.

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

(Сказав это, мы вырезали его вручную в SQL, но это было довольно давно. В наши дни такое решение не принималось.)

...