iT邦幫忙

2021 iThome 鐵人賽

DAY 26
1
Modern Web

golang後端入門分享系列 第 26

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


上一篇
Day25- Go with MySQL
下一篇
Day27- Go with Redis
系列文
golang後端入門分享30

尚未有邦友留言

立即登入留言