首页 文章

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

提问于
浏览
3

Background

我首先使用Datomic是为了能够在特定时间获得实体(或查询数据库) . 但是,这次不应该是Datomic交易时间,而是事件时间 . 例如,我希望能够根据此事件时间获取实体:

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

Possible solution

我想到的一个想法是将每个事务的 :db/txInstant 设置为事件时间,但我已经advised不作为一般原则这样做 . 另一个潜在的问题是你不能分配比模式更早的 :db/txInstant (我的应用程序就是这种情况) . 解决这个问题的方法是将一个非常早的 :db/txInstant 设置为创建模式的事务 .

Question

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

1 回答

  • 1

    通常,Datomic的交易时间( t )旨在记录系统何时发现事实,而不是事实的域时间 .

    如果您需要处理域时间(即'real world'中发生的事件,或示例中的事件时间),我强烈建议使用属性显式建模域时间(您可以使用 :db.type/instant 类型的属性) . 这样您就可以不受任何限制地设置日期,也可以分别查询域名时间和系统时间,例如"when did X happen AND when did my database find out about X happening?" .

相关问题