我在研究Scala数据库框架/包装器时,发现了Twitter的Gizzard。起初我对它印象深刻,但当我看到限制时就冷静下来了。他们说,您进行的所有DB操作都必须既具有幂等性又具有可交换性。如果我理解正确,这基本上几乎什么也剩不下了。例如,如果我有一个带有整数计数器的实体,并且必须递增。我可以使用“递增”操作或“设置”操作。但递增将不是幂等的(如果您运行两次,则与运行一次不同),而设置将不是可交换的(首先设置5,然后2会产生与首先设置2,然后5不同的结果)。那么除了“插入-如果不存在”之外还剩下什么,对于大多数用例而言并不是非常有用。一个分布式数据库框架的意义何在,它如此受限以至于您基本上无法做任何有用的事情?我肯定错过了重要的东西。
【编辑】除了“插入-如果不存在”(和“删除-如果存在”)之外,我认为“比较时间戳和设置”将既具有幂等性又具有可交换性,如果更改排队而不是被丢弃,当“之前的更改”仍然缺失时。但我不知道是否有任何数据库实现了这一点。