hızlı başlangıç: bir Go uygulamasını Azure Cosmos DB mongodb için apı 'sine Bağlan

Uygulama hedefı: MongoDB için Azure Cosmos DB API

Azure Cosmos DB, genel dağıtım ve yatay ölçeklendirme özellikleri ile belge, tablo, anahtar değer ve grafik veritabanlarını hızlıca oluşturmanıza ve sorgulamanızı sağlayan çok modelli bir veritabanı hizmetidir. bu hızlı başlangıçta, Azure Cloud Shell kullanarak Azure Cosmos DB bir hesap oluşturup yönetirsiniz, var olan bir örnek uygulamayı GitHub kopyalayıp Azure Cosmos DB ile çalışacak şekilde yapılandıracaksınız.

Örnek uygulama, go 'da yazılmış bir komut satırı tabanlı todo yönetim aracıdır. mongodb için Azure Cosmos DB apı 'si, mongodb kablo protokolüyle uyumludurve bu, herhangi bir mongodb istemci sürücüsünün bu sunucuya bağlanmasını mümkün hale getirir. bu uygulama, mongodb için Go sürücüsünü , verilerin bir Azure Cosmos DB veritabanında depolandığı uygulamaya saydam bir şekilde kullanır.

Önkoşullar

  • Azure Cloud Shell'Da Bash ortamını kullanın.

    Cloud Shell’i yeni bir pencerede başlatma

  • Dilerseniz CLI başvuru komutlarını çalıştırmak için Azure CLI’yi yükleyebilirsiniz.

    • Yerel yükleme kullanıyorsanız az login komutunu kullanarak Azure CLI ile oturum açın. Kimlik doğrulama işlemini tamamlamak için terminalinizde görüntülenen adımları izleyin. Ek oturum açma seçenekleri için bkz. Azure CLI ile oturum açma.

    • İstendiğinde, ilk kullanımda Azure CLI uzantılarını yükleyin. Uzantılar hakkında daha fazla bilgi için bkz. Azure CLI ile uzantıları kullanma.

    • Yüklü sürümü ve bağımlı kitaplıkları bulmak için az version komutunu çalıştırın. En son sürüme yükseltmek için az upgrade komutunu çalıştırın.

Örnek uygulamayı kopyalama

Örnek depoyu kopyalamak için aşağıdaki komutları çalıştırın.

  1. Bir komut istemi açın, adlı yeni bir klasör oluşturun git-samples ve ardından komut istemi ' ni kapatın.

    mkdir "C:\git-samples"
    
  2. Git Bash gibi bir Git terminal penceresi açın ve örnek uygulamayı yüklemek üzere yeni bir klasör olarak değiştirmek için cd komutunu kullanın.

    cd "C:\git-samples"
    
  3. Örnek depoyu kopyalamak için aşağıdaki komutu çalıştırın. Bu komut bilgisayarınızda örnek uygulamanın bir kopyasını oluşturur.

    git clone https://github.com/Azure-Samples/cosmosdb-go-mongodb-quickstart
    

Kodu gözden geçirin

Bu adım isteğe bağlıdır. Uygulamanın nasıl çalıştığını öğrenmek istiyorsanız aşağıdaki kod parçacıklarını gözden geçirebilirsiniz. Aksi takdirde, Uygulamayı çalıştırmayadevam edebilirsiniz. Uygulama düzeni aşağıdaki gibidir:

.
├── go.mod
├── go.sum
└── todo.go

Aşağıdaki kod parçacıklarının tümü todo.go dosyasından alınmıştır.

Azure Cosmos DB’yi kullanarak Go uygulamasına bağlanma

