Rövid útmutató: Go-alkalmazás Csatlakozás a MongoDB-hez készült Azure Cosmos DB-be

A KÖVETKEZŐKRE VONATKOZIK: MongoDB

Az Azure Cosmos DB egy többmodelles adatbázis-szolgáltatás, amely lehetővé teszi dokumentum-, tábla-, kulcs-érték- és gráfadatbázisok gyors létrehozását és lekérdezését globális terjesztési és horizontális méretezési képességekkel. Ebben a rövid útmutatóban azure Cosmos DB-fiókot hozhat létre és kezelhet az Azure Cloud Shell használatával, klónozhat egy meglévő mintaalkalmazást a GitHubról, és konfigurálhatja az Azure Cosmos DB használatára.

A mintaalkalmazás egy go nyelven írt parancssori todo felügyeleti eszköz. Az Azure Cosmos DB Api for MongoDB kompatibilis a MongoDB wire protokollal, így bármely MongoDB-ügyfélillesztő csatlakozhat hozzá. Ez az alkalmazás a MongoDB Go illesztőjét használja úgy, hogy az átlátható legyen az alkalmazás számára, hogy az adatokat egy Azure Cosmos DB-adatbázisban tárolja.

Előfeltételek

  • Egy Azure-fiók, aktív előfizetéssel. Hozzon létre egyet ingyen. Vagy ingyenesen kipróbálhatja az Azure Cosmos DB-t Azure-előfizetés nélkül. Az Azure Cosmos DB Emulatort a kapcsolati sztring .mongodb://localhost:C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==@localhost:10255/admin?ssl=trueis használhatja.
  • A Go telepítve van a számítógépen, és ismeri a Go működését.
  • Git.

A mintaalkalmazás klónozása

Az alábbi parancsok futtatásával klónozza a mintatárházat.

  1. Nyisson meg egy parancssort, hozzon létre egy új mappát, git-samplesmajd zárja be a parancssort.

    mkdir "C:\git-samples"
    
  2. Nyisson meg egy git terminálablakot, például a git bash eszközt, és a cd parancs használatával váltson az új mappára, ahol telepíteni szeretné a mintaalkalmazást.

    cd "C:\git-samples"
    
  3. Az alábbi parancs futtatásával klónozhatja a mintatárházat. Ez a parancs másolatot hoz létre a mintaalkalmazásról az Ön számítógépén.

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

A kód áttekintése

Ez a lépés nem kötelező. Ha szeretné megismerni az alkalmazás működését, tekintse át az alábbi kódrészleteket. Ellenkező esetben kihagyhatja az alkalmazás futtatását. Az alkalmazás elrendezése a következő:

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

Az alábbi kódrészletek mind a todo.go fájlból származnak.

Az alkalmazás csatlakoztatása az Azure Cosmos DB-hez

clientOptionsBeágyazza az Azure Cosmos DB kapcsolati sztring, amelyet egy környezeti változó használatával ad át (részletek a közelgő szakaszban). A rendszer inicializálja mongo.NewClient a kapcsolatot a példány átadásával clientOptions . Ping függvény meghívása a sikeres kapcsolat megerősítéséhez (ez egy sikertelen gyors stratégia).

    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)
    }

Feljegyzés

SetDirect(true) A konfiguráció használata fontos, amely nélkül a következő csatlakozási hiba jelenik meg:unable to connect connection(cdb-ms-prod-<azure-region>-cm1.documents.azure.com:10255[-4]) connection is closed

todo Elem létrehozása

A függvény létrehozásához todolekérünk egy leírót, mongo.Collection és meghívjuk a függvényt 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)
    }

Egy olyan szerkezetet Todo adunk át, amely tartalmazza a leírást és az állapotot (amely kezdetben a következőre pendingvan állítva):

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

Listaelemek todo

A TODOS-eket feltétel alapján listázhatjuk. A bson.D szűrőfeltételek beágyazásához létrejön a következő:

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 a szűrőn alapuló dokumentumok keresésére szolgál, és az eredmény a 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)
    }

Végül az információ táblázatos formátumban jelenik meg:

    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()

todo Elem frissítése

