Szybki start: tworzenie aplikacji języka Go za pomocą gocql klienta w celu zarządzania danymi usługi Azure Cosmos DB dla bazy danych Apache Cassandra

DOTYCZY: Cassandra

Azure Cosmos DB to wielomodelowa usługa bazy danych, która umożliwia szybkie tworzenie i wykonywanie zapytań dotyczących dokumentów, tabel, klucz-wartość i grafowych baz danych z możliwościami dystrybucji globalnej i skalowania w poziomie. W tym przewodniku Szybki start zaczniesz od utworzenia konta usługi Azure Cosmos DB dla usługi Apache Cassandra. Następnie uruchomisz aplikację Języka Go, aby utworzyć przestrzeń kluczy, tabelę i wykonać kilka operacji. Ta aplikacja języka Go używa języka gocql, który jest klientem Cassandra dla języka Go.

Wymagania wstępne

Tworzenie konta bazy danych

Przed utworzeniem bazy danych należy utworzyć konto Cassandra przy użyciu usługi Azure Cosmos DB.

  1. W menu witryny Azure Portal lub na stronie głównej wybierz pozycję Utwórz zasób.

  2. Na stronie Nowa wyszukaj i wybierz usługę Azure Cosmos DB.

  3. Na stronie Azure Cosmos DB wybierz pozycję Utwórz.

  4. Na stronie interfejsu API wybierz pozycję Utwórz w sekcji Cassandra .

    Interfejs API określa typ konta do utworzenia. Usługa Azure Cosmos DB udostępnia pięć interfejsów API: NoSQL dla baz danych dokumentów, Gremlin dla grafowych baz danych, MongoDB dla baz danych dokumentów, tabel platformy Azure i bazy danych Cassandra. Musisz utworzyć oddzielne konto dla każdego interfejsu API.

    Wybierz pozycję Cassandra, ponieważ w tym przewodniku Szybki start tworzysz tabelę, która współpracuje z interfejsem API dla bazy danych Cassandra.

    Dowiedz się więcej o interfejsie API dla rozwiązania Cassandra.

  5. Na stronie Tworzenie konta usługi Azure Cosmos DB wprowadź podstawowe ustawienia nowego konta usługi Azure Cosmos DB.

    Ustawienie Wartość Opis
    Subskrypcja Twoja subskrypcja Wybierz subskrypcję platformy Azure, której chcesz użyć dla tego konta usługi Azure Cosmos DB.
    Grupa zasobów Tworzenie nowego elementu

    Następnie wprowadź taką samą nazwę jak nazwa konta
    Wybierz pozycjęUtwórz nowy. Następnie wprowadź nową nazwę grupy zasobów dla swojego konta. Dla uproszczenia użyj tej samej nazwy co nazwa konta usługi Azure Cosmos DB.
    Nazwa konta Wprowadź unikatową nazwę Wprowadź unikatową nazwę do identyfikacji konta usługi Azure Cosmos DB. Identyfikator URI konta zostanie cassandra.cosmos.azure.com dołączony do unikatowej nazwy konta.

    Nazwa konta może używać tylko małych liter, cyfr i łączników (-) i musi zawierać od 3 do 31 znaków.
    Lokalizacja Region najbliżej Twoich użytkowników Wybierz lokalizację geograficzną, w której będzie hostowane konto usługi Azure Cosmos DB. Użyj lokalizacji znajdującej się najbliżej Twoich użytkowników, aby zapewnić im najszybszy dostęp do danych.
    Tryb wydajności Aprowizowana przepływność lub bezserwerowa Wybierz pozycję Aprowizowana przepływność , aby utworzyć konto w trybie aprowizowanej przepływności . Wybierz pozycję Bezserwerowa , aby utworzyć konto w trybie bezserwerowym .
    Stosowanie rabatu za bezpłatną warstwę usługi Azure Cosmos DB Zastosuj lub nie zastosuj W warstwie Bezpłatna usługi Azure Cosmos DB uzyskasz pierwsze 1000 RU/s i 25 GB miejsca do magazynowania bezpłatnie na koncie. Dowiedz się więcej o warstwie Bezpłatna.
    Ograniczanie całkowitej przepływności konta Wybierz, aby ograniczyć przepływność konta Jest to przydatne, jeśli chcesz ograniczyć całkowitą przepływność konta do określonej wartości.

    Uwaga

    W ramach jednej subskrypcji platformy Azure można korzystać z maksymalnie jednego konta usługi Azure Cosmos DB w warstwie Bezpłatna. Tę opcję należy wybrać podczas tworzenia konta. Jeśli opcja zastosowania rabatu na podstawie warstwy Bezpłatna nie jest widoczna, inne konto w subskrypcji już korzysta z warstwy Bezpłatna.

    Nowa strona konta usługi Azure Cosmos DB dla bazy danych Apache Cassandra

  6. Na karcie Dystrybucja globalna skonfiguruj następujące szczegóły. Wartości domyślne można pozostawić na potrzeby tego przewodnika Szybki start:

    Ustawienie Wartość Opis
    Nadmiarowość geograficzna Wyłącz Włącz lub wyłącz dystrybucję globalną na koncie, łącząc region z regionem pary. Możesz dodać więcej regionów do konta później.
    Moduły zapisujące obsługujące wiele regionów Wyłącz Funkcja zapisu w wielu regionach umożliwia wykorzystanie aprowizowanej przepływności dla baz danych i kontenerów na całym świecie.
    Strefy dostępności Wyłącz Strefy dostępności są izolowanymi lokalizacjami w regionie świadczenia usługi Azure. Każda strefa składa się z co najmniej jednego centrum danych wyposażonego w niezależne zasilanie, chłodzenie i sieć.

    Uwaga

    Następujące opcje nie są dostępne, jeśli wybierzesz opcję Bezserwerowy jako tryb pojemności:

    • Zastosuj rabat na podstawie warstwy Bezpłatna
    • Nadmiarowość geograficzna
    • Moduły zapisujące obsługujące wiele regionów
  7. Opcjonalnie możesz skonfigurować dodatkowe szczegóły na następujących kartach:

  8. Wybierz pozycję Przejrzyj i utwórz.

  9. Przejrzyj ustawienia konta, a następnie wybierz pozycję Utwórz. Utworzenie konta trwa kilka minut. Poczekaj na wyświetlenie komunikatu Wdrożenie zostało ukończone na stronie portalu.

    Okienko Powiadomienia w witrynie Azure Portal

  10. Wybierz pozycję Przejdź do zasobu, aby przejść do strony konta usługi Azure Cosmos DB.

