Datomic Clojure API:t->tx 的语义?

Datomic Clojure API: Semantics of t->tx?

我不明白datomic.api/t->tx的意思,它接受一个t值和returns一个交易id。

数据库的 t 值 a 属性 不是在每次事务时递增吗?如果是这样,如何独立于任何数据库从中导出交易编号?

交易数据 (tx) 是具有 ID 的实体。 t 不是 id,但是有一种有效的机制来发现 tx 的 t 和 tx 的 t。实际上,这意味着您可以高效地查找某个时间范围内的交易。

t 确实是一个指示事务发生顺序的值,但我不会将其称为数据库的 属性 或推测它是如何计算的,因为它未定义并且可能会更改。没有定义的术语 "transaction number",但我认为您是在问如何在没有数据库的情况下创建严格递增的数字 属性。一个答案是使用一个时钟,并防止每个滴答声发生不止一次交易。无论如何,这不是我们使用该系统需要知道的实现细节。

glossary 提供了这些我认为有用的定义:

吨 数据库中的一个时间点。每个事务都被分配了一个数字 t 值,该值大于数据库中任何先前的 t,并且所有进程都看到一致的 ts 序列。交易价值 t 可以转换为 tx id Peer.toTx.

发送 代表交易的实体。 Datomic 数据库中的每个 datom 都包含创建它的 tx,允许恢复数据库的整个历史记录。交易自动与挂钟时间相关联,但在其他方面是普通实体。特别是,应用程序代码可以对事务进行额外的断言。一个 tx 实体 id 可以转换为一个交易 t Peer.toT.