tikv-scan原子性问题

使用场景

  • tikv raw-api模式

问题请教

  • 在执行scan时,恰好对scan的某些行执行delete操作, 会发生什么结果
  • scan时的原子性是怎么保证的
  1. MVCC
    参考 tidb MVCC 能力的,put key 的时候,可以自带版本号(时间戳),
    针对 delete 或者 scan 的时候,会根据时间戳 拿到对应版本的 value


    参考文档:
    https://tikv.org/docs/5.1/reference/architecture/storage/

  2. 原子性有相关的 API,参考官方文档


    https://tikv.org/docs/5.1/develop/rawkv/cas/

更多的 client 文档参考


https://github.com/tikv/tikv

如果 “raw-api模式” 是指使用 rawkv.Client,这种模式下 scan 不提供原子性保证,scan 中执行 delete 的结果取决于两个操作的实际执行顺序。

如果需要保证原子性、快照隔离等,可以使用 事务 api (Transactional API)。

参见 https://tikv.org/docs/5.1/develop/clients/introduction/

rawkv模式下scan操作,scan会自带mvcc过滤掉比它大的时间戳行吗

目前 rawkv 是不带时间戳的,也没有 MVCC
只是纯粹的 key-value

请问你的业务场景是什么?感觉你是需要在一个快照上 scan?

请问下: 删除操作应该是原子性的,所以scan时要么看不到kv,要么就能看到kv是吧, 不可能只读到部分?

事物是我们自己实现的,所以有些问题需要搞明白

对于单个 key,删除操作是原子的,不会出现剩下半个 value 这种情况

对于 batch_delete 多个 key,不保证原子性,可能会出现部分 key 删除成功、部分失败的情况。但不会出现一个 key 只删除了一部分
batch_delete 执行期间进行 scan,可能会读取到部分删除后的结果

1赞