tikv新功能接口咨询

【Tikv 版本】 4.0

【问题描述】
tikv的roadmap有没有这样的计划
1. 类似Redis原子计数器incr
2. set某个key时, 是否可以覆盖原key, 通过参数控制
3. scan倒排扫描

Hello~ 可以参考一下 https://tikv.org/ 相关介绍,据我了解没有明确计划。目前我们的业务场景是什么,就是适配 Redis 业务么/ ?

  1. 我们在研发全闪文件系统, 很多操作需要事务或者原子性, 但是tikv给的事务又太慢
  2. 其实第一个问题和第二个问题都是事务的, 但是希望这个事务在tikv层直接处理完成
  3. 第三个需要: 找出某个key的上一个key, 通过升序扫描, 就会非常的麻烦

关于第一点和第三点可以在 “需求&反馈” 版块按照模板给提一个需求,方便评估一下
https://asktug.com/c/advice-feedback

关于第二点,目前看应该是无法实现的,因为 TiKV 中有 MVCC 在写入 key 的时候会带上 pd 生成的 tso ,key 上是会带上版本号的。

其实第三个问题的原因和你们用mvcc一样的
我们的key也是每个加版本号,
文件系统打快照时,找出离这个快照版本最近的key

如果数据已经是被 flush 到 SST 文件中的话,顺序扫描和逆序扫描的效率是差不多的,对于磁盘上的 SST 搜索是通过二分方式进行查询,并且 SST 文件头部会有一个 Bloom filter,根据 Boolm filter 快速过滤需要查询的数据是否在该 SST 文件中,如果不在就直接跳过该 SST 文件,如果在该 SST 文件中,才会扫描整个 SST 文件进行查询。所以如果是 SST 文件的扫描的话,顺序扫和逆序扫的效率差别不大.

但是如果数据还在 memtable 中,memtable 中的数据是以 skiplist 跳跃链表的数据结构存储的,这种数据结构的顺序扫描和逆序扫描的效率差别会比较大,这部分会有影响。但是整体 RocksDB 中 memtable 的数据只是占一小部分,对于整体的影响不会特别大。

https://gocode.cc/project/13/article/187

那么逆序扫描的接口在哪呢

你们的bloom filter 实现上有没有引用计数的处理
是自己实现的还是开源的 有没有相关链接

目前使用的就是 RocksDB : https://rocksdb.org/

ok!!!

那逆序扫描的接口 我tikv api中没找到

如果是 Txn 的话,有 IterReverse 接口: https://github.com/tikv/client-go/blob/d811a08025fa25c24c75980a71fa66ecec2804a6/txnkv/txn.go#L137

如果是 Raw 的话,有 ReverseScan 接口:https://github.com/tikv/client-go/blob/d811a08025fa25c24c75980a71fa66ecec2804a6/rawkv/rawkv.go#L366

非常感谢, 这个如果数据还没flush到sst上时 也适用吧

我用的是tidb中的go-client, 从官方的api文档 (https://pkg.go.dev/github.com/pingcap/tidb/store/tikv#RawKVClient) 找不到倒序扫描的接口, 是接口文档没更新吗

应该是文档没更新

:v: !!!

:handshake::handshake::handshake:

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。