Ücretsiz araç

DynamoDB Single-Table Design Aracı

Varlıklarınızı ve onları nasıl okumanız gerektiğini girin — planlayıcı, varlık önekli PK/SK anahtar şablonları önerir, item koleksiyonlarını önizler ve yalnızca temel tablonun bir deseni karşılayamadığı yerlerde bir GSI ekler.

Varlıklar
Erişim desenleri
Önerilen anahtar şeması
VarlıkPKSK
UserUSER#<userId>USER#<userId>
Order
User item koleksiyonunda
USER#<userId>ORDER#<orderDate>#<orderId>
GetItem · temel tabloUser item'ını ID'ye göre getir
PK = USER#<userId> AND SK = USER#<userId>
Query · temel tabloUser altındaki Order item'larını listele
PK = USER#<userId> AND begins_with(SK, 'ORDER#') ScanIndexForward: false
  • Sort key'ler string olarak karşılaştırılır — sıralama özniteliğini sıralanabilir bir biçimde saklayın (ISO-8601 tarihleri, sıfırla doldurulmuş sayılar).
Query · GSI1User item'ını email özniteliğine göre bul
GSI1PK = USER#EMAIL#<email>
  • Bir GSI benzersizliği zorlamaz — yazma anında temel item üzerinde bir koşul ifadesiyle yinelenenlere karşı koruyun.
Global secondary index'ler
GSI1User item'larını indeksler
GSI1PK = USER#EMAIL#<email> GSI1SK = USER#EMAIL#<email>
  • Bir GSI benzersizliği zorlamaz — yazma anında temel item üzerinde bir koşul ifadesiyle yinelenenlere karşı koruyun.
Örnek item'lar
VarlıkPKSKGSI1Öznitelikler
UserUSER#user-1USER#user-1USER#EMAIL#user-1@example.com USER#EMAIL#user-1@example.comuserId: user-1, email: user-1@example.com
OrderUSER#user-1ORDER#2025-06-01#order-1orderId: order-1, orderDate: 2025-06-01, userId: user-1
OrderUSER#user-1ORDER#2025-06-02#order-2orderId: order-2, orderDate: 2025-06-02, userId: user-1
Tablo tanımı (CreateTable JSON)
{
  "TableName": "AppTable",
  "BillingMode": "PAY_PER_REQUEST",
  "AttributeDefinitions": [
    {
      "AttributeName": "PK",
      "AttributeType": "S"
    },
    {
      "AttributeName": "SK",
      "AttributeType": "S"
    },
    {
      "AttributeName": "GSI1PK",
      "AttributeType": "S"
    },
    {
      "AttributeName": "GSI1SK",
      "AttributeType": "S"
    }
  ],
  "KeySchema": [
    {
      "AttributeName": "PK",
      "KeyType": "HASH"
    },
    {
      "AttributeName": "SK",
      "KeyType": "RANGE"
    }
  ],
  "GlobalSecondaryIndexes": [
    {
      "IndexName": "GSI1",
      "KeySchema": [
        {
          "AttributeName": "GSI1PK",
          "KeyType": "HASH"
        },
        {
          "AttributeName": "GSI1SK",
          "KeyType": "RANGE"
        }
      ],
      "Projection": {
        "ProjectionType": "ALL"
      }
    }
  ]
}

aws dynamodb create-table --cli-input-json için düz JSON — genel string tipli PK/SK öznitelikleri, ALL olarak projelendirilmiş GSI'ler, On-Demand faturalandırma.

Maliyet ipuçları
Item başına okuma birimi (nihai tutarlı)
0,5 RCU
Item başına yazma birimi
1 WCU
Aylık On-Demand tahmini (us-east-1) — yalnızca temel tablo
$4,93
GSI yazma çoğaltması dahil (×1)
$8,21

Her GSI, her item'ın kendi projeksiyonlu kopyasını saklar, bu yüzden bir tablo yazması her GSI'de de yazma kapasitesi tüketir. Tahmin, tam projeksiyon varsayar ve fiyatlandırma ile item boyutu hesaplayıcılarımızla aynı 4 KB okuma / 1 KB yazma yuvarlamasını kullanır.

Erişim desenlerinden anahtar şemasına

Single-table design, varlıklardan değil okumalardan başlar: tabloları normalleştirmek ve sorgu anında birleştirmek yerine, uygulamanın veri getirmesi gereken her yolu listelersiniz — bir kullanıcıyı ID'ye göre getir, bir kullanıcının siparişlerini en yeniden eskiye listele, bir hesabı e-postaya göre bul — ve anahtarları, her biri tek bir GetItem veya Query olacak şekilde biçimlendirirsiniz. Temel tablonun yanıtlayamadığı her desen size bir index'e mal olur ve bu takas, tabloyu oluşturmadan önce görünür olmalıdır.

