問題タブ [temporal-database]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - SQLで異常間隔を検出する
私の問題は単純です。一連のステータスとタイムスタンプ(好奇心のために、これらのステータスはアラームレベルを示します)を含むテーブルがあり、2つのステータス間の期間を取得するためにこのテーブルをクエリしたいと思います。
単純に見えますが、ここで注意が必要な部分があります。ルックアップテーブル、手順を作成できません。このテーブルは10億を超えるレコードを保持する小さなモンスターであるため、できるだけ高速にする必要があります(冗談ではありません!)...
スキーマは非常に単純です。
[pk]時間値
(実際には、2番目のpkがありますが、これには役に立ちません)
そして実際の例の下に:
レベル2アラームのみを考慮した場合、出力は次のようになります。レベル2アラームの開始と終了(0に達したとき)を報告する必要があります。
私はあらゆる種類の内部結合を試みてきましたが、それらすべてが私を驚くべきデカルト爆発に導きます。皆さんは私がこれを達成する方法を見つけるのを手伝ってくれますか?
ありがとう!
mysql - エンティティへの変更の保存: MySQL は適切なソリューションですか?
「エンティティ」テーブルで行った変更を保存したい。これはログのようになります。現在、MySQL では次のテーブルで実装されています。
entity_id
entity
= 私のテーブルの主キー。entitytype
=entity
テーブルで変更されたフィールド。1 つのフィールドのみが変更されることもあれば、複数のフィールドが変更されることもあります。1 つの変更 = 1 行。value
= フィールドの「新しい値」の文字列表現。
フィールドentity.somedouble
を 3 から 2 に変更する例として、これらのクエリを実行します。
select
過去 15 日間の特定のエンティティとエンティティ タイプの変更が必要です。例:過去 15 日以内のSOMEDOUBLE
entity_idの最後の変更。123
今、私が嫌いなことが2つあります:
- ほとんど
TEXT
(1% 未満) は実際にはテキストではありませんが、私の場合、ほとんどの値はDOUBLE
. これは大きな問題ですか? - テーブルにはすでに 2 億行あるため、テーブルの挿入が非常に遅くなります。現在、このため、サーバーの負荷は最大で 10 ~ 15 です。
私の質問:これら 2 つの「ボトルネック」に対処するにはどうすればよいですか? スケーリングする必要があります。
私のアプローチは次のとおりです。
- 次のように保存します: http://sqlfiddle.com/#!2/df9d0 (参照をクリック) -
entitychange
テーブルに変更を保存し、そのデータ型に従って値を保存しますentitychange_[bool|timestamp|double|string]
- パーティショニングを使用
HASH(entity_id)
- 50 個までのパーティションを考えました。 - MongoDB など、別のデータベース システムを使用する必要がありますか?
datomic - Datomic: 時間を処理する能力のユースケースを教えてください
過去のデータを参照できる機能は便利なようですが、実際にどのように使用すればよいかわかりません。この機能の恩恵を受けるドメインは? 「一時性」のよく知られたユースケースがいくつかあるのではないでしょうか?
temporal - バイテンポラル マスターとサテライトの関係
私はバイテンポラルの世界の DB 初心者で、素朴な質問がありました。2 つのテーブル間にマスターとサテライトの関係があるとします。マスターには重要な情報が格納され、サテライトにはマスター テーブルのレコードの一部のみに関連する情報が格納されます。例としては、'trade' をマスター テーブルとして、'trade_support' をサテライト テーブルとして使用します。'trade_support' には、非電子取引 (ごく少数) のサポート情報のみが格納されます。
非バイテンポラル ランドスケープでは、親子関係としてモデル化します。私の質問は次のとおりです。バイテンポラルの世界では、このようなユース ケースは、両方のテーブルに 4 つの時間列を持つ 2 つのテーブルの親子関係としてモデル化する必要がありますか? できない理由がわかりませんが、「やるべきか」という問題は頭の中がかなりぼんやりしています。選択の背後にある理論的根拠を教えてくれる教祖はいますか?
長所:
- 正規化
短所:
- DAO を介して維持および管理するための追加のテーブルおよびテンポラル列
- パフォーマンス結合条件の定義
これは非常に一般的なユースケースであると信じており、私が恩恵を受けることができるベストプラクティスがあるかどうかを知りたいと思っていました.
前もって感謝します!
constraints - バイテンポラル データベースの制約
バックグラウンド:
私はバイテンポラル データベースを設計しています。ここでは、バイテンポラル テーブル間に 1:N の関係があります (M:N の関係もありますが、それらはコネクタ テーブルと 2 つの 1:N の関係でモデル化されているだけなので、それらは特別なものだと考えています)。 1:N 関係の場合)。
物事を説明するために、2 つのテーブルを持つ単純なケースを考えてみましょう。
FK_OrderId
への外部キーtblOrder
です。
このデータベース モデルをバイテンポラルにするために、次の設計を考え出しました。
説明:
VersionId
列はtblVersions
テーブルへの外部キーです。tblVersions
データベースが変更されるたびに、テーブルにエントリが作成されます。データの現在の状態は、すべてのバージョンの合計になります。WHERE VersionDate < ...
これにより、(節を介して) データベースの以前の状態を再構築することができます。これは、バイテンポラリティのトランザクション時間ディメンションです。- VersionDate`
tblVersions table could also be avoided if we're just including the
列を 2 つのデータ テーブルに挿入します。 StartDate
およびEndDate
列は、バイテンポラリティーの有効な時間次元です。はい、EndDate
ちょっと冗長です。 だけでテーブルをモデル化できStartTime
ます。- 2 つのテーブルの
Id
列が新しい主キーです。同じエンティティに対して複数の行があるため (複数のバージョン、複数の有効期間の日付範囲)、エンティティの ID をテーブルの主キーにすることはできません。列OrderId
と列OrderItemId
はエンティティの ID ですが、テーブルの主キーではありません。新しい主キーを作成する代わりにId
、主キーを として定義することもできます(OrderId, VersionId, StartDate)
。 - エンティティが削除された場合は、新しいバージョン エントリと、エンティティ テーブル内の エントリを作成するだけ
IsDeleted = 1
です。テーブル内の他のすべてのエントリ (挿入と更新) にはIsDeleted = 0
. - の列はの列
FK_OrderId
をtblOrderitem
参照しています。これは、もはや主キーではないため、(データベースの制約という意味で) 本当の外部キーではありません。しかし、どの OrderItems が特定の Order の一部であるかはまだわかります。OrderId
tblOrder
OrderId
これはうまくいくようです。必要な CRUD クエリを作成し、バイテンポラル データを読み書きできるようになりました。
質問:
それが一貫して機能するためには、どのような制約が必要ですか?
制約を実装する方法には興味がありません (制約をFOREIGN KEY
s またはUNIQUE
制約、またはTRIGGER
s、またはCHECK
s などのデータベース制約として実装するかどうか)。必要な制約の種類を知る必要があるだけです。
私は答えとして投稿するつもりの制約の束を見つけました。しかし、おそらくもっとありますか?
sql - Oracle Database一時問合せの実装 - 日付範囲の縮小
これは私のクエリの 1 つの結果です。
連続する日付範囲を間隔にまとめたいと思います。例えば、
テンポラル データベースに関しては、日付を「折りたたむ」必要があります。Oracleでそれを行う方法はありますか? バージョン11を使用しています。検索して本を読みましたが、その方法が見つかりませんでした/理解できませんでした。単純かもしれませんが、誰もが独自の欠点を持っており、Oracle は私のものです。また、私は SO を初めて使用するので、ルールに違反していたら申し訳ありません。ありがとう!
.net - テンポラル データベースを使用した Entity Framework
現在のデータベース(現時点で正しいと思われる事実のみを保存するデータベース)から一時的なデータベース(時間を含むデータの処理をサポートできるデータベース)への移行を検討しています。
現在、Entity Framework を使用してデータベースと通信していますが、バックエンドとして一時データベースを使用して Entity Framework を引き続き使用するのは簡単ですか? そのようなデータベースに対してクエリが実行される Web の例はあまり見つかりません。
sql - 時間の経過とともに変化するネストされたデータ セットのモデル化に関する提案
一時的なネストされたデータ セット モデルの作成に関する提案を探しています。セクションを読むためのパフォーマンスを改善しようとしています。100 万ノード以下のノード ツリーがあり、頻繁に 20 ノード以上の深さがあります。ツリーには、将来の変更を入力する機能を備えた、時間の経過とともに変化する可能性のあるカテゴリが格納されます。
現在のデータ構造は一時的な隣接ノード モデルであり、時間の経過に伴うノード ツリーの変更のモデル化は単純なデータ構造では簡単です。
ノード
nodeID
[データ]エッジ
parentNodeId
childNodeId
validFromDate
validToDate
ネストされたデータセットは非常に高速な読み取り操作を可能にしますが、ネストされたセットに関する私の現在の理解では、ツリーへの時間の経過に伴う変更はサポートされていません
ノード
nodeId
left
right
[データ]
私が考えていたことの 1 つは、特定の時点での左/右の値を反映する一連の「ネスト マップ」を作成することでしたが、これは、時間の経過に伴う単一の変化がモデル化されるたびにノード ツリー全体を再作成することを意味します。変更が頻繁に行われるため、「Nests」データセットのサイズが大きすぎます。
ネスト
nodeId
left
right
validFromDate
validToDate
一時的なネストされたデータセット モデルを作成した人はいますか、またはこの件に関する優れたリソースを知っていますか?