如何解决在 Go 例程上执行插入查询
以下是使用 gocql
驱动程序的查询:
insertQueryString = "INSERT INTO my_table (id_1,id_2,textDetails) " + "VALUES (?,?,?) IF NOT EXISTS"
cassandra.Session.Query(insertQueryString,id1,id2,myTextDetails).Exec();
Cassandra 3.0 中的表架构是:
CREATE TABLE IF NOT EXISTS my_table (
id_1 UUID,id_2 UUID, textDetails TEXT, PRIMARY KEY (id_1,id_2)
);
我们有一个场景,上面的 INSERT
查询在多个 Go 例程(http 处理程序)上启动,具有相同的 (id_1,id_2)
列值组合,
那么,
Cassandra 是否确保只有首先
INSERT
操作执行成功?并使用数据库中现有的 INSERT
值组合错误处理后续 (id_1,id_2)
请求
解决方法
关于 Cassandra 中的唯一 PRIMARY KEY 和并发操作有一句俗语:
“最后一次写入获胜。”
Cassandra 是否确保只有第一个 INSERT 操作成功执行?并使用数据库中现有的 (id_1,id_2) 值组合错误输出后续的 INSERT 请求
通常不会。 Cassandra 通常确保针对特定 PRIMARY KEY 的所有操作将成功执行。
但是,在这种使用 lightweight transaction 的情况下,答案是“是”。在这种情况下,第一个写入将“获胜”,IF NOT EXISTS
子句将阻止另一个写入成功。
仅供参考 - 您的性能会受到一些影响,因为轻量级事务会对数据库进行多次往返。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。