

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Komponen inti dari Amazon DynamoDB
<a name="HowItWorks.CoreComponents"></a>

Dalam DynamoDB, tabel, item, dan atribut adalah komponen inti yang Anda kerjakan. Sebuah *tabel* adalah koleksi *item*, dan setiap item adalah koleksi *atribut*. DynamoDB menggunakan kunci utama untuk mengidentifikasi secara unik setiap item dalam tabel. Anda dapat menggunakan DynamoDB Streams untuk menangkap peristiwa modifikasi data dalam tabel DynamoDB.

 Ada batas dalam DynamoDB. Untuk informasi selengkapnya, lihat [Kuota di Amazon DynamoDB](ServiceQuotas.md).

Video berikut ini akan memberi Anda tampilan pengantar tabel, item, dan atribut.

[Tabel, item, dan atribut](https://www.youtube.com/embed/Mw8wCj0gkRc)

## Tabel, item, dan atribut
<a name="HowItWorks.CoreComponents.TablesItemsAttributes"></a>

![\[Setiap tabel DynamoDB berisi nol atau lebih item yang terbuat dari satu atau lebih atribut.\]](http://docs.aws.amazon.com/id_id/amazondynamodb/latest/developerguide/images/HowItWorksTables-2024.png)


Berikut ini adalah komponen DynamoDB dasar:
+ **Tabel** – Mirip dengan sistem basis data lainnya, DynamoDB menyimpan data dalam tabel. Sebuah *tabel* adalah koleksi data. Misalnya, lihat tabel contoh yang disebut *Orang* yang dapat Anda gunakan untuk menyimpan informasi kontak pribadi tentang teman, keluarga, atau orang lain yang menarik. Anda juga dapat memiliki tabel *Mobil* untuk menyimpan informasi tentang kendaraan yang dikendarai orang.
+ **Item** — Setiap tabel berisi nol item atau lebih. Sebuah *item* adalah sekelompok atribut yang dapat diidentifikasi secara unik di antara semua item lainnya. Dalam tabel *Orang*, setiap item mewakili satu orang. Untuk tabel *Mobil*, setiap item mewakili satu kendaraan. Item dalam DynamoDB serupa dalam banyak hal dengan baris, catatan, atau tupel dalam sistem basis data lain. Dalam DynamoDB, tidak ada batasan jumlah item yang dapat Anda simpan dalam tabel.
+ **Atribut** — Setiap item terdiri dari satu atau beberapa atribut. Sebuah *atribut* adalah elemen data fundamental, sesuatu yang tidak perlu dipecah lebih jauh. Misalnya, item dalam tabel *People* berisi atribut yang disebut *personId*,, *LastName*FirstName**, dan sebagainya. Untuk tabel *Departemen*, item mungkin memiliki atribut seperti *DepartmentID*, *Name*, *Manager*, dan sebagainya. Atribut di DynamoDB serupa dalam banyak hal dengan bidang atau kolom dalam sistem basis data lain.

Diagram berikut menunjukkan tabel bernama *Orang* dengan beberapa item dan atribut contoh.

```
People

{
    "PersonID": 101,
    "LastName": "Smith",
    "FirstName": "Fred",
    "Phone": "555-4321"
}

{
    "PersonID": 102,
    "LastName": "Jones",
    "FirstName": "Mary",
    "Address": {
                "Street": "123 Main",
                "City": "Anytown",
                "State": "OH",
                "ZIPCode": 12345
    }
}

{
    "PersonID": 103,
    "LastName": "Stephens",
    "FirstName": "Howard",
    "Address": {
                "Street": "123 Main",
                "City": "London",                                    
                "PostalCode": "ER3 5K8"
    },
    "FavoriteColor": "Blue"
}
```

Perhatikan hal berikut tentang tabel *Orang*:
+ Setiap item dalam tabel memiliki pengidentifikasi unik, atau kunci primer, yang membedakan item dari semua hal lain dalam tabel. Dalam tabel *Orang*, kunci primer terdiri dari satu atribut (*PersonID*).
+ Selain kunci primer, tabel *Orang* tidak berskema, yang berarti bahwa baik atribut maupun jenis datanya perlu didefinisikan terlebih dahulu. Setiap item dapat memiliki atribut tersendiri.
+ Sebagian besar atribut *skalar*, yang berarti bahwa mereka hanya dapat memiliki satu nilai. String dan angka adalah contoh umum dari skalar.
+ Beberapa item memiliki atribut bersarang (*Alamat*). DynamoDB mendukung atribut bersarang hingga sedalam 32 tingkat.

Berikut ini adalah tabel contoh lain bernama *Musik* yang dapat Anda gunakan untuk melacak koleksi musik Anda.

```
Music

{
    "Artist": "No One You Know",
    "SongTitle": "My Dog Spot",
    "AlbumTitle": "Hey Now",
    "Price": 1.98,
    "Genre": "Country",
    "CriticRating": 8.4
}

{
    "Artist": "No One You Know",
    "SongTitle": "Somewhere Down The Road",
    "AlbumTitle": "Somewhat Famous",
    "Genre": "Country",
    "CriticRating": 8.4,
    "Year": 1984
}

{
    "Artist": "The Acme Band",
    "SongTitle": "Still in Love",
    "AlbumTitle": "The Buck Starts Here",
    "Price": 2.47,
    "Genre": "Rock",
    "PromotionInfo": {
        "RadioStationsPlaying": [
            "KHCR",
            "KQBX",
            "WTNR",
            "WJJH"
        ],
        "TourDates": {
            "Seattle": "20150622",
            "Cleveland": "20150630"
        },
        "Rotation": "Heavy"
    }
}

{
    "Artist": "The Acme Band",
    "SongTitle": "Look Out, World",
    "AlbumTitle": "The Buck Starts Here",
    "Price": 0.99,
    "Genre": "Rock"
}
```

Perhatikan hal berikut tentang tabel *Musik*:
+ Kunci utama untuk *Musik* terdiri dari dua atribut (*Artis* dan *SongTitle*). Setiap item dalam tabel harus memiliki dua atribut ini. Kombinasi *Artis* dan *SongTitle*membedakan setiap item dalam tabel dari yang lainnya.
+ Selain kunci primer, tabel *Musik* tidak berskema, yang berarti bahwa baik atribut maupun jenis datanya perlu didefinisikan terlebih dahulu. Setiap item dapat memiliki atribut tersendiri.
+ Salah satu item memiliki atribut bersarang (*PromotionInfo*), yang berisi atribut bersarang lainnya. DynamoDB mendukung atribut bersarang hingga sedalam 32 tingkat.

 Untuk informasi selengkapnya, lihat [Bekerja dengan tabel dan data di DynamoDB](WorkingWithTables.md).

## Kunci primer
<a name="HowItWorks.CoreComponents.PrimaryKey"></a>

Ketika Anda membuat tabel, selain nama tabel, Anda harus menentukan kunci primer dari tabel. Kunci utama secara unik mengidentifikasi setiap item dalam tabel, sehingga tidak ada dua item dapat memiliki kunci yang sama.

DynamoDB mendukung dua jenis kunci primer:
+ **Kunci partisi** — Sebuah kunci primer sederhana, terdiri dari satu atribut yang dikenal sebagai *kunci partisi*.

  DynamoDB menggunakan nilai kunci partisi sebagai masukan untuk fungsi hash internal. Output dari fungsi hash menentukan partisi (penyimpanan fisik internal pada DynamoDB) di mana item akan disimpan. 

   Dalam tabel yang hanya memiliki kunci partisi, tidak ada dua item dapat memiliki nilai kunci partisi yang sama.

  Tabel *Orang* yang dijelaskan dalam [Tabel, item, dan atribut](#HowItWorks.CoreComponents.TablesItemsAttributes) adalah contoh dari sebuah tabel dengan kunci primer sederhana (*PersonID*). Anda dapat mengakses item apa pun di tabel *Orang* secara langsung dengan memberikan *PersonId*nilai untuk item tersebut.
+ **Kunci partisi dan kunci urutan** – Disebut sebagai *kunci primer komposit*, jenis kunci ini terdiri dari dua atribut. Atribut pertama adalah *kunci partisi*, dan atribut kedua adalah *kunci urutan*.

  DynamoDB menggunakan nilai kunci partisi sebagai input untuk fungsi hash internal. Output dari fungsi hash menentukan partisi (penyimpanan fisik internal pada DynamoDB) di mana item akan disimpan. Semua item dengan nilai kunci partisi yang sama disimpan bersama-sama, dalam urutan yang diurutkan berdasarkan nilai kunci urutan.

  Dalam tabel yang memiliki kunci partisi dan kunci urutan, mungkin bagi beberapa item memiliki nilai kunci partisi yang sama. Namun, item tersebut harus memiliki nilai kunci urutan yang berbeda.

  Tabel *Musik* yang dijelaskan dalam [Tabel, item, dan atribut](#HowItWorks.CoreComponents.TablesItemsAttributes) adalah contoh tabel dengan kunci primer komposit (*Artis* dan *SongTitle*). Anda dapat mengakses item apa pun di tabel *Musik* secara langsung, jika Anda memberikan *Artis* dan *SongTitle*nilai untuk item tersebut.

  Kunci primer komposit memberi Anda fleksibilitas tambahan saat mengkueri data. Misalnya, jika Anda hanya memberikan nilai untuk *Artist*, DynamoDB mengambil semua lagu oleh penyanyi tersebut. Untuk mengambil hanya subset lagu oleh artis tertentu, Anda dapat memberikan nilai untuk *Artis* bersama dengan berbagai nilai untuk. *SongTitle*

**catatan**  
Kunci partisi dari item juga dikenal sebagai *atribut hash*. Istilah *atribut hash* berasal dari penggunaan fungsi hash internal di DynamoDB yang mendistribusikan item data secara merata di seluruh partisi, berdasarkan nilai kunci partisi mereka.  
Kunci urutan item juga dikenal sebagai *atribut rentang*. Istilah *atribut rentang* berasal dari cara DynamoDB menyimpan item dengan kunci partisi yang sama yang secara fisik berdekatan, dalam urutan berdasarkan nilai kunci urutan.

Setiap atribut kunci primer harus skalar (yang berarti bahwa atribut itu hanya dapat menyimpan nilai tunggal). Satu-satunya jenis data yang diperbolehkan untuk atribut kunci primer adalah string, nomor, atau biner. Tidak ada batasan seperti itu untuk atribut non-kunci lainnya.

## Indeks sekunder
<a name="HowItWorks.CoreComponents.SecondaryIndexes"></a>

Anda dapat membuat satu atau beberapa indeks sekunder pada tabel. *Indeks sekunder* memungkinkan Anda mengkueri data dalam tabel menggunakan kunci alternatif, selain kueri terhadap kunci primer. DynamoDB tidak mengharuskan Anda menggunakan indeks, tetapi mereka memberikan aplikasi Anda fleksibilitas lebih ketika mengkueri pada data Anda. Setelah Anda membuat indeks sekunder pada tabel, Anda bisa membaca data dari indeks dengan cara yang sama seperti yang Anda lakukan dari tabel.

DynamoDB mendukung dua jenis indeks:
+ Indeks sekunder global – Indeks dengan kunci partisi dan kunci urutan yang mungkin berbeda dari yang ada di tabel. Nilai kunci primer dalam indeks sekunder global tidak perlu unik.
+ Indeks sekunder lokal – Indeks yang memiliki kunci partisi yang sama dengan tabel, namun kunci urutan berbeda.

Di DynamoDB, indeks sekunder global GSIs () adalah indeks yang menjangkau seluruh tabel, memungkinkan Anda untuk melakukan kueri di semua kunci partisi. Indeks sekunder lokal (LSIs) adalah indeks yang memiliki kunci partisi yang sama dengan tabel dasar tetapi kunci pengurutan yang berbeda.

Setiap tabel di DynamoDB memiliki kuota 20 indeks sekunder global (kuota default) dan 5 indeks sekunder lokal.

Dalam contoh tabel *Musik* yang ditampilkan sebelumnya, Anda dapat meminta item data berdasarkan *Artis* (kunci partisi) atau oleh *Artis* dan *SongTitle*(kunci partisi dan kunci sortir). Bagaimana jika Anda juga ingin menanyakan data berdasarkan *Genre* dan *AlbumTitle*? Untuk melakukan ini, Anda dapat membuat indeks pada *Genre* dan *AlbumTitle*, lalu menanyakan indeks dengan cara yang sama seperti Anda menanyakan tabel *Musik*.

Diagram berikut menunjukkan contoh tabel *Musik*, dengan indeks baru yang disebut *GenreAlbumTitle*. Dalam indeks, *Genre* adalah kunci partisi dan *AlbumTitle*merupakan kunci sortir.


| Tabel Musik | *GenreAlbumTitle* | 
| --- | --- | 
|  <pre><br />{<br />    "Artist": "No One You Know",<br />    "SongTitle": "My Dog Spot",<br />    "AlbumTitle": "Hey Now",<br />    "Price": 1.98,<br />    "Genre": "Country",<br />    "CriticRating": 8.4<br />}                               <br />                                </pre>  |  <pre><br />{<br />    "Genre": "Country",<br />    "AlbumTitle": "Hey Now",<br />    "Artist": "No One You Know",<br />    "SongTitle": "My Dog Spot"<br />}<br />                                </pre>  | 
|  <pre><br />{<br />    "Artist": "No One You Know",<br />    "SongTitle": "Somewhere Down The Road",<br />    "AlbumTitle": "Somewhat Famous",<br />    "Genre": "Country",<br />    "CriticRating": 8.4,<br />    "Year": 1984<br />}<br />                                </pre>  |  <pre><br />{<br />    "Genre": "Country",<br />    "AlbumTitle": "Somewhat Famous",<br />    "Artist": "No One You Know",<br />    "SongTitle": "Somewhere Down The Road"<br />}<br />                                </pre>  | 
|  <pre><br />{<br />    "Artist": "The Acme Band",<br />    "SongTitle": "Still in Love",<br />    "AlbumTitle": "The Buck Starts Here",<br />    "Price": 2.47,<br />    "Genre": "Rock",<br />    "PromotionInfo": {<br />        "RadioStationsPlaying": {<br />            "KHCR",<br />            "KQBX",<br />            "WTNR",<br />            "WJJH"<br />        },<br />        "TourDates": {<br />            "Seattle": "20150622",<br />            "Cleveland": "20150630"<br />        },<br />        "Rotation": "Heavy"<br />    }<br />}<br />                                </pre>  |  <pre><br />{<br />    "Genre": "Rock",<br />    "AlbumTitle": "The Buck Starts Here",<br />    "Artist": "The Acme Band",<br />    "SongTitle": "Still In Love"<br />}<br />                                </pre>  | 
|  <pre><br />{<br />    "Artist": "The Acme Band",<br />    "SongTitle": "Look Out, World",<br />    "AlbumTitle": "The Buck Starts Here",<br />    "Price": 0.99,<br />    "Genre": "Rock"<br />}<br />                                </pre>  |  <pre><br />{<br />    "Genre": "Rock",<br />    "AlbumTitle": "The Buck Starts Here",<br />    "Artist": "The Acme Band",<br />    "SongTitle": "Look Out, World"<br />}<br />                                </pre>  | 

Perhatikan hal berikut tentang *GenreAlbumTitle*indeks:
+ Setiap indeks adalah milik sebuah tabel, yang disebut *tabel dasar* untuk indeks. Dalam contoh sebelumnya, *Musik* adalah tabel dasar untuk indeks. *GenreAlbumTitle*
+ DynamoDB mengelola indeks secara otomatis. Saat Anda menambahkan, memperbarui, atau menghapus item di tabel dasar, DynamoDB menambahkan, memperbarui, atau menghapus item terkait di indeks mana pun yang termasuk dalam tabel tersebut.
+ Saat Anda membuat indeks, Anda menentukan atribut mana yang akan disalin, atau *diproyeksikan*, dari tabel dasar ke indeks. Minimal, DynamoDB memproyeksikan atribut kunci dari tabel dasar ke indeks. Hal ini terjadi pada `GenreAlbumTitle`, dimana hanya atribut kunci dari tabel yang `Music` diproyeksikan ke dalam indeks.

Anda dapat menanyakan *GenreAlbumTitle*indeks untuk menemukan semua album dari genre tertentu (misalnya, semua album *Rock*). Anda juga dapat menanyakan indeks untuk menemukan semua album dalam genre tertentu yang memiliki judul album tertentu (misalnya, semua album *Country* dengan judul yang dimulai dengan huruf H).

Untuk informasi selengkapnya, lihat [Meningkatkan akses data dengan indeks sekunder di DynamoDB](SecondaryIndexes.md).

## DynamoDB Streams
<a name="HowItWorks.CoreComponents.Streams"></a>

DynamoDB Streams adalah fitur opsional yang menangkap peristiwa modifikasi data dalam tabel DynamoDB. Data tentang peristiwa ini muncul di aliran hampir dalam waktu nyata, dan sesuai urutan terjadinya peristiwa tersebut.

Setiap acara diwakili oleh *catatan aliran*. Jika Anda mengaktifkan aliran pada tabel, DynamoDB Streams menulis catatan aliran setiap kali salah satu peristiwa berikut terjadi:
+ Item baru ditambahkan ke tabel: Aliran mengambil gambar keseluruhan item, termasuk semua atributnya.
+ Item diperbarui: Aliran menangkap gambar "sebelum" dan "sesudah" dari setiap atribut yang diubah dalam item.
+ Item dihapus dari tabel: Aliran mengambil gambar keseluruhan item sebelum dihapus.

Setiap rekaman aliran juga berisi nama tabel, stempel waktu peristiwa, dan metadata lainnya. Rekaman streaming memiliki masa pakai 24 jam; setelah itu, mereka secara otomatis dihapus dari aliran.

Anda dapat menggunakan DynamoDB Streams AWS Lambda bersama-sama untuk membuat pemicu —kode *yang* berjalan secara otomatis setiap kali peristiwa yang diinginkan muncul dalam aliran. Misalnya, pertimbangkan tabel *Pelanggan* yang berisi informasi pelanggan untuk sebuah perusahaan. Misalkan Anda ingin mengirim email "selamat datang" ke setiap pelanggan baru. Anda dapat mengaktifkan aliran pada tabel itu, dan kemudian mengaitkan aliran tersebut dengan fungsi Lambda. Fungsi Lambda akan berjalan setiap kali rekaman aliran baru muncul, namun hanya memproses item baru yang ditambahkan ke tabel *Pelanggan*. Untuk item apa pun yang memiliki atribut `EmailAddress`, fungsi Lambda akan memanggil Amazon Simple Email Service (Amazon SES) untuk mengirim email ke alamat tersebut.

![\[Integrasi DynamoDB Streams dan Lambda untuk secara otomatis mengirim email selamat datang ke pelanggan baru.\]](http://docs.aws.amazon.com/id_id/amazondynamodb/latest/developerguide/images/HowItWorksStreams.png)


**catatan**  
Dalam contoh ini, pelanggan terakhir, Craig Roe, tidak akan menerima email karena dia tidak memiliki `EmailAddress`.

Selain pemicu, DynamoDB Streams memungkinkan solusi canggih seperti replikasi data di dalam dan AWS di seluruh Wilayah, tampilan data yang terwujud dalam tabel DynamoDB, analisis data menggunakan tampilan terwujud Kinesis, dan banyak lagi.

Untuk informasi selengkapnya, lihat [Tangkapan data perubahan DynamoDB Streams](Streams.md).