> 백엔드 개발 > Golang > Go에서 Apache Cassandra 사용하기: 전체 가이드

Go에서 Apache Cassandra 사용하기: 전체 가이드

PHPz
풀어 주다: 2023-06-18 19:56:54
원래의
1750명이 탐색했습니다.

Apache Cassandra는 대규모, 높은 처리량 및 내결함성 분산 데이터 스토리지 시나리오에 널리 사용되는 비관계형 데이터베이스(NoSQL)입니다. Google의 Bigtable과 유사한 데이터 모델을 사용하고 이를 Amazon Dynamo의 분산 아키텍처와 결합합니다. 이 기사에서는 Go 언어로 Apache Cassandra를 사용하는 방법과 이를 사용하여 간단한 웹 애플리케이션을 구축하는 방법에 대해 설명합니다.

Cassandra의 데이터 모델

Cassandra의 데이터 모델은 논리적으로 완전히 분산된 해시 테이블로 볼 수 있습니다. 테이블은 여러 열 패밀리로 구성됩니다. 각 열 패밀리에는 여러 테이블(Table)을 포함하는 키스페이스(Keyspace)가 포함되어 있습니다. 각 테이블에는 여러 행(Row)이 포함되어 있으며, 각 행에는 열(Column)이라는 이름의 여러 데이터를 저장할 수 있습니다. .

Cassandra에서는 CQL(Cassandra Query Language)을 사용하여 데이터를 쿼리하고 조작할 수 있습니다. CQL은 SQL 언어와 유사한 구문을 사용하기 때문에 배우고 사용하기 쉽지만 일부 구문 세부 사항은 여전히 ​​다릅니다.

Apache Cassandra를 사용하는 단계

이제 Go 애플리케이션에서 Apache Cassandra를 사용하는 방법을 살펴보겠습니다. 아래에는 주로 5단계가 있습니다.

1. 카산드라 설치

가장 먼저 할 일은 카산드라를 설치하는 것입니다. Cassandra의 공식 웹사이트로 이동하여 해당 바이너리 파일을 다운로드하고 지침에 따라 설치할 수 있습니다.

2. 컬럼 패밀리 생성

Cassandra를 설치한 후 다음 단계는 컬럼 패밀리를 생성하고 컬럼 패밀리에 일부 컬럼을 추가하는 것입니다. cqlsh(Cassandra Shell)를 사용하여 Cassandra를 작동할 수 있습니다.

여기서 학생 이름, 학생 번호, 수업 및 기타 정보가 포함된 "student"라는 열 패밀리를 만들었습니다.

CREATE KEYSPACE learning WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '3'} AND durable_writes = true;

CREATE TABLE learning.students (
   student_id text PRIMARY KEY,
   first_name text,
   last_name text,
   department text
);
로그인 후 복사

3. Cassandra에 연결

Go 언어에서는 타사 라이브러리를 사용하여 연결할 수 있습니다. 카산드라에게. 여기서는 gocql을 사용하여 연결합니다.

다음은 Cassandra 클러스터에 연결하는 코드 예제입니다.

cluster := gocql.NewCluster("127.0.0.1")
cluster.Keyspace = "learning"
session, err := cluster.CreateSession()
if err != nil {
    log.Fatal(err)
}
defer session.Close()
로그인 후 복사

여기에서는 Cassandra 클러스터의 IP 주소나 호스트 이름을 지정하고 연결하려는 키 공간을 지정하면 됩니다.

4. 쿼리문 작성

Go 언어에서는 gocql.Query를 사용하여 쿼리문을 작성할 수 있습니다. 다음은 테이블의 모든 학생 정보를 쿼리하는 코드 예제입니다.

var students []model.Student

query := "SELECT * FROM students"
iter := session.Query(query).Iter()

for iter.Scan(&student.ID, &student.FirstName, &student.LastName, &student.Department) {
    students = append(students, student)
}

if err := iter.Close(); err != nil {
    log.Fatal(err)
}

for _, student := range students {
    fmt.Println(student.ID, student.FirstName, student.LastName, student.Department)
}
로그인 후 복사

