前一篇我們介紹了如何在 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