scylladb 安装及 golang 客户端gocql使用

2022-05-25 00:00:00 数据 数据库 专区 节点 安装

前言
ScyllaDB 是用 C++ 重写的 Cassandra,每节点每秒处理 100 万 TPS。ScyllaDB 完全兼容 Apache Cassandra,拥有比 Cassandra 多 10x 倍的吞吐量,降低了延迟。 ScyllaDB 是性能优异的 NoSQL 列存储数据库。 ScyllaDB 在垃圾收集或者 Compaction 的时候不需要暂停;在常规生产负载的时候可以添加和删除节点。官网地址:https://www.scylladb.com

基于ScyllaDB如此高的性能,用于替换 Cassandra势在必行。ScyllaDB 安装建议直接使用Docker安装替代二进制安装,原因二进制步骤繁琐,且经常安装失败。同时ScyllaDB 对cpu和系统也需要较高版本。

scylladb 安装部署
1.首先下载docker镜像:

docker pull scylladb/scylla
1
2.暴露端口,持久化数据 部署scylladb

docker run -p 9042:9042 -it --name some-scylla --volume /var/lib/scylla:/var/lib/scylla -d scylladb/scylla
1
3.其他集群部署方式可以参考 docker镜像地址:https://hub.docker.com/r/scylladb/scylla/

scylladb 使用cqlsh创建数据库
1.首先进入scylladb

docker exec -it some-scylla cqlsh
1
2.新建一个数据库:

CREATE KEYSPACE IF NOT EXISTS myCas WITH REPLICATION = {'class': 'SimpleStrategy','replication_factor':1};
describe keyspaces;
use mycas;
1
2
3
golang gocql 使用
因为scylladb 直接是兼容Cassandra,故我们可以直接使用Cassandra的golang客户端github.com/gocql/gocql

package dbtest

import (
"testing"
"github.com/gocql/gocql"
"github.com/labstack/gommon/log"
"fmt"
)

var session *gocql.Session

//初始化
func init() {
cluster := gocql.NewCluster("127.0.0.1:9042")
cluster.Keyspace = "mycas"
cluster.Consistency = gocql.Consistency(1)
cluster.NumConns = 3
var err error
session, err = cluster.CreateSession()
if err != nil {
log.Panic("start", err)
return
}
}

//创建表
func TestScylla_Create(t *testing.T) {
query := fmt.Sprintf(`CREATE TABLE user(id int PRIMARY KEY, user_name varchar);`)
session.Query(query).Exec()
}

//插入数据
func TestScylla_Insert(t *testing.T) {
query := fmt.Sprintf(`INSERT INTO user (id,user_name) VALUES (1,'zhangsan')`)
err := session.Query(query).Exec()
if err != nil {
fmt.Println(err)
}
}

//删除表
func TestScylla_Drop(t *testing.T) {
query := fmt.Sprintf(`drop table user;`)
err := session.Query(query).Exec()

if err != nil {
fmt.Println(err)
}
}

//查询数据
func TestScylla_Select(t *testing.T) {
query := fmt.Sprintf("SELECT * from user;")
iter := session.Query(query).Iter()
defer func() {
if iter != nil {
iter.Close()
}
}()
var id int
var name string
for iter.Scan(&id, &name) {
fmt.Println(id, name)
}
}

//批量执行数据
func TestScylla_Batch(t *testing.T) {
query := fmt.Sprintf(`BEGIN BATCH
UPDATE user SET user_name = 'asdqw' where id = %d;
INSERT INTO user (id,user_name) VALUES (2,'zhangsan');
APPLY BATCH;`, 1)
err := session.Query(query).Exec()
if err != nil {
fmt.Println(err)
}
}
————————————————
版权声明:本文为CSDN博主「逆月林」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/niyuelin1990/article/details/79624530

相关文章