Condividi tramite


Guida introduttiva: Libreria client di Azure Cosmos DB for Apache Cassandra per Go

Introduzione alla libreria client di Azure Cosmos DB per Apache Cassandra per Go per archiviare, gestire ed eseguire query su dati non strutturati. Seguire la procedura descritta in questa guida per creare un nuovo account, installare una libreria client Go, connettersi all'account, eseguire operazioni comuni ed eseguire query sui dati di esempio finali.

Documentazione | Codice sorgente | della libreriaPacchetto (Go)

Prerequisiti

  • Una sottoscrizione di Azure

    • Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
  • Go 1.24 o versione successiva

Configurazione

Prima di tutto, configurare l'account e l'ambiente di sviluppo per questa guida. Questa sezione illustra il processo di creazione di un account, il recupero delle credenziali e la preparazione dell'ambiente di sviluppo.

Crea un account

Per iniziare, creare un'API per l'account Apache Cassandra. Dopo aver creato l'account, creare il keyspace e le risorse della tabella.

  1. Se non si ha già un gruppo di risorse di destinazione, usare il az group create comando per creare un nuovo gruppo di risorse nella sottoscrizione.

    az group create \
        --name "<resource-group-name>" \
        --location "<location>"
    
  2. Usare il az cosmosdb create comando per creare un nuovo account Azure Cosmos DB per Apache Cassandra con le impostazioni predefinite.

    az cosmosdb create \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --locations "regionName=<location>" \
        --capabilities "EnableCassandra"
    
  3. Creare un nuovo keyspace utilizzando az cosmosdb cassandra keyspace create denominato cosmicworks.

    az cosmosdb cassandra keyspace create \
        --resource-group "<resource-group-name>" \
        --account-name "<account-name>" \
        --name "cosmicworks"
    
  4. Creare un nuovo oggetto JSON per rappresentare lo schema usando un comando Bash a più righe. Usare quindi il az cosmosdb cassandra table create comando per creare una nuova tabella denominata products.

    schemaJson=$(cat <<EOF
    {
      "columns": [
        {
          "name": "id",
          "type": "text"
        },
        {
          "name": "name",
          "type": "text"
        },
        {
          "name": "category",
          "type": "text"
        },
        {
          "name": "quantity",
          "type": "int"
        },
        {
          "name": "price",
          "type": "decimal"
        },
        {
          "name": "clearance",
          "type": "boolean"
        }
      ],
      "partitionKeys": [
        {
          "name": "id"
        }
      ]
    }
    EOF
    )
    
    az cosmosdb cassandra table create \
        --resource-group "<resource-group-name>" \
        --account-name "<account-name>" \
        --keyspace-name "cosmicworks" \
        --name "product" \
        --schema "$schemaJson"
    

Ottenere le credenziali

Ottenere ora la password per la libreria client da usare per creare una connessione all'account creato di recente.

  1. Usare az cosmosdb show per ottenere il punto di contatto e il nome utente per l'account.

    az cosmosdb show \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --query "{username:name,contactPoint:documentEndpoint}"
    
  2. Registrare il valore delle proprietà contactPoint e username dall'output dei comandi precedenti. Questi valori delle proprietà sono il punto di contatto e il nome utente usati più avanti in questa guida per connettersi all'account con la libreria.

  3. Usare az cosmosdb keys list per ottenere le chiavi per l'account.

    az cosmosdb keys list \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --type "keys"
    
  4. Registrare il valore della primaryMasterKey proprietà dall'output dei comandi precedenti. Il valore di questa proprietà è la password usata più avanti in questa guida per connettersi all'account con la libreria.

Preparare l'ambiente di sviluppo

