Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Mulai menggunakan pustaka klien Azure Cosmos DB for Apache Cassandra agar Node.js menyimpan, mengelola, dan mengkueri data yang tidak terstruktur. Ikuti langkah-langkah dalam panduan ini untuk membuat akun baru, menginstal pustaka klien Node.js, menyambungkan ke akun, melakukan operasi umum, dan mengkueri data sampel akhir Anda.
Dokumentasi referensi API | Kode sumber pustaka | Paket (npm)
Prasyarat
Langganan Azure
- Jika Anda tidak memiliki langganan Azure, buatlah akun gratis sebelum Anda memulai.
Versi terbaru Azure CLI di Azure Cloud Shell.
- Jika Anda lebih suka menjalankan perintah referensi CLI secara lokal, masuk ke Azure CLI dengan menggunakan
az loginperintah .
- Jika Anda lebih suka menjalankan perintah referensi CLI secara lokal, masuk ke Azure CLI dengan menggunakan
- Node.js 22 atau yang lebih baru
Persiapan
Pertama, siapkan akun dan lingkungan pengembangan untuk panduan ini. Bagian ini memandu Anda melalui proses pembuatan akun, mendapatkan kredensial akun, lalu menyiapkan lingkungan pengembangan Anda.
Buat akun
Mulailah dengan membuat API untuk akun Apache Cassandra. Setelah akun dibuat, buat keyspace dan sumber daya tabel.
Jika Anda belum memiliki grup sumber daya target, gunakan
az group createperintah untuk membuat grup sumber daya baru di langganan Anda.az group create \ --name "<resource-group-name>" \ --location "<location>"az cosmosdb createGunakan perintah untuk membuat akun Azure Cosmos DB for Apache Cassandra baru dengan pengaturan default.az cosmosdb create \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --locations "regionName=<location>" \ --capabilities "EnableCassandra"Buat keyspace baru menggunakan
az cosmosdb cassandra keyspace createbernamacosmicworks.az cosmosdb cassandra keyspace create \ --resource-group "<resource-group-name>" \ --account-name "<account-name>" \ --name "cosmicworks"Buat objek JSON baru untuk mewakili skema Anda menggunakan perintah Bash multibaris. Kemudian, gunakan
az cosmosdb cassandra table createperintah untuk membuat tabel baru bernamaproducts.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"
Mendapatkan kredensial
Sekarang, dapatkan kata sandi untuk pustaka klien yang akan digunakan guna membuat koneksi ke akun yang baru saja dibuat.
Gunakan
az cosmosdb showuntuk mendapatkan titik kontak dan nama pengguna untuk akun tersebut.az cosmosdb show \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --query "{username:name,contactPoint:documentEndpoint}"Catat nilai
contactPointdanusernameproperti dari keluaran perintah sebelumnya. Nilai properti ini adalah titik kontak dan nama pengguna yang Anda gunakan nanti dalam panduan ini untuk menyambungkan ke akun dengan pustaka.Gunakan
az cosmosdb keys listuntuk mendapatkan kunci untuk akun tersebut.az cosmosdb keys list \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --type "keys"Catat nilai
primaryMasterKeyproperti dari output perintah sebelumnya. Nilai properti ini adalah kata sandi yang Anda gunakan nanti dalam panduan ini untuk menyambungkan ke akun dengan pustaka.
Menyiapkan lingkungan pengembangan
Kemudian, konfigurasikan lingkungan pengembangan Anda dengan proyek baru dan pustaka klien. Langkah ini adalah prasyarat terakhir yang diperlukan sebelum beralih ke sisa panduan ini.
Mulai dalam folder kosong.
Menginisialisasi modul baru.
npm init es6 --yescassandra-driverInstal paket dari Node Package Manager (npm).npm install --save cassandra-driverBuat file index.js .
Mulai di direktori kosong.
Menginisialisasi modul baru.
npm init es6 --yestypescriptInstal paket dari Node Package Manager (npm).npm install --save-dev typescripttsxInstal paket dari npm.npm install --save-dev tsxcassandra-driverInstal paket dari npm.npm install --save cassandra-driverInisialisasi proyek TypeScript menggunakan pengkompilasi (
tsc).npx tsc --init --target es2017 --module es2022 --moduleResolution nodenextBuat file index.ts .
Model objek
| Deskripsi | |
|---|---|
Client |
Mewakili koneksi tertentu ke kluster |
Mapper |
Klien Cassandra Query Language (CQL) yang digunakan untuk menjalankan kueri |
Contoh kode
Mengautentikasi klien
Mulailah dengan mengautentikasi klien menggunakan kredensial yang dikumpulkan sebelumnya dalam panduan ini.
Buka file index.js di lingkungan pengembangan terintegrasi (IDE) Anda.
Impor jenis berikut dari
cassandra-drivermodul:cassandracassandra.Clientcassandra.mapping.Mappercassandra.auth.PlainTextAuthProvider
import cassandra from 'cassandra-driver'; const { Client } = cassandra; const { Mapper } = cassandra.mapping; const { PlainTextAuthProvider } = cassandra.auth;Buat variabel konstanta string untuk kredensial yang dikumpulkan sebelumnya dalam panduan ini. Beri nama variabel
username, ,passworddancontactPoint.const username = '<username>'; const password = '<password>'; const contactPoint = '<contact-point>';Buat variabel string lain untuk wilayah tempat Anda membuat akun Azure Cosmos DB for Apache Cassandra. Beri nama variabel
regionini .const region = '<azure-region>';Buat objek baru
PlainTextAuthProviderdengan kredensial yang ditentukan di langkah sebelumnya.let authProvider = new PlainTextAuthProvider( username, password );Buat
Clientobjek menggunakan variabel kredensial dan konfigurasi yang dibuat di langkah-langkah sebelumnya.let client = new Client({ contactPoints: [`${contactPoint}:10350`], authProvider: authProvider, localDataCenter: region, sslOptions: { secureProtocol: 'TLSv1_2_method' }, });Secara asinkron terhubung ke kluster.
await client.connect();Buat pemetaan baru yang menargetkan keyspace
cosmicworksdan tabelproduct. Beri nama pemetaProduct.const mapper = new Mapper(client, { models: { 'Product': { tables: ['product'], keyspace: 'cosmicworks' } } });Buat instans pemeta menggunakan
forModelfungsi danProductnama pemeta.const productMapper = mapper.forModel('Product');
Buka file index.ts di lingkungan pengembangan terintegrasi (IDE) Anda.
Impor jenis berikut dari
cassandra-drivermodul: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;Buat variabel konstanta string untuk kredensial yang dikumpulkan sebelumnya dalam panduan ini. Beri nama variabel
username, ,passworddancontactPoint.const username: string = '<username>'; const password: string = '<password>'; const contactPoint: string = '<contact-point>';Buat variabel string lain untuk wilayah tempat Anda membuat akun Azure Cosmos DB for Apache Cassandra. Beri nama variabel
regionini .const region: string = '<azure-region>';Buat objek baru
PlainTextAuthProviderdengan kredensial yang ditentukan di langkah sebelumnya.let authProvider = new PlainTextAuthProvider( username, password );Buat objek anonim dengan opsi yang memastikan bahwa Anda menggunakan protokol keamanan lapisan transportasi (TLS) 1.2.
let sslOptions = { secureProtocol: 'TLSv1_2_method' };Buat
ClientOptionsobjek menggunakan variabel kredensial dan konfigurasi yang dibuat di langkah-langkah sebelumnya.let clientOptions: ClientOptions = { contactPoints: [`${contactPoint}:10350`], authProvider: authProvider, localDataCenter: region, sslOptions: sslOptions };Buat
Clientobjek menggunakanclientOptionsvariabel di konstruktor.let client = new Client(clientOptions);Secara asinkron terhubung ke kluster.
await client.connect();Buat pemetaan baru yang menargetkan keyspace
cosmicworksdan tabelproduct. Beri nama pemetaProduct.const mapper = new Mapper( client, { models: { 'Product': { tables: ['product'], keyspace: 'cosmicworks' } } });Buat instans pemeta menggunakan
forModelfungsi danProductnama pemeta.const productMapper = mapper.forModel('Product');
Peringatan
Validasi keamanan lapisan transportasi (TLS) lengkap dinonaktifkan dalam panduan ini untuk menyederhanakan autentikasi. Untuk penyebaran produksi, aktifkan validasi sepenuhnya.
Memasukkan atau memperbarui data
Selanjutnya, upsert data baru ke dalam tabel. Upserting memastikan bahwa data dibuat atau diganti dengan tepat tergantung pada apakah data yang sama sudah ada dalam tabel.
Buat objek baru dalam variabel bernama
product.const product = { id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', name: 'Yamba Surfboard', category: 'gear-surf-surfboards', quantity: 12, price: 850.00, clearance: false };Memanggil fungsi
insertsecara asinkron dengan memasukkan variabelproductyang dibuat pada langkah sebelumnya.await productMapper.insert(product);
Tentukan antarmuka baru bernama
Productdengan bidang yang sesuai dengan tabel yang dibuat sebelumnya dalam panduan ini.Tipe IdstringNamestringCategorystringQuantityintPricedecimalClearanceboolinterface Product { id: string; name: string; category: string; quantity: number; price: number; clearance: boolean; }Tip
Di Node.js, Anda dapat membuat jenis ini di file lain atau membuatnya di akhir file yang ada.
Buat objek baru berjenis
Product. Simpan objek dalam variabel bernamaproduct.const product: Product = { id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', name: 'Yamba Surfboard', category: 'gear-surf-surfboards', quantity: 12, price: 850.00, clearance: false };Memanggil fungsi
insertsecara asinkron dengan memasukkan variabelproductyang dibuat pada langkah sebelumnya.await productMapper.insert(product);
Baca data
Kemudian, baca data yang sebelumnya diupsert ke dalam tabel.
Buat objek anonim bernama
filter. Dalam objek ini, sertakan properti bernamaiddengan nilai yang sama dengan produk yang dibuat sebelumnya dalam panduan ini.const filter = { id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb' };Panggil fungsi pemeta
getmenggunakan variabelfilter. Simpan hasilnya di variabel bernamamatchedProduct.let matchedProduct = await productMapper.get(filter);
Buat objek anonim bernama
filter. Dalam objek ini, sertakan properti bernamaiddengan nilai yang sama dengan produk yang dibuat sebelumnya dalam panduan ini.const filter = { id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb' };Panggil fungsi pemeta
getmenggunakan variabelfilter. Simpan hasil dalam variabel bernamamatchedProductjenisProduct.let matchedProduct: Product = await productMapper.get(filter);
Mencari data
Terakhir, gunakan kueri untuk menemukan semua data yang cocok dengan filter tertentu dalam tabel.
Buat variabel string baru bernama
querydengan kueri CQL yang cocok dengan item dengan bidang yang samacategory.const query = ` SELECT * FROM cosmicworks.product WHERE category = :category ALLOW FILTERING `;Buat objek anonim bernama
params. Dalam objek ini, sertakan properti bernamacategorydengan nilai yang sama dengan produk yang dibuat sebelumnya dalam panduan ini.const params = { category: 'gear-surf-surfboards' };Memanggil fungsi
executesecara asinkron dengan meneruskan variabelquerydanparamssebagai argumen. Simpan properti hasilrowssebagai variabel bernamamatchedProducts.let { rows: matchedProducts } = await client.execute(query, params);Melakukan iterasi hasil kueri dengan menggunakan metode
foreachpada array produk.matchedProducts.forEach(product => { // Do something here with each result });
Buat variabel string baru bernama
querydengan kueri CQL yang cocok dengan item dengan bidang yang samacategory.const query: string = ` SELECT * FROM cosmicworks.product WHERE category = :category ALLOW FILTERING `;Buat objek anonim bernama
params. Dalam objek ini, sertakan properti bernamacategorydengan nilai yang sama dengan produk yang dibuat sebelumnya dalam panduan ini.const params = { category: 'gear-surf-surfboards' };Memanggil fungsi
executesecara asinkron dengan meneruskan variabelquerydanparamssebagai argumen. Simpan hasil dalam variabel bernamaresultjenistypes.ResultSet.let result: types.ResultSet = await client.execute(query, params);Simpan properti hasil
rowssebagai variabel bernamamatchedProductsdari jenisProduct[].let matchedProducts: Product[] = result.rows;Melakukan iterasi hasil kueri dengan menggunakan metode
foreachpada array produk.matchedProducts.forEach((product: Product) => { // Do something here with each result });
Menjalankan kode
Jalankan aplikasi yang baru dibuat menggunakan terminal di direktori aplikasi Anda.
node index.js
npx tsx index.ts
Membersihkan sumber daya
Saat Anda tidak lagi memerlukan akun, hapus akun dari langganan Azure Anda dengan menghapus sumber daya.
az cosmosdb delete \
--resource-group "<resource-group-name>" \
--name "<account-name>"