抖音的乐观和悲观有什么区别?

问题描述

当我使用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

我有两个问题:

  1. tikv 中的乐观和悲观有什么区别?
  2. tikv 的悲观锁和 mysql/tidb 的悲观锁有什么区别?

如果有人有任何想法,请与我分享,谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)