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.
Bu kılavuzda, NoSQL için Azure Cosmos DB'de toplu oluşturma ve güncelleştirme işlemleri gerçekleştirmek için JavaScript için Azure SDK'daki özelliği kullanın executeBulkOperations . Bu özellik bölüm başına eşzamanlılığı ayarlar, her bir işlem için yeniden deneme mantığını otomatik olarak işler ve büyük miktarlarda (100+) işlem gerçekleştirir. Bu özellik, çağrıların azaltma olmadan başarılı olduğu durumlarda eşzamanlılığı otomatik olarak artırır ve kısıtlama gerçekleştiğinde ölçeği geri çeker.
Prerequisites
Mevcut bir NoSQL için Azure Cosmos DB hesabı
- Mevcut bir hesabınız yoksa yeni bir hesap oluşturun.
Node.js 22.x veya üzeri
Geliştirme ortamınızı başlatma
İlk proje ve tüm geliştirici bağımlılıkları ile bir geliştirme ortamı oluşturarak başlayın. Bu proje için @azure/cosmos bileşenini, bir geliştirme bağımlılığı olarak yükleyeceksiniz.
Boş bir klasörde bir terminal açın.
Yeni bir Node.js projesi başlatın.
npm initYeni oluşturulan
package.jsondosyanızı bu içerikle güncelleştirin.{ "main": "app.js", "scripts": { "start": "node app.js" } }Node Paket Yöneticisi'dan (npm)
@azure/cosmospaketini yükleyin.npm install --save @azure/cosmosImportant
Toplu yürütme özelliği, JavaScript için Azure SDK'da kitaplığın
@azure/cosmos4.3 veya sonraki sürümlerinde kullanılabilir. SDK'nın eski bir sürümünü kullanıyorsanız, bu özellikleri kullanmak için daha yeni bir sürüme geçmeniz gerekir.
Bağlantınızı ve kaynaklarınızı yapılandırma
Şimdi yüklü paketi kullanarak mevcut bir NoSQL için Azure Cosmos DB hesabına bağlantınızı yapılandırın.
CosmosClienttürünü veBulkOperationTypevePatchOperationTypedestekleyici türlerini içeri aktarın.const { BulkOperationType, PatchOperationType, CosmosClient } = require('@azure/cosmos');Hesabınız için uygun kimlik bilgilerini geçirerek
CosmosClientsınıfının yeni bir örneğini oluşturun.const client = new CosmosClient({ endpoint: '<azure-cosmos-db-nosql-account-endpoint>', credential });Mevcut veritabanınıza ve kapsayıcı kaynaklarınıza yönelik işaretçiler için sabitler oluşturun.
const database = client.database('<database-name>'); const container = database.container('<container-name>');
Çoklu upsert işlemini toplu olarak oluşturma
İki öğeyi yukarı yükleyen bir toplu işlem gerçekleştirerek başlayın. Her iki öğe de bir öğeler dizisi içinde OperationInput oluşturulmuştur.
Upsert ve Create işlemleri en azından benzersiz tanımlayıcıyı (id) ve bölüm anahtarı alanlarını içermelidir.
Note
Bu örnekte bölüm anahtarı alanıdır /category .
Kapsayıcıya yukarı eklemek üzere öğeler için iki sabit oluşturun.
const yambdaSurfboard = { id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', category: 'gear-surf-surfboards', name: 'Yamba Surfboard', quantity: 12, price: 850.0, clearance: false }; const kiamaClassicSurfboard = { id: 'bbbbbbbb-1111-2222-3333-cccccccccccc', category: 'gear-surf-surfboards', name: 'Kiama Classic Surfboard', quantity: 25, price: 790.0, clearance: true };Upsertişlemini her iki öğe için de kullanarak bir işlem dizisi oluşturun.partitionKeyözelliğini ve öğenin kendisiniresourceBodyözelliğinde açıkça belirtin.const upsertOperations = [ { operationType: BulkOperationType.Upsert, partitionKey: 'gear-surf-surfboards', resourceBody: yambdaSurfboard }, { operationType: BulkOperationType.Upsert, partitionKey: 'gear-surf-surfboards', resourceBody: kiamaClassicSurfboard } ];
Toplu işlem yanıtını ayrıştırın
Komutunu çalıştırın ve ardından toplu işlemden yanıtı gözden geçirin. Yanıt, her işlemle ilgili meta veriler içerir.
Kapsayıcınızın
executeBulkOperationsözelliğindekiitemsyöntemini kullanarak işlemleri toplu olarak gerçekleştirin.const response = await container.items.executeBulkOperations(upsertOperations); console.log(response);Yanıt nesnesini ayrıştırın. Yanıt, başarılı işlemler için bir durum kodu ve
responsenesnesi içerir. Başarısız işlemler bunun yerine birerrornesne içerir.npm run startNote
Yanıt yükünün boyutunu en aza indirmek için
contentResponseOnWriteEnableddeğerinifalseolarak ayarlayın. Bu bayrak, SDK'daki toplu ve yığın özelliklerine özgüdür.[ { operationInput: { operationType: 'Upsert', id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', partitionKey: 'gear-surf-surfboards', resourceBody: { ... } }, response: { statusCode: 201, eTag: '...', activityId: '...', requestCharge: 7.23, resourceBody: { ... }, diagnostics: { ... }, headers: { ... } } }, ... ]
Daha fazla toplu işlem gerçekleştirme
İsteğe bağlı olarak, , Readve Deletegibi Patchdiğer işlemleri gerçekleştirebilirsiniz. Bu bölümde kullanılan tüm işlemler bölüm anahtarı alanını içermelidir.
Tip
Create ve Upsert işlemleri hem hem de idbölüm anahtarı alanlarını gerektirir. Kalan işlemler , ReadDelete, , Replaceve Patch yalnızca bölüm anahtarı alanını gerektirir. Gerekli alanlar belirtilmezse işlem başarısız olur.
const variousOperations = [
{
operationType: BulkOperationType.Read,
id: 'bbbbbbbb-1111-2222-3333-cccccccccccc',
partitionKey: 'gear-surf-surfboards',
},
{
operationType: BulkOperationType.Delete,
id: 'bbbbbbbb-1111-2222-3333-cccccccccccc',
partitionKey: 'gear-surf-surfboards',
},
{
operationType: BulkOperationType.Patch,
id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb',
partitionKey: 'gear-surf-surfboards',
resourceBody: {
operations: [
{
op: PatchOperationType.add,
path: '/onSale',
value: true
}
],
},
}
]
const response = await container.items.executeBulkOperations(upsertOperations);