Pembacaan yang konsisten tidak didukung pada indeks sekunder global
TL;DR — Anda menyetel ConsistentRead: true pada Query atau Scan yang menargetkan indeks sekunder global. GSI mereplikasi dari tabel dasar secara asinkron dan hanya menyajikan pembacaan yang konsisten — tandanya adalah kesalahan besar, bukan preferensi. Hilangkan tandanya, atau jika Anda benar-benar membutuhkan konsistensi baca-setelah-tulis, baca tabel dasar (atau rancang kunci ke dalam LSI).
Apa artinya
ValidationException: Consistent reads are not supported on global secondary indexesIndeks sekunder Lokal berbeda: LSI berbagi partisi dengan tabel dasar, sehingga ConsistentRead: true didukung di sana.
Mengapa itu terjadi
- Bendera disetel secara global — pembantu kueri bersama atau pembungkus klien menetapkan default
ConsistentRead: trueuntuk setiap pembacaan, dan satu jalur panggilan menambahkanIndexNameyang menunjuk ke GSI. - LSI menjadi GSI — kode yang ditulis untuk indeks lokal (yang benderanya legal) diarahkan ke indeks global.
- Salin-tempel kueri tabel dasar — kueri yang secara sah menggunakan konsistensi kuat pada tabel digunakan kembali dengan tambahan
IndexName.
Bagaimana cara memperbaikinya
Hapus
ConsistentReaddari pembacaan GSI (atau setel kefalse— default):await client.send( new QueryCommand({ TableName: 'Orders', IndexName: 'status-index', KeyConditionExpression: '#s = :open', // ConsistentRead: true ← delete this line for a GSI ExpressionAttributeNames: {'#s': 'status'}, ExpressionAttributeValues: {':open': {S: 'OPEN'}} }) );Perlu baca-setelah-tulis? Kueri tabel dasar dengan
ConsistentRead: true— dapat dilakukan setiap kali kunci yang Anda cari adalah kunci partisi tabel itu sendiri.Kunci partisi yang sama, jenis berbeda? Modelkan sebagai LSI (dibuat saat pembuatan tabel), yang mendukung pembacaan yang konsisten.
Atau menyerap kelambatan dalam aplikasi — Propagasi GSI biasanya cepat; untuk alur UI, mengembalikan data yang baru saja Anda tulis lebih cepat daripada membaca ulang indeks.
Audit pembantu kueri bersama.
ConsistentRead: truedefault pada setiap pembacaan terhenti saat jalur panggilan mana pun menambahkan GSIIndexName.
Cek di DynoTable
DynoTable mengetahui indeks mana yang merupakan GSI vs LSI — kueri GSI tidak pernah mengirimkan ConsistentRead: true. Buka tabel dengan ⌘K, pilih indeks dari dropdown, dan jalankan kueri tanpa tanda.
Saat Anda memerlukan baca-setelah-tulis, lakukan kueri pada tabel dasar — Pembuat Kueri menghasilkan parameter yang benar per target. Ganti profil dengan ⌘P; lihat Menghubungkan ke AWS dan Instal.
Sumber
- Kueri — Referensi Amazon DynamoDB API (diverifikasi 13-07-2026)
- Menggunakan Indeks Sekunder Global di DynamoDB (diverifikasi 13-07-2026)
Kesalahan terkait
- GSI membatasi tabel dasar — kopling sisi tulis GSI.
- Tabel tidak memiliki indeks yang ditentukan
- Tidak dapat memperbarui GSI saat sedang dibuat
- Contoh kode: Kueri GSI di Node.js — kueri GSI yang pada akhirnya konsisten dilakukan dengan benar.
- Pelajari: Mengapa GSI pada akhirnya konsisten · GSI vs LSI · Konsistensi · Ikhtisar indeks
Referensi
- Kueri — Referensi Amazon DynamoDB API
- Menggunakan Indeks Sekunder Global di DynamoDB — Panduan Pengembang Amazon DynamoDB
- Kendala di Amazon DynamoDB — Panduan Pengembang Amazon DynamoDB
Terakhir diverifikasi 13-07-2026 terhadap dokumentasi resmi AWS yang ditautkan di atas.