A todo frissíthető a saját _id. A bson.D rendszer a frissített információk alapján _id hoz létre egy szűrőt, amely ebben az esetben egy új állapot (completed vagy pending) lesz. Végül a rendszer meghívja a UpdateOne függvényt a szűrővel és a frissített dokumentummal:

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)
    }

Törlés todo

Az A todo az alapján _id törlődik, és példány formájában bson.D van beágyazva. DeleteOne a rendszer meghívja a dokumentum törlésére.

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)
    }
}

Az alkalmazás létrehozása

Váltson arra a könyvtárra, ahol klónozta az alkalmazást, és hozza létre (a használatával go build).

cd monogdb-go-quickstart
go build -o todo

Annak ellenőrzéséhez, hogy az alkalmazás megfelelően lett-e felépítve.

./todo --help

Az Azure Cosmos DB beállítása

Bejelentkezés az Azure-ba

Ha a parancssori felület helyi telepítését és használatát választja, ehhez a témakörhöz az Azure CLI 2.0-s vagy újabb verzióját kell futtatnia. A verzió azonosításához futtassa a következőt: az --version. Ha telepítenie vagy frissítenie kell, olvassa el az [Azure CLI telepítése] című témakört.

Ha telepített Azure CLI-t használ, jelentkezzen be az Azure-előfizetésbe az az login paranccsal, és kövesse a képernyőn megjelenő utasításokat. Az Azure Cloud Shell használata esetén kihagyhatja ezt a lépést.

az login 

Az Azure Cosmos DB modul hozzáadása

Ha telepített Azure CLI-t használ, ellenőrizze, hogy az cosmosdb összetevő már telepítve van-e a az parancs futtatásával. Ha a cosmosdb szerepel az alapparancsok listáján, lépjen tovább a következő parancsra. Az Azure Cloud Shell használata esetén kihagyhatja ezt a lépést.

Ha cosmosdb nem szerepel az alapparancsok listájában, telepítse újra az Azure CLI-t.

Erőforráscsoport létrehozása

Hozzon létre egy erőforráscsoportot az az group create paranccsal. Az Azure-erőforráscsoport egy logikai tároló, amelyben az Azure-erőforrások, például webalkalmazások, adatbázisok és tárfiókok üzembe helyezése és felügyelete történik.

A következő példában létrehozunk egy erőforráscsoportot a nyugat-európai régióban. Adjon egyedi nevet az erőforráscsoportnak.

Ha Azure Cloud Shellt használ, válassza a Kipróbálás lehetőséget, a képernyőn megjelenő utasításokat követve jelentkezzen be, majd másolja a parancsot a parancssorba.

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

Azure Cosmos DB-fiók létrehozása

Hozzon létre egy Azure Cosmos DB-fiókot az az cosmosdb create paranccsal.

A következő parancsban a <cosmosdb-name> helyőrző helyett írja be Azure Cosmos DB-fiókjának egyedi nevét. A nevet a rendszer Azure Cosmos DB-végpontként (https://<cosmosdb-name>.documents.azure.com/) fogja használni, így annak egyedinek kell lennie az összes Azure-beli Azure Cosmos DB-fiók között.

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

A --kind MongoDB paraméter lehetővé teszi a MongoDB-ügyfélkapcsolatok használatát.

Az Azure Cosmos DB-fiók létrehozása után az Azure CLI az alábbi példához hasonló információkat jelenít meg.

Feljegyzés

Ez a példa az alapértelmezett JSON formátumot használja az Azure CLI kimeneti formátumaként. Más kimeneti formátum használatához lásd: Az Azure CLI-parancsok kimeneti formátumai.

{
  "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"
    }
  ]
} 

Az adatbáziskulcs lekérése

Az Azure Cosmos DB-adatbázishoz való csatlakozáshoz adatbáziskulcs szükséges. Az elsődleges kulcs lekéréséhez használja az az cosmosdb keys list parancsot.

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

Az Azure CLI az alábbi példához hasonló formában jeleníti meg a kimeneti adatokat.

"RUayjYjixJDWG5xTqIiXjC..."

Az alkalmazás konfigurálása

Exportálja a kapcsolati sztring, a MongoDB-adatbázist és a gyűjteményneveket környezeti változókként.

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>@"

