Поделиться через


Быстрый старт: Azure Cosmos DB для клиентской библиотеки Apache Cassandra на Go

Начните с клиентской библиотеки для Go для Azure Cosmos DB для Apache Cassandra, чтобы хранить, управлять и запрашивать неструктурированные данные. Выполните действия, описанные в этом руководстве, чтобы создать новую учетную запись, установить клиентская библиотека Go, подключиться к учетной записи, выполнить общие операции и запросить окончательные образцы данных.

Справочная документация по | APIИсходный код | библиотекиПакет (Go)

Предпосылки

  • Последняя версия Azure CLI в Azure Cloud Shell.

    • Если вы предпочитаете локально запускать справочные команды CLI, войдите в Azure CLI с помощью az login команды.
  • Go 1.24 или более поздней версии

Настройка

Сначала настройте учетную запись и среду разработки для этого руководства. В этом разделе описан процесс создания учетной записи, получения учетных данных и подготовки среды разработки.

Создать аккаунт

Сначала создайте API для учетной записи Apache Cassandra. После создания учетной записи создайте пространство ключей и ресурсы для таблицы.

  1. Если у вас еще нет целевой группы ресурсов, используйте az group create команду для создания новой группы ресурсов в подписке.

    az group create \
        --name "<resource-group-name>" \
        --location "<location>"
    
  2. az cosmosdb create Используйте команду для создания новой учетной записи Azure Cosmos DB для Apache Cassandra с параметрами по умолчанию.

    az cosmosdb create \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --locations "regionName=<location>" \
        --capabilities "EnableCassandra"
    
  3. Создайте новое пространство ключей с именем cosmicworks с помощью az cosmosdb cassandra keyspace create.

    az cosmosdb cassandra keyspace create \
        --resource-group "<resource-group-name>" \
        --account-name "<account-name>" \
        --name "cosmicworks"
    
  4. Создайте новый объект JSON для представления схемы с помощью команды Bash с несколькими строками. Затем используйте az cosmosdb cassandra table create команду, чтобы создать новую таблицу с именем 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"
    

Получение учетных данных

Теперь получите пароль для клиентской библиотеки для создания подключения к недавно созданной учетной записи.

  1. Используйте az cosmosdb show, чтобы получить точку контакта и имя пользователя для учетной записи.

    az cosmosdb show \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --query "{username:name,contactPoint:documentEndpoint}"
    
  2. Запишите значение свойств contactPoint и username из вывода предыдущих команд. Эти свойства представляют собой контактную точку и имя пользователя , которое вы используете далее в этом руководстве для подключения к учетной записи с библиотекой.

  3. Используйте az cosmosdb keys list для получения ключей для учетной записи.

    az cosmosdb keys list \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --type "keys"
    
  4. Запишите значение primaryMasterKey свойства из выходных данных предыдущих команд. Это значение свойства — это пароль , который вы используете далее в этом руководстве для подключения к учетной записи с библиотекой.

Подготовка среды разработки

Затем настройте среду разработки с новым проектом и клиентской библиотекой. Этот шаг является последним обязательным предварительным условием, прежде чем перейти к остальной части этого руководства.

  1. Начните в пустом каталоге.

  2. Создайте модуль Go.

    go mod init quickstart
    
  3. github.com/apache/cassandra-gocql-driver/v2 Импортируйте пакет из Go.

    go get github.com/apache/cassandra-gocql-driver/v2
    
  4. Создайте файл main.go .

  5. Добавьте шаблон приложения Go.

    package main
    
    func main() {    
    }
    

    Это важно

    Остальные действия в этом руководстве предполагают, что вы добавляете код в функцию main .

Объектная модель

Описание
Cluster Представляет определенное подключение к кластеру
Session Сущности, которые имеют специальное подключение к кластеру

Примеры кода

Проверка подлинности клиента

Начните с проверки подлинности клиента с помощью учетных данных, собранных ранее в этом руководстве.

  1. Откройте файл main.go в интегрированной среде разработки (IDE).

  2. main В функции импортируйте следующие пакеты вместе с пакетомgithub.com/apache/cassandra-gocql-driver/v2:

    • context
    • crypto/tls
    import (
        "context"
        "crypto/tls"
        "github.com/apache/cassandra-gocql-driver/v2"
    )
    
  3. Создайте строковые переменные для учетных данных, собранных ранее в этом руководстве. Присвойте переменным usernamepasswordи contactPoint.

    username := "<username>"
    password := "<password>"
    contactPoint := "<contact-point>"
    
  4. Настройте экземпляр PasswordAuthenticator типа с учетными данными, указанными на предыдущих шагах. Сохраните результат в переменной под названием authentication.

    authentication := gocql.PasswordAuthenticator{
        Username: username,
        Password: password,
    }
    
  5. Настройте экземпляр SslOptions с минимальной версией протокола Transport Layer Security (TLS) 1.2 и используйте переменную contactPoint в качестве имени серверa назначения. Сохраните результат в переменной под названием sslOptions.

    sslOptions := &gocql.SslOptions{
        Config: &tls.Config{
            MinVersion: tls.VersionTLS12,
            ServerName: contactPoint,
        },
    }
    
  6. Создайте новую спецификацию кластера с помощью NewCluster и переменной contactPoint .

    cluster := gocql.NewCluster(contactPoint)
    
  7. Настройте объект спецификации кластера с помощью учетных данных и переменных конфигурации, созданных на предыдущих шагах.

    cluster.SslOpts = sslOptions
    cluster.Authenticator = authentication
    
  8. Настройте оставшуюся часть объекта спецификации кластера с этими статическими значениями.

    cluster.Keyspace = "cosmicworks"
    cluster.Port = 10350
    cluster.ProtoVersion = 4    
    
  9. Создайте новый сеанс, который подключается к кластеру с помощью CreateSession.

    session, _ := cluster.CreateSession()
    
  10. Настройте сеанс для вызова функции Close после завершения функции main.

    defer session.Close()
    
  11. Создайте объект Background контекста и сохраните его в переменной ctx .

    ctx := context.Background()
    

