Node.js'te DynamoDB Scan (AWS SDK v3)

Aşağıdaki do/while savunmacı kodlama değildir. Filtrelenmiş bir Scan sayfası boş bir Items dizisiyle geri gelebilir ve tablonun geri kalanı hâlâ duruyor olabilir; dolayısıyla ilk yanıtta durmak, bir taramanın eşleşme barındıran bir tabloda sıfır eşleşme bildirmesinin yoludur. Query ile Scan işlemden tümüyle ne zaman kaçınmanız gerektiğini ele alır.

Kod

import {DynamoDBClient, ScanCommand} from '@aws-sdk/client-dynamodb';

const client = new DynamoDBClient({region: 'us-east-1'});

const items = [];
let lastEvaluatedKey;

do {
  const response = await client.send(
    new ScanCommand({
      TableName: 'Music',
      FilterExpression: '#filter0 >= :filterValue0',
      ExpressionAttributeNames: {
        '#filter0': 'Year'
      },
      ExpressionAttributeValues: {
        ':filterValue0': {N: '2010'}
      },
      ExclusiveStartKey: lastEvaluatedKey
    })
  );

  items.push(...(response.Items ?? []));
  lastEvaluatedKey = response.LastEvaluatedKey;
} while (lastEvaluatedKey);

console.log(`Matched ${items.length} items`);

İki boş sayfa, 284,5 okuma birimi, 8 öğe

Düzenek, her biri yaklaşık 3,9 KB olan 600 şarkıdır; bunlardan tam olarak 8'i Year >= 2010 taşır ve en sona sıralanır. Yukarıdaki döngünün gerçekte aldığı şey şu:

Gidiş-dönüşItems.lengthScannedCountOkuma birimiLastEvaluatedKey
10271128,5var
20271128,5var
385827,5yok

Art arda iki sayfa hiçbir şey döndürür ve her biri 128,5 okuma birimine mal olur. if (!response.Items.length) return yapan kod boş bir tablo bildirir. API başvurusu kuralı açıkça belirtir: "a scan result can result in no items meeting the criteria and the Count will result in zero" ve ayrıca "a FilterExpression is applied after the items have already been read; the process of filtering does not consume any additional read capacity units".

O ikinci cümleyi faturanızın okuduğu gibi okuyun. Filtre bedavadır, attığı her şey değil: 8 öğe teslim etmek için 284,5 okuma birimi — hiç filtre kullanmasanız da ödeyeceğiniz faturanın aynısı.

2026-07-28 tarihinde node v24.18.0 üzerinde @aws-sdk/client-dynamodb 3.1095.0 ile, DynamoDB Local'e (amazon/dynamodb-local) karşı ölçüldü. Sayımlar ve kapasite, motorun kendi yanıt alanlarıdır.

Açıklama

  • İlk geçişte ExclusiveStartKey: lastEvaluatedKey undefined'dır. v3 serileştiricisi undefined üyeleri düşürür; dolayısıyla tek bir nesne değişmezi hem ilk isteği hem de sonraki her isteği karşılar. Onun yerine {} geçmek ValidationException: The provided starting key is invalid ile başarısız olur.
  • response.Items ?? [] gerçek bir iş yapıyor. Onu yukarıdaki tabloyla birleştirin: null birleştirme, hiçbir şeyle eşleşmeyen sayfalarda biriktiriciyi dürüst tutar ve while döngüyü onların ötesinde canlı tutar.
  • #filter0 süs değildir. Year, AWS'nin ayrılmış sözcük listesindedir ve takma adsız kullanmak ValidationException: Invalid FilterExpression: Attribute name is a reserved keyword; reserved keyword: Year döndürür.
  • Limit, döndürülen öğeleri değil okunan öğeleri sayar. Bu filtreyle Limit: 10 Count: 0 ve ScannedCount: 10 verir. O, kapasite sıçramaları için bir kısıtlama düğmesidir, on sonuç istemenin yolu değil.
  • Segment / TotalSegments tam tablo taramasını işçiler arasında böler. Bu, maliyeti değil duvar saatini böler — aynı 284,5 birim harcanır, yalnızca daha hızlı ve daha eşzamanlı.

Bu, gerçek bir tabloda neye mal olur

8 öğe için 284,5 okuma birimi sorunun şeklidir ve sonuçla değil tabloyla doğru orantılı ölçeklenir. Sıcak bir yolda filtrelenmiş bir taramayı sahaya sürmeden önce, tam tablo okumasını kendi öğe boyutunuz ve trafiğinizle DynamoDB fiyatlandırma hesaplayıcısında fiyatlandırın, sonra bunu aynı erişim desenini bir Query'ye dönüştüren bir GSI ile karşılaştırın.

Tabloları filtrelenmiş ve sayfalanmış sonuç ızgaralarıyla bir GUI'de keşfetmek için, bir betikten körlemesine taramak yerine DynoTable'ı indirin.

İlgili kılavuzlar

Kaynaklar

Bu isteği görsel olarak oluştur

Bu operasyonu ücretsiz DynamoDB Sorgu Oluşturucuda kur — anahtar koşulu, filtre, index, Limit, sıralama yönü ve bir sayfalama döngüsü — ve çalıştırılabilir bir SDK v3, CLI veya boto3 programı olarak geri kopyala.

DynamoDB Sorgu Oluşturucuyu aç

Console olmadan DynamoDB ile çalış

DynamoDB’nin çalıştıramadığı gerçek SQL’i çalıştıran hızlı bir DynamoDB masaüstü istemcisi — JOINs, GROUP BY, toplamalar — görsel düzenleme ve kendi Bedrock anahtarların üzerinde bir yapay zekâ aracısıyla.

30 günlük ücretsiz deneme, kredi kartı yok — ardından süre sınırı olmayan Ücretsiz plan.