前一篇我们介绍了如何在 Go 中对 MySQL 做操作,而 MySQL 为关联式资料库,而今天要介绍的是非关联是资料库(NoSQL) Scylla 。算是 Scylla 是以 C++ 来写出的 CASSANDRA,而他们为分散式、去中心化,且具有可高度扩展性,所以不像关联式资料库一样,有从主关系。
而有关 Scylla 详细的内容,可以至 scylla university 参考。
这里你可以用官方提供的 docker-compose 起一套 scylla DB,可参考这里。
version: '3'
services:
some-scylla:
image: scylladb/scylla
container_name: some-scylla
ports :
- 9042:9042
some-scylla2:
image: scylladb/scylla
container_name: some-scylla2
command: --seeds=some-scylla
some-scylla3:
image: scylladb/scylla
container_name: some-scylla3
command: --seeds=some-scylla
在一个目录新增一个 yml 档,将上方程序码写入,记得要加上 ports,才能 port-forward,你的 Go 语言才能连线到,最後下指令启动。
docker-compose up -d
在你安装好资料库後,一样要先建立 Keyspace 和 Table,这里我们用 scylla university 里的例子来示范:
CREATE KEYSPACE mykeyspace WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1};
use mykeyspace;
CREATE TABLE users ( user_id int, fname text, lname text, PRIMARY KEY((user_id)));
Go 语言里这也是有提供连线 scylla 的套件,就是 gocql,以下我们来示范如何使用 Go 语言来对 scylla 做操作。
hosts := []string{"localhost"}
cluster := gocql.NewCluster(hosts...)
cluster.Keyspace = "mykeyspace"
session, err := gocqlx.WrapSession(cluster.CreateSession())
if err != nil {
fmt.Println(err)
}
gocql跟表单互动的方式和上一篇MySQL的方式不太一样,
gocql必须要先建立起该表单的metadata物件,才能跟表单互动,像下面范例这样:
var usersMetadata = table.Metadata{
Name: "user",
Columns: []string{"user_id", "fname", "lname"},
}
var usersTable = table.New(usersMetadata)
type User struct {
UserId int64
FName string
LName string
}
user := User{
1,
"JC",
"Lai",
}
stmt = session.Query(usersTable.Insert()).BindStruct(user)
if err := stmt.ExecRelease(); err != nil {
fmt.Println(err)
}
user := User{
1,
"JC",
"Lai",
}
stmt := session.Query(usersTable.Get()).BindStruct(user)
if err := stmt.GetRelease(&user); err != nil {
fmt.Println(err)
}
fmt.Println(user)
今天介绍如何在 Go 语言中使用 Scylla 资料库,谢谢今天的阅读,希望今天的讲解对你有帮助。
https://university.scylladb.com/
https://github.com/scylladb/gocqlx
前言 前篇教学已经能让 Google 搜寻到网站,接下来若想做流量分析的话,需要埋 Google A...
0. 前言 有一说一,VGG19跟ResNet34比起来真的很浅(上图)。 ResNet全名为Dee...
模组的命名 一个模组的命名关系到我们是否能快速地知道这个模组的功能是甚麽,同时可以避免跟现有的 HT...
唉呀,今天再一篇v-for,不知道v-for分两篇会不会觉得太灌水,但我还是分两篇了✧*。٩(ˊᗜˋ...
Day 20: Informix Prereguisite 环境: SD → QA → VE → O...