Предупреждение

Полная проверка уровня транспорта (TLS) отключена в этом руководстве для упрощения проверки подлинности. Для рабочих развертываний полностью включите проверку.

Обновление-вставка данных

Затем переведите новые данные в таблицу. Upserting гарантирует, что данные создаются или заменяются соответствующим образом в зависимости от того, существуют ли те же данные в таблице.

  1. Определите новый тип Product с полями, соответствующими таблице, созданной ранее в этом руководстве.

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

    Подсказка

    В Go вы можете создать этот тип в другом файле или создать его в конце существующего файла.

  2. Создайте новый объект типа Product. Сохраните объект в переменной с именем product.

    product := Product {
        id:        "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
        name:      "Yamba Surfboard",
        category:  "gear-surf-surfboards",
        quantity:  12,
        clearance: false,
    }
    
  3. Создайте новую строковую переменную insertQuery с языковым запросом Cassandra (CQL) для вставки новой строки данных.

    insertQuery := `
        INSERT INTO
            product (id, name, category, quantity, clearance)
        VALUES
            (?, ?, ?, ?, ?)
    `
    
  4. Используйте функции Query и ExecContext для выполнения запроса. Передайте различные свойства переменной product в качестве параметров запроса.

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

Чтение данных

Затем считывайте данные, которые ранее были добавлены в таблицу.

  1. Создайте новую строковую переменную с именем readQuery, содержащую CQL-запрос, который выбирает элементы с тем же полем id.

    readQuery := `
        SELECT
            id,
            name,
            category,
            quantity,
            clearance
        FROM
            product
        WHERE id = ?
        LIMIT 1
    `
    
  2. Создайте строковую переменную id с тем же значением, что и продукт, созданный ранее в этом руководстве.

    id := "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb" 
    
  3. Создайте другую переменную с именем matchedProduct , чтобы сохранить результат этой операции.

    var matchedProduct Product
    
  4. Используйте функции Query, Consistency, IterContext и Scan вместе, чтобы найти один элемент, соответствующий запросу, и назначить его свойства переменной matchedProduct.

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

Запрос данных

Наконец, используйте запрос, чтобы найти все данные, соответствующие определенному фильтру в таблице.

  1. Создайте строковые переменные с именем findQuery и category с помощью запроса CQL и обязательного параметра.

    findQuery := `
        SELECT
            id,
            name,
            category,
            quantity,
            clearance
        FROM
            product
        WHERE
            category = ?
        ALLOW FILTERING
    `
    
    category := "gear-surf-surfboards"
    
  2. Используйте функции Query, Consistency, IterContext, и Scanner вместе для создания сканера, который может выполнять итерацию по нескольким элементам, совпадающим с запросом.

    queriedProducts := session.Query(
        findQuery, 
        &category,
    ).Consistency(gocql.All).IterContext(ctx).Scanner()
    
  3. Next и Scan функции используйте для перебора результатов запроса и присвоения свойств каждого результата внутренней 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
    }
    

Запустите код

Запустите созданное приложение с помощью терминала в каталоге приложения.

go run .

Очистите ресурсы

Теперь получите пароль для клиентской библиотеки для создания подключения к недавно созданной учетной записи.

  1. Используйте az cosmosdb show, чтобы получить точку контакта и имя пользователя для учетной записи.

    az cosmosdb show \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --query "{username:name,contactPoint:documentEndpoint}"
    
  2. Запишите значение свойств contactPoint и username из вывода предыдущих команд. Эти свойства представляют собой контактную точку и имя пользователя , которое вы используете далее в этом руководстве для подключения к учетной записи с библиотекой.

  3. Используйте az cosmosdb keys list для получения ключей для учетной записи.

    az cosmosdb keys list \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --type "keys"
    
  4. Запишите значение primaryMasterKey свойства из выходных данных предыдущих команд. Это значение свойства — это пароль , который вы используете далее в этом руководстве для подключения к учетной записи с библиотекой.

Следующий шаг