问题描述
当我使用tikv api的时候,发现在TxnKV客户端有选项,然后我测试了一下,在tikv中找不到乐观和悲观的区别?
测试代码是这样的:
func begin() kv.Transaction{
transaction,err := store.Begin()
if err!=nil{
panic(err)
}
return transaction
}
func main() {
pdAddr := os.Getenv("PD_ADDR")
if pdAddr != "" {
os.Args = append(os.Args,"-pd",pdAddr)
}
flag.Parse()
initStore()
k2 := []byte("key2")
v22 := []byte("value22")
v23 := []byte("value22")
testTxn(k2,v22,v23)
}
func testTxn(k2 []byte,v22 []byte,v23 []byte) {
txn1,txn2 := begin(),begin()
txn1.SetOption(kv.Pessimistic,true)
fmt.Println("txn1 after:",txn1.IsPessimistic())
txn2.SetOption(kv.Pessimistic,true)
fmt.Println("txn2 after:",txn2.IsPessimistic())
err := txn1.Set(k2,v22)
if err != nil {
panic(err)
}
err = txn2.Set(k2,v23)
if err != nil {
panic(err)
}
err = txn1.Commit(context.Background())
if err != nil {
panic(err)
}
fmt.Println(get(k2))
err = txn2.Commit(context.Background())
if err != nil {
panic(err)
}
}
无论我是否设置了txn1.SetOption(kv.Pessimistic,true)
和txn2.SetOption(kv.Pessimistic,true)
,我都没有发现它们之间的区别。
但是在 TiDB 或 mysql 中,用悲观事务修改相同的记录,会阻塞。
比如交易A:
begin;
updata t1 set col ="value1" where id=1;
交易 B:
begin;
updata t1 set col ="value2" where id=1; //it will block until transaction A commit or rollback
我有两个问题:
- tikv 中的乐观和悲观有什么区别?
- tikv 的悲观锁和 mysql/tidb 的悲观锁有什么区别?
如果有人有任何想法,请与我分享,谢谢
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)