Mengelola Indeks Sekunder Global - Amazon DynamoDB

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

Mengelola Indeks Sekunder Global

Bagian ini menjelaskan cara membuat, mengubah, dan menghapus indeks sekunder global di Amazon DynamoDB.

Membuat tabel dengan Indeks Sekunder Global

Untuk membuat tabel dengan satu atau beberapa indeks sekunder global, gunakan operasi CreateTable dengan parameter GlobalSecondaryIndexes. Untuk fleksibilitas kueri maksimum, Anda dapat membuat hingga 20 indeks sekunder global (kuota default) per tabel.

Anda harus menentukan satu atribut untuk bertindak sebagai kunci partisi indeks. Anda dapat secara opsional menentukan atribut lain untuk kunci urutan indeks. Atribut kunci ini tidak perlu sama dengan atribut kunci dalam tabel. Misalnya, dalam GameScorestabel (lihatMenggunakan Indeks Sekunder Global di DynamoDB), tidak TopScore TopScoreDateTime juga atribut kunci. Anda dapat membuat indeks sekunder global dengan kunci partisi TopScore dan kunci urutan TopScoreDateTime. Anda dapat menggunakan indeks semacam itu untuk menentukan apakah ada korelasi antara skor tinggi dan waktu game dimainkan.

Setiap atribut kunci indeks harus berupa skalar berjenis String, Number, atau Binary. (Tidak boleh berupa dokumen atau kumpulan.) Anda dapat memproyeksikan atribut jenis data apa pun ke dalam indeks sekunder global. Ini termasuk skalar, dokumen, dan kumpulan. Untuk daftar lengkap jenis data, lihat Jenis Data.

Jika menggunakan mode yang disediakan, Anda harus menyediakan pengaturan ProvisionedThroughput untuk indeks, yang terdiri dari ReadCapacityUnits dan WriteCapacityUnits. Pengaturan throughput yang disediakan ini terpisah dari pengaturan tabel, tetapi berperilaku dengan cara yang serupa. Untuk informasi selengkapnya, lihat Pertimbangan Throughput yang disediakan untuk Indeks Sekunder Global.

Indeks sekunder global mewarisi mode kapasitas baca/tulis dari tabel dasar. Untuk informasi selengkapnya, lihat Pertimbangan saat mengganti mode kapasitas.

catatan

Operasi backfill dan operasi tulis yang sedang berlangsung berbagi throughput tulis dalam indeks sekunder global. Saat membuat GSI baru, penting untuk memeriksa apakah pilihan kunci partisi Anda menghasilkan distribusi data atau lalu lintas yang tidak merata atau menyempit di seluruh nilai kunci partisi indeks baru. Jika ini terjadi, Anda mungkin melihat operasi backfill dan tulis terjadi secara bersamaan dan membatasi penulisan ke tabel dasar. Layanan mengambil tindakan untuk meminimalkan potensi skenario ini, tetapi tidak memiliki wawasan tentang bentuk data pelanggan sehubungan dengan kunci partisi indeks, proyeksi yang dipilih, atau ketersebaran kunci primer indeks.

Jika Anda mencurigai bahwa indeks sekunder global Anda yang baru mungkin memiliki data atau distribusi lalu lintas yang sempit atau tidak merata di seluruh nilai kunci partisi, pertimbangkan hal berikut sebelum menambahkan indeks baru ke tabel yang penting secara operasional.

  • Mungkin yang paling aman adalah menambahkan indeks pada saat aplikasi Anda menghasilkan jumlah lalu lintas paling sedikit.

  • Pertimbangkan untuk mengaktifkan CloudWatch Contributor Insights pada tabel dasar dan indeks Anda. Ini akan memberi Anda wawasan berharga mengenai distribusi lalu lintas Anda.

  • Untuk indeks dan tabel dasar mode kapasitas yang disediakan, atur kapasitas tulis yang disediakan dari indeks baru Anda setidaknya dua kali lipat dari tabel dasar Anda. TontonWriteThrottleEvents,ThrottledRequests,OnlineIndexPercentageProgress, OnlineIndexConsumedWriteCapacity dan OnlineIndexThrottleEvents CloudWatch metrik selama proses berlangsung. Sesuaikan kapasitas tulis yang disediakan sesuai kebutuhan untuk menyelesaikan backfill dalam waktu yang wajar tanpa efek throttling yang signifikan pada operasi Anda yang sedang berlangsung.

  • Bersiaplah untuk membatalkan pembuatan indeks jika Anda mengalami dampak operasional karena throttling tulis, dan peningkatan kapasitas tulis yang disediakan di GSI baru Anda tidak menyelesaikan masalah tersebut.

