Hızlı Başlangıç: MongoDB için Azure Cosmos DB'ye go uygulaması Bağlan

ŞUNLAR IÇIN GEÇERLIDIR: MongoDB

Azure Cosmos DB, genel dağıtım ve yatay ölçek özellikleriyle belge, tablo, anahtar-değer ve grafik veritabanlarını hızlı bir şekilde oluşturup sorgulamanıza olanak tanıyan çok modelli bir veritabanı hizmetidir. Bu hızlı başlangıçta, Azure Cloud Shell'i kullanarak bir Azure Cosmos DB hesabı oluşturup yönetecek, GitHub'dan mevcut bir örnek uygulamayı kopyalayıp Azure Cosmos DB ile çalışacak şekilde yapılandıracaksınız.

Örnek uygulama, Go ile yazılmış bir komut satırı tabanlı todo yönetim aracıdır. MongoDB için Azure Cosmos DB API'sinin MongoDB kablo protokolüyle uyumlu olması, herhangi bir MongoDB istemci sürücüsünün ona bağlanmasını mümkün hale getirir. Bu uygulama MongoDB için Go sürücüsünü, verilerin Azure Cosmos DB veritabanında depolandığı uygulama için saydam bir şekilde kullanır.

Önkoşullar

  • Etkin aboneliği olan bir Azure hesabı. Ücretsiz bir tane oluşturun. İsterseniz Azure aboneliği olmadan Azure Cosmos DB'yi ücretsiz olarak da deneyebilirsiniz. Azure Cosmos DB Öykünücüsü'ni bağlantı dizesi .mongodb://localhost:C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==@localhost:10255/admin?ssl=trueile de kullanabilirsiniz.
  • Go bilgisayarınızda yüklü ve Go hakkında çalışan bir bilgi.
  • Git.
  • Azure Cloud Shell'de Bash ortamını kullanın. Daha fazla bilgi için bkz . Azure Cloud Shell'de Bash için hızlı başlangıç.

  • CLI başvuru komutlarını yerel olarak çalıştırmayı tercih ediyorsanız Azure CLI'yı yükleyin . Windows veya macOS üzerinde çalışıyorsanız Azure CLI’yi bir Docker kapsayıcısında çalıştırmayı değerlendirin. Daha fazla bilgi için bkz . Docker kapsayıcısında Azure CLI'yi çalıştırma.

    • 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. Diğer oturum açma seçenekleri için bkz . Azure CLI ile oturum açma.

    • İstendiğinde, ilk kullanımda Azure CLI uzantısı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ı git-samplesyeni bir klasör oluşturun ve komut istemini 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ırma bölümüne atlayabilirsiniz. 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 (gelecek bölümdeki ayrıntılar) kullanılarak geçirilen Azure Cosmos DB için bağlantı dizesi kapsüller. Bağlantı, örneğin geçirildiği clientOptions kullanılarak başlatılırmongo.NewClient. Ping işlevi , bağlantının başarılı olduğunu onaylamak için çağrılır (bu hızlı bir hata stratejisidir).

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

    clientOptions := options.Client().ApplyURI(mongoDBConnectionString).SetDirect(true)
    
    c, err := mongo.Connect(ctx, clientOptions)
    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ırmayı SetDirect(true) kullanmak önemlidir; bu olmadan aşağıdaki 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

todo Öğe oluşturma

oluşturmak için bir todotanıtıcısını mongo.Collection alır ve işlevini çağırırız 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)
    }

Açıklamayı ve durumu içeren bir Todo yapı geçiririz (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

TODO'ları ölçütlere göre listeleyebiliriz. Filtre ölçütlerini kapsüllemek için bir bson.D 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 filtreye göre belge aramak için kullanılır ve sonuç 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 tablo biçiminde 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()

Öğeyi todo güncelleştirme

, todo öğesine _idgöre güncelleştirilebilir. bson.D Bu durumda yeni bir durum (completed veya pending) olan güncelleştirilmiş bilgiler için bir filtre _id oluşturulur ve başka bir filtre oluşturulur. Son olarak, UpdateOne işlev filtre 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)
    }

Silme todo

A todo , öğesine _id göre silinir ve bir bson.D örnek biçiminde kapsüllenmiş olur. 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ı kopyaladığınız ve oluşturduğunuz dizine geçin (kullanarak go build).

cd monogdb-go-quickstart
go build -o todo

Uygulamanın düzgün derlendiğini onaylamak için.

./todo --help

Azure Cosmos DB kurulumu

Azure'da oturum açma