여기에서는 먼저 테이블에서 검색된 학생 데이터를 저장하기 위한 model.Student 구조를 선언합니다. 그런 다음 SELECT 쿼리 문을 작성하고 session.Query 메서드를 사용하여 쿼리 개체를 생성했습니다. 다음으로 쿼리 결과를 반복하고 데이터를 슬라이스에 저장한 다음 마지막으로 모든 학생에 대한 정보를 출력합니다.

5. 연결 종료

마지막으로 Cassandra와의 연결을 종료해야 합니다. 다음은 Cassandra 연결을 닫는 코드 예제입니다.

defer session.Close()
로그인 후 복사

Cassandra를 사용하여 웹 애플리케이션 구축

이제 Go 언어에서 Apache Cassandra를 사용하여 간단한 웹 애플리케이션을 구축하는 방법을 살펴보겠습니다. 본 웹 애플리케이션에서는 학생 목록 페이지를 생성하고, 모든 학생의 정보를 표시하며, 학생 정보를 추가할 수 있는 양식을 제공합니다.

여기에서는 Gin 프레임워크를 사용하여 웹 애플리케이션을 구축합니다. 다음은 웹 애플리케이션 구축을 위한 코드 예제입니다.

package main

import (
    "html/template"
    "log"
    "net/http"
    "strconv"

    "github.com/gin-gonic/gin"
    "github.com/gocql/gocql"
)

type Student struct {
    ID         string
    FirstName  string
    LastName   string
    Department string
}

var session *gocql.Session

func init() {
    cluster := gocql.NewCluster("127.0.0.1")
    cluster.Keyspace = "learning"
    var err error
    session, err = cluster.CreateSession()
    if err != nil {
        log.Fatal(err)
    }
}

func main() {
    router := gin.Default()

    router.LoadHTMLGlob("templates/*")

    router.GET("/", func(c *gin.Context) {
        var students []Student

        query := "SELECT * FROM students"
        iter := session.Query(query).Iter()

        for {
            var student Student
            if !iter.Scan(&student.ID, &student.FirstName, &student.LastName, &student.Department) {
                break
            }
            students = append(students, student)
        }

        if err := iter.Close(); err != nil {
            log.Fatal(err)
        }

        c.HTML(http.StatusOK, "index.tmpl", gin.H{
            "students": students,
        })
    })

    router.POST("/add", func(c *gin.Context) {
        student := Student{
            ID:         c.PostForm("id"),
            FirstName:  c.PostForm("first_name"),
            LastName:   c.PostForm("last_name"),
            Department: c.PostForm("department"),
        }

        query := "INSERT INTO students (student_id, first_name, last_name, department) VALUES (?, ?, ?, ?)"
        err := session.Query(query, student.ID, student.FirstName, student.LastName, student.Department).Exec()
        if err != nil {
            log.Fatal(err)
        }

        c.Redirect(http.StatusFound, "/")
    })

    router.Run(":8080")
}
로그인 후 복사

여기에서는 먼저 학생 정보를 나타내는 데 사용되는 Student라는 구조를 선언합니다. 그런 다음 init 함수에서 Cassandra 클러스터에 연결합니다.

기본 기능에서는 Gin 라우팅을 사용하여 다양한 HTTP 요청을 처리합니다. "/" 경로에서 먼저 모든 학생의 정보를 쿼리하고 이를 학생 목록 페이지 렌더링을 위한 index.tmpl 템플릿에 전달합니다. "/add" 경로에는 사용자가 제출한 양식 데이터를 기반으로 새 학생 기록을 삽입한 다음 사용자를 다시 학생 목록 페이지로 리디렉션합니다.

마지막으로 router.Run()을 호출하여 웹 애플리케이션을 시작합니다.

요약

이 글에서는 Go 언어로 Apache Cassandra를 사용하는 방법과 간단한 웹 애플리케이션을 구축하는 방법을 논의했습니다. 이 예제를 통해 Cassandra의 간단한 사용법과 타사 라이브러리를 사용하여 Go 언어에서 Cassandra를 작동하는 방법을 확인할 수 있습니다. 높은 처리량과 고가용성 분산 데이터베이스를 찾고 있다면 Apache Cassandra가 적합할 수 있습니다.

위 내용은 Go에서 Apache Cassandra 사용하기: 전체 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