我一直在阅读http://godoc.org/github.com/gocql/gocql
但我不明白如何做插件 - 如果不存在与gocql。
它说明了
func(*查询)ScanCAS
func(q * Query)ScanCAS(dest ... interface {})(应用bool,错误错误)
ScanCAS执行轻量级事务(即包含IF子句的UPDATE或INSERT语句)。如果事务因现有值不匹配而失败,则先前的值将存储在dest。
中
当我跑步时
cluster := gocql.NewCluster("127.0.0.1")
cluster.Keyspace = "example"
cluster.Consistency = gocql.Quorum
session, _ := cluster.CreateSession()
defer session.Close()
var mapQ map[string]interface{}
var inserted bool
var id gocql.UUID
var timeline, text string
// insert a tweet
isTrue, err := session.Query(`INSERT INTO tweet (timeline, id, text) VALUES (?, ?, ?) IF NOT EXIST`,
"hermano", gocql.TimeUUID(), "good night").
ScanCAS(); if err != nil {
log.Println(err)
}
fmt.Println(timeline, id, text)
fmt.Printf("%+v\n", isTrue)
fmt.Printf("%+v\n", inserted)
fmt.Printf("%+v\n", mapQ)
我明白了:
Failed parsing statement: [INSERT INTO tweet (timeline, id, text) VALUES (?, ?, ?) IF NOT EXIST] reason: ArrayIndexOutOfBoundsException -1
所以我的问题是:
1.如何在gocql中实际执行INSERT IF NOT?你们能举个例子吗?
2.如何正确使用ScanCAS?
3.什么使MapScanCAS和ScanCAS与众不同?我不明白what column mismatching are the author is talking about
4.是否有任何好的页面在其godoc页面旁边解释gocql?
答案 0 :(得分:0)
看起来像一个错字,你应该使用 “如果不存在”
答案 1 :(得分:0)
我的理解:
实际上如何在gocql中不存在时进行插入?你们能给我吗 有什么例子吗?
由于您正在执行的LWT需要首先从Cassandra读取数据并确定是否应插入/更新该值,ScanCAS将返回1)是否已应用此LWT的更改,2)如果未应用,则ScanCAS将返回Cassandra中的现有值。因此,在ScanCAS中,您应该尝试读取要插入的相同类型的数据。
如何正确执行ScanCAS?
类似于问题1。
是什么使MapScanCAS和ScanCAS与众不同?我不明白 列不匹配是作者正在谈论的
我认为作者的意思是很容易弄乱扫描返回的值/列的顺序,因此您可以使用MapScanCAS来避免此问题