如何在RocksDB中实现条件放置?



在CockroachDB成员早先写的一篇博客:https://www.cockroachlabs.com/blog/sql-in-cockroachdb-mapping-table-data-to-key-value-storage/中,作者指出CockroachDB的键值API支持ConditionalPut(key, value, expected-value)。考虑到CockroachDB是建立在RocksDB之上的,他们是如何支持条件放置的呢?

CockroachDB使用与ACID读写事务相同的机制实现ConditionalPut。键值与多版本并发控制时间戳一起存储。要执行ConditionalPut操作,存储客户端读取现有值";"作为";"写入新值的时间戳是一样的。由于这里讨论的写操作是对二级索引的写操作,因此已经发生了隐式或显式事务,因此除了检查先决条件的读取操作之外,没有额外的开销。

最新更新