Klonowanie przykładowej aplikacji

Rozpocznij od sklonowania aplikacji z usługi GitHub.

  1. Otwórz wiersz polecenia i utwórz nowy folder o nazwie git-samples.

    md "C:\git-samples"
    
  2. Otwórz okno terminalu usługi Git, na przykład git bash. cd Użyj polecenia , aby przejść do nowego folderu i zainstalować przykładową aplikację.

    cd "C:\git-samples"
    
  3. Uruchom następujące polecenie w celu sklonowania przykładowego repozytorium. To polecenie tworzy kopię aplikacji przykładowej na komputerze.

    git clone https://github.com/Azure-Samples/azure-cosmos-db-cassandra-go-getting-started.git
    

Przeglądanie kodu

Ta czynność jest opcjonalna. Jeśli chcesz dowiedzieć się, jak kod tworzy zasoby bazy danych, możesz przejrzeć następujące fragmenty kodu. W przeciwnym razie możesz przejść do sekcji Uruchamianie aplikacji

Funkcja GetSession (część utils\utils.go) zwraca element *gocql.Session używany do wykonywania operacji klastra, takich jak wstawianie, znajdowanie itp.

func GetSession(cosmosCassandraContactPoint, cosmosCassandraPort, cosmosCassandraUser, cosmosCassandraPassword string) *gocql.Session {
    clusterConfig := gocql.NewCluster(cosmosCassandraContactPoint)
    port, err := strconv.Atoi(cosmosCassandraPort)
    
    clusterConfig.Authenticator = gocql.PasswordAuthenticator{Username: cosmosCassandraUser, Password: cosmosCassandraPassword}
    clusterConfig.Port = port
    clusterConfig.SslOpts = &gocql.SslOptions{Config: &tls.Config{MinVersion: tls.VersionTLS12}}
    clusterConfig.ProtoVersion = 4
    
    session, err := clusterConfig.CreateSession()
    ...
    return session
}

Host Cassandra usługi Azure Cosmos DB jest przekazywany do gocql.NewCluster funkcji w celu uzyskania struktury skonfigurowanej *gocql.ClusterConfig do używania nazwy użytkownika, hasła, portu i odpowiedniej wersji protokołu TLS (wymaganie dotyczące zabezpieczeń protokołu HTTPS/SSL/TLS)

Funkcja GetSession jest następnie wywoływana main z funkcji (main.go).

func main() {
    session := utils.GetSession(cosmosCassandraContactPoint, cosmosCassandraPort, cosmosCassandraUser, cosmosCassandraPassword)
    defer session.Close()
    ...
}

