web-dev-qa-db-ja.com

一時データベースが必要なのはなぜですか?

時間データベースについて読んでいましたが、時間の側面が組み込まれているようです。なぜそのようなモデルが必要なのでしょうか。

通常のRDBMSとどのように違うのですか?通常のデータベース、つまりRDBMSがあり、発生する各トランザクションにタイムスタンプを関連付けるトリガーがあると言うことはできませんか?パフォーマンスが低下する可能性があります。しかし、私はまだ、市場で強力なケースがあるテンポラルデータベースに懐疑的です。

現在のデータベースのいずれかがそのような機能をサポートしていますか?

47
Arnkrishn

テンポラルデータベースは、通常、一定のタイムスケール(秒やミリ秒など)を設定し、測定データの変化のみを保存することで、時系列のデータを効率的に保存します。 RDBMSのタイムスタンプは、測定ごとに個別に保存される値であり、非常に非効率的です。テンポラルデータベースは、SCADAなどのリアルタイム監視アプリケーションでよく使用されます。確立されたシステムは、OSISoftのPIデータベースです( http://www.osisoft.com/ )。

15
codekaizen

1月1日から12月31日までの予定/日記を考慮してください。これで、任意の日の予定/ジャーナルエントリの日記をクエリできます。この順序付けは有効時間と呼ばれます。ただし、予定/エントリは通常、順番に挿入されません。

4月4日の予定にどのような予定/エントリがあったかを知りたいとしましょう。つまり、4月4日に私の日記に存在したすべてのレコードです。これはトランザクション時間です。

予定/エントリを作成および削除できることを考慮してください。一般的なレコードには、エントリの期間をカバーする開始および終了有効時間と、エントリが日記に表示された期間を示す開始および終了トランザクション時間が含まれます。

この配置は、日記が歴史的改訂を受ける可能性がある場合に必要です。 4月5日に、2月14日の予定が実際には2月12日に発生したこと、つまり日記にエラーがあったことに気付いたとします。有効な時刻の画像が修正されるようにエラーを修正できますが、今は何が4月4日の日記に誤りがある場合は、間違いなく、予定/エントリのトランザクション時間も保存されます。その場合、4月4日の時点で日記をクエリすると、2月14日に予定が存在することが表示されますが、4月6日の時点でクエリを実行すると、2月12日に予定が表示されます。

テンポラルデータベースのこのタイムトラベル機能により、エラーがデータベースでどのように修正されるかについての情報を記録することができます。これは、いつ改訂が行われたかを記録し、データが長期にわたってどのように改訂されたかに関するクエリを可能にする、データの真の監査画像に必要です。

真の監査記録を提供し、ビジネスインテリジェンスを最大化するために、ほとんどのビジネス情報はこのバイテンポラルスキームに格納する必要があります。したがって、リレーショナルデータベースでのサポートが必要です。各データアイテムが2次元の時間モデルで(場合によっては境界がない)正方形を占めることに注意してください。そのため、人々はしばしばGistインデックスを使用してバイテンポラルインデックスを実装します。ここでの問題は、Gistインデックスが実際には地理データ用に設計されており、時系列データの要件が多少異なることです。

PostgreSQL 9.0の除外制約は、時間データを整理する新しい方法を提供する必要があります。トランザクションと有効期間のPERIODは、同じタプルで重複してはなりません。

66
Jon Guiton

私が理解しているように(そして非常に単純化しすぎているように)、一時データベースは、データ自体だけでなく、データがいつ有効であったかに関する事実を記録し、一時的な側面でクエリを実行できるようにします。 「有効時間」と「トランザクション時間」テーブル、または「有効時間」と「トランザクション時間」の両方の側面を含む「バイテンポラルテーブル」を処理することになります。次の2つの本のいずれかを読むことを検討してください。

11

テンポラルデータベースは、金融サービス業界でよく使用されます。 1つの理由は、データを削除することはめったに(あるとしても)許可されないため、レコードのValidFrom-ValidToタイプのフィールドは、レコードがいつ正しいかを示すために使用されるためです。

6
bob

単なる更新で、Temporalデータベースが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
Manoj Pandey

2つの理由が思い浮かびます:

  1. 一部は挿入および読み取り専用に最適化されており、パフォーマンスを大幅に改善できます
  2. 一部のユーザーは、従来のSQLよりも時間をよく理解しています-秒、分、時間などで操作をグループ化できます。
2
Scott Weinstein

Wikipediaの記事 を読むこととは別に? 「監査ログ」または同様のトランザクションログを保持するデータベースには、「一時的」であるといういくつかの特性があります。 だれがいつ誰に何をしたかに関する質問への回答が必要な場合は、一時データベースの候補として最適です。

2
Joel

「それで何ができるか」に加えて、「何が古いものを統合するか」を検討することは有用かもしれません。一時データベースは、「通常の」SQLデータベースの特定の一般化を表しています。そのため、以前は無関係であると思われていた問題に対する統一されたソリューションを提供する可能性があります。例えば:

  • Web同時実行性データベースに複数のユーザーが標準の作成/更新/削除(CRUD)変更を実行できるWeb UIがある場合、-に直面する必要があります 同時Web変更の問題 。基本的に、受信データの変更が、そのユーザーが最後にそれらのレコードを見た後に変更されたレコードに影響を与えていないことを確認する必要があります。ただし、テンポラルデータベースがある場合は、「リビジョンID」のようなものが各レコードにすでに関連付けられている可能性があります(タイムスタンプを一意で単調に増加させることが困難なため)。もしそうなら、それはデータベースの更新中に他のユーザーのデータが破壊されるのを防ぐための自然な「すでに組み込まれた」メカニズムになります。
  • 法務/税務記録法制度(税込み)は、ほとんどのプログラマーよりも履歴データに重点​​を置いています。したがって、請求書のスキーマについて アドバイス がよく見られ、レコードの削除や自然な方法での正規化に注意するよう警告されます。これは、「忘れる」などの基本的な法的質問に答えられなくなる可能性があります。彼らの現在の住所、2001年にこの請求書をどの住所に郵送しましたか?」一時的なフレームワークベースを使用すると、これらの問題(通常、一時的なデータベースを作成する途中のステップです)のすべての操作がなくなります。最も自然なスキーマを使用し、それが意味をなす場合は削除することで、いつでも前に戻って過去の質問に正確に答えることができます。

一方、時間モデル自体は完全なリビジョン管理の途中であり、これはさらなるアプリケーションを刺激する可能性があります。たとえば、リビジョン管理システムのように、SQLの上に独自の一時的な機能をロールし、分岐を許可するとします。限られた分岐でも、「サンドボックス化」を簡単に提供できます。つまり、他のユーザーに目に見える変化をもたらすことなく、破棄してデータベースを操作および変更する機能です。これにより、複雑なデータベースで非常に現実的なユーザートレーニングを簡単に提供できます。

単純なマージ機能を使用した単純な分岐は、いくつかの一般的なワークフローの問題を単純化することもできます。たとえば、非営利団体には、データ入力を行うボランティアまたは低賃金労働者がいる場合があります。各ワーカーに独自のブランチを与えると、スーパーバイザーがメインブランチにマージしてから「通常の」ユーザーに見えるようになる前に、スーパーバイザーが自分の作業を確認したり、拡張したり(たとえば、重複除外)したりしやすくなります。ブランチは、権限を簡素化することもできます。ユーザーに固有のブランチを使用/表示する権限のみが付与されている場合は、不要な変更をすべて防止する必要はありません。とにかく意味のある変更のみをマージします。

2
Ron Burk

数秒ごとにGPSの位置を記録するだけの単純な一時データベースを想像できます。このデータを圧縮する機会は素晴らしいです。通常のデータベースでは、すべての行のタイムスタンプを保存する必要があります。大量のスループットが必要な場合、データが一時的なものであり、行の更新と削除が不要であることを知っていると、プログラムは典型的なRDBMSに継承される複雑さの多くを削除できます。

これにもかかわらず、通常、一時データは通常のRDBMSに格納されるだけです。たとえば、PostgreSQLにはいくつかの 一時的な拡張 があり、これにより少し簡単になります。

2
Scott Kirkwood

テンポラルデータベースが役立つ別の例は、データが時間とともに変化する場合です。私は電気小売店で数年働いて、メーターの読み取り値を30分の時間ブロックで保存しました。これらのメーターの測定値はいつでも修正できますが、測定値の変更の履歴を確認できるようにする必要がありました。

したがって、最新の読み取り値(30分間の消費量の「現在の理解」)がありましたが、消費量の歴史的な理解を振り返ることができました。テンポラルデータベースが適切に機能するように調整できるデータがある場合。

(そうは言っても、SQLで手作業で彫りましたが、それはかなり前のことでした。最近ではその決定を下さないでしょう。)

1
Andrew

時間データベースについての私の理解は、特定のタイプの時間情報を格納することを目的としています。標準のRDBMSでそれをシミュレートできますが、それをサポートするデータベースを使用することにより、多くの概念に組み込みのイディオムがあり、クエリ言語はこれらの種類のクエリに最適化される可能性があります。

私にとって、これはRDBMSではなくGIS固有のデータベースを操作するようなものです。ありふれたRDBMSで座標を入力することもできますが、適切な表現(たとえば、グリッドファイル経由)を使用する方が高速であり、トポロジなどのSQLプリミティブを使用すると便利です。

学術データベースといくつかの商用データベースがあります。 Timecenterにはいくつかのリンクがあります。

1
Uri