Mendeskripsikan Indeks Sekunder Global pada tabel

Untuk melihat status semua indeks sekunder global pada tabel, gunakan operasi DescribeTable. Bagian GlobalSecondaryIndexes dari respons menunjukkan semua indeks pada tabel, beserta status masing-masing indeks saat ini ( IndexStatus).

IndexStatus untuk indeks sekunder global akan menjadi salah satu dari berikut ini:

  • CREATING — Indeks sedang dibuat, dan belum tersedia untuk digunakan.

  • ACTIVE — Indeks siap digunakan, dan aplikasi dapat melakukan operasi Query pada indeks.

  • UPDATING — Pengaturan throughput indeks yang tersedia sedang diubah.

  • DELETING — Indeks saat ini sedang dihapus, dan tidak dapat lagi digunakan.

Setelah DynamoDB selesai membuat indeks sekunder global, status indeks berubah dari CREATING menjadi ACTIVE.

Menambahkan Indeks Sekunder Global ke tabel yang sudah ada

Untuk menambahkan indeks sekunder global ke tabel yang sudah ada, gunakan operasi UpdateTable dengan parameter GlobalSecondaryIndexUpdates. Anda harus memasukkan berikut ini:

  • Nama indeks. Nama harus berbeda dari semua indeks pada tabel.

  • Skema kunci indeks. Anda harus menentukan satu atribut untuk kunci partisi indeks; Anda dapat secara opsional menentukan atribut lain untuk kunci urutan indeks. Atribut kunci ini tidak perlu sama dengan atribut kunci dalam tabel. Jenis data untuk setiap atribut skema harus skalar: String, Number, atau Binary.

  • Atribut yang akan diproyeksikan dari tabel ke dalam indeks:

    • KEYS_ONLY — Setiap item dalam indeks hanya terdiri dari kunci partisi tabel dan nilai kunci urutan, ditambah nilai kunci indeks.

    • INCLUDE — Selain atribut yang dijelaskan dalam KEYS_ONLY, indeks sekunder menyertakan atribut non-kunci lain yang Anda tentukan.

    • ALL — Indeks menyertakan semua atribut dari tabel sumber.

  • Setelan throughput yang disediakan untuk indeks, yang terdiri dari ReadCapacityUnits dan WriteCapacityUnits. Pengaturan throughput yang disediakan ini terpisah dari pengaturan tabel.

Anda hanya dapat membuat satu indeks sekunder global per operasi UpdateTable.

Fase pembuatan indeks

Saat Anda menambahkan indeks sekunder global baru ke tabel yang sudah ada, tabel akan terus tersedia meskipun indeks sedang dibuat. Namun, indeks baru tidak tersedia untuk operasi Kueri hingga statusnya berubah dari CREATING menjadi ACTIVE.

catatan

Pembuatan indeks sekunder global tidak menggunakan Application Auto Scaling. Meningkatkan kapasitas Application Auto Scaling MIN tidak akan mengurangi waktu pembuatan indeks sekunder global.

Di balik layar, DynamoDB membuat indeks dalam dua fase:

Alokasi Sumber Daya

DynamoDB mengalokasikan sumber daya komputasi dan penyimpanan yang diperlukan untuk membuat indeks.

Selama fase alokasi sumber daya, atribut IndexStatus adalah CREATING dan atribut Backfilling adalah false. Gunakan operasi DescribeTable untuk mengambil status tabel dan semua indeks sekundernya.