clientOptionsbir ortam değişkeni kullanılarak geçirilen Azure Cosmos DB için bağlantı dizesini kapsüller (yaklaşan bölümde ayrıntılar). Bağlantı, mongo.NewClient clientOptions Örneğin geçirildiği kullanılarak başlatılır. başarılı bağlantıyı onaylamak için Ping işlev çağrıldı (başarısız-hızlı bir stratejidir)

    ctx, cancel := context.WithTimeout(context.Background(), time.Second*10)
    defer cancel()

    clientOptions := options.Client().ApplyURI(mongoDBConnectionString).SetDirect(true)
    
    c, err := mongo.NewClient(clientOptions)
    err = c.Connect(ctx)
    if err != nil {
        log.Fatalf("unable to initialize connection %v", err)
    }

    err = c.Ping(ctx, nil)
    if err != nil {
        log.Fatalf("unable to connect %v", err)
    }

Not

Yapılandırmanın kullanılması SetDirect(true) önemlidir, ancak şu bağlantı hatasını alırsınız: unable to connect connection(cdb-ms-prod-<azure-region>-cm1.documents.azure.com:10255[-4]) connection is closed

Öğe oluşturma todo

Oluşturmak için todo , bir ' a yönelik bir tanıtıcı alır mongo.Collection ve işlevini çağırır InsertOne .

