Permintaan operasi sebagaimana ditentukan dalam DynamoDb dokumentasi:
query operasi pencarian hanya primary key atribut nilai-nilai dan mendukung subset dari operator perbandingan pada nilai atribut kunci untuk memperbaiki proses pencarian.
dan operasi scan:
scan operasi scan seluruh tabel. Anda dapat menentukan filter untuk menerapkan hasil untuk menyempurnakan nilai-nilai yang dikembalikan kepada anda, setelah selesai scan.
Yang terbaik adalah berdasarkan Kinerja dan Pertimbangan Biaya.
Anda mengalami dynamodb tabel partisi key/kunci primer sebagai customer_country
. Jika anda menggunakan query, customer_country
adalah wajib lapangan untuk membuat permintaan operasi. Semua filter dapat dibuat hanya barang-barang yang termasuk customer_country
.
Jika anda melakukan scan tabel filter akan dilakukan pada semua partisi key/kunci primer. Pertama mengambil semua data dan menerapkan filter setelah mengambil dari meja.
di sini customer_country
adalah partisi key/kunci primer
dan id
adalah sort_key
-----------------------------------
customer_country | name | id
-----------------------------------
VV | Tom | 1
VV | Jack | 2
VV | Mary | 4
BB | Nancy | 5
BB | Lom | 6
BB | XX | 7
CC | YY | 8
CC | ZZ | 9
------------------------------------
Jika anda melakukan query operasi ini hanya berlaku di customer_country
nilai.
Nilai hanya boleh sama operator (=).
Jadi hanya barang-barang yang sama untuk partisi kunci/nilai kunci primer yang diambil.
Jika anda melakukan scan operasi itu mengambil semua barang-barang di atas meja itu dan menyaring data setelah mengambil data tersebut.
Catatan: Don't melakukan scan operasi itu melebihi RCU.
Ketika membuat Dynamodb meja pilih Kunci Primer dan Lokal Sekunder Indeks (LSIs) sehingga Permintaan operasi kembali barang-barang yang anda inginkan.
Permintaan operasi hanya mendukung satu sama operator evaluasi Primary Key, tapi bersyarat (=, <, <=, >, >=, Antara, Begin) pada Jenis Kunci.
Operasi Scan pada umumnya lebih lambat dan lebih mahal seperti operasi untuk iterate melalui setiap item di meja anda untuk mendapatkan barang-barang yang anda minta.
Contoh:
Table: CustomerId, AccountType, Country, LastPurchase
Primary Key: CustomerId + AccountType
Dalam contoh ini, anda dapat menggunakan Query operasi untuk mendapatkan:
Scan operasi akan perlu untuk dapat digunakan kembali:
Untuk menghindari operasi scan sering digunakan pada operasi yang menciptakan Lokal Sekunder Index (LSI) atau Global Sekunder Index (GSI).
Contoh:
Table: CustomerId, AccountType, Country, LastPurchase
Primary Key: CustomerId + AccountType
GSI: AccountType + CustomerId
LSI: CustomerId + LastPurchase
Dalam contoh ini Permintaan operasi dapat memungkinkan anda untuk mendapatkan:
Dalam hal kinerja, saya pikir itu's praktek yang baik untuk desain meja anda untuk aplikasi untuk menggunakan Query
bukan Scan
. Karena scan operasi selalu memindai seluruh meja sebelum menyaring nilai-nilai yang diinginkan, yang berarti dibutuhkan lebih banyak waktu dan ruang untuk memproses data operasi seperti membaca, menulis dan menghapus. Untuk informasi lebih lanjut, silahkan merujuk ke official document
Query adalah jauh lebih baik daripada Scan - performence bijaksana. scan, seperti's nama menyiratkan, akan memindai seluruh tabel. Tapi anda harus menyadari tabel kunci, macam kunci, indeks dan dan yang terkait semacam indeks dalam rangka untuk tahu bahwa anda dapat menggunakan Query. jika anda filter anda menggunakan query:
menggunakan Query! jika tidak menggunakan scan yang lebih fleksibel tentang kolom yang anda dapat menyaring.
anda TIDAK dapat Query jika:
penjelasan yang baik: https://medium.com/@amos.shahar/dynamodb-query-vs-scan-sql-syntax-and-join-tables-part-1-371288a7cb8f
Sama seperti dalam database relasional.
Dapatkan query
anda adalah dengan menggunakan primary key di mana
kondisi, perhitungan kompleksitas log(n)
sebagai yang paling utama struktur pohon biner.
sementara scan
query anda memiliki untuk memindai seluruh tabel kemudian menerapkan filter pada setiap baris
untuk menemukan hasil yang tepat. Kinerja adalah O(n)
. Yang jauh lebih lambat jika meja anda lebih besar.
Dalam waktu singkat, Cobalah untuk menggunakan mendapatkan
jika anda tahu kunci primer. hanya scan
untuk kasus terburuk.
Juga, berpikir tentang global indeks sekunder untuk mendukung berbagai jenis query pada kunci yang berbeda untuk mendapatkan kinerja yang obyektif