Mulai Cepat: Menggunakan Azure Cosmos DB untuk NoSQL dengan Azure SDK for Go

Dalam panduan cepat ini, Anda menerapkan aplikasi dasar Azure Cosmos DB untuk NoSQL menggunakan Azure SDK for Go. Azure Cosmos DB for NoSQL adalah penyimpanan data tanpa skema yang memungkinkan aplikasi menyimpan data yang tidak terstruktur di cloud. Kueri data dalam kontainer Anda dan lakukan operasi umum pada item individual menggunakan Azure SDK for Go.

Dokumentasi referensi API | Kode sumber pustaka | Paket (Go) | Azure Developer CLI

Prasyarat

  • Azure Developer CLI
  • ** Docker Desktop
  • Go 1.21 atau yang lebih baru

Jika Anda tidak memiliki akun Azure, buat akun gratis sebelum memulai.

Menginisialisasi proyek

Gunakan Azure Developer CLI (azd) untuk membuat azure Cosmos DB untuk akun NoSQL dan menyebarkan aplikasi sampel dalam kontainer. Aplikasi sampel menggunakan pustaka klien untuk mengelola, membuat, membaca, dan mengkueri data sampel.

  1. Buka terminal di direktori kosong.

  2. Jika Anda belum diautentikasi, autentikasi ke Azure Developer CLI menggunakan azd auth login. Ikuti langkah-langkah yang ditentukan oleh alat untuk mengautentikasi ke CLI menggunakan kredensial Azure pilihan Anda.

    azd auth login
    
  3. Gunakan azd init untuk menginisialisasi proyek.

    azd init --template cosmos-db-nosql-go-quickstart
    
  4. Selama inisialisasi, konfigurasikan nama lingkungan yang unik.

  5. Sebarkan akun Azure Cosmos DB menggunakan azd up. Templat Bicep juga mengimplementasikan aplikasi web sampel.

    azd up
    
  6. Selama proses provisi, pilih langganan Anda, lokasi yang diinginkan, dan grup sumber daya target. Tunggu hingga proses provisi selesai. Prosesnya dapat memakan waktu sekitar lima menit.

  7. Setelah provisi sumber daya Azure Anda selesai, URL ke aplikasi web yang sedang berjalan disertakan dalam output.

    Deploying services (azd deploy)
    
      (✓) Done: Deploying service web
    - Endpoint: <https://[container-app-sub-domain].azurecontainerapps.io>
    
    SUCCESS: Your application was provisioned and deployed to Azure in 5 minutes 0 seconds.
    
  8. Gunakan URL di konsol untuk menavigasi ke aplikasi web Anda di browser. Amati output aplikasi yang sedang berjalan.

Cuplikan layar aplikasi web yang sedang berjalan.

Memasang pustaka klien

Pustaka klien tersedia melalui bahasa pemrograman Go, sebagai paket azcosmos.

  1. Buka terminal dan navigasi ke /src folder .

    cd ./src
    
  2. Jika belum diinstal, instal azcosmos paket menggunakan go install.

    go install github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos
    
  3. Selain itu, instal paket azidentity jika paket tersebut belum diinstal.

    go install github.com/Azure/azure-sdk-for-go/sdk/azidentity
    
  4. Buka dan tinjau file src/go.mod untuk memvalidasi bahwa github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos entri dan github.com/Azure/azure-sdk-for-go/sdk/azidentity keduanya ada.

Mengimpor pustaka

Mengimpor paket github.com/Azure/azure-sdk-for-go/sdk/azidentity dan github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos ke dalam kode aplikasi Anda.

import (
	"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
	"github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos"
)

Model objek

Nama Description
CosmosClient Kelas ini adalah kelas klien utama dan digunakan untuk mengelola metadata atau database di seluruh akun.
CosmosDatabase Kelas ini mewakili database dalam akun.
CosmosContainer Kelas ini terutama digunakan untuk melakukan operasi baca, perbarui, dan hapus pada kontainer atau item yang disimpan dalam kontainer.
PartitionKey Kelas ini mewakili kunci partisi logis. Kelas ini diperlukan untuk banyak operasi dan pertanyaan yang umum.

Contoh kode

Kode sampel dalam templat menggunakan database bernama cosmicworks dan kontainer bernama products. Kontainer products berisi detail seperti nama, kategori, kuantitas, pengidentifikasi unik, dan bendera penjualan untuk setiap produk. Kontainer menggunakan /category properti sebagai kunci partisi logis.

Mengautentikasi klien

Sampel ini membuat instans baru dari CosmosClient dengan menggunakan azcosmos.NewClient dan mengautentikasi melalui sebuah instans DefaultAzureCredential.