Configurare quindi l'ambiente di sviluppo con un nuovo progetto e la libreria client. Questo passaggio è l'ultimo prerequisito necessario prima di passare al resto di questa guida.

  1. Iniziare in una directory vuota.

  2. Creare un nuovo modulo Go.

    go mod init quickstart
    
  3. Importare il github.com/apache/cassandra-gocql-driver/v2 pacchetto da Go.

    go get github.com/apache/cassandra-gocql-driver/v2
    
  4. Creare il file main.go .

  5. Aggiungere il boilerplate dell'applicazione Go.

    package main
    
    func main() {    
    }
    

    Importante

    I passaggi rimanenti all'interno di questa guida presuppongono che si stia aggiungendo il codice all'interno della main funzione.

Modello a oggetti

Descrizione
Cluster Rappresenta una connessione specifica a un cluster
Session Entità che contengono una connessione specifica a un cluster

Esempi di codice

Autenticare il client

Per iniziare, autenticare il client usando le credenziali raccolte in precedenza in questa guida.

  1. Aprire il file main.go nell'ambiente di sviluppo integrato (IDE).

  2. All'interno della main funzione importare i pacchetti seguenti insieme al github.com/apache/cassandra-gocql-driver/v2 pacchetto:

    • context
    • crypto/tls
    import (
        "context"
        "crypto/tls"
        "github.com/apache/cassandra-gocql-driver/v2"
    )
    
  3. Creare variabili stringa per le credenziali raccolte in precedenza in questa guida. Nomina le variabili username, password e contactPoint.

    username := "<username>"
    password := "<password>"
    contactPoint := "<contact-point>"
    
  4. Configurare un'istanza del PasswordAuthenticator tipo con le credenziali specificate nei passaggi precedenti. Archiviare il risultato in una variabile denominata authentication.

    authentication := gocql.PasswordAuthenticator{
        Username: username,
        Password: password,
    }
    
  5. Configurare un'istanza di SslOptions con una versione minima di Transport Layer Security (TLS) 1.2 e la contactPoint variabile come nome del server di destinazione. Archiviare il risultato in una variabile denominata sslOptions.

    sslOptions := &gocql.SslOptions{
        Config: &tls.Config{
            MinVersion: tls.VersionTLS12,
            ServerName: contactPoint,
        },
    }
    
  6. Creare una nuova specifica del cluster usando NewCluster e la variabile contactPoint.

    cluster := gocql.NewCluster(contactPoint)
    
  7. Configurare l'oggetto specifica del cluster usando le credenziali e le variabili di configurazione create nei passaggi precedenti.

    cluster.SslOpts = sslOptions
    cluster.Authenticator = authentication
    
  8. Configurare il resto dell'oggetto specifica del cluster con questi valori statici.

    cluster.Keyspace = "cosmicworks"
    cluster.Port = 10350
    cluster.ProtoVersion = 4    
    
  9. Creare una nuova sessione che si connette al cluster usando CreateSession.

    session, _ := cluster.CreateSession()
    
  10. Configurare la sessione per richiamare la Close funzione dopo la restituzione della main funzione.

    defer session.Close()
    
  11. Creare un nuovo Background oggetto di contesto e archiviarlo nella ctx variabile .

    ctx := context.Background()
    

Avvertimento

La convalida completa di TLS (Transport Layer Security) è disabilitata in questa guida per semplificare l'autenticazione. Per le distribuzioni di produzione, abilitare completamente la convalida.

Aggiornare o inserire i dati

Eseguire quindi l'operazione di upsert dei nuovi dati in una tabella. L'upserting garantisce che i dati vengano creati o sostituiti in modo appropriato a seconda che nella tabella esistano già gli stessi dati.

  1. Definire un nuovo tipo denominato Product con i campi corrispondenti alla tabella creata in precedenza in questa guida.

    type Product struct {
        id        string
        name      string
        category  string
        quantity  int
        clearance bool
    }
    

    Suggerimento

    In Go è possibile creare questo tipo in un altro file o crearlo alla fine del file esistente.

  2. Creare un nuovo oggetto di tipo Product. Archiviare l'oggetto in una variabile denominata product.

    product := Product {
        id:        "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
        name:      "Yamba Surfboard",
        category:  "gear-surf-surfboards",
        quantity:  12,
        clearance: false,
    }
    
  3. Creare una nuova variabile stringa denominata insertQuery con la query CQL (Cassandra Query Language) per inserire una nuova riga.

    insertQuery := `
        INSERT INTO
            product (id, name, category, quantity, clearance)
        VALUES
            (?, ?, ?, ?, ?)
    `
    
  4. Usare le funzioni di Query e ExecContext per eseguire la query. Passa varie proprietà della variabile product come parametri di query.

    _ = session.Query(
        insertQuery,
        product.id, 
        product.name, 
        product.category, 
        product.quantity, 
        product.clearance,
    ).ExecContext(ctx)
    

