首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在gocql中插入

如何在gocql中插入
EN

Stack Overflow用户
提问于 2014-11-10 16:07:50
回答 2查看 2.6K关注 0票数 1

我一直在阅读http://godoc.org/github.com/gocql/gocql,但是我不知道如何插入--如果不是与gocql一起存在的话。

它说,

函数(*查询) ScanCAS 函数(q *查询) ScanCAS(dest ...interface{}) (应用布尔,错误) ScanCAS执行轻量级事务(即包含IF子句的UPDATE或INSERT语句)。如果事务由于现有值不匹配而失败,则前面的值将存储在dest中。

当我跑的时候

代码语言:javascript
复制
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中不存在,实际如何插入?你们能给我举个例子吗?
  2. 如何做好适当的ScanCAS?
  3. 是什么让MapScanCAS和ScanCAS与众不同?我不明白作者讨论的是哪些列不匹配?
  4. 在godoc页面旁边是否有解释gocql的好页面?
EN

回答 2

Stack Overflow用户

发布于 2018-06-25 17:45:40

我的理解是:

如果在gocql中不存在,实际如何插入?你们能给我举个例子吗?

由于要执行的LWT首先需要从Cassandra读取数据并决定是否应该插入/更新该值,ScanCAS将返回1)是否应用此LWT的更改;2)如果不应用,ScanCAS将返回Cassandra中的现有值。因此,在ScanCAS中,您应该尝试读取要插入的相同类型的数据。

如何做好适当的ScanCAS?

类似于问题1。

是什么让MapScanCAS和ScanCAS与众不同?我不明白作者说的是哪一列错配

我认为作者的意思是很容易弄乱扫描返回的值/列的顺序,所以可以使用MapScanCAS来避免这个问题。

票数 1
EN

Stack Overflow用户

发布于 2016-02-03 04:35:47

看起来像一个错误,您应该使用“如果不存在”

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26847930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档