考虑以下操作,发生在Datomic Peer中:
(require '[datomic.api :as d])
(let [;; running a transaction and awaiting completion
tx-res @(d/transact-async conn tx-data)
;; reading the current database value
db1 (d/db conn)]
,,,)
在Datomic的一致性模型中,我可以预期tx-res
中的db1
所做的更改会在:db-after
中显示吗?
(我知道(d/sync conn t)
categories A and B
,但依赖于读取连接上的写入是可行的,例如在连接上进行连续写入而不必携带数据库值)
答案 0 :(得分:1)
缬氨酸,
是的,db1
将包含交易中所做的更改。但是,这种方法被认为是不好的做法,因为您正在读取相同的值两次(tx-res
已经具有生成的数据库的值)。此外,您无法保证db1
与事务中的:db-after
的相同的数据库值。
我们强烈建议您使用事务中返回的:db-after
进行后续阅读。
-Marshall
答案 1 :(得分:0)
无法查看代码
,无法确定数据库实现但是根据我对数据库缓存的理解
因为tx被解雇了,"这个" jvm返回"实时索引",所以,(>= (d/basis-t (d/db conn)) (d/basis-t db-after))
。
如果发生2个并发事务,可能会发生>
,