gpt4 book ai didi

time - 在 Datomic 中使用事件时间而不是事务时间?

转载 作者:行者123 更新时间:2023-12-02 03:12:15 25 4
gpt4 key购买 nike

背景

我正在使用 Datomic 来存储其他系统生成的事件的投影(在这种情况下,投影可以被视为 Datomic 中的一个实体)。这些事件有一个与之关联的时间戳,表明事件是何时(例如)创建的。这显然与 Datomic 在投影中存储新属性(基于事件)时会分配给事务的事务时间不同。我的应用程序的用户对事务时间不感兴趣,而是对事件时间感兴趣。我首先使用 Datomic 的原因是能够在特定时间获取实体(或查询数据库)。然而,这个时间不应该是 Datomic 事务时间,而是事件时间。例如,我希望能够根据此事件时间获取实体:

(datomic/entity (datomic/as-of db event-time) id)

可能的解决方案

我想到的一个想法是设置 :db/txInstant到事件时间的每笔交易,但我一直在 advised不这样做作为一般原则。另一个潜在的问题是您不能分配 :db/txInstant这比模式更旧(在我的应用程序中就是这种情况)。对此的解决方案是设置一个非常早的 :db/txInstant到创建架构的事务。

问题

在 Datomic 中,通常如何处理事件时间而不是事务时间? “可能的解决方案”如何成立?

最佳答案

一般来说,Datomic 的事务时间 (t) 旨在记录系统何时发现事实,而不是事实的域时间。

如果您需要处理域时间(即在“现实世界”中发生某些事情的时间,或您的示例中的事件时间),我强烈建议使用属性对域时间进行显式建模(您可以使用类型为 :db.type/instant 的属性) )。这将允许您不受任何限制地设置日期,并分别查询域时间和系统时间以解决诸如“X 何时发生以及我的数据库何时发现 X 发生?”之类的问题。

关于time - 在 Datomic 中使用事件时间而不是事务时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39287619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com