credential, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
    return err
}

clientOptions := azcosmos.ClientOptions{
    EnableContentResponseOnWrite: true,
}

client, err := azcosmos.NewClient("<azure-cosmos-db-nosql-account-endpoint>", credential, &clientOptions)
if err != nil {
    return err
}

Akses database

Gunakan client.NewDatabase untuk mengambil database yang sudah ada bernama cosmicworks.

database, err := client.NewDatabase("cosmicworks")
if err != nil {
    return err
}

Dapatkan kontainer

Ambil kontainer products yang sudah ada menggunakan database.NewContainer.

container, err := database.NewContainer("products")
if err != nil {
    return err
}

Membuat sebuah item

Buat tipe Go dengan semua anggota yang ingin Anda serialkan ke JSON. Dalam contoh ini, tipe memiliki pengidentifikasi unik, dan kolom untuk kategori, nama, kuantitas, harga, dan penjualan.

type Item struct {
  Id        string  `json:"id"`
  Category  string  `json:"category"`
  Name      string  `json:"name"`
  Quantity  int     `json:"quantity"`
  Price     float32 `json:"price"`
  Clearance bool    `json:"clearance"`
}

Buat item dalam kontainer menggunakan container.UpsertItem. Metode ini secara efektif melakukan "upsert" pada item, menggantinya jika item tersebut sudah ada.

item := Item {
    Id:        "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
    Category:  "gear-surf-surfboards",
    Name:      "Yamba Surfboard",
    Quantity:  12,
    Price:     850.00,
    Clearance: false,
}

partitionKey := azcosmos.NewPartitionKeyString("gear-surf-surfboards")

context := context.TODO()

bytes, err := json.Marshal(item)
if err != nil {
    return err
}

response, err := container.UpsertItem(context, partitionKey, bytes, nil)
if err != nil {
    return err
}

Bacalah sebuah item

Lakukan operasi baca titik dengan menggunakan bidang pengidentifikasi unik (id) dan kunci partisi. Gunakan container.ReadItem untuk mengambil item tertentu secara efisien.

partitionKey := azcosmos.NewPartitionKeyString("gear-surf-surfboards")

context := context.TODO()

itemId := "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb"

response, err := container.ReadItem(context, partitionKey, itemId, nil)
if err != nil {
    return err
}

if response.RawResponse.StatusCode == 200 {
    read_item := Item{}
    err := json.Unmarshal(response.Value, &read_item)
    if err != nil {
        return err
    }
}

Buat kueri item

Lakukan kueri melalui beberapa item dalam kontainer menggunakan container.NewQueryItemsPager. Temukan semua item dalam kategori tertentu menggunakan kueri berparameter ini:

SELECT * FROM products p WHERE p.category = @category
partitionKey := azcosmos.NewPartitionKeyString("gear-surf-surfboards")

query := "SELECT * FROM products p WHERE p.category = @category"

queryOptions := azcosmos.QueryOptions{
    QueryParameters: []azcosmos.QueryParameter{
        {Name: "@category", Value: "gear-surf-surfboards"},
    },
}

pager := container.NewQueryItemsPager(query, partitionKey, &queryOptions)

Uraikan hasil kueri yang dipaginasi dengan mengulangi setiap halaman hasil menggunakan pager.NextPage. Gunakan pager.More untuk menentukan apakah ada hasil yang tersisa di awal setiap perulangan.

items := []Item{}

for pager.More() {
    response, err := pager.NextPage(context.TODO())
    if err != nil {
        return err
    }

    for _, bytes := range response.Items {
        item := Item{}
        err := json.Unmarshal(bytes, &item)
        if err != nil {
            return err
        }
        items = append(items, item)
    }
}

Jelajahi sampel Anda

Gunakan ekstensi Visual Studio Code untuk Azure Cosmos DB untuk menjelajahi data NoSQL Anda. Anda dapat melakukan operasi database inti termasuk, tetapi tidak terbatas pada:

  • Melakukan kueri menggunakan fitur scrapbook atau editor kueri
  • Memodifikasi, memperbarui, membuat, dan menghapus item
  • Mengimpor data massal dari sumber lain
  • Mengelola database dan kontainer

Untuk informasi selengkapnya, lihat Cara menggunakan ekstensi Visual Studio Code untuk menjelajahi Azure Cosmos DB untuk data NoSQL.

Membersihkan sumber daya

Saat Anda tidak lagi memerlukan aplikasi contoh atau sumber daya, hapus penerapan dan semua sumber daya yang terkait.

azd down