Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Rozpocznij pracę z biblioteką klienta usługi Azure Cosmos DB for Apache Cassandra, aby Node.js przechowywać dane bez struktury i zarządzać nimi. Wykonaj kroki opisane w tym przewodniku, aby utworzyć nowe konto, zainstalować bibliotekę klienta Node.js, nawiązać połączenie z kontem, wykonać typowe operacje i wykonać zapytanie o ostateczne przykładowe dane.
Dokumentacja interfejsu API — pakiet | kodu | źródłowego biblioteki (npm)
Wymagania wstępne
Subskrypcja platformy Azure
- Jeśli nie masz subskrypcji Azure, przed rozpoczęciem utwórz darmowe konto.
Najnowsza wersja interfejsu wiersza polecenia platformy Azure w usłudze Azure Cloud Shell.
- Jeśli wolisz uruchamiać polecenia referencyjne CLI lokalnie, zaloguj się do Azure CLI przy użyciu polecenia
az login.
- Jeśli wolisz uruchamiać polecenia referencyjne CLI lokalnie, zaloguj się do Azure CLI przy użyciu polecenia
- Node.js 22 lub nowsze
Konfigurowanie
Najpierw skonfiguruj konto i środowisko programistyczne dla tego przewodnika. W tej sekcji przedstawiono proces tworzenia konta, uzyskiwania poświadczeń, a następnie przygotowywania środowiska deweloperskiego.
Tworzenie konta
Zacznij od utworzenia interfejsu API dla konta apache Cassandra. Po utworzeniu konta utwórz przestrzeń kluczy i zasoby tabeli.
Jeśli nie masz jeszcze docelowej grupy zasobów, użyj
az group createpolecenia , aby utworzyć nową grupę zasobów w ramach subskrypcji.az group create \ --name "<resource-group-name>" \ --location "<location>"Użyj polecenia ,
az cosmosdb createaby utworzyć nowe konto usługi Azure Cosmos DB dla bazy danych Apache Cassandra z ustawieniami domyślnymi.az cosmosdb create \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --locations "regionName=<location>" \ --capabilities "EnableCassandra"Utwórz nową przestrzeń kluczy za pomocą
az cosmosdb cassandra keyspace createo nazwiecosmicworks.az cosmosdb cassandra keyspace create \ --resource-group "<resource-group-name>" \ --account-name "<account-name>" \ --name "cosmicworks"Utwórz nowy obiekt JSON reprezentujący schemat przy użyciu wielolinijkowego polecenia Bash. Następnie użyj
az cosmosdb cassandra table createpolecenia , aby utworzyć nową tabelę o nazwieproducts.schemaJson=$(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"
Pobieranie poświadczeń
Teraz pobierz hasło biblioteki klienta do utworzenia połączenia z niedawno utworzonym kontem.
Użyj
az cosmosdb showpolecenia , aby uzyskać punkt kontaktu i nazwę użytkownika dla konta.az cosmosdb show \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --query "{username:name,contactPoint:documentEndpoint}"Zapisz wartości właściwości
contactPointiusernamez danych wyjściowych poprzednich poleceń. Wartości tych właściwości to punkt kontaktowy i nazwa użytkownika używana w dalszej części tego przewodnika w celu nawiązania połączenia z kontem z biblioteką.Użyj
az cosmosdb keys listpolecenia, aby pobrać klucze dla konta.az cosmosdb keys list \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --type "keys"Zanotuj wartość właściwości
primaryMasterKeyz danych wyjściowych wcześniejszych poleceń. Wartość tej właściwości to hasło , którego użyjesz w dalszej części tego przewodnika, aby nawiązać połączenie z kontem z biblioteką.
Przygotowywanie środowiska projektowego
Następnie skonfiguruj środowisko deweloperskie przy użyciu nowego projektu i biblioteki klienta. Ten krok jest ostatnim wymaganiem wstępnym przed przejściem do pozostałej części tego przewodnika.
Rozpocznij w pustym folderze.
Zainicjuj nowy moduł.
npm init es6 --yescassandra-driverZainstaluj pakiet z poziomu menedżera pakietów node (npm).npm install --save cassandra-driverUtwórz plik index.js .
Rozpocznij w pustym katalogu.
Zainicjuj nowy moduł.
npm init es6 --yestypescriptZainstaluj pakiet z poziomu menedżera pakietów node (npm).npm install --save-dev typescriptZainstaluj pakiet
tsxz npm.npm install --save-dev tsxZainstaluj pakiet
cassandra-driverz npm.npm install --save cassandra-driverZainicjuj projekt TypeScript przy użyciu kompilatora (
tsc).npx tsc --init --target es2017 --module es2022 --moduleResolution nodenextUtwórz plik index.ts .
Model obiektów
| Opis | |
|---|---|
Client |
Reprezentuje określone połączenie z klastrem |
Mapper |
Klient języka zapytań Cassandra (CQL) używany do uruchamiania zapytań |
Przykłady kodu
Uwierzytelnianie klienta
Zacznij od uwierzytelnienia klienta przy użyciu poświadczeń zebranych wcześniej w tym przewodniku.
Otwórz plik index.js w zintegrowanym środowisku projektowym (IDE).
Zaimportuj następujące typy z modułu
cassandra-driver:cassandracassandra.Clientcassandra.mapping.Mappercassandra.auth.PlainTextAuthProvider
import cassandra from 'cassandra-driver'; const { Client } = cassandra; const { Mapper } = cassandra.mapping; const { PlainTextAuthProvider } = cassandra.auth;Utwórz zmienne stałe ciągu dla poświadczeń zebranych wcześniej w tym przewodniku. Nazwij zmienne
username,passwordicontactPoint.const username = '<username>'; const password = '<password>'; const contactPoint = '<contact-point>';Utwórz kolejną zmienną ciągu dla regionu, w którym utworzono usługę Azure Cosmos DB dla konta apache Cassandra. Nadaj tej zmiennej
regionnazwę .const region = '<azure-region>';Utwórz nowy
PlainTextAuthProviderobiekt z poświadczeniami określonymi w poprzednich krokach.let authProvider = new PlainTextAuthProvider( username, password );ClientUtwórz obiekt przy użyciu zmiennych poświadczeń i konfiguracji utworzonych w poprzednich krokach.let client = new Client({ contactPoints: [`${contactPoint}:10350`], authProvider: authProvider, localDataCenter: region, sslOptions: { secureProtocol: 'TLSv1_2_method' }, });Nawiąż asynchroniczne połączenie z klastrem.
await client.connect();Utwórz nowy mapper przeznaczony dla przestrzeni kluczy
cosmicworksi tabeliproduct. Nadaj maperowiProductnazwę .const mapper = new Mapper(client, { models: { 'Product': { tables: ['product'], keyspace: 'cosmicworks' } } });Wygeneruj wystąpienie mapowania przy użyciu
forModelfunkcji iProductnazwy mapowania.const productMapper = mapper.forModel('Product');
Otwórz plik index.ts w zintegrowanym środowisku projektowym (IDE).
Zaimportuj następujące typy z modułu
cassandra-driver: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;Utwórz zmienne stałe ciągu dla poświadczeń zebranych wcześniej w tym przewodniku. Nazwij zmienne
username,passwordicontactPoint.const username: string = '<username>'; const password: string = '<password>'; const contactPoint: string = '<contact-point>';Utwórz kolejną zmienną ciągu dla regionu, w którym utworzono usługę Azure Cosmos DB dla konta apache Cassandra. Nadaj tej zmiennej
regionnazwę .const region: string = '<azure-region>';Utwórz nowy
PlainTextAuthProviderobiekt z poświadczeniami określonymi w poprzednich krokach.let authProvider = new PlainTextAuthProvider( username, password );Utwórz obiekt anonimowy z opcjami, które zapewniają, że używasz protokołu TLS (Transport Layer Security) 1.2.
let sslOptions = { secureProtocol: 'TLSv1_2_method' };ClientOptionsUtwórz obiekt przy użyciu zmiennych poświadczeń i konfiguracji utworzonych w poprzednich krokach.let clientOptions: ClientOptions = { contactPoints: [`${contactPoint}:10350`], authProvider: authProvider, localDataCenter: region, sslOptions: sslOptions };ClientUtwórz obiekt przy użyciu zmiennejclientOptionsw konstruktorze.let client = new Client(clientOptions);Nawiąż asynchroniczne połączenie z klastrem.
await client.connect();Utwórz nowy mapper przeznaczony dla przestrzeni kluczy
cosmicworksi tabeliproduct. Nadaj maperowiProductnazwę .const mapper = new Mapper( client, { models: { 'Product': { tables: ['product'], keyspace: 'cosmicworks' } } });Wygeneruj wystąpienie mapowania przy użyciu
forModelfunkcji iProductnazwy mapowania.const productMapper = mapper.forModel('Product');
Ostrzeżenie
Pełna weryfikacja zabezpieczeń warstwy transportu (TLS) jest wyłączona w tym przewodniku, aby uprościć uwierzytelnianie. W przypadku wdrożeń produkcyjnych w pełni włącz walidację.
Aktualizuj lub dodaj dane
Następnie dodaj nowe dane do tabeli. Upserting gwarantuje, że dane są tworzone lub zastępowane odpowiednio w zależności od tego, czy te same dane już istnieją w tabeli.
Utwórz nowy obiekt w zmiennej o nazwie
product.const product = { id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', name: 'Yamba Surfboard', category: 'gear-surf-surfboards', quantity: 12, price: 850.00, clearance: false };Asynchronicznie wywołaj funkcję
insert, przekazując zmiennąproductutworzoną w poprzednim kroku.await productMapper.insert(product);
Zdefiniuj nowy interfejs o nazwie
Productz polami odpowiadającymi tabeli utworzonej wcześniej w tym przewodniku.Typ IdstringNamestringCategorystringQuantityintPricedecimalClearanceboolinterface Product { id: string; name: string; category: string; quantity: number; price: number; clearance: boolean; }Wskazówka
W Node.jsmożna utworzyć ten typ w innym pliku lub utworzyć go na końcu istniejącego pliku.
Utwórz nowy obiekt typu
Product. Zapisz obiekt w zmiennej o nazwieproduct.const product: Product = { id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', name: 'Yamba Surfboard', category: 'gear-surf-surfboards', quantity: 12, price: 850.00, clearance: false };Asynchronicznie wywołaj funkcję
insert, przekazując zmiennąproductutworzoną w poprzednim kroku.await productMapper.insert(product);
Odczyt danych
Następnie odczytaj dane, które zostały wcześniej dodane lub zmodyfikowane w tabeli.
Utwórz obiekt anonimowy o nazwie
filter. W tym obiekcie dołącz właściwość o nazwieido tej samej wartości co produkt utworzony wcześniej w tym przewodniku.const filter = { id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb' };Wywołaj
getfunkcję mappera, przekazując zmiennąfilter. Zapisz wynik w zmiennej o nazwiematchedProduct.let matchedProduct = await productMapper.get(filter);
Utwórz obiekt anonimowy o nazwie
filter. W tym obiekcie dołącz właściwość o nazwieido tej samej wartości co produkt utworzony wcześniej w tym przewodniku.const filter = { id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb' };Wywołaj
getfunkcję mappera, przekazując zmiennąfilter. Zapisz wynik w zmiennej o nazwiematchedProducttypuProduct.let matchedProduct: Product = await productMapper.get(filter);
Wykonywanie zapytań o dane
Na koniec użyj zapytania, aby znaleźć wszystkie dane zgodne z określonym filtrem w tabeli.
Utwórz nową zmienną ciągu o nazwie
queryz zapytaniem CQL, które pasuje do elementów z tym samymcategorypolem.const query = ` SELECT * FROM cosmicworks.product WHERE category = :category ALLOW FILTERING `;Utwórz obiekt anonimowy o nazwie
params. W tym obiekcie dołącz właściwość o nazwiecategoryo tej samej wartości co produkt utworzony wcześniej w tym przewodniku.const params = { category: 'gear-surf-surfboards' };Wywołaj asynchronicznie funkcję
execute, przekazując zarówno zmiennequeryiparamsjako argumenty. Zapisz właściwość wynikurowsjako zmienną o nazwiematchedProducts.let { rows: matchedProducts } = await client.execute(query, params);Iteruj przez wyniki zapytania, wywołując metodę
foreachna tablicy produktów.matchedProducts.forEach(product => { // Do something here with each result });
Utwórz nową zmienną ciągu o nazwie
queryz zapytaniem CQL, które pasuje do elementów z tym samymcategorypolem.const query: string = ` SELECT * FROM cosmicworks.product WHERE category = :category ALLOW FILTERING `;Utwórz obiekt anonimowy o nazwie
params. W tym obiekcie dołącz właściwość o nazwiecategoryo tej samej wartości co produkt utworzony wcześniej w tym przewodniku.const params = { category: 'gear-surf-surfboards' };Wywołaj asynchronicznie funkcję
execute, przekazując zarówno zmiennequeryiparamsjako argumenty. Zapisz wynik w zmiennej o nazwieresulttyputypes.ResultSet.let result: types.ResultSet = await client.execute(query, params);Zapisz właściwość wyniku
rowsjako zmienną o nazwiematchedProductstypuProduct[].let matchedProducts: Product[] = result.rows;Iteruj przez wyniki zapytania, wywołując metodę
foreachna tablicy produktów.matchedProducts.forEach((product: Product) => { // Do something here with each result });
Uruchamianie kodu
Uruchom nowo utworzoną aplikację przy użyciu terminalu w katalogu aplikacji.
node index.js
npx tsx index.ts
Uprzątnij zasoby
Jeśli konto nie jest już potrzebne, usuń konto z subskrypcji platformy Azure, usuwając zasób.
az cosmosdb delete \
--resource-group "<resource-group-name>" \
--name "<account-name>"