Feljegyzés

A ssl=true lehetőség az Azure Cosmos DB követelményei miatt fontos. További információ: Csatlakozás ion sztringre vonatkozó követelmények.

MONGODB_CONNECTION_STRING A környezeti változó esetében cserélje le a helyőrzőket a következőre<COSMOSDB_ACCOUNT_NAME>:<COSMOSDB_PASSWORD>

  1. <COSMOSDB_ACCOUNT_NAME>: A létrehozott Azure Cosmos DB-fiók neve
  2. <COSMOSDB_PASSWORD>: Az előző lépésben kinyert adatbáziskulcs
export MONGODB_DATABASE=todo-db
export MONGODB_COLLECTION=todos

Kiválaszthatja az előnyben részesített értékeket MONGODB_DATABASE , és MONGODB_COLLECTION meg is hagyhatja őket.

Az alkalmazás futtatása

Hozzon létre egy todo

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

Ha sikeres, az újonnan létrehozott dokumentum MongoDB-jével _id rendelkező kimenetnek kell megjelennie:

added todo ObjectID("5e9fd6befd2f076d1f03bd8a")

Másik létrehozása todo

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

Az összes s listázása todo

./todo --list all

Az imént hozzáadottakat táblázatos formátumban kell látnia:

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

Egy todo adott állapotának frissítéséhez (például az állapot módosításához completed ) használja a következő azonosítót todo :

./todo --update 5e9fd6b1bcd2fa6bd267d4c4,completed

Csak a kész todos listázása

./todo --list completed

Az imént frissített verziónak kell megjelennie:

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

Adatok megtekintése az Adatkezelőben

Az Azure Cosmos DB-ben tárolt adatok megtekinthetők és lekérdezhetők az Azure Portalon.

Az előző lépésben létrehozott felhasználói adatok megtekintéséhez, lekérdezéséhez, valamint az azokkal való munkához böngészőjében jelentkezzen be az Azure Portalra.

A felső keresőmezőbe írja be az Azure Cosmos DB-t. Amikor megnyílik az Azure Cosmos DB-fiók panelje, válassza ki az Azure Cosmos DB-fiókját. A bal oldali navigációs sávon válassza az Adatkezelő lehetőséget. A Gyűjtemények panelen bontsa ki gyűjteményét. Ezt követően megtekintheti a gyűjteményhez tartozó dokumentumokat, lekérdezhet adatokat, valamint létrehozhat és futtathat tárolt eljárásokat, eseményindítókat és felhasználói függvényeket.

Az újonnan létrehozott dokumentum megjelenítve az Adatkezelőben

Töröljön egy todo azonosítót:

./todo --delete 5e9fd6b1bcd2fa6bd267d4c4,completed

Listázhatja a todomegerősítéshez tartozó s-eket:

./todo --list all

Az todo imént töröltnek nem szabad jelen lennie:

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

Az erőforrások eltávolítása

Ha végzett az alkalmazással és az Azure Cosmos DB-fiókkal, törölheti a létrehozott Azure-erőforrásokat, hogy ne járjon további költségekkel. Az erőforrások törlése:

  1. Az Azure Portal keresősávján keresse meg és válassza ki az erőforráscsoportokat.

  2. A listából válassza ki a rövid útmutatóhoz létrehozott erőforráscsoportot.

    Válassza ki a törölni kívánt erőforráscsoportot

  3. Az erőforráscsoport Áttekintés lapján válassza az Erőforráscsoport törlése lehetőséget.

    Az erőforráscsoport törlése

  4. A következő ablakban adja meg a törölni kívánt erőforráscsoport nevét, majd válassza a Törlés lehetőséget.

Következő lépések

Ebben a rövid útmutatóban megtanulta, hogyan hozhat létre Azure Cosmos DB for MongoDB-fiókot az Azure Cloud Shell használatával, és hogyan hozhat létre és futtathat go parancssori alkalmazást az s-k kezeléséhez todo. Így már további adatokat importálhat az Azure Cosmos DB-fiókba.

Kapacitástervezést szeretne végezni az Azure Cosmos DB-be való migráláshoz? A kapacitástervezéshez használhatja a meglévő adatbázisfürt adatait.