[ScyllaDB] ์๊ฐ
Scylladb๋ ์ด๋ํ ๋ถ์ฐ ์์คํ
์ ์ง์ํ๋ K/V ๊ธฐ๋ฐ์ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค ํ๋๋ค.
2015๋
์ ๋์๊ณ , ์นด์ฐ๋๋ผDB์ ๋๋ถ๋ถ์ ๊ธฐ๋ฅ์ด ํธํ๋๋ค.
๋ ๋์ ์ฑ๋ฅ์ผ๋ก ์นด์ฐ๋๋ผ๋ฅผ ๋์ฒดํ๋๊ฒ ๋ชฉ์ ์ด๊ณ , ์ ๋ฌ์ฑํ๊ณ ์๋ ๊ฒ ๊ฐ๋ค.
Go์ Java ์ฒ๊ตญ์ธ ์์ฆ DB ์ธ์์ ๊ฑฐ์ฌ๋ฌ์ C++๋ก ๋ง๋ค์ด์ก๋๋ฐ, ๊ทธ ๋๋ถ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ ์ฑ๋ฅ ์ธก๋ฉด์์ ๋งค์ฐ ์์ ์ ์ด๋ผ๋ ํ๊ฐ๋ฅผ ๋ฐ๋๋ค.
์นด์ฐ๋๋ผ์ ๋น๊ตํ๋ฉด ๋์ผ ์คํ์์์ ์ฒ๋ฆฌ๋์ด ๋ช๋ฐฐ์์ ๋ช์ญ๋ฐฐ๊น์ง๋ ์ฐจ์ด๊ฐ ๋๋ค๊ณ ํ๋ค.
๋์ค์ฝ๋๊ฐ ์ค๋ฐ๊น์ง๋ ์นด์ฐ๋๋ผDB๋ก ๋ฐ์ดํฐ๋ฅผ ์๋ค๊ฐ ๋ฐ์ดํฐ๊ฐ ์กฐ ๋จ์๋ฅผ ๋์ด๊ฐ์ Java ํน์ ์ ํ๊ณ๋ฅผ ๋๊ปด์ Scylladb๋ก ์ฎ๊ธด ์ํ๋ค.
์ด๊ฑธ๋ก ์์ญ์กฐ๋จ์์ ๋ฉ์ธ์ง๋ฅผ ๊ด๋ฆฌํ๊ณ ์๋ค๊ณ ํ๋ค.
Docker๋ก ์์ํ๊ธฐ
๋ค์๊ณผ ๊ฐ์ด ์คํํ๋ฉด, ๋ฐ๋ก scylla ๋ ธ๋๋ฅผ ๋์ธ ์ ์๋ค.
docker run --hostname some-scylla -p 9042:9042 scylladb/scylla
9042 ํฌํธ๊ฐ ๊ธฐ๋ณธ client ์ ์ ํฌํธ๋ค.
Client ์์ฑํ๊ธฐ (Go)
ํ๋ฒ ํด๋ผ์ด์ธํธ ํ๋ก๊ทธ๋จ์ ์์ฑํด์ ์ ๋์๊ฐ๋ ํ ์คํธ๋ฅผ ํด๋ณด์.
์นด์ฐ๋๋ผ ํธํ์ด๋ผ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค๋ ์นด์ฐ๋๋ผ ๋ฒ์ ์ ๊ฐ์ ธ๋ค๊ฐ ์ฐ๋ฉด ๋๋ค.
์๋๋ ํค์คํ์ด์ค์ ํ ์ด๋ธ์ ์์ฑํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ ๋ค์ ๋ฐ๋ก select๋ก ๊บผ๋ด์ค๋ ๊ฐ๋จํ ์ฝ๋๋ค.
package main
import (
"fmt"
"log"
"time"
"github.com/gocql/gocql"
)
func main() {
cluster := gocql.NewCluster("127.0.0.1:9042")
session, err := cluster.CreateSession()
if err != nil {
log.Fatal(err)
}
// ํค์คํ์ด์ค ์์ฑ
if err = session.Query("CREATE KEYSPACE IF NOT EXISTS test_space WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : '1' };").Exec(); err != nil {
log.Fatal(err)
}
// ํ
์ด๋ธ ์์ฑ
if err = session.Query(`CREATE TABLE IF NOT EXISTS test_space.item(
uuid text PRIMARY KEY,
item_name text,
item_price double,
last_update_timestamp timestamp
);`).Exec(); err != nil {
log.Fatal(err)
}
// insert
if err = session.Query(`
insert into test_space.item(uuid, item_name, item_price, last_update_timestamp)
values
('c714d095-0a63-4c1f-921d-42abd954e2c1', 'buldak', 100.5, toTimeStamp(now()));
`).Exec(); err != nil {
log.Fatal(err)
}
// insert
if err = session.Query(`
insert into test_space.item(uuid, item_name, item_price, last_update_timestamp)
values
('02773666-f483-4749-a3dd-c526e62daca2', 'eojuk', 4000, toTimeStamp(now()));
`).Exec(); err != nil {
log.Fatal(err)
}
var uuid string
var item_name string
var item_price float64
var last_update_timestamp time.Time
// select
iter := session.Query(`select * from test_space.item;`).Iter()
for iter.Scan(&uuid, &item_name, &item_price, &last_update_timestamp) {
fmt.Println("Row:", uuid, item_name, item_price, last_update_timestamp)
}
if err := iter.Close(); err != nil {
log.Fatal(err)
}
}
์นด์ฐ๋๋ผ์ ๋๊ฐ์ด ํค์คํ์ด์ค->ํ ์ด๋ธ์ ๋ ์ด์ด๋ฅผ ๊ฐ์ง๊ณ , SQL ์คํ์ผ์ ๊ตฌ๋ฌธ์ ์ง์ํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ ๋๋ก ์คํํ๋ฉด
์ด๋ฐ์์ผ๋ก ๋ ๊ฒ์ด๋ค.
์ฐธ์กฐ
https://betterprogramming.pub/what-scylladb-is-and-why-you-should-care-58cb35af6cd7
https://hub.docker.com/r/scylladb/scylla/