猿问

Golang cassandra gocql事务需要延迟时间才能执行

这段代码并没有删除数据,不知道为什么。


s.Query(

        "INSERT INTO smth (id, name) VALUES (?,?)",

        data.ID

        data.Name

    ).ScanCAS(nil, nil, nil)


s.Query(

    "DELETE FROM smth WHERE id = ? AND name = ?",

    data.ID

    data.Name

).Exec()

但是如果我像这样添加一些延迟:


s.Query(

        "INSERT INTO smth (id, name) VALUES (?,?)",

        data.ID

        data.Name

    ).ScanCAS(nil, nil, nil)


time.Sleep(time.Second)

s.Query(

    "DELETE FROM smth WHERE id = ? AND name = ?",

    data.ID

    data.Name

).Exec()

数据将被删除。


有谁知道如何在不增加延迟的情况下修复它?我在用着github.com/gocql/gocql


浮云间
浏览 134回答 1
1回答

海绵宝宝撒

Gocql 查询是异步执行DELETE的,因此不能保证您的查询在INSERT.在任何情况下,您的测试用例都是无效的,因为在刚刚插入分区后立即删除它不是一个有效的用例。作为旁注,您的代码对我来说似乎是错误的。您在插入数据时调用Query.ScanCAS(),但查询不是轻量级事务——它缺少条件IF EXISTS/ IF NOT EXISTS。干杯!
随时随地看视频慕课网APP

相关分类

Go
我要回答