我正在研究 Scala DB 框架/包装器,并从 Twitter 遇到了 Gizzard。起初我印象深刻,但当我读到限制时,我冷静下来。他们说您所做的所有数据库操作都必须是幂等的可交换的。如果我理解正确,这基本上几乎没有留下任何东西。例如,如果我有一个带有整数计数器的实体,并且它必须递增。我可以使用“增量”操作或“设置”操作。但是增量不是幂等的(如果你运行它两次,你会得到不同的结果然后运行一次),并且 set 不会是可交换的(先设置 5 然后设置 2 给出不同的结果,然后设置前两个然后设置 5)。那么除了“insert-if-absent”之外还有什么东西,这对于大多数用例来说不是很有用。分布式数据库框架的意义何在,它是如此受限以至于您基本上无法用它做任何有用的事情?我一定错过了一些重要的事情。
[编辑]除了“insert-if-absent”(和“delete-if-present”)之外,我认为“compare-timestamp-and-set”将是幂等和可交换的,如果更改排队而不是被丢弃,当仍然缺少“以前的更改”时。但我不知道是否有任何数据库实现了这一点。