Как сделать INSERT, если не существует в gocql
Я читал http://godoc.org/github.com/gocql/gocql И все же я не понимаю, как сделать INSERT - ЕСЛИ НЕ СУЩЕСТВУЕТ с gocql.
Он заявил, что
func (* Query) ScanCAS
func (q * Query) ScanCAS (dest... interface {}) (применяется bool, ошибка err)
ScanCAS выполняет упрощенную транзакцию (т. Е. Оператор UPDATE или INSERT, содержащий предложение IF). Если транзакция завершится неудачно из-за несоответствия существующих значений, предыдущие значения будут сохранены в 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. Как сделать INSERT IF NOT EXIST в gocql? Ребята, вы можете привести какой-нибудь пример?
2. Как правильно сделать ScanCAS?
3. Что отличает MapScanCAS и ScanCAS? Я не понимаю, о каком несоответствии столбца говорит автор
4. Есть ли какая-нибудь хорошая страница, которая объясняет gocql, кроме его страницы godoc?
2 ответа
Мое понимание:
Как на самом деле сделать INSERT, если не существует в gocql? Ребята, вы можете привести какой-нибудь пример?
Поскольку LWT, который вы выполняете, должен сначала прочитать данные из Cassandra и решить, нужно ли вставить / обновить значение, ScanCAS вернет 1) применено ли изменение этого LWT, 2) если не применено, ScanCAS вернет существующее значение в Кассандре Поэтому в ScanCAS вы должны пытаться читать тот же тип данных, который вы вставляете.
Как правильно сделать ScanCAS?
Аналогично вопросу 1
Что отличает MapScanCAS и ScanCAS? Я не понимаю, о каком несоответствии столбца говорит автор
Я думаю, что автор подразумевает, что легко испортить порядок сканирования возвращаемых значений / столбцов, поэтому вы можете использовать MapScanCAS, чтобы избежать этой проблемы.
Выглядит как опечатка, вы должны использовать "ЕСЛИ НЕ СУЩЕСТВУЕТ"