Informacje o łączności i poświadczenia są akceptowane w postaci zmiennych środowiskowych (rozwiązanych w metodzie init )

func init() {
    cosmosCassandraContactPoint = os.Getenv("COSMOSDB_CASSANDRA_CONTACT_POINT")
    cosmosCassandraPort = os.Getenv("COSMOSDB_CASSANDRA_PORT")
    cosmosCassandraUser = os.Getenv("COSMOSDB_CASSANDRA_USER")
    cosmosCassandraPassword = os.Getenv("COSMOSDB_CASSANDRA_PASSWORD")

    if cosmosCassandraContactPoint == "" || cosmosCassandraUser == "" || cosmosCassandraPassword == "" {
        log.Fatal("missing mandatory environment variables")
    }
}

Następnie służy do wykonywania różnych operacji (część ) w usłudze operations\setup.goAzure Cosmos DB, począwszy od keyspace i table tworzenia.

Jak sugeruje nazwa, funkcja spada keyspace tylko wtedy, DropKeySpaceIfExists gdy istnieje.

const dropKeyspace = "DROP KEYSPACE IF EXISTS %s"

func DropKeySpaceIfExists(keyspace string, session *gocql.Session) {
    err := utils.ExecuteQuery(fmt.Sprintf(dropKeyspace, keyspace), session)
    if err != nil {
        log.Fatal("Failed to drop keyspace", err)
    }
    log.Println("Keyspace dropped")
}

CreateKeySpace funkcja jest używana do tworzenia elementu keyspace (user_profile)

const createKeyspace = "CREATE KEYSPACE %s WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'datacenter1' : 1 }"

func CreateKeySpace(keyspace string, session *gocql.Session) {
    err := utils.ExecuteQuery(fmt.Sprintf(createKeyspace, keyspace), session)
    if err != nil {
        log.Fatal("Failed to create keyspace", err)
    }
    log.Println("Keyspace created")
}

Następnie następuje utworzenie tabeli (user), która jest zajęta funkcją CreateUserTable

const createTable = "CREATE TABLE %s.%s (user_id int PRIMARY KEY, user_name text, user_bcity text)"

func CreateUserTable(keyspace, table string, session *gocql.Session) {
    err := session.Query(fmt.Sprintf(createTable, keyspace, table)).Exec()
    if err != nil {
        log.Fatal("failed to create table ", err)
    }
    log.Println("Table created")
}

Po utworzeniu przestrzeni kluczy i tabeli wywołujemy operacje CRUD (część operations\crud.go).

InsertUser służy do tworzenia elementu User. Ustawia informacje o użytkowniku (identyfikator, nazwę i miasto) jako argumenty zapytania przy użyciu polecenia Bind

const createQuery = "INSERT INTO %s.%s (user_id, user_name , user_bcity) VALUES (?,?,?)"

func InsertUser(keyspace, table string, session *gocql.Session, user model.User) {
    err := session.Query(fmt.Sprintf(createQuery, keyspace, table)).Bind(user.ID, user.Name, user.City).Exec()
    if err != nil {
        log.Fatal("Failed to create user", err)
    }
    log.Println("User created")
}

FindUser element służy do wyszukiwania użytkownika (model\user.go) przy użyciu określonego identyfikatora użytkownika, podczas gdy Scan wiąże atrybuty użytkownika (zwracane przez system Cassandra) do poszczególnych zmiennych (userid, name, city) — jest to tylko jeden ze sposobów, w jaki można użyć wyniku uzyskanego jako wynik zapytania wyszukiwania

const selectQuery = "SELECT * FROM %s.%s where user_id = ?"

func FindUser(keyspace, table string, id int, session *gocql.Session) model.User {
    var userid int
    var name, city string
    err := session.Query(fmt.Sprintf(selectQuery, keyspace, table)).Bind(id).Scan(&userid, &name, &city)

    if err != nil {
        if err == gocql.ErrNotFound {
            log.Printf("User with id %v does not exist\n", id)
        } else {
            log.Printf("Failed to find user with id %v - %v\n", id, err)
        }
    }
    return model.User{ID: userid, Name: name, City: city}
}

FindAllUsers służy do pobierania wszystkich użytkowników. SliceMap jest używany jako skrót, aby uzyskać wszystkie informacje użytkownika w postaci wycinka maps. Każdy z nich map należy traktować jako pary klucz-wartość, user_idw których nazwa kolumny (na przykład ) jest kluczem wraz z odpowiednią wartością.

