ホームページ > バックエンド開発 > Golang > Go での Apache Cassandra の使用: 完全ガイド

Go での Apache Cassandra の使用: 完全ガイド

PHPz
リリース: 2023-06-18 19:56:54
オリジナル
1752 人が閲覧しました

Apache Cassandra は、大規模、高スループット、フォールトトレラントな分散データ ストレージ シナリオで広く使用されている非リレーショナル データベース (NoSQL) です。 Google の Bigtable に似たデータ モデルを使用し、それを Amazon Dynamo の分散アーキテクチャと組み合わせます。この記事では、Go 言語で Apache Cassandra を使用する方法と、それを使用して簡単な Web アプリケーションを構築する方法について説明します。

Cassandra のデータ モデル

Cassandra のデータ モデルは、完全に分散されたハッシュ テーブルとして論理的に見ることができます。テーブルは複数の列ファミリーで構成されます。各列ファミリーにはキースペース (キースペース) が含まれており、そのキースペースには複数のテーブル (テーブル) が含まれます。各テーブルには多くの行 (行) が含まれており、各行には列 (列) という名前の複数のデータを格納できます。 。

Cassandra では、CQL (Cassandra Query Language) を使用してデータのクエリと操作を行うことができます。 CQL は SQL 言語に似た構文を使用するため、学習と使用が簡単ですが、構文の詳細の一部がまだ異なります。

Apache Cassandra を使用する手順

それでは、Go アプリケーションで Apache Cassandra を使用する方法を見てみましょう。主に以下の 5 つの手順があります。

1. Cassandra のインストール

最初に行うことは、Cassandra をインストールすることです。 Cassandra の公式 Web サイトにアクセスして、対応するバイナリ ファイルをダウンロードし、指示に従ってインストールします。

2. 列ファミリーの作成

Cassandra をインストールした後の次のステップは、列ファミリーを作成し、列ファミリーにいくつかの列を追加することです。 Cassandra を操作するには、cqlsh (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 に接続します

In Go 言語では、サードパーティのライブラリを使用して Cassandra に接続できます。ここでは 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 を使用した Web アプリケーションの構築

次に、Go 言語で Apache Cassandra を使用して単純な Web を構築する方法を見てみましょう。応用。この Web アプリケーションでは、学生リスト ページを作成し、すべての学生の情報を表示し、学生情報を追加するフォームを提供します。

ここでは、Gin フレームワークを使用して Web アプリケーションを構築します。以下は、Web アプリケーションを構築するためのコード例です。

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 クラスターに接続します。

main 関数では、Gin ルーティングを使用してさまざまな HTTP リクエストを処理します。 「/」パスでは、最初にすべての学生の情報をクエリし、学生リスト ページをレンダリングするためにそれらの情報をindex.tmpl テンプレートに渡します。 「/add」パスに、ユーザーが送信したフォーム データに基づいて新しい学生レコードを挿入し、ユーザーを学生リスト ページにリダイレクトします。

最後に、router.Run() を呼び出して Web アプリケーションを開始します。

概要

この記事では、Go 言語で Apache Cassandra を使用する方法と、簡単な Web アプリケーションを構築する方法について説明しました。この例を通して、Cassandra の簡単な使用法と、サードパーティのライブラリを使用して Go 言語で Cassandra を操作する方法を確認できます。高スループットで高可用性の分散データベースを探している場合は、Apache Cassandra が選択肢になるかもしれません。

以上がGo での Apache Cassandra の使用: 完全ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート