Joh*_*han 5 time transactions clojure datomic
背景
我使用 Datomic 来存储其他系统生成的事件的投影(在这种情况下,投影可以被视为 Datomic 中的实体)。这些事件有一个与之关联的时间戳,用于说明事件的创建时间(例如)。这显然与 Datomic 在投影中存储新属性(基于事件)时分配给事务的事务时间不同。我的应用程序的用户对交易时间不感兴趣,而是对事件时间感兴趣。我首先使用 Datomic 的原因是为了能够获取特定时间的实体(或查询数据库)。然而,这个时间不应该是 Datomic 交易时间,而是事件时间。例如,我希望能够根据此事件时间获取一个实体:
(datomic/entity (datomic/as-of db event-time) id)
可能的解决方案
我正在考虑的一个想法是将:db/txInstant每笔交易设置为事件时间,但建议我不要这样做作为一般原则。另一个潜在的问题是您无法分配:db/txInstant比模式更旧的模式(在我的应用程序中就是这种情况)。:db/txInstant解决方案是在创建模式的事务中尽早设置。
问题
在 Datomic 中,人们通常如何处理事件时间而不是事务时间?“可能的解决方案”如何成立?
一般来说,Datomic 的事务时间 ( t) 旨在记录系统何时发现某个事实,而不是该事实的域时间。
如果您需要处理域时间(即“现实世界”中发生的时间,或示例中的事件时间),我强烈建议使用属性显式建模域时间(您可以使用类型的属性:db.type/instant) 。这将允许您不受任何限制地设置日期,并分别查询域时间和系统时间,以解决诸如“X 何时发生以及我的数据库何时发现 X 发生?”之类的问题。
| 归档时间: | 
 | 
| 查看次数: | 521 次 | 
| 最近记录: |