const findAllUsersQuery = "SELECT * FROM %s.%s"

func FindAllUsers(keyspace, table string, session *gocql.Session) []model.User {
    var users []model.User
    results, _ := session.Query(fmt.Sprintf(findAllUsersQuery, keyspace, table)).Iter().SliceMap()

    for _, u := range results {
        users = append(users, mapToUser(u))
    }
    return users
}

Każda map z informacji o użytkowniku jest konwertowana na User funkcję using mapToUser , która po prostu wyodrębnia wartość z odpowiedniej kolumny i używa jej do utworzenia wystąpienia User struktury

func mapToUser(m map[string]interface{}) model.User {
    id, _ := m["user_id"].(int)
    name, _ := m["user_name"].(string)
    city, _ := m["user_bcity"].(string)

    return model.User{ID: id, Name: name, City: city}
}

Uruchamianie aplikacji

Jak wspomniano wcześniej, aplikacja akceptuje łączność i poświadczenia w postaci zmiennych środowiskowych.

  1. Na koncie usługi Azure Cosmos DB w Azure Portal wybierz pozycję Parametry połączenia.

    Wyświetlanie i kopiowanie szczegółów ze strony Parametry połączenia w Azure Portal

Skopiuj wartości następujących atrybutów (CONTACT POINT, PORTi USERNAMEPRIMARY PASSWORD) i ustaw je na odpowiednie zmienne środowiskowe

set COSMOSDB_CASSANDRA_CONTACT_POINT=<value for "CONTACT POINT">
set COSMOSDB_CASSANDRA_PORT=<value for "PORT">
set COSMOSDB_CASSANDRA_USER=<value for "USERNAME">
set COSMOSDB_CASSANDRA_PASSWORD=<value for "PRIMARY PASSWORD">

W oknie terminalu przejdź do poprawnego folderu. Na przykład:

cd "C:\git-samples\azure-cosmosdb-cassandra-go-getting-started"
  1. W terminalu uruchom następujące polecenie, aby uruchomić aplikację.
go run main.go
  1. W oknie terminalu są wyświetlane powiadomienia dotyczące różnych operacji, takich jak przestrzeń kluczy i konfiguracja tabeli, tworzenie użytkownika itp.

  2. W witrynie Azure Portal otwórz Eksploratora danych, aby wykonywać zapytania oraz modyfikować te nowe dane i pracować z nimi.

    Wyświetlanie danych w usłudze Data Explorer — Azure Cosmos DB

Przeglądanie umów SLA w witrynie Azure Portal

Azure Portal monitoruje przepływność konta usługi Azure Cosmos DB, magazyn, dostępność, opóźnienie i spójność. Wykresy metryk skojarzonych z umową dotyczącą poziomu usług (SLA) usługi Azure Cosmos DB pokazują wartość umowy SLA w porównaniu z rzeczywistą wydajnością. Ten zestaw metryk sprawia, że monitorowanie umów SLA jest przezroczyste.

Aby przejrzeć metryki i umowy SLA:

  1. Wybierz pozycję Metryki w menu nawigacji konta usługi Azure Cosmos DB.

  2. Wybierz kartę, taką jak opóźnienie, i wybierz przedział czasu po prawej stronie. Porównaj linie rzeczywiste i umowy SLA na wykresach.

    Zestaw metryk w usłudze Azure Cosmos DB

  3. Przejrzyj metryki na innych kartach.

Czyszczenie zasobów

Po zakończeniu pracy z aplikacją i kontem usługi Azure Cosmos DB możesz usunąć utworzone zasoby platformy Azure, aby nie ponosić dodatkowych opłat. Aby usunąć zasoby:

  1. Na pasku wyszukiwania Azure Portal wyszukaj i wybierz pozycję Grupy zasobów.

  2. Z listy wybierz grupę zasobów utworzoną na potrzeby tego przewodnika Szybki start.

    Wybierz grupę zasobów do usunięcia

  3. Na stronie Przegląd grupy zasobów wybierz pozycję Usuń grupę zasobów.

    Usuwanie grupy zasobów

  4. W następnym oknie wprowadź nazwę grupy zasobów do usunięcia, a następnie wybierz pozycję Usuń.

Następne kroki

W tym przewodniku Szybki start przedstawiono sposób tworzenia konta usługi Azure Cosmos DB za pomocą interfejsu API dla bazy danych Cassandra oraz uruchamiania aplikacji Języka Go, która tworzy bazę danych i kontener Cassandra. Teraz możesz zaimportować dodatkowe dane do konta usługi Azure Cosmos DB.