Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Yapılandırılmamış verileri depolamak, yönetmek ve sorgulamak için Node.js için Apache Cassandra için Azure Cosmos DB istemci kitaplığını kullanmaya başlayın. Yeni bir hesap oluşturmak, Node.js istemci kitaplığı yüklemek, hesaba bağlanmak, yaygın işlemler gerçekleştirmek ve son örnek verilerinizi sorgulamak için bu kılavuzdaki adımları izleyin.
API başvuru belgeleri | Kitaplık kaynak kodu | Paketi (npm)
Önkoşullar
Azure aboneliği
- Eğer bir Azure aboneliğiniz yoksa, başlamadan önce ücretsiz bir hesap oluşturun.
Azure Cloud Shell'deAzure CLI'nın en son sürümü.
- CLI başvuru komutlarını yerel olarak çalıştırmayı tercih ediyorsanız komutunu kullanarak
az loginAzure CLI'da oturum açın.
- CLI başvuru komutlarını yerel olarak çalıştırmayı tercih ediyorsanız komutunu kullanarak
- Node.js 22 veya üzeri
Kurulum
İlk olarak, bu kılavuz için hesap ve geliştirme ortamını ayarlayın. Bu bölümde hesap oluşturma, kimlik bilgilerini alma ve geliştirme ortamınızı hazırlama işlemi boyunca size yol gösterilir.
Hesap oluştur
Apache Cassandra hesabı için bir API oluşturarak başlayın. Hesap oluşturulduktan sonra anahtar alanını ve tablo kaynaklarını oluşturun.
Henüz bir hedef kaynak grubunuz yoksa, aboneliğinizde yeni bir kaynak grubu oluşturmak için komutunu kullanın
az group create.az group create \ --name "<resource-group-name>" \ --location "<location>"Varsayılan ayarlarla
az cosmosdb createApache Cassandra için yeni bir Azure Cosmos DB hesabı oluşturmak için komutunu kullanın.az cosmosdb create \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --locations "regionName=<location>" \ --capabilities "EnableCassandra"az cosmosdb cassandra keyspace createkullanarakcosmicworksadlı yeni bir anahtar alanı oluşturun.az cosmosdb cassandra keyspace create \ --resource-group "<resource-group-name>" \ --account-name "<account-name>" \ --name "cosmicworks"Çok satırlı bash komutunu kullanarak şemanızı temsil eden yeni bir JSON nesnesi oluşturun. Ardından komutunu kullanarak
az cosmosdb cassandra table createadlıproductsyeni bir tablo oluşturun.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"
Kimlik bilgilerini alma
Şimdi, son oluşturulan hesaba bağlantı oluşturmak için kullanılacak istemci kitaplığının parolasını alın.
Hesabın iletişim noktası ve kullanıcı adını almak için
az cosmosdb showkullanın.az cosmosdb show \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --query "{username:name,contactPoint:documentEndpoint}"Önceki komutların çıkışındaki
contactPointveusernameözelliklerinin değerlerini kaydedin. Bu özelliklerin değerleri, bu kılavuzun devamında kitaplığa bağlanmak için kullandığınız kişi noktası ve kullanıcı adıdır .az cosmosdb keys list, hesabın anahtarlarını almak için kullanın.az cosmosdb keys list \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --type "keys"Önceki komutların çıkışından
primaryMasterKeyözelliğinin değerini kaydedin. Bu özelliğin değeri, bu kılavuzun ilerleyen bölümlerinde kitaplığa bağlanmak için kullandığınız paroladır .
Geliştirme ortamını hazırlama
Ardından geliştirme ortamınızı yeni bir proje ve istemci kitaplığıyla yapılandırın. Bu adım, bu kılavuzun geri kalanına geçmeden önce gereken son önkoşuldur.
Boş bir klasörden başlayın.
Yeni bir modül başlatın.
npm init es6 --yescassandra-driverNode Package Manager'dan (npm) paketi yükleyin.npm install --save cassandra-driverindex.js dosyasını oluşturun.
Boş bir klasörde başlayın.
Yeni bir modül başlatın.
npm init es6 --yestypescriptNode Package Manager'dan (npm) paketi yükleyin.npm install --save-dev typescripttsxPaketi npm'den yükleyin.npm install --save-dev tsxcassandra-driverPaketi npm'den yükleyin.npm install --save cassandra-driverDerleyiciyi ()
tsckullanarak TypeScript projesini başlatın.npx tsc --init --target es2017 --module es2022 --moduleResolution nodenextindex.ts dosyasını oluşturun.
Nesne modeli
| Açıklama | |
|---|---|
Client |
Kümeye belirli bir bağlantıyı temsil eder |
Mapper |
Sorgu çalıştırmak için kullanılan Cassandra Sorgu Dili (CQL) istemcisi |
Kod örnekleri
İstemcinin kimliğini doğrulama
Bu kılavuzda daha önce toplanan kimlik bilgilerini kullanarak istemcinin kimliğini doğrulayarak başlayın.
tümleşik geliştirme ortamınızda (IDE) index.js dosyasını açın.
Modülden aşağıdaki türleri içeri aktarın
cassandra-driver:cassandracassandra.Clientcassandra.mapping.Mappercassandra.auth.PlainTextAuthProvider
import cassandra from 'cassandra-driver'; const { Client } = cassandra; const { Mapper } = cassandra.mapping; const { PlainTextAuthProvider } = cassandra.auth;Bu kılavuzun önceki bölümlerinde toplanan kimlik bilgileri için dize sabit değişkenleri oluşturun. Değişkenleri
username,passwordvecontactPointolarak adlandırın.const username = '<username>'; const password = '<password>'; const contactPoint = '<contact-point>';Apache Cassandra için Azure Cosmos DB hesabınızı oluşturduğunuz bölge için başka bir dize değişkeni oluşturun. Bu değişkene adını verin
region.const region = '<azure-region>';Önceki adımlarda belirtilen kimlik bilgileriyle yeni
PlainTextAuthProviderbir nesne oluşturun.let authProvider = new PlainTextAuthProvider( username, password );Önceki adımlarda oluşturulan kimlik bilgilerini ve yapılandırma değişkenlerini kullanarak bir
Clientnesne oluşturun.let client = new Client({ contactPoints: [`${contactPoint}:10350`], authProvider: authProvider, localDataCenter: region, sslOptions: { secureProtocol: 'TLSv1_2_method' }, });Kümeye eş zamansız olarak bağlanın.
await client.connect();cosmicworksanahtar uzayını veproducttabloyu hedefleyen yeni bir eşleyici oluşturun. EşleyiciyiProductolarak adlandırın.const mapper = new Mapper(client, { models: { 'Product': { tables: ['product'], keyspace: 'cosmicworks' } } });forModelişlevini veProducteşleyici adını kullanarak bir eşleyici örneği oluşturun.const productMapper = mapper.forModel('Product');
tümleşik geliştirme ortamınızda (IDE) index.ts dosyasını açın.
Modülden aşağıdaki türleri içeri aktarın
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;Bu kılavuzun önceki bölümlerinde toplanan kimlik bilgileri için dize sabit değişkenleri oluşturun. Değişkenleri
username,passwordvecontactPointolarak adlandırın.const username: string = '<username>'; const password: string = '<password>'; const contactPoint: string = '<contact-point>';Apache Cassandra için Azure Cosmos DB hesabınızı oluşturduğunuz bölge için başka bir dize değişkeni oluşturun. Bu değişkene adını verin
region.const region: string = '<azure-region>';Önceki adımlarda belirtilen kimlik bilgileriyle yeni
PlainTextAuthProviderbir nesne oluşturun.let authProvider = new PlainTextAuthProvider( username, password );Aktarım katmanı güvenliği (TLS) 1.2 protokolunu kullanmanızı sağlayan seçeneklerle anonim bir nesne oluşturun.
let sslOptions = { secureProtocol: 'TLSv1_2_method' };Önceki adımlarda oluşturulan kimlik bilgilerini ve yapılandırma değişkenlerini kullanarak bir
ClientOptionsnesne oluşturun.let clientOptions: ClientOptions = { contactPoints: [`${contactPoint}:10350`], authProvider: authProvider, localDataCenter: region, sslOptions: sslOptions };Oluşturucudaki değişkenini
Clientkullanarak birclientOptionsnesne oluşturun.let client = new Client(clientOptions);Kümeye eş zamansız olarak bağlanın.
await client.connect();cosmicworksanahtar uzayını veproducttabloyu hedefleyen yeni bir eşleyici oluşturun. EşleyiciyiProductolarak adlandırın.const mapper = new Mapper( client, { models: { 'Product': { tables: ['product'], keyspace: 'cosmicworks' } } });forModelişlevini veProducteşleyici adını kullanarak bir eşleyici örneği oluşturun.const productMapper = mapper.forModel('Product');
Uyarı
Kimlik doğrulamasını basitleştirmek için bu kılavuzda tam aktarım katmanı güvenliği (TLS) doğrulaması devre dışı bırakılmıştır. Üretim dağıtımları için doğrulamayı tam olarak etkinleştirin.
Verileri ekleme ve güncelleme
Ardından, yeni verileri bir tabloya ekle. Yükseltme, aynı verilerin tabloda zaten var olup olmadığına bağlı olarak verilerin uygun şekilde oluşturulmasını veya değiştirilmesini sağlar.
adlı
productdeğişkende yeni bir nesne oluşturun.const product = { id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', name: 'Yamba Surfboard', category: 'gear-surf-surfboards', quantity: 12, price: 850.00, clearance: false };Önceki adımda oluşturulan
insertdeğişkenini geçirerekproductişlevini zaman uyumsuz olarak çağırın.await productMapper.insert(product);
Bu kılavuzun önceki bölümlerinde oluşturulan tabloya karşılık gelen alanlarla adlı
Productyeni bir arabirim tanımlayın.Türü IdstringNamestringCategorystringQuantityintPricedecimalClearanceboolinterface Product { id: string; name: string; category: string; quantity: number; price: number; clearance: boolean; }Tip
Node.jsiçinde, bu türü başka bir dosyada veya var olan dosyanın sonunda oluşturabilirsiniz.
türünde
Productyeni bir nesne oluşturun. nesnesini adlıproductbir değişkende depolayın.const product: Product = { id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', name: 'Yamba Surfboard', category: 'gear-surf-surfboards', quantity: 12, price: 850.00, clearance: false };Önceki adımda oluşturulan
insertdeğişkenini geçirerekproductişlevini zaman uyumsuz olarak çağırın.await productMapper.insert(product);
Veriyi oku
Ardından, tabloya daha önce yüklenmiş olan verileri okuyun.
adlı
filteranonim bir nesne oluşturun. Bu nesneye, bu kılavuzda daha önce oluşturulan ürünle aynı değere sahip adlıidbir özellik ekleyin.const filter = { id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb' };değişkenini
getgeçiren eşleyicinin işlevini çağırınfilter. Sonucu adlımatchedProductbir değişkende depolayın.let matchedProduct = await productMapper.get(filter);
adlı
filteranonim bir nesne oluşturun. Bu nesneye, bu kılavuzda daha önce oluşturulan ürünle aynı değere sahip adlıidbir özellik ekleyin.const filter = { id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb' };değişkenini
getgeçiren eşleyicinin işlevini çağırınfilter. SonucumatchedProducttüründeProductadlı bir değişkende depolayın.let matchedProduct: Product = await productMapper.get(filter);
Sorgu verileri
Son olarak, tablodaki belirli bir filtreyle eşleşen tüm verileri bulmak için bir sorgu kullanın.
Aynı
queryalana sahip öğelerle eşleşen bir CQL sorgusuyla adlıcategoryyeni bir dize değişkeni oluşturun.const query = ` SELECT * FROM cosmicworks.product WHERE category = :category ALLOW FILTERING `;adlı
paramsanonim bir nesne oluşturun. Bu nesneye, bu kılavuzda daha önce oluşturulan ürünle aynı değere sahip adlıcategorybir özellik ekleyin.const params = { category: 'gear-surf-surfboards' };executevequerydeğişkenlerini argüman olarak geçirerekparamsişlevini zaman uyumsuz olarak çağırın. Sonucunrowsözelliğini adlımatchedProductsbir değişken olarak depolayın.let { rows: matchedProducts } = await client.execute(query, params);Yöntemini ürün dizisinde çağırarak
foreachsorgu sonuçları üzerinde yineleme yapın.matchedProducts.forEach(product => { // Do something here with each result });
Aynı
queryalana sahip öğelerle eşleşen bir CQL sorgusuyla adlıcategoryyeni bir dize değişkeni oluşturun.const query: string = ` SELECT * FROM cosmicworks.product WHERE category = :category ALLOW FILTERING `;adlı
paramsanonim bir nesne oluşturun. Bu nesneye, bu kılavuzda daha önce oluşturulan ürünle aynı değere sahip adlıcategorybir özellik ekleyin.const params = { category: 'gear-surf-surfboards' };executevequerydeğişkenlerini argüman olarak geçirerekparamsişlevini zaman uyumsuz olarak çağırın. Sonucuresulttüründetypes.ResultSetadlı bir değişkende depolayın.let result: types.ResultSet = await client.execute(query, params);Sonucun
rowsözelliğini, türümatchedProductsolan veProduct[]adlı bir değişken olarak depolayın.let matchedProducts: Product[] = result.rows;Yöntemini ürün dizisinde çağırarak
foreachsorgu sonuçları üzerinde yineleme yapın.matchedProducts.forEach((product: Product) => { // Do something here with each result });
Kodu çalıştır
Uygulama dizininizde bir terminal kullanarak yeni oluşturulan uygulamayı çalıştırın.
node index.js
npx tsx index.ts
Kaynakları temizle
Hesaba artık ihtiyacınız kalmadığında, kaynağı silerek hesabı Azure aboneliğinizden kaldırın.
az cosmosdb delete \
--resource-group "<resource-group-name>" \
--name "<account-name>"