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=true
is használhatja. - A Go telepítve van a számítógépen, és ismeri a Go működését.
- Git.
Használja a Bash-környezetet az Azure Cloud Shellben. További információ: A Bash rövid útmutatója az Azure Cloud Shellben.
Ha inkább helyi cli-referenciaparancsokat szeretne futtatni, telepítse az Azure CLI-t. Ha Windows vagy macOS rendszert használ, fontolja meg az Azure CLI Docker-tárolóban való futtatását. További információ: Az Azure CLI futtatása Docker-tárolóban.
Ha helyi telepítést használ, jelentkezzen be az Azure CLI-be az az login parancs futtatásával. A hitelesítési folyamat befejezéséhez kövesse a terminálon megjelenő lépéseket. További bejelentkezési lehetőségekért lásd : Bejelentkezés az Azure CLI-vel.
Amikor a rendszer kéri, először telepítse az Azure CLI-bővítményt. További információ a bővítményekről: Bővítmények használata az Azure CLI-vel.
Futtassa az az version parancsot a telepített verzió és a függő kódtárak megkereséséhez. A legújabb verzióra az az upgrade paranccsal frissíthet.
A mintaalkalmazás klónozása
Az alábbi parancsok futtatásával klónozza a mintatárházat.
Nyisson meg egy parancssort, hozzon létre egy új mappát,
git-samples
majd zárja be a parancssort.mkdir "C:\git-samples"
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"
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
clientOptions
Beá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 todo
leké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 pending
van á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>
<COSMOSDB_ACCOUNT_NAME>
: A létrehozott Azure Cosmos DB-fiók neve<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 todo
s 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.
Töröljön egy todo
azonosítót:
./todo --delete 5e9fd6b1bcd2fa6bd267d4c4,completed
Listázhatja a todo
megerő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:
Az Azure Portal keresősávján keresse meg és válassza ki az erőforráscsoportokat.
A listából válassza ki a rövid útmutatóhoz létrehozott erőforráscsoportot.
Az erőforráscsoport Áttekintés lapján válassza az Erőforráscsoport törlése lehetőséget.
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.
- Ha csak annyit tud, hogy hány virtuális mag és kiszolgáló található a meglévő adatbázisfürtben, olvassa el a kérelemegységek becslését virtuális magok vagy vCPU-k használatával
- Ha ismeri az aktuális adatbázis számítási feladataira vonatkozó tipikus kérési arányokat, olvassa el a kérelemegységek becslését az Azure Cosmos DB kapacitástervezővel