Day26- Go with Scylla

前言

前一篇我们介绍了如何在 Go 中对 MySQL 做操作,而 MySQL 为关联式资料库,而今天要介绍的是非关联是资料库(NoSQL) Scylla 。算是 Scylla 是以 C++ 来写出的 CASSANDRA,而他们为分散式、去中心化,且具有可高度扩展性,所以不像关联式资料库一样,有从主关系。
而有关 Scylla 详细的内容,可以至 scylla university 参考。

Scyall

这里你可以用官方提供的 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))); 

gocql

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


<<:  Day26 玩家技巧、阶级与配对关系

>>:  Day 19羊肉空心菜炒面

Day28 - 如何埋 GA (Google Analytics)

前言 前篇教学已经能让 Google 搜寻到网站,接下来若想做流量分析的话,需要埋 Google A...

[Day 10] 从 tensorflow.keras 开始的 ResNet 生活

0. 前言 有一说一,VGG19跟ResNet34比起来真的很浅(上图)。 ResNet全名为Dee...

[DAY11]跟 Vue.js 认识的30天 - Vue 的模组注册(`component`)

模组的命名 一个模组的命名关系到我们是否能快速地知道这个模组的功能是甚麽,同时可以避免跟现有的 HT...

Day 23. 再一天列表渲染-更多的v-for

唉呀,今天再一篇v-for,不知道v-for分两篇会不会觉得太灌水,但我还是分两篇了✧*。٩(ˊᗜˋ...

Day 20: Informix

Day 20: Informix Prereguisite 环境: SD → QA → VE → O...