Saat indeks berada dalam fase alokasi sumber daya, Anda tidak dapat menghapus indeks atau menghapus tabel induknya. Anda juga tidak dapat mengubah throughput indeks atau tabel yang disediakan. Anda tidak dapat menambahkan atau menghapus indeks lain pada tabel. Namun, Anda dapat mengubah throughput yang disediakan dari indeks lain tersebut.

Backfill

Untuk setiap item dalam tabel, DynamoDB menentukan kumpulan atribut yang akan ditulis ke indeks berdasarkan proyeksinya (KEYS_ONLY, INCLUDE, atau ALL). Kemudian atribut ini ditulis ke indeks. Selama fase backfill, DynamoDB melacak item yang ditambahkan, dihapus, atau diperbarui dalam tabel. Atribut dari item ini juga ditambahkan, dihapus, atau diperbarui dalam indeks yang sesuai.

Selama fase backfill, atribut IndexStatus diatur ke CREATING, dan atribut Backfilling adalah true. Gunakan operasi DescribeTable untuk mengambil status tabel dan semua indeks sekundernya.

Saat indeks sedang melakukan backfill, Anda tidak dapat menghapus tabel induknya. Namun, Anda masih dapat menghapus indeks atau mengubah throughput tabel yang disediakan dan indeks sekunder globalnya.

catatan

Selama fase backfill, beberapa penulisan item yang melanggar mungkin berhasil, sementara yang lain ditolak. Setelah backfill, semua penulisan ke item yang melanggar skema kunci indeks baru akan ditolak. Sebaiknya Anda menjalankan alat Detektor Pelanggaran setelah fase backfill selesai untuk mendeteksi dan mengatasi pelanggaran utama yang mungkin terjadi. Untuk informasi selengkapnya, lihat Mendeteksi dan mengoreksi pelanggaran kunci indeks.

Saat fase alokasi sumber daya dan backfill sedang berlangsung, indeks berada dalam status CREATING. Selama waktu ini, DynamoDB melakukan operasi baca pada tabel. Operasi baca dari tabel dasar untuk mengisi indeks sekunder global tidak dikenakan biaya. Namun, operasi tulis untuk mengisi indeks sekunder global yang baru dibuat dikenakan biaya.

Setelah pembuatan indeks selesai, statusnya berubah menjadi ACTIVE. Anda tidak dapat Query atau Scan indeks sampai indeks itu ACTIVE.

catatan

Dalam beberapa kasus, DynamoDB tidak dapat menulis data dari tabel ke indeks karena pelanggaran kunci indeks. Hal ini dapat terjadi jika:

  • Jenis data nilai atribut tidak cocok dengan jenis data skema kunci indeks.

  • Ukuran atribut melebihi panjang maksimum atribut kunci indeks.

  • Atribut kunci indeks memiliki String kosong atau nilai atribut Binari kosong.

Pelanggaran kunci indeks tidak mengganggu pembuatan indeks sekunder global. Namun, ketika indeks menjadi ACTIVE, kunci yang melanggar tidak ada dalam indeks.

DynamoDB menyediakan alat mandiri untuk menemukan dan menyelesaikan masalah ini. Untuk informasi selengkapnya, lihat Mendeteksi dan mengoreksi pelanggaran kunci indeks.

Menambahkan Indeks Sekunder Global ke tabel besar

Waktu yang dibutuhkan untuk membuat indeks sekunder global tergantung beberapa faktor, seperti berikut ini:

  • Ukuran ruang tabel

  • Jumlah item dalam tabel yang memenuhi syarat untuk dimasukkan dalam indeks

  • Jumlah atribut yang diproyeksikan ke dalam indeks

  • Kapasitas tulis yang disediakan pada indeks

  • Aktivitas tulis di tabel utama selama pembuatan indeks

Jika Anda menambahkan indeks sekunder global ke tabel yang sangat besar, mungkin perlu waktu lama untuk menyelesaikan proses pembuatan. Untuk memantau kemajuan dan menentukan apakah indeks memiliki kapasitas tulis yang memadai, lihat CloudWatch metrik Amazon berikut:

  • OnlineIndexPercentageProgress

  • OnlineIndexConsumedWriteCapacity

  • OnlineIndexThrottleEvents

catatan

