Heim > Backend-Entwicklung > Golang > Verwendung von Apache Cassandra in Go: Eine vollständige Anleitung

Verwendung von Apache Cassandra in Go: Eine vollständige Anleitung

PHPz
Freigeben: 2023-06-18 19:56:54
Original
1752 Leute haben es durchsucht

Apache Cassandra ist eine nicht relationale Datenbank (NoSQL), die häufig in großen, durchsatzstarken und fehlertoleranten verteilten Datenspeicherszenarien verwendet wird. Es verwendet ein Datenmodell ähnlich dem Bigtable von Google und kombiniert es mit der verteilten Architektur von Amazon Dynamo. In diesem Artikel besprechen wir, wie man Apache Cassandra in der Go-Sprache verwendet und wie man damit eine einfache Webanwendung erstellt.

Cassandras Datenmodell

Cassandras Datenmodell kann logischerweise als vollständig verteilte Hash-Tabelle betrachtet werden. Die Tabelle besteht aus mehreren Spaltenfamilien. Jede Spaltenfamilie enthält einen Schlüsselraum (Keyspace), der mehrere Tabellen (Tabelle) enthält. In jeder Zeile können mehrere Daten mit dem Namen Spalten (Spalte) gespeichert werden. .

In Cassandra können Sie CQL (Cassandra Query Language) verwenden, um Daten abzufragen und zu bearbeiten. CQL ist leicht zu erlernen und zu verwenden, da es eine ähnliche Syntax wie die SQL-Sprache verwendet, einige Syntaxdetails jedoch dennoch unterschiedlich sind.

Schritte zur Verwendung von Apache Cassandra

Lassen Sie uns nun einen Blick darauf werfen, wie Sie Apache Cassandra in Ihrer Go-Anwendung verwenden. Nachfolgend finden Sie hauptsächlich 5 Schritte.

1. Cassandra installieren

Als Erstes müssen Sie Cassandra installieren. Sie können die entsprechende Binärdatei auf der offiziellen Website von Cassandra herunterladen und gemäß den Anweisungen installieren.

2. Erstellen Sie eine Spaltenfamilie

Nachdem Sie Cassandra installiert haben, besteht der nächste Schritt darin, eine Spaltenfamilie zu erstellen und einige Spalten zur Spaltenfamilie hinzuzufügen. Sie können cqlsh (Cassandra-Shell) verwenden, um Cassandra zu bedienen.

Hier haben wir eine Spaltenfamilie mit dem Namen „Schüler“ erstellt, die den Namen des Schülers, die Schülernummer, die Klasse und andere Informationen enthält:

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
);
Nach dem Login kopieren

3 Mit Cassandra verbinden

In der Go-Sprache können Sie Bibliotheken von Drittanbietern zum Herstellen einer Verbindung verwenden zu Kassandra. Hier verwenden wir gocql, um eine Verbindung herzustellen.

Hier ist ein Codebeispiel zum Herstellen einer Verbindung zu einem Cassandra-Cluster:

cluster := gocql.NewCluster("127.0.0.1")
cluster.Keyspace = "learning"
session, err := cluster.CreateSession()
if err != nil {
    log.Fatal(err)
}
defer session.Close()
Nach dem Login kopieren

Hier geben Sie einfach die IP-Adresse oder den Hostnamen des Cassandra-Clusters an und geben den Schlüsselraum an, mit dem Sie eine Verbindung herstellen möchten.

4. Abfrageanweisungen schreiben

In der Go-Sprache können Sie gocql.Query zum Schreiben von Abfrageanweisungen verwenden. Das Folgende ist ein Codebeispiel zum Abfragen aller Schülerinformationen in der Tabelle:

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)
}
Nach dem Login kopieren

Hier deklarieren wir zunächst eine model.Student-Struktur zum Speichern der aus der Tabelle abgerufenen Schülerdaten. Anschließend haben wir eine SELECT-Abfrageanweisung geschrieben und mithilfe der session.Query-Methode ein Abfrageobjekt erstellt. Als Nächstes durchlaufen wir die Ergebnisse der Abfrage, speichern die Daten in einem Slice und geben schließlich die Informationen für alle Schüler aus.

5. Schließen Sie die Verbindung

Zuletzt müssen wir die Verbindung zu Cassandra schließen. Das Folgende ist ein Codebeispiel zum Schließen der Cassandra-Verbindung:

defer session.Close()
Nach dem Login kopieren

Erstellen einer Webanwendung mit Cassandra

Lassen Sie uns nun sehen, wie Sie eine einfache Webanwendung mit Apache Cassandra in der Go-Sprache erstellen. In dieser Webanwendung erstellen wir eine Studentenlistenseite, zeigen die Informationen aller Studenten an und stellen ein Formular zum Hinzufügen von Studenteninformationen bereit.

Hier verwenden wir das Gin-Framework, um Webanwendungen zu erstellen. Das Folgende ist ein Codebeispiel zum Erstellen einer Webanwendung:

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")
}
Nach dem Login kopieren

Hier deklarieren wir zunächst eine Struktur namens Student, die zur Darstellung der Informationen eines Studenten verwendet wird. Anschließend stellen wir in der Init-Funktion eine Verbindung zum Cassandra-Cluster her.

In der Hauptfunktion verwenden wir Gin-Routing, um verschiedene HTTP-Anfragen zu verarbeiten. Auf dem Pfad „/“ fragen wir zunächst die Informationen aller Schüler ab und übergeben sie an die Vorlage index.tmpl zum Rendern der Schülerlistenseite. Im Pfad „/add“ fügen wir einen neuen Studentendatensatz basierend auf den vom Benutzer übermittelten Formulardaten ein und leiten den Benutzer dann zurück zur Studentenlistenseite.

Abschließend rufen wir router.Run() auf, um die Webanwendung zu starten.

Zusammenfassung

In diesem Artikel haben wir die Verwendung von Apache Cassandra in der Go-Sprache besprochen und eine einfache Webanwendung erstellt. Anhand dieses Beispiels können wir die einfache Verwendung von Cassandra und die Verwendung von Bibliotheken von Drittanbietern zum Betrieb von Cassandra in der Go-Sprache sehen. Wenn Sie nach einer verteilten Datenbank mit hohem Durchsatz und hoher Verfügbarkeit suchen, ist Apache Cassandra möglicherweise eine Option für Sie.

Das obige ist der detaillierte Inhalt vonVerwendung von Apache Cassandra in Go: Eine vollständige Anleitung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage