问题标签 [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.

0 投票
1 回答
158 浏览

temporal-database - 比较时间序列

我正试图围绕这项任务展开我的头脑,并想知道是否有标准的方法来执行此操作或一些有用的库。

在几个数据源 S1 ... SN 上跟踪和计时某些事件。记录的信息是事件类型和时间戳。可能有几个相同类型的事件依次发生,也可能是间歇性的。可能存在“遗漏”事件——即当其中一个来源遗漏它时,反之亦然,当来源引入“误报”时。在不同来源对同一事件的观察之间通常存在时间差。由于源的物理位置,该时间差具有恒定分量,但也可能具有由网络延迟和其他因素引入的变化分量。

我需要找到一种算法来找到最佳的最大时间间隔,该时间间隔应该用于将所有来源的观察结果分组到一个“观察到的事件”中,并允许检测丢失的事件和误报。

我想知道解决方案是否真的在统计领域而不是算法中。任何输入将不胜感激。

0 投票
1 回答
156 浏览

database - 将截至日期的对象图存储在数据库中

我将尝试保持这个问题数据库不可知论,但我有一个有趣的问题需要解决,我想我会为建议和反馈敞开心扉。

我需要能够从提要源下载数据并将其存储在某种数据库中,数据需要合并到现有数据中,并且我需要能够查询任何给定日期的数据。这是我想谈谈的粗体部分。

本质上,这个问题归结为我需要将对象图持久化到 OLTP 数据库并能够临时查询它。

在一个表的简单情况下,这个问题非常简单,你有一个日期范围来指示记录的有效时间跨度,然后你传入一个 as of 范围,只选择在这个时间点有效的行。当您有不止一张桌子时,问题就会出现。

让我们以有两个表 Order-*Item 为例。

当我们查询订单时,我们可以将相同的日期更改应用于项目表。一切都很好,但是如果我们想修改订单会发生什么?现在我们需要复制订单行,设置日期范围,以便将新行上的有效从和新行上的有效到设置为现在。我们还必须复制项目,或者如果我们更改模型,则复制对项目的引用。

即使在这种简单的情况下,事情也开始变得复杂。

我的问题更加严重,因为我有一个自引用对象图,所以要使用上面的模型,你需要 Order-*Item-*Order。

你会怎么做?当您需要对行和时间查询进行版本控制时,您如何构建数据库?

0 投票
4 回答
4414 浏览

database - 双时态 NoSQL 数据库是否有任何设计模式?

我很好奇是否有人已经实现甚至知道任何构建在 NoSQL 平台(例如 riak)上的双时态数据库。

0 投票
3 回答
4716 浏览

sql - 历史/可审计数据库

这个问题与可以在我的其他问题之一中找到的架构有关 基本上在我的数据库中,我存储用户、位置、传感器等。所有这些东西都可以由用户在系统中编辑,并且可以删除。

但是 - 当一个项目被编辑或删除时,我需要存储旧数据;我需要能够查看更改前的数据。

数据库中还有不可编辑的项目,例如“读数”。它们实际上更像是一个日志。读数是针对传感器记录的,因为它是特定传感器的读数。

如果我生成读数报告,我需要能够查看读数时位置或传感器的属性

基本上我应该能够重建任何时间点的数据。

现在,我之前已经完成了这项工作,并通过在每个可编辑表中添加以下列来使其正常工作:

如果 valid_to = 9999-12-31 23:59:59 那么这就是当前记录。如果valid_to 等于valid_from,则删除记录。

但是,我对用于强制外键一致性的触发器并不满意。

我可以通过使用“PostgreSQL”数据库的扩展来避免触发器。这提供了一种称为“期间”的列类型,它允许您存储两个日期之间的时间段,然后允许您执行 CHECK 约束以防止重叠时间段。这可能是一个答案。

我想知道是否还有其他方法。

我见过人们提到使用特殊的历史表,但我不太喜欢为几乎每 1 个表维护 2 个表的想法(尽管它仍然可能是可能的)。

也许我可以减少我的初始实现,以免检查非“当前”记录的一致性——即只检查valid_to 为9999-12-31 23:59:59 的记录的约束。毕竟,使用历史表的人似乎没有对这些表进行约束检查(出于同样的原因,您需要触发器)。

有人对此有任何想法吗?

PS - 标题还提到了可审计的数据库。在我之前提到的系统中,总是有edited_by字段。这允许跟踪所有更改,因此我们始终可以看到谁更改了记录。不确定这可能会产生多大的影响。

谢谢。

0 投票
1 回答
193 浏览

java - JDBC-SQL时空查询

轨迹表

我有如上所示的轨迹表。我想要一个使用 JDBC-SQL 来检索结果的时空查询。

  1. " 查找从 H 地移动到 B 地的所有 OBJID"
  2. “查找从 H 地移动到 B 地的所有用户轨迹”

例如,在此图像中,objid 7 从 H 移动到 B,因此结果应该是 。

输出

我想要一个 SQL 查询。

0 投票
1 回答
1900 浏览

database-design - 时空数据表设计

我对设计用于保存时空数据的关系数据库表的最佳实践感兴趣。具体而言,将保留在此类表中的数据是具有特定有效期、几何定义以及层次方面的自定义几何(某些几何将是其他几何的子对象)。

我很好奇是否有人可以向我指出有关此主题的好材料或可以建议具体实施。

谢谢你。

0 投票
1 回答
854 浏览

hibernate - 用于双时态数据库的 NHibernate/Hibernate

过去在 NHibernate 和 EF 方面取得了很好的成功,我试图说服团队成员在一个使用双时态数据库模式的新 Java 项目中使用 Hibernate。但是,我以前从未将 NHibernate(或任何其他 ORM)与双时态模型一起使用。

在将 Hibernate/NHibernate 与双时态数据库模型一起使用时,我应该注意哪些陷阱和/或建议?

谢谢!

0 投票
1 回答
705 浏览

postgresql - PostgreSQL 中的时间聚合

我正在使用 PostgreSQL 数据库进行时间聚合的 Java 实现。

我的桌子看起来像这样

因此,要可视化这些时期:

我的算法现在计算数据的时间聚合,例如 SUM():

为了测试获得的结果,我现在想直接使用 PostgreSQL 查询数据。我知道这个问题还没有简单的方法。但是,肯定有一种方法可以获得相同的结果。应支持聚合 Count、Max、Min、Sum 和 Average。我不介意一个糟糕或缓慢的解决方案,它只需要工作。

到目前为止,我发现的一个查询应该类似地工作如下:

我的收养看起来像这样:

但是,报错了ERROR: syntax error at or near "normalize" -- LINE 2: from ( ndbs_10 a normalize ndbs_10 b using() ) ndbsNorm

有没有人可以解决这个问题?它不必基于上述查询,只要它有效。非常感谢。

0 投票
1 回答
694 浏览

sql-server - 如何调整时态 SQL Server 表的性能

对于给定的时间点,资产具有有效价格。有些资产每周有一次新价格,有些则每天一次。最近的价格是“有效价格”。

存储所描述关系的时态表如下所示:

数据看起来像这样:

查询一个的有效价格AssetId很简单,但计算起来需要大量的时间。

物理存储数据是理想的,因此只有数据更改为dbo.AssetPrice需要重新计算有效价格。我相信我无法创建索引视图,因为索引视图中不允许相关的聚合函数。

如何调整表格以快速检索有效价格(最新价格)?

0 投票
4 回答
56118 浏览

php - 如何在 Doctrine 2 中将实体重新保存为另一行

假设我有 entity $e。是否有任何通用方法将其存储为另一行,该行具有相同的实体数据但另一个主键?

为什么我需要这个:我正在实现某种时间数据库模式,而不是更新行,我只需要创建另一个。