Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ismerkedés az Apache Cassandra Azure Cosmos DB ügyfélkódtárával, amellyel Node.js strukturálatlan adatokat tárolhat, kezelhet és kérdezhet le. Kövesse az útmutató lépéseit egy új fiók létrehozásához, egy Node.js ügyfélkódtár telepítéséhez, a fiókhoz való csatlakozáshoz, a gyakori műveletek végrehajtásához és a végső mintaadatok lekérdezéséhez.
API-referenciadokumentáció Kódtár forráskódcsomagja |
Előfeltételek
Azure-előfizetés
- Ha nincs Azure-előfizetésed, hozz létre egy ingyenes fiókot mielőtt elkezdenéd.
Az Azure CLI legújabb verziója az Azure Cloud Shellben.
- Ha inkább helyi cli-referenciaparancsokat szeretne futtatni, jelentkezzen be az Azure CLI-be a
az loginparancs használatával.
- Ha inkább helyi cli-referenciaparancsokat szeretne futtatni, jelentkezzen be az Azure CLI-be a
- Node.js 22 vagy újabb
Előkészítés
Először állítsa be az útmutató fiók- és fejlesztési környezetét. Ez a szakasz végigvezeti a fiók létrehozásának, a hitelesítő adatok beszerzésének, majd a fejlesztési környezet előkészítésének folyamatán.
Fiók létrehozása
Először hozzon létre egy API-t apache Cassandra-fiókhoz. A fiók létrehozása után hozza létre a kulcsteret és a táblaerőforrásokat.
Ha még nincs célerőforráscsoportja, a
az group createparanccsal hozzon létre egy új erőforráscsoportot az előfizetésben.az group create \ --name "<resource-group-name>" \ --location "<location>"az cosmosdb createA paranccsal hozzon létre egy új Azure Cosmos DB-fiókot az Apache Cassandra-fiókhoz alapértelmezett beállításokkal.az cosmosdb create \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --locations "regionName=<location>" \ --capabilities "EnableCassandra"Hozzon létre egy új kulcsteret
az cosmosdb cassandra keyspace createhasználatával, amitcosmicworksnevére elnevezett.az cosmosdb cassandra keyspace create \ --resource-group "<resource-group-name>" \ --account-name "<account-name>" \ --name "cosmicworks"Hozzon létre egy új JSON-objektumot, amely egy többsoros Bash-paranccsal ábrázolja a sémát. Ezután a
az cosmosdb cassandra table createparanccsal hozzon létre egy új táblát.productsschemaJson=$(cat <<EOF { "columns": [ { "name": "id", "type": "text" }, { "name": "name", "type": "text" }, { "name": "category", "type": "text" }, { "name": "quantity", "type": "int" }, { "name": "price", "type": "decimal" }, { "name": "clearance", "type": "boolean" } ], "partitionKeys": [ { "name": "id" } ] } EOF )az cosmosdb cassandra table create \ --resource-group "<resource-group-name>" \ --account-name "<account-name>" \ --keyspace-name "cosmicworks" \ --name "product" \ --schema "$schemaJson"
Hitelesítő adatok lekérése
Most szerezze be az ügyfélkódtár jelszavát, amellyel kapcsolatot hozhat létre a nemrég létrehozott fiókkal.
A fiók kapcsolattartási pontjának és felhasználónevének lekérésére használható
az cosmosdb show.az cosmosdb show \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --query "{username:name,contactPoint:documentEndpoint}"Jegyezze le az
contactPointésusernametulajdonságok értékét az előző parancsok kimenetéből. Ezeknek a tulajdonságoknak az értékei: a kapcsolattartási pont és a felhasználónév, amelyeket a könyvtárral való fiók-csatlakozáshoz használ az útmutató következő részeiben.A fiók
az cosmosdb keys listlekéréséhez használható.az cosmosdb keys list \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --type "keys"Jegyezze fel a
primaryMasterKeytulajdonság értékét az előző parancsok kimenetéből. Ennek a tulajdonságnak az értéke az jelszó, amit az útmutató későbbi részében használni fogsz a könyvtár segítségével a fiókhoz való csatlakozáshoz.
Fejlesztési környezet előkészítése
Ezután konfigurálja a fejlesztési környezetet egy új projekttel és az ügyfélkódtárral. Ez a lépés az utolsó szükséges előfeltétel, mielőtt továbblépne az útmutató többi részére.
Kezdje egy üres mappában.
Új modul inicializálása.
npm init es6 --yesTelepítse a csomagot a
cassandra-driverNode Package Managerből (npm).npm install --save cassandra-driverHozza létre a index.js fájlt.
Kezdje egy üres mappában.
Új modul inicializálása.
npm init es6 --yesTelepítse a csomagot a
typescriptNode Package Managerből (npm).npm install --save-dev typescriptTelepítse az
tsxcsomagot az npm-ből.npm install --save-dev tsxTelepítse az
cassandra-drivercsomagot az npm-ből.npm install --save cassandra-driverInicializálja a TypeScript-projektet a fordítóval (
tsc).npx tsc --init --target es2017 --module es2022 --moduleResolution nodenextHozza létre a index.ts fájlt.
Objektummodell
| Leírás | |
|---|---|
Client |
Egy specifikus klaszterkapcsolatot képvisel. |
Mapper |
A lekérdezések futtatásához használt Cassandra Query Language (CQL) ügyfél |
Példakódok
Ügyfél hitelesítése
Első lépésként hitelesíti az ügyfelet az útmutatóban korábban összegyűjtött hitelesítő adatokkal.
Nyissa meg a index.js fájlt az integrált fejlesztési környezetben (IDE).
Importálja a következő típusokat a
cassandra-drivermodulból:cassandracassandra.Clientcassandra.mapping.Mappercassandra.auth.PlainTextAuthProvider
import cassandra from 'cassandra-driver'; const { Client } = cassandra; const { Mapper } = cassandra.mapping; const { PlainTextAuthProvider } = cassandra.auth;Sztringállandó változók létrehozása az útmutatóban korábban gyűjtött hitelesítő adatokhoz. Nevezze el a változókat
username,passwordéscontactPoint.const username = '<username>'; const password = '<password>'; const contactPoint = '<contact-point>';Hozzon létre egy másik karakterlánc változót ahhoz a régióhoz, ahol létrehozta az Azure Cosmos DB fiókot az Apache Cassandra számára. Nevezze el ezt a változót
region.const region = '<azure-region>';Hozzon létre egy új
PlainTextAuthProviderobjektumot az előző lépésekben megadott hitelesítő adatokkal.let authProvider = new PlainTextAuthProvider( username, password );Hozzon létre egy
Clientobjektumot az előző lépésekben létrehozott hitelesítő és konfigurációs változók használatával.let client = new Client({ contactPoints: [`${contactPoint}:10350`], authProvider: authProvider, localDataCenter: region, sslOptions: { secureProtocol: 'TLSv1_2_method' }, });Aszinkron módon csatlakozzon a fürthöz.
await client.connect();Hozzon létre egy új leképezőt, amely a
cosmicworkskulcs-teret és aproducttáblát célozza meg. Nevezze meg a leképezőtProduct.const mapper = new Mapper(client, { models: { 'Product': { tables: ['product'], keyspace: 'cosmicworks' } } });Hozzon létre egy leképezőpéldányt a
forModelfüggvény és aProductleképező neve használatával.const productMapper = mapper.forModel('Product');
Nyissa meg a index.ts fájlt az integrált fejlesztési környezetben (IDE).
Importálja a következő típusokat a
cassandra-drivermodulból:cassandra.authcassandra.mappingcassandra.typescassandra.Clientcassandra.ClientOptionscassandra.mapping.Mappercassandra.auth.PlainTextAuthProvider
import { auth, mapping, types, Client, ClientOptions } from 'cassandra-driver'; const { Mapper } = mapping; const { PlainTextAuthProvider } = auth;Sztringállandó változók létrehozása az útmutatóban korábban gyűjtött hitelesítő adatokhoz. Nevezze el a változókat
username,passwordéscontactPoint.const username: string = '<username>'; const password: string = '<password>'; const contactPoint: string = '<contact-point>';Hozzon létre egy másik karakterlánc változót ahhoz a régióhoz, ahol létrehozta az Azure Cosmos DB fiókot az Apache Cassandra számára. Nevezze el ezt a változót
region.const region: string = '<azure-region>';Hozzon létre egy új
PlainTextAuthProviderobjektumot az előző lépésekben megadott hitelesítő adatokkal.let authProvider = new PlainTextAuthProvider( username, password );Hozzon létre egy névtelen objektumot olyan beállításokkal, amelyek biztosítják, hogy a transport layer security (TLS) 1.2 protokollt használja.
let sslOptions = { secureProtocol: 'TLSv1_2_method' };Hozzon létre egy
ClientOptionsobjektumot az előző lépésekben létrehozott hitelesítő és konfigurációs változók használatával.let clientOptions: ClientOptions = { contactPoints: [`${contactPoint}:10350`], authProvider: authProvider, localDataCenter: region, sslOptions: sslOptions };Hozzon létre egy objektumot
ClientaclientOptionskonstruktor változójának használatával.let client = new Client(clientOptions);Aszinkron módon csatlakozzon a fürthöz.
await client.connect();Hozzon létre egy új leképezőt, amely a
cosmicworkskulcs-teret és aproducttáblát célozza meg. Nevezze meg a leképezőtProduct.const mapper = new Mapper( client, { models: { 'Product': { tables: ['product'], keyspace: 'cosmicworks' } } });Hozzon létre egy leképezőpéldányt a
forModelfüggvény és aProductleképező neve használatával.const productMapper = mapper.forModel('Product');
Figyelmeztetés
Ebben az útmutatóban le van tiltva a teljes átviteli rétegbiztonság (TLS) ellenőrzése a hitelesítés egyszerűsítése érdekében. Éles telepítéseknél teljesen engedélyezze az érvényesítést.
Adatok frissítése vagy beszúrása
Következő lépésként új adatokat kell beszúrni egy táblába. Az Upserting biztosítja az adatok megfelelő létrehozását vagy cseréjét attól függően, hogy ugyanazok az adatok már léteznek-e a táblában.
Hozzon létre egy új objektumot egy nevű változóban
product.const product = { id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', name: 'Yamba Surfboard', category: 'gear-surf-surfboards', quantity: 12, price: 850.00, clearance: false };Hívja meg aszinkron módon az
insertfüggvényt, átadva az előző lépésben létrehozottproductváltozót.await productMapper.insert(product);
Adjon meg egy új, az útmutatóban korábban létrehozott táblának megfelelő mezőkkel elnevezett
Productfelületet.Típus IdstringNamestringCategorystringQuantityintPricedecimalClearanceboolinterface Product { id: string; name: string; category: string; quantity: number; price: number; clearance: boolean; }Jótanács
A Node.jstípus létrehozható egy másik fájlban, vagy elhelyezhető a meglévő fájl végén.
Hozzon létre egy új típusú
Productobjektumot. Tárolja az objektumot egy névvel ellátottproductváltozóban.const product: Product = { id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', name: 'Yamba Surfboard', category: 'gear-surf-surfboards', quantity: 12, price: 850.00, clearance: false };Hívja meg aszinkron módon az
insertfüggvényt, átadva az előző lépésben létrehozottproductváltozót.await productMapper.insert(product);
Adatok beolvasása
Ezután olvassa be azokat az adatokat, amelyeket korábban a táblázatba illesztett be.
Hozzon létre egy névtelen objektumot .
filterEbben az objektumban adjon meg egy olyan tulajdonságotid, amelynek neve ugyanaz, mint a jelen útmutatóban korábban létrehozott termék.const filter = { id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb' };Hívja meg a
getváltozóban áthaladó leképező függvényétfilter. Tárolja az eredményt egy névvel ellátottmatchedProductváltozóban.let matchedProduct = await productMapper.get(filter);
Hozzon létre egy névtelen objektumot .
filterEbben az objektumban adjon meg egy olyan tulajdonságotid, amelynek neve ugyanaz, mint a jelen útmutatóban korábban létrehozott termék.const filter = { id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb' };Hívja meg a
getváltozóban áthaladó leképező függvényétfilter. Az eredményt egymatchedProducttípusúProductnevű változóban tárolja.let matchedProduct: Product = await productMapper.get(filter);
Adatok lekérdezése
Végül egy lekérdezéssel megkeresheti a táblában egy adott szűrőnek megfelelő összes adatot.
Hozzon létre egy új karakterlánc változót
query, amely CQL-lekérdezést tartalmaz, és megegyezik az azonoscategorymezővel rendelkező elemekkel.const query = ` SELECT * FROM cosmicworks.product WHERE category = :category ALLOW FILTERING `;Hozzon létre egy névtelen objektumot .
paramsEbben az objektumban adjon meg egy olyan tulajdonságotcategory, amelynek neve ugyanaz, mint a jelen útmutatóban korábban létrehozott termék.const params = { category: 'gear-surf-surfboards' };Aszinkron módon hívja meg a
executefüggvényt, és argumentumként adja át aqueryésparamsváltozókat. Az eredmény tulajdonságátrowsegy névvel ellátottmatchedProductsváltozóként tárolja.let { rows: matchedProducts } = await client.execute(query, params);Iterálja a lekérdezés eredményeit a
foreachmetódus meghívásával a termékek tömbjén.matchedProducts.forEach(product => { // Do something here with each result });
Hozzon létre egy új karakterlánc változót
query, amely CQL-lekérdezést tartalmaz, és megegyezik az azonoscategorymezővel rendelkező elemekkel.const query: string = ` SELECT * FROM cosmicworks.product WHERE category = :category ALLOW FILTERING `;Hozzon létre egy névtelen objektumot .
paramsEbben az objektumban adjon meg egy olyan tulajdonságotcategory, amelynek neve ugyanaz, mint a jelen útmutatóban korábban létrehozott termék.const params = { category: 'gear-surf-surfboards' };Aszinkron módon hívja meg a
executefüggvényt, és argumentumként adja át aqueryésparamsváltozókat. Az eredményt egyresulttípusútypes.ResultSetnevű változóban tárolja.let result: types.ResultSet = await client.execute(query, params);Az eredmény tulajdonságát
rowsegy típusmatchedProductsnevűProduct[]változóként tárolja.let matchedProducts: Product[] = result.rows;Iterálja a lekérdezés eredményeit a
foreachmetódus meghívásával a termékek tömbjén.matchedProducts.forEach((product: Product) => { // Do something here with each result });
A kód futtatása
Futtassa az újonnan létrehozott alkalmazást egy terminál használatával az alkalmazáskönyvtárban.
node index.js
npx tsx index.ts
Erőforrások tisztítása
Ha már nincs szüksége a fiókra, távolítsa el a fiókot az Azure-előfizetésből az erőforrás törlésével .
az cosmosdb delete \
--resource-group "<resource-group-name>" \
--name "<account-name>"