Tool gratis

DynamoDB Single-Table Design Tool

Masukkan entitas Anda dan bagaimana Anda perlu membacanya — perencana menyarankan template key PK/SK berprefiks-entitas, mempratinjau item collection, dan menambahkan GSI hanya di tempat tabel dasar tidak dapat melayani sebuah pola.

Entitas
Pola akses
Skema key yang disarankan
EntitasPKSK
UserUSER#<userId>USER#<userId>
Order
di item collection User
USER#<userId>ORDER#<orderDate>#<orderId>
GetItem · tabel dasarAmbil User berdasarkan ID
PK = USER#<userId> AND SK = USER#<userId>
Query · tabel dasarDaftar Order di bawah User
PK = USER#<userId> AND begins_with(SK, 'ORDER#') ScanIndexForward: false
  • Sort key dibandingkan sebagai string — simpan atribut sortir dalam format yang dapat diurutkan (tanggal ISO-8601, angka berpad-nol).
Query · GSI1Temukan User berdasarkan email
GSI1PK = USER#EMAIL#<email>
  • Sebuah GSI tidak menegakkan keunikan — cegah duplikat saat penulisan dengan condition expression pada item dasar.
Global secondary index
GSI1Mengindeks item User
GSI1PK = USER#EMAIL#<email> GSI1SK = USER#EMAIL#<email>
  • Sebuah GSI tidak menegakkan keunikan — cegah duplikat saat penulisan dengan condition expression pada item dasar.
Contoh item
EntitasPKSKGSI1Atribut
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
Definisi tabel (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"
      }
    }
  ]
}

JSON biasa untuk aws dynamodb create-table --cli-input-json — atribut PK/SK bertipe-string generik, GSI diproyeksikan ALL, penagihan On-Demand.

Petunjuk biaya
Read unit per item (eventually consistent)
0,5 RCU
Write unit per item
1 WCU
Estimasi On-Demand bulanan (us-east-1) — hanya tabel dasar
US$4,93
Termasuk replikasi penulisan GSI (×1)
US$8,21

Setiap GSI menyimpan salinan terproyeksinya sendiri dari setiap item, sehingga satu penulisan tabel juga menghabiskan write capacity pada setiap GSI. Estimasi mengasumsikan proyeksi penuh dan menggunakan pembulatan 4 KB read / 1 KB write yang sama seperti kalkulator harga dan ukuran Item kami.

Dari pola akses ke skema key

Single-table design dimulai dari pembacaan, bukan dari entitas: alih-alih menormalisasi tabel dan melakukan join saat query, Anda mendaftar setiap cara aplikasi perlu mengambil data — mengambil satu user berdasarkan ID, mendaftar order milik user dari yang terbaru, menemukan satu akun berdasarkan email — dan membentuk key sehingga masing-masing menjadi satu GetItem atau Query. Setiap pola yang tidak dapat dijawab tabel dasar menghabiskan satu index bagi Anda, dan trade-off itu seharusnya terlihat sebelum Anda membuat tabel.

Perencana ini membuat trade-off itu eksplisit. Ia menerapkan aturan single-table standar secara deterministik — composite key berprefiks-entitas, item collection untuk pola one-to-many, GSI terbalik atau bercakupan-atribut untuk sisanya — dan di tempat sebuah pola tidak dapat dilayani dengan bersih, ia mengatakannya alih-alih berpura-pura. Tabel item-contoh menunjukkan bagaimana baris yang dihasilkan benar-benar berada bersebelahan di dalam sebuah partisi.

Outputnya adalah dokumen JSON CreateTable biasa dengan atribut key bertipe-string generik — tidak ada yang spesifik-tool untuk diurai belakangan — plus petunjuk biaya yang menggunakan kembali pembulatan 4 KB read / 1 KB write persis yang dipakai kalkulator harga dan ukuran Item kami.

Baru mengenal konsepnya, atau tidak yakin pendekatan ini cocok dengan workload Anda? Panduan single-table design kami menjelaskan idenya dari prinsip pertama, dan kapan TIDAK menggunakannya membahas kontra-kasus yang jujur. Setelah skema ditetapkan, susun request sebenarnya di DynamoDB Query Builder atau perkirakan seluruh tagihan bulanan dengan Kalkulator Harga DynamoDB.

Pertanyaan yang sering diajukan

Apa itu single-table design di DynamoDB?

Sebuah pendekatan pemodelan di mana semua tipe entitas sebuah aplikasi berbagi satu tabel dengan atribut partition key dan sort key generik (PK/SK). Item yang berkaitan berbagi partition key sehingga satu Query mengambil semuanya sekaligus — desainnya didorong oleh pola akses Anda alih-alih oleh bentuk entitas yang dinormalisasi.

Bagaimana perencana ini menentukan desain key?

Dengan aturan yang tetap dan terpublikasi — deterministik, bukan generatif. Setiap entitas dimulai sebagai akar dari item collection-nya sendiri dengan key berprefiks-entitas; pola list-children pertama memindahkan anak ke partisi induknya pada sort key komposit; pencarian berdasarkan atribut lain, induk kedua, dan pola list-everything menjadi saran GSI; dan pola yang tidak dapat dilayani aturan dengan bersih ditandai sebagai tidak didukung alih-alih menerima desain karangan.

Kapan sebuah pola akses membutuhkan global secondary index?

Saat tata letak key tabel dasar tidak dapat menjawabnya: mengambil anak yang telah dipindahkan berdasarkan ID-nya sendiri, mendaftar item yang sama di bawah induk kedua, menemukan sebuah item berdasarkan atribut non-key seperti email, atau mendaftar setiap item dari satu tipe. Masing-masing me-rekey data yang sama, yang hanya dapat dilakukan oleh sebuah index — perencana menyarankan satu per bentuk key dan menggunakannya kembali di seluruh pola yang berbagi bentuk itu.

Bagaimana GSI memengaruhi biaya DynamoDB?

Setiap GSI memelihara salinan terproyeksinya sendiri dari item yang dicakupnya, sehingga setiap penulisan tabel juga menghabiskan write capacity pada setiap GSI yang memproyeksikan item itu, dan penyimpanan ditagih per salinan. Kartu biaya menampilkan estimasi tabel dasar dan satu dengan replikasi penulisan GSI disertakan, menggunakan pembulatan 4 KB read / 1 KB write yang sama seperti kalkulator harga dan ukuran Item kami.

Apakah perencana mengunggah model data saya ke mana pun?

Tidak. Halamannya statis dan desainnya dihitung sepenuhnya di browser Anda — nama entitas, atribut ID, dan pola akses tidak pernah sampai ke server. Satu-satunya cara sebuah desain keluar dari halaman adalah URL “Salin tautan”, yang mengemasnya ke dalam tautan sehingga berbagi tetap menjadi tindakan yang disengaja.

Bekerja dengan DynamoDB tanpa Console

DynoTable adalah klien desktop yang cepat untuk DynamoDB — jelajahi tabel, jalankan query gaya SQL, dan edit Item secara lokal.