func create(desc string) {
    c := connect()
    ctx := context.Background()
    defer c.Disconnect(ctx)

    todoCollection := c.Database(database).Collection(collection)
    r, err := todoCollection.InsertOne(ctx, Todo{Description: desc, Status: statusPending})
    if err != nil {
        log.Fatalf("failed to add todo %v", err)
    }

TodoAçıklamayı ve durumu içeren bir struct (başlangıçta olarak ayarlanır pending )

type Todo struct {
    ID          primitive.ObjectID `bson:"_id,omitempty"`
    Description string             `bson:"description"`
    Status      string             `bson:"status"`
}

Liste todo öğeleri

Ölçütlere göre TODOs listeliyoruz. bson.DFiltre ölçütlerini kapsüllemek için bir oluşturulur

func list(status string) {
    .....
    var filter interface{}
    switch status {
    case listAllCriteria:
        filter = bson.D{}
    case statusCompleted:
        filter = bson.D{{statusAttribute, statusCompleted}}
    case statusPending:
        filter = bson.D{{statusAttribute, statusPending}}
    default:
        log.Fatal("invalid criteria for listing todo(s)")
    }

Find , filtre temelinde belge aramak için kullanılır ve sonuç bir dilime dönüştürülür Todo

    todoCollection := c.Database(database).Collection(collection)
    rs, err := todoCollection.Find(ctx, filter)
    if err != nil {
        log.Fatalf("failed to list todo(s) %v", err)
    }
    var todos []Todo
    err = rs.All(ctx, &todos)
    if err != nil {
        log.Fatalf("failed to list todo(s) %v", err)
    }

Son olarak, bilgiler tablolu biçimde işlenir

    todoTable := [][]string{}

    for _, todo := range todos {
        s, _ := todo.ID.MarshalJSON()
        todoTable = append(todoTable, []string{string(s), todo.Description, todo.Status})
    }

    table := tablewriter.NewWriter(os.Stdout)
    table.SetHeader([]string{"ID", "Description", "Status"})

    for _, v := range todoTable {
        table.Append(v)
    }
    table.Render()

Öğe güncelleştirme todo

todo, ' A göre güncelleştirilebilen olabilir _id . bson.D _id Bu durumda yeni bir durum (veya) olan güncelleştirilmiş bilgiler için bir filtre oluşturulur completed pending . Son olarak, UpdateOne işlev filtreyle ve güncelleştirilmiş belgeyle çağrılır

func update(todoid, newStatus string) {
....
    todoCollection := c.Database(database).Collection(collection)
    oid, err := primitive.ObjectIDFromHex(todoid)
    if err != nil {
        log.Fatalf("failed to update todo %v", err)
    }
    filter := bson.D{{"_id", oid}}
    update := bson.D{{"$set", bson.D{{statusAttribute, newStatus}}}}
    _, err = todoCollection.UpdateOne(ctx, filter, update)
    if err != nil {
        log.Fatalf("failed to update todo %v", err)
    }

Sil todo

, Öğesine todo göre silinir _id ve bir örnek biçiminde kapsüllenir bson.D . DeleteOne belgeyi silmek için çağrılır.

func delete(todoid string) {
....
    todoCollection := c.Database(database).Collection(collection)
    oid, err := primitive.ObjectIDFromHex(todoid)
    if err != nil {
        log.Fatalf("invalid todo ID %v", err)
    }
    filter := bson.D{{"_id", oid}}
    _, err = todoCollection.DeleteOne(ctx, filter)
    if err != nil {
        log.Fatalf("failed to delete todo %v", err)
    }
}

Uygulama oluşturma

Uygulamayı Klonladığınız dizine değiştirin ve oluşturun (kullanarak go build ).

cd monogdb-go-quickstart
go build -o todo

Uygulamanın düzgün şekilde oluşturulduğunu doğrulamak için.

./todo --help

kurulum Azure Cosmos DB

Azure'da oturum açma

CLI'yi yerel olarak yükleyip kullanmayı tercih ederseniz bu konu başlığı için Azure CLI 2.0 veya sonraki bir sürümünü kullanmanız gerekir. Sürümü bulmak için az --version komutunu çalıştırın. Yüklemeniz veya yükseltmeniz gerekirse, bkz. [Azure CLı 'yı yüklemek].

Yüklü bir Azure CLı kullanıyorsanız, az Login komutuyla Azure aboneliğinizde oturum açın ve ekrandaki yönergeleri izleyin. Azure Cloud Shell'i kullanıyorsanız bu adımı atlayabilirsiniz.

az login 

Azure Cosmos DB modülü ekleme

Yüklenen bir Azure CLI kullanıyorsanız az komutunu çalıştırarak cosmosdb bileşeninin zaten yüklü olup olmadığını kontrol edin. cosmosdb, temel komutlar listesindeyse bir sonraki komuta geçin. Azure Cloud Shell'i kullanıyorsanız bu adımı atlayabilirsiniz.

cosmosdb, temel komutlar listesinde değilse Azure CLI'yi yeniden yükleyin.

Kaynak grubu oluşturma

Az Group Createile bir kaynak grubu oluşturun. Azure kaynak grubu; web uygulamaları, veritabanları ve depolama hesapları gibi Azure kaynaklarının dağıtıldığı ve yönetildiği bir mantıksal kapsayıcıdır.

Aşağıdaki örnekte Batı Avrupa bölgesinde bir kaynak grubu oluşturulmaktadır. Kaynak grubu için benzersiz bir ad seçin.

Azure Cloud Shell kullanıyorsanız, deneyin' i seçin, oturum açmak için ekrandaki istemleri izleyin, sonra komutu komut istemine kopyalayın.

az group create --name myResourceGroup --location "West Europe"

Azure Cosmos DB hesabı oluşturma

az cosmosdb create komutuyla bir Cosmos hesabı oluşturun.

aşağıdaki komutta, lütfen yer tutucuyu gördüğünüz benzersiz Cosmos hesabınızın adını yerine koyun <cosmosdb-name> . bu benzersiz ad, Cosmos DB uç noktanızın bir parçası olarak kullanılır. bu https://<cosmosdb-name>.documents.azure.com/ nedenle, adın Azure 'daki tüm Cosmos hesaplarında benzersiz olması gerekir.

az cosmosdb create --name <cosmosdb-name> --resource-group myResourceGroup --kind MongoDB

--kind MongoDB parametresi MongoDB istemci bağlantılarını etkinleştirir.

Azure Cosmos DB hesabı oluşturulduğunda Azure CLI, aşağıdaki örneğe benzer bilgiler gösterir.

Not

Bu örnek, varsayılan Azure CLI çıktı biçimi olarak JSON kullanır. Başka bir çıktı biçimi kullanmak için bkz. Azure CLI komutları için çıktı biçimleri.

{
  "databaseAccountOfferType": "Standard",
  "documentEndpoint": "https://<cosmosdb-name>.documents.azure.com:443/",
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Document
DB/databaseAccounts/<cosmosdb-name>",
  "kind": "MongoDB",
  "location": "West Europe",
  "name": "<cosmosdb-name>",
  "readLocations": [
    {
      "documentEndpoint": "https://<cosmosdb-name>-westeurope.documents.azure.com:443/",
      "failoverPriority": 0,
      "id": "<cosmosdb-name>-westeurope",
      "locationName": "West Europe",
      "provisioningState": "Succeeded"
    }
  ],
  "resourceGroup": "myResourceGroup",
  "type": "Microsoft.DocumentDB/databaseAccounts",
  "writeLocations": [
    {
      "documentEndpoint": "https://<cosmosdb-name>-westeurope.documents.azure.com:443/",
      "failoverPriority": 0,
      "id": "<cosmosdb-name>-westeurope",
      "locationName": "West Europe",
      "provisioningState": "Succeeded"
    }
  ]
} 

Veritabanı anahtarını alma

Cosmos veritabanına bağlanmak için veritabanı anahtarına ihtiyacınız vardır. Birincil anahtarı almak için az cosmosdb Keys List komutunu kullanın.

az cosmosdb keys list --name <cosmosdb-name> --resource-group myResourceGroup --query "primaryMasterKey"

Azure CLI aşağıdaki örneğe benzer bilgiler çıkarır.

"RUayjYjixJDWG5xTqIiXjC..."

Uygulamayı yapılandırma

Bağlantı dizesini, MongoDB veritabanını ve koleksiyon adlarını ortam değişkenleri olarak dışa aktarın.

export MONGODB_CONNECTION_STRING="mongodb://<COSMOSDB_ACCOUNT_NAME>:<COSMOSDB_PASSWORD>@<COSMOSDB_ACCOUNT_NAME>.documents.azure.com:10255/?ssl=true&replicaSet=globaldb&maxIdleTimeMS=120000&appName=@<COSMOSDB_ACCOUNT_NAME>@"

Not

ssl=trueCosmos DB gereksinimler nedeniyle bu seçenek önemlidir. Daha fazla bilgi için bkz. bağlantı dizesi gereksinimleri.

MONGODB_CONNECTION_STRINGOrtam değişkeni için, ve için yer tutucuları değiştirin <COSMOSDB_ACCOUNT_NAME>``<COSMOSDB_PASSWORD>

  1. <COSMOSDB_ACCOUNT_NAME>: oluşturduğunuz Azure Cosmos DB hesabının adı
  2. <COSMOSDB_PASSWORD>: Önceki adımda ayıklanan veritabanı anahtarı
export MONGODB_DATABASE=todo-db
export MONGODB_COLLECTION=todos

Ve için tercih ettiğiniz değerleri seçebilir MONGODB_DATABASE MONGODB_COLLECTION veya olduğu gibi bırakabilirsiniz.

Uygulamayı çalıştırma

Oluşturmak için todo

./todo --create "Create an Azure Cosmos DB database account"

Başarılı olursa, yeni oluşturulan belgenin MongoDB ile bir çıktı görmeniz gerekir _id :

added todo ObjectID("5e9fd6befd2f076d1f03bd8a")

Başka bir oluştur todo

./todo --create "Get the MongoDB connection string using the Azure CLI"

Tüm öğeleri Listele todo

./todo --list all

Yeni ekledikleriniz gibi tablolu bir biçimde eklemiş olduklarınızı görmeniz gerekir.

+----------------------------+--------------------------------+-----------+
|             ID             |          DESCRIPTION           |  STATUS   |
+----------------------------+--------------------------------+-----------+
| "5e9fd6b1bcd2fa6bd267d4c4" | Create an Azure Cosmos DB      | pending   |
|                            | database account               |           |
| "5e9fd6befd2f076d1f03bd8a" | Get the MongoDB connection     | pending   |
|                            | string using the Azure CLI     |           |
+----------------------------+--------------------------------+-----------+

Bir a 'nın durumunu güncelleştirmek için todo (ör. completed durumu durum olarak değiştirin), kimliği kullanın todo

./todo --update 5e9fd6b1bcd2fa6bd267d4c4,completed

Yalnızca tamamlanan öğeleri Listele todo

./todo --list completed

Güncelleştirdiğiniz bir tane görmeniz gerekir

+----------------------------+--------------------------------+-----------+
|             ID             |          DESCRIPTION           |  STATUS   |
+----------------------------+--------------------------------+-----------+
| "5e9fd6b1bcd2fa6bd267d4c4" | Create an Azure Cosmos DB      | completed |
|                            | database account               |           |
+----------------------------+--------------------------------+-----------+

Veri Gezgini’nde verileri görüntüleme

Azure Cosmos DB depolanan veriler, Azure portal görüntülemek ve sorgulamak için kullanılabilir.

Önceki adımda oluşturulan verileri görüntülemek, sorgulamak ve üzerinde çalışmak için web tarayıcınızda Azure portalı oturumunu açın.

üst arama kutusuna Azure Cosmos DB girin. Cosmos hesabı dikey penceresi açıldığında Cosmos hesabınızı seçin. Sol gezinti bölmesinde Veri Gezgini' yi seçin. Koleksiyonlar bölmesinde koleksiyonunuzu genişletin; bundan sonra koleksiyondaki belgeleri görüntüleyebilir, verileri sorgulayabilir ve hatta saklı yordam, tetikleyici ve UDF’ler oluşturup çalıştırabilirsiniz.

Yeni oluşturulan belgeyi görüntüleyen Veri Gezgini

KIMLIĞI kullanarak bir öğesini silme todo

./todo --delete 5e9fd6b1bcd2fa6bd267d4c4,completed

todoOnaylanacak öğeleri listeleyin

./todo --list all

todoYeni sildiğiniz yer bulunmamalıdır

+----------------------------+--------------------------------+-----------+
|             ID             |          DESCRIPTION           |  STATUS   |
+----------------------------+--------------------------------+-----------+
| "5e9fd6befd2f076d1f03bd8a" | Get the MongoDB connection     | pending   |
|                            | string using the Azure CLI     |           |
+----------------------------+--------------------------------+-----------+

Kaynakları temizleme

Uygulama ve hesap hesabınızla Azure Cosmos DB, daha fazla ücret ödemeden oluşturduğunuz Azure kaynaklarını silebilirsiniz. Kaynakları silmek için:

  1. Arama Azure portal kaynak grupları için arama ve seçimlerini kullanın.

  2. Listeden bu hızlı başlangıç için oluşturduğunuz kaynak grubunu seçin.

    Silinecek kaynak grubunu seçin

  3. Kaynak grubunun Genel Bakış sayfasında Kaynak grubunu sil'i seçin.

    Kaynak grubunu silme

  4. Sonraki pencerede, silinecek kaynak grubunun adını girin ve Sil'i seçin.

Sonraki adımlar

bu hızlı başlangıçta, Azure Cloud Shell kullanarak bir Azure Cosmos DB mongodb apı hesabı oluşturmayı ve yönetmek için bir Go komut satırı uygulaması oluşturmayı ve çalıştırmayı öğrendiniz todo . Şimdi Azure Cosmos DB hesabınıza ek veriler aktarabilirsiniz.

Azure Cosmos DB bir geçişe yönelik kapasite planlaması yapılmaya çalışılıyor musunuz? Kapasite planlaması için mevcut veritabanı kümeniz hakkında bilgi kullanabilirsiniz.