问题标签 [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 检测异常间隔
我的问题很简单:我有一个包含一系列状态和时间戳的表(出于好奇,这些状态表示警报级别),我想查询此表以获得两个状态之间的持续时间。
看起来很简单,但棘手的部分来了:我不能创建查找表、过程,它应该尽可能快,因为这个表是一个拥有超过 10 亿条记录的小怪物(不开玩笑!)......
架构非常简单:
[pk] 时间价值
(其实还有第二个pk但是这个没用)
下面是一个真实世界的例子:
仅考虑 2 级警报的输出应如下报告 2 级警报的开始和结束(当达到 0 时):
我一直在尝试各种内部连接,但所有这些都将我引向了惊人的笛卡尔爆炸。你们能帮我想出一个方法来完成这个吗?
谢谢!
mysql - 在实体上存储更改:MySQL 是正确的解决方案吗?
我想将我所做的更改存储在我的“实体”表上。这应该像一个日志。目前它在 MySQL 中使用此表实现:
entity_id
entity
= 我的表的主键。entitytype
= 表中已更改的entity
字段。有时只更改一个字段,有时更改多个字段。一次更改 = 一行。value
= 字段“新值”的字符串表示形式。
将字段entity.somedouble
从 3 更改为 2 时的示例,我运行这些查询:
我需要select
过去 15 天的特定实体和实体类型的更改。例如:在过去 15 天内最后一次更改SOMEDOUBLE
为 entity_id 。123
现在,有两件事我不喜欢:
- 所有数据都存储为
TEXT
- 尽管大多数(少于 1%)不是真正的文本,但在我的情况下,大多数值都是DOUBLE
. 这是一个大问题吗? - 插入时,表变得非常非常慢,因为表已经有 2 亿行。因此,目前我的服务器负载高达 10-15。
我的问题:我如何解决这两个“瓶颈”?我需要扩展。
我的方法是:
- 像这样存储它:http ://sqlfiddle.com/#!2/df9d0 (单击浏览)-将更改存储在
entitychange
表中,然后根据其数据类型将值存储在entitychange_[bool|timestamp|double|string]
- 使用分区
HASH(entity_id)
- 我想到了大约 50 个分区。 - 我应该使用另一个数据库系统,也许是 MongoDB?
datomic - Datomic:你能说出它处理时间的能力有哪些用例
查看过去数据的能力似乎很有用,但我不清楚如何实际使用它。受益于此功能的领域有哪些?也许有一些众所周知的“时间性”用例?
temporal - 双时相主从关系
我是双时间世界的 DB 新手,并且有一个幼稚的问题。假设您在两个表之间存在主从关系 - 其中主存储基本信息,而卫星存储仅与主表的少数记录相关的信息。例如,“trade”作为主表,“trade_support”作为附属表,其中“trade_support”仅包含非电子交易的支持信息(这将是一小部分)。
在非双时态环境中,我们将其建模为父子关系。我的问题是:在双时间世界中,这样的用例是否仍应建模为两个表上都有 4 个时间列的双表父子关系?我看不出不能做的原因,但“应该做”的问题在我的脑海中相当模糊。有任何大师可以帮助我了解选择背后的理由吗?
优点:
- 正常化
缺点:
- 通过 DAO 维护和管理的附加表和时间列
- 定义高性能连接条件
我相信这应该是一个非常常见的用例,并且想知道是否有任何我可以从中受益的最佳实践。
提前致谢!
constraints - 双时态数据库的约束
背景:
我正在设计一个双时态数据库,我们在双时态表之间有 1:N 关系(我们也有 M:N 关系,但它们只是用一个连接器表和两个 1:N 关系建模,所以我认为它们是特殊的1:N 关系的情况)。
为了说明问题,让我们考虑一个有两个表的简单案例:
FK_OrderId
是 的外键tblOrder
。
为了使这个数据库模型具有双时间性,我提出了以下设计:
说明:
- 列
VersionId
是表的外键tblVersions
。对于数据库中的每次更改,都会在tblVersions
表中创建一个条目。数据的当前状态就是所有版本的总和。这使得重建数据库的先前状态成为可能(通过WHERE VersionDate < ...
子句)。这是双时态的交易时间维度。 - 将
tblVersions table could also be avoided if we're just including the
VersionDate` 列放入两个数据表中。 StartDate
和EndDate
列是双时态的有效时间维度。是EndDate
的,有点多余,我们可以只用StartTime
.- 这
Id
两个表的列是新的主键。因为我们对同一个实体有多个行(多个版本,多个有效时间的日期范围),所以实体的ID不能是表的主键。列OrderId
和OrderItemId
是实体的 ID,但不再是表的主键。除了创建新的主键Id
,我们还可以将主键定义为(OrderId, VersionId, StartDate)
. - 如果删除了一个实体,我们只需创建一个新的版本条目,以及在实体表中使用
IsDeleted = 1
. 表中的所有其他条目(插入和更新)都有IsDeleted = 0
. - 参考资料栏目
FK_OrderId
。_ _ 这不再是真正的外键(在数据库约束的意义上),因为不再是主键。但它仍然告诉我们哪些 OrderItems 是某个 Order 的一部分。tblOrderitem
OrderId
tblOrder
OrderId
这似乎运作良好,我们已经创建了必要的 CRUD 查询并且能够读取和写入双时态数据。
问题:
我需要什么样的约束才能始终如一地工作?
我对如何实现约束不感兴趣(是否将它们实现为数据库约束,如FOREIGN KEY
s 或UNIQUE
约束,或TRIGGER
s,或CHECK
s,等等)。我只需要知道我需要什么类型的约束。
我想出了一堆约束,我将把它们作为答案发布。但也许还有更多?
sql-server - SQL Server 的临时扩展
任何人都知道 SQL Server 的任何临时(http://en.wikipedia.org/wiki/Temporal_database)扩展?
sql - Oracle 数据库时态查询实现 - 折叠日期范围
这是我的一个查询的结果:
我想将连续的日期范围折叠成间隔。举些例子,
在时间数据库方面,我想“折叠”日期。知道如何在 Oracle 上做到这一点吗?我正在使用版本 11。我搜索它并阅读了一本书,但找不到/不明白如何去做。这可能很简单,但每个人都有自己的缺陷,而 Oracle 是我的。另外,我是新来的,所以如果我违反了任何规则,我深表歉意。谢谢你!
.net - 具有时态数据库的实体框架
考虑从当前数据库(仅存储在当前时间被认为是真实的事实)移动到时态数据库(可以支持处理涉及时间的数据)。
我目前使用 Entity Framework 与数据库进行通信,但是继续使用 Entity Framework 和临时数据库作为后端是否一样容易?我没有从网上找到很多针对此类数据库运行查询的示例。
sql - 对随时间变化的嵌套数据集建模的建议
我正在寻找有关创建时间嵌套数据集模型的建议。我正在尝试提高阅读部分的性能。我有一个大约 100 万个节点的节点树,经常有 20 多个节点的深度。树存储可以随时间变化的类别,并能够输入未来的变化。
当前的数据结构是时间相邻节点模型,使用简单的数据结构对节点树随时间的变化进行建模是微不足道的:
节点
nodeID
[数据]边
parentNodeId
childNodeId
validFromDate
validToDate
嵌套数据集可以实现非常快速的读取操作,但我目前对嵌套集的理解不支持随时间对树进行更改
节点
nodeId
左右
[
数据]
我的一个想法是创建一系列“嵌套图”,它们反映给定时间点的左/右值,但这意味着只要对单个随时间变化进行建模,就重新创建整个节点树,这将使由于频繁更改,“Nests”数据集的大小太大。
嵌套
nodeId
左右 validFromDate validToDate
_
有没有人创建过时间嵌套数据集模型,或者知道关于这个主题的任何好的资源?
design-patterns - 用于“数据屏蔽”的时间 Neo4J 数据库
我正在评估一个项目的数据库。现在我非常喜欢 Neo4J 的图形特性。
我正在寻找创建一个时间数据库,它使用类似于“最后一个良好价值”的方法(我的话)。
这是一个使用粗略的 Neo4J 伪代码的示例。想象以下作为单独的交易发生。
然后我希望能够做类似的事情:
我想像这样取回数据:
每个后续插入“掩盖”先前数据的位置。
理想情况下,我希望能够以相同的方式使用各种时间戳进行查询,并在该时间点获取聚合对象的“快照”。
问题:
- 这个模式有我可以研究的名字吗?
- 是否有任何数据库本身/开箱即用地支持这种模式?
- Neo4J 或其他图形数据库中是否有一个干净的范例/工具集?
*注意:出于各种原因,我不喜欢使用基于“帧”的时间性。
注意:我不是在问“哪些数据库最适合这个”或任何主观的东西。我正在寻找有关支持此模式/范式的客观信息。