Leggere dati

Leggere quindi i dati precedentemente inseriti nella tabella.

  1. Creare una nuova variabile stringa denominata readQuery con una query CQL che corrisponde agli elementi con lo stesso id campo.

    readQuery := `
        SELECT
            id,
            name,
            category,
            quantity,
            clearance
        FROM
            product
        WHERE id = ?
        LIMIT 1
    `
    
  2. Creare una variabile stringa denominata id con lo stesso valore del prodotto creato in precedenza in questa guida.

    id := "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb" 
    
  3. Creare un'altra variabile denominata matchedProduct in cui archiviare il risultato di questa operazione.

    var matchedProduct Product
    
  4. Usare le Queryfunzioni , ConsistencyIterContext, e Scan insieme per trovare il singolo elemento che corrisponde alla query e assegnarne le proprietà alla matchedProduct variabile .

    session.Query(
        readQuery,
        &id,
    ).Consistency(gocql.One).IterContext(ctx).Scan(
        &matchedProduct.id,
        &matchedProduct.name,
        &matchedProduct.category,
        &matchedProduct.quantity,
        &matchedProduct.clearance,
    )
    

Dati di query

Usare infine una query per trovare tutti i dati corrispondenti a un filtro specifico nella tabella.

  1. Creare variabili stringa denominate findQuery e category con la query CQL e il parametro obbligatorio.

    findQuery := `
        SELECT
            id,
            name,
            category,
            quantity,
            clearance
        FROM
            product
        WHERE
            category = ?
        ALLOW FILTERING
    `
    
    category := "gear-surf-surfboards"
    
  2. Usare le funzioni Query, Consistency, IterContext e Scanner insieme per creare uno scanner che possa iterare su più elementi che corrispondono alla query.

    queriedProducts := session.Query(
        findQuery, 
        &category,
    ).Consistency(gocql.All).IterContext(ctx).Scanner()
    
  3. Usare le funzioni Next e Scan per scorrere i risultati della query e assegnare le proprietà di ogni risultato alla variabile interna queriedProduct.

    for queriedProducts.Next() {
        var queriedProduct Product
        queriedProducts.Scan(
            &queriedProduct.id,
            &queriedProduct.name,
            &queriedProduct.category,
            &queriedProduct.quantity,
            &queriedProduct.clearance,
        )
        // Do something here with each result
    }
    

Eseguire il codice

Eseguire l'applicazione appena creata usando un terminale nella directory dell'applicazione.

go run .

Pulire le risorse

Ottenere ora la password per la libreria client da usare per creare una connessione all'account creato di recente.

  1. Usare az cosmosdb show per ottenere il punto di contatto e il nome utente per l'account.

    az cosmosdb show \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --query "{username:name,contactPoint:documentEndpoint}"
    
  2. Registrare il valore delle proprietà contactPoint e username dall'output dei comandi precedenti. Questi valori delle proprietà sono il punto di contatto e il nome utente usati più avanti in questa guida per connettersi all'account con la libreria.

  3. Usare az cosmosdb keys list per ottenere le chiavi per l'account.

    az cosmosdb keys list \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --type "keys"
    
  4. Registrare il valore della primaryMasterKey proprietà dall'output dei comandi precedenti. Il valore di questa proprietà è la password usata più avanti in questa guida per connettersi all'account con la libreria.

Passo successivo