Untuk informasi selengkapnya tentang CloudWatch metrik yang terkait dengan DynamoDB, lihat. Metrik DynamoDB

Jika pengaturan throughput tulis yang disediakan pada indeks terlalu rendah, pembuatan indeks akan memakan waktu lebih lama untuk diselesaikan. Untuk mempersingkat waktu yang diperlukan dalam membuat indeks sekunder global baru, Anda dapat meningkatkan kapasitas tulis yang disediakan untuk sementara.

catatan

Sebagai aturan umum, sebaiknya atur kapasitas tulis yang disediakan pada indeks menjadi 1,5 kali kapasitas tulis tabel. Ini adalah pengaturan yang bagus untuk banyak kasus penggunaan. Namun, kebutuhan Anda yang sebenarnya mungkin lebih tinggi atau lebih rendah.

Saat indeks sedang melakukan backfill, DynamoDB menggunakan kapasitas sistem internal untuk membaca dari tabel. Hal ini bertujuan untuk meminimalkan dampak pembuatan indeks dan untuk memastikan bahwa tabel Anda tidak kehabisan kapasitas baca.

Namun, ada kemungkinan volume aktivitas tulis yang masuk melebihi kapasitas tulis yang disediakan pada indeks. Ini adalah skenario kemacetan, yaitu pembuatan indeks memerlukan waktu lebih lama karena aktivitas penulisan ke indeks mengalami throttling. Selama pembuatan indeks, sebaiknya Anda memantau CloudWatch metrik Amazon untuk indeks guna menentukan apakah kapasitas tulis yang dikonsumsi melebihi kapasitas yang disediakannya. Dalam skenario kemacetan, Anda harus meningkatkan kapasitas tulis yang disediakan pada indeks untuk menghindari throttling tulis selama fase backfill.

Setelah indeks dibuat, Anda harus mengatur kapasitas tulis yang disediakan untuk mencerminkan penggunaan aplikasi yang normal.

Menghapus Indeks Sekunder Global

Jika tidak lagi memerlukan indeks sekunder global, Anda dapat menghapusnya menggunakan operasi UpdateTable.

Anda hanya dapat menghapus satu indeks sekunder global per operasi UpdateTable.

Saat indeks sekunder global sedang dihapus, aktivitas baca atau tulis apa pun di tabel induk tidak akan terpengaruh. Saat penghapusan sedang berlangsung, Anda masih dapat mengubah throughput yang disediakan pada indeks lain.

catatan
  • Saat Anda menghapus tabel menggunakan tindakan DeleteTable, semua indeks sekunder global pada tabel tersebut juga dihapus.

  • Akun Anda tidak akan dikenakan biaya untuk operasi penghapusan indeks sekunder global.

Mengubah Indeks Sekunder Global selama pembuatan

Saat indeks sedang dibuat, Anda dapat menggunakan operasi DescribeTable untuk mengetahui fasenya. Deskripsi untuk indeks menyertakan atribut Boolean, Backfilling, untuk menunjukkan apakah DynamoDB saat ini memuat indeks dengan item dari tabel. Jika nilai Backfilling adalah true, artinya fase alokasi sumber daya sudah selesai dan indeks sekarang melakukan backfill.

Saat backfill sedang berlangsung, Anda dapat memperbarui parameter throughput yang disediakan untuk indeks. Sebaiknya Anda melakukan ini untuk mempercepat pembuatan indeks: Anda dapat meningkatkan kapasitas tulis indeks saat sedang dibuat, lalu menurunkannya setelahnya. Untuk mengubah pengaturan throughput indeks yang disediakan, gunakan operasi UpdateTable. Status indeks berubah menjadi UPDATING, dan Backfilling adalah true hingga indeks siap digunakan.

Selama fase backfill, Anda dapat menghapus indeks yang sedang dibuat. Selama fase ini, Anda tidak dapat menambahkan atau menghapus indeks lain di tabel.

catatan

Untuk indeks yang dibuat sebagai bagian dari operasi CreateTable, atribut Backfilling tidak muncul di output DescribeTable. Untuk informasi selengkapnya, lihat Fase pembuatan indeks.