CLI'yi yerel olarak yükleyip kullanmayı seçerseniz bu konu, Azure CLI 2.0 veya sonraki bir sürümünü çalıştırmanızı gerektirir. Sürümü bulmak için az --version komutunu çalıştırın. Yüklemeniz veya yükseltmeniz gerekiyorsa bkz. [Azure CLI'yi yükleme].

Yüklü bir Azure CLI 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üklü bir Azure CLI kullanıyorsanız komutunu çalıştırarak az bileşenin cosmosdb zaten yüklü olup olmadığını denetleyin. cosmosdb, temel komutlar listesindeyse bir sonraki komuta geçin. Azure Cloud Shell'i kullanıyorsanız bu adımı atlayabilirsiniz.

Temel komutlar listesinde değilse cosmosdb Azure CLI'yı yeniden yükleyin.

Kaynak grubu oluşturma

az group create ile 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 mantıksal bir 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 ve komutu komut istemine kopyalayın.

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

Azure Cosmos DB hesabı oluşturma

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

Aşağıdaki komutta lütfen benzersiz Azure Cosmos DB hesap adınızı <cosmosdb-name> yer tutucusunu gördüğünüz yere yerleştirin. Bu benzersiz ad, Azure Cosmos DB uç noktanızın (https://<cosmosdb-name>.documents.azure.com/) bir parçası olarak kullanılacağı için, adın Azure’daki tüm Azure Cosmos DB 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

Bir Azure Cosmos DB veritabanına bağlanmak için veritabanı anahtarı gerekir. 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ı dizesi, MongoDB veritabanını ve koleksiyon adlarını ortam değişkenleri olarak dışarı 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=true Azure Cosmos DB gereksinimleri nedeniyle bu seçenek önemlidir. Daha fazla bilgi için bkz. Bağlan ion dizesi gereksinimleri.

Ortam değişkeni için MONGODB_CONNECTION_STRING<COSMOSDB_ACCOUNT_NAME> ve yer tutucularını değiştirin <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

için MONGODB_DATABASE tercih ettiğiniz değerleri seçebilir veya MONGODB_COLLECTION 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'sini _id içeren bir çıktı görmeniz gerekir:

added todo ObjectID("5e9fd6befd2f076d1f03bd8a")

Başka bir tane oluşturma todo

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

Tümünü listele todo

./todo --list all

Yeni eklediğinizleri şu şekilde tablo biçiminde 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 öğesinin todo durumunu güncelleştirmek için (örn. durum olarak değiştirin completed ), kimliği kullanın todo :

./todo --update 5e9fd6b1bcd2fa6bd267d4c4,completed

Yalnızca tamamlananları todolisteleme

./todo --list completed

Yeni güncelleştirdiğiniz kişiyi 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'de depolanan veriler Azure portalında görüntülenebilir ve sorgulanabilir.

Ö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.

Üstteki Arama kutusuna Azure Cosmos DB yazın. Azure Cosmos DB hesabı dikey pencereniz açıldığında Azure Cosmos DB hesabınızı seçin. Sol gezinti bölmesinde Veri Gezgini'i 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ğini kullanarak silme todo :

./todo --delete 5e9fd6b1bcd2fa6bd267d4c4,completed

Onaylamak için s'leri todolisteleyin:

./todo --list all

Yeni todo sildiğiniz şu anda mevcut olmamalıdır:

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

Kaynakları temizleme

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

  1. Azure portalı Arama çubuğunda Kaynak grupları'nı arayın ve seçin.

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

    Silinecek kaynak grubunu seçin

  3. Kaynak grubuna 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'i kullanarak MongoDB için Azure Cosmos DB hesabı oluşturmayı ve yönetmek todoüzere bir Go komut satırı uygulaması oluşturup çalıştırmayı öğrendiniz. Şimdi Azure Cosmos DB hesabınıza ek veriler aktarabilirsiniz.

Azure Cosmos DB'ye geçiş için kapasite planlaması yapmaya mı çalışıyorsunuz? Kapasite planlaması için mevcut veritabanı kümeniz hakkındaki bilgileri kullanabilirsiniz.

  • Tek bildiğiniz mevcut veritabanı kümenizdeki sanal çekirdek ve sunucu sayısıysa, sanal çekirdek veya vCPU kullanarak istek birimlerini tahmin etme hakkında bilgi edinin
  • Geçerli veritabanı iş yükünüz için tipik istek oranlarını biliyorsanız Azure Cosmos DB kapasite planlayıcısı kullanarak istek birimlerini tahmin etme hakkında bilgi edinin