关于 tikv rust client 的 get_for_update

在乐观事务的情况下,为了保证事务性,并发对相同的key调用get_for_update时会出现write conflict,期间不会对这个key进行写操作。这种冲突对性能是有影响的,想问下tikv中有类似读写锁这种模式吗,不希望堵塞读操作。

新版本显式事务,SELECT … FOR UPDATE 是行锁。这样可以避免写冲突。

你说的读写锁没太明白什么意思。

我也有楼主一样的问题。
SELECT … FOR UPDATE是行锁没错,但是如果不是为了修改这一行,而仅仅是为了避免在修改其他行的时候,这一行被其他事务篡改,那么能否把这行数据改成 行-读 锁,允许事务A和事务B同时对该行施加读锁, 从而修改各自的其他数据。
例如,事务A需要修改key a, 但是要求key z存在;同时,事务B需要修改key b, 也要求key z存在;我希望的是这2个事务能够并行完成。

你要的是 LOCK IN SHARE MODE;
https://docs.pingcap.com/zh/tidb/stable/pessimistic-transaction/#和-mysql-innodb-的差异

看链接中的意思是,v8.3之后,LOCK IN SHARE MODE 实际上并不能保证读读共享,依然是一个普通的排它锁?后续pingcap有考虑实现一个真正的读写锁吗

不清楚。

dml操作应该是有写锁的.

我们一般就是用select for update的

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