Bu planlayıcı takası açık hale getirir. Standart single-table kurallarını deterministik olarak uygular — varlık önekli bileşik anahtarlar, bire-çok desenler için item koleksiyonları, geri kalanı için ters çevrilmiş veya öznitelik kapsamlı GSI'ler — ve bir desenin temiz bir şekilde karşılanamadığı yerde, öyleymiş gibi yapmak yerine bunu söyler. Örnek item tablosu, ortaya çıkan satırların bir partition içinde gerçekte birbirlerinin yanında nasıl durduğunu gösterir.

Çıktı, genel string tipli anahtar özniteliklerine sahip düz bir CreateTable JSON belgesidir — sonradan çözülecek araca özgü hiçbir şey yok — artı fiyatlandırma ve item boyutu hesaplayıcılarımızın kullandığı tam 4 KB okuma / 1 KB yazma yuvarlamasını yeniden kullanan maliyet ipuçları.

Kavramlarda yeni misiniz ya da yaklaşımın iş yükünüze uyduğundan emin değil misiniz? Single-table design rehberimiz fikri temel ilkelerden açıklar ve onu ne zaman KULLANMAMANIZ gerektiği dürüst karşı örnekleri ele alır. Şema belirlendikten sonra, gerçek isteği DynamoDB Sorgu Oluşturucuda oluşturun ya da tüm aylık faturayı şununla tahmin edin: DynamoDB Fiyatlandırma Hesaplayıcısı.

Sıkça sorulan sorular

DynamoDB'de single-table design nedir?

Bir uygulamanın tüm varlık tiplerinin, genel partition ve sort key öznitelikleriyle (PK/SK) tek bir tabloyu paylaştığı bir modelleme yaklaşımı. İlişkili item'lar bir partition key'i paylaşır, böylece tek bir Query onları birlikte getirir — tasarım, normalleştirilmiş varlık şekilleri yerine erişim desenlerinizce yönlendirilir.

Bu planlayıcı anahtar tasarımına nasıl karar verir?

Sabit, yayımlanmış kurallarla — üretken değil, deterministik. Her varlık, varlık önekli anahtarlarla kendi item koleksiyonunun kökü olarak başlar; ilk alt-öğe-listeleme deseni, alt öğeyi bileşik bir sort key üzerinde ebeveyninin partition'ına taşır; diğer özniteliklere göre aramalar, ikinci ebeveynler ve her-şeyi-listeleme desenleri GSI önerileri olur; ve kuralların temiz bir şekilde karşılayamadığı bir desen, uydurma bir tasarım almak yerine desteklenmiyor olarak işaretlenir.

Bir erişim deseni ne zaman bir global secondary index'e ihtiyaç duyar?

Temel tablonun anahtar düzeni onu yanıtlayamadığında: yeniden yerleştirilmiş bir alt öğeyi kendi ID'siyle getirmek, aynı item'ları ikinci bir ebeveyn altında listelemek, bir item'ı e-posta gibi anahtar olmayan bir özniteliğe göre bulmak ya da bir tipin her item'ını listelemek. Bunların her biri aynı veriyi yeniden anahtarlar; bunu yalnızca bir index yapabilir — planlayıcı her anahtar şekli için bir tane önerir ve şekli paylaşan desenler arasında onu yeniden kullanır.

GSI'ler DynamoDB maliyetini nasıl etkiler?

Her GSI, kapsadığı item'ların kendi projeksiyonlu kopyasını tutar, bu yüzden her tablo yazması, item'ı projelendiren her GSI'de de yazma kapasitesi tüketir ve depolama kopya başına faturalandırılır. Maliyet kartı, bir temel tablo tahmini ile GSI yazma çoğaltmasının dahil edildiği bir tahmini, fiyatlandırma ve item boyutu hesaplayıcılarımızla aynı 4 KB okuma / 1 KB yazma yuvarlamasını kullanarak gösterir.

Planlayıcı veri modelimi herhangi bir yere yükler mi?

Hayır. Sayfa statiktir ve tasarım tamamen tarayıcınızda hesaplanır — varlık adları, ID öznitelikleri ve erişim desenleri asla bir sunucuya ulaşmaz. Bir tasarımın sayfadan çıkmasının tek yolu “Bağlantıyı kopyala” URL'sidir; bu, tasarımı bağlantının içine paketler, böylece paylaşım bilinçli bir eylem olarak kalır.

Console olmadan DynamoDB ile çalışın

DynoTable, DynamoDB için hızlı bir masaüstü istemcisidir — tablolara göz atın, SQL tarzı sorgular çalıştırın ve item'ları yerel olarak düzenleyin.