Bekerja dengan Indeks Sekunder Global di DynamoDB menggunakan AWS CLI - Amazon DynamoDB

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

Bekerja dengan Indeks Sekunder Global di DynamoDB menggunakan AWS CLI

Anda dapat menggunakan AWS CLI untuk membuat tabel Amazon DynamoDB dengan satu atau lebih indeks sekunder global, menjelaskan indeks pada tabel, dan melakukan kueri menggunakan indeks.

Membuat tabel dengan Indeks Sekunder Global

Indeks sekunder global dapat dibuat pada saat Anda membuat tabel. Untuk melakukannya, gunakan parameter create-table dan berikan spesifikasi Anda untuk satu atau beberapa indeks sekunder global. Contoh berikut membuat tabel bernama GameScores dengan indeks sekunder global yang disebut GameTitleIndex. Tabel dasar memiliki kunci partisi UserId dan kunci urutan GameTitle, sehingga Anda dapat menemukan skor terbaik pengguna individu untuk game tertentu secara efisien, sedangkan GSI memiliki kunci partisi GameTitle dan kunci urutan TopScore, memungkinkan Anda untuk cepat menemukan skor tertinggi secara keseluruhan untuk game tertentu.

aws dynamodb create-table \ --table-name GameScores \ --attribute-definitions AttributeName=UserId,AttributeType=S \ AttributeName=GameTitle,AttributeType=S \ AttributeName=TopScore,AttributeType=N \ --key-schema AttributeName=UserId,KeyType=HASH \ AttributeName=GameTitle,KeyType=RANGE \ --provisioned-throughput ReadCapacityUnits=10,WriteCapacityUnits=5 \ --global-secondary-indexes \ "[ { \"IndexName\": \"GameTitleIndex\", \"KeySchema\": [{\"AttributeName\":\"GameTitle\",\"KeyType\":\"HASH\"}, {\"AttributeName\":\"TopScore\",\"KeyType\":\"RANGE\"}], \"Projection\":{ \"ProjectionType\":\"INCLUDE\", \"NonKeyAttributes\":[\"UserId\"] }, \"ProvisionedThroughput\": { \"ReadCapacityUnits\": 10, \"WriteCapacityUnits\": 5 } } ]"

Anda harus menunggu hingga DynamoDB membuat tabel dan menetapkan status tabel menjadi ACTIVE. Setelah itu, Anda bisa mulai memasukkan item data ke dalam tabel. Anda dapat menggunakan describe-table untuk menentukan status pembuatan tabel.

Menambahkan Indeks Sekunder Global ke tabel yang sudah ada

Indeks sekunder global juga dapat ditambahkan atau diubah setelah pembuatan tabel. Untuk melakukannya, gunakan parameter update-table dan berikan spesifikasi Anda untuk satu atau beberapa indeks sekunder global. Contoh berikut menggunakan skema yang sama seperti contoh sebelumnya, tetapi mengasumsikan bahwa tabel telah dibuat dan GSI akan ditambahkan nanti.

aws dynamodb update-table \ --table-name GameScores \ --attribute-definitions AttributeName=TopScore,AttributeType=N \ --global-secondary-index-updates \ "[ { \"Create\": { \"IndexName\": \"GameTitleIndex\", \"KeySchema\": [{\"AttributeName\":\"GameTitle\",\"KeyType\":\"HASH\"}, {\"AttributeName\":\"TopScore\",\"KeyType\":\"RANGE\"}], \"Projection\":{ \"ProjectionType\":\"INCLUDE\", \"NonKeyAttributes\":[\"UserId\"] } } } ]"

Mendeskripsikan tabel dengan Indeks Sekunder Global

Untuk mendapatkan informasi tentang Indeks Sekunder Global pada sebuah tabel, gunakan parameter describe-table. Untuk setiap indeks, Anda dapat mengakses namanya, skema kunci, dan atribut yang diproyeksikan.

aws dynamodb describe-table --table-name GameScores

Mengkueri Indeks Sekunder Global

Anda dapat menggunakan operasi query pada indeks sekunder global dengan cara yang hampir sama seperti Anda query tabel. Anda harus menentukan nama indeks, kriteria kueri untuk kunci urutan indeks, dan atribut yang ingin Anda kembalikan. Dalam contoh ini, indeks adalah GameTitleIndex dan kunci urutan indeks adalah GameTitle.

Satu-satunya atribut yang dikembalikan adalah atribut yang telah diproyeksikan ke dalam indeks. Anda dapat memodifikasi kueri ini untuk memilih atribut non-kunci juga, tetapi ini akan memerlukan aktivitas pengambilan tabel yang relatif mahal. Untuk informasi selengkapnya tentang pengambilan tabel, lihat Proyeksi atribut.

aws dynamodb query --table-name GameScores\ --index-name GameTitleIndex \ --key-condition-expression "GameTitle = :v_game" \ --expression-attribute-values '{":v_game":{"S":"Alien Adventure"} }'