Background
我首先使用Datomic是为了能够在特定时间获得实体(或查询数据库) . 但是,这次不应该是Datomic交易时间,而是事件时间 . 例如,我希望能够根据此事件时间获取实体:
(datomic/entity (datomic/as-of db event-time) id)
Possible solution
我想到的一个想法是将每个事务的 :db/txInstant
设置为事件时间,但我已经advised不作为一般原则这样做 . 另一个潜在的问题是你不能分配比模式更早的 :db/txInstant
(我的应用程序就是这种情况) . 解决这个问题的方法是将一个非常早的 :db/txInstant
设置为创建模式的事务 .
Question
如何在Datomic中处理事件时间而不是事务时间? “可能的解决方案”如何成功?
1 回答
通常,Datomic的交易时间(
t
)旨在记录系统何时发现事实,而不是事实的域时间 .如果您需要处理域时间(即'real world'中发生的事件,或示例中的事件时间),我强烈建议使用属性显式建模域时间(您可以使用
:db.type/instant
类型的属性) . 这样您就可以不受任何限制地设置日期,也可以分别查询域名时间和系统时间,例如"when did X happen AND when did my database find out about X happening?" .