Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Bagian ini membahas lapisan blok bangunan yang dapat Anda gunakan dalam pola deasin untuk aplikasi Anda.

Topik
Blok bangunan kunci urutan komposit
Ketika orang berpikir tentang TidakSQL, mereka mungkin juga menganggapnya sebagai non-relasional. Pada akhirnya, tidak ada hal yang menghalangi relasi untuk ditempatkan ke dalam skema DynamoDB, meski tampilannya berbeda dari basis data relasional dan kunci asingnya. Salah satu pola paling kritis yang dapat kita gunakan untuk mengembangkan hierarki logis data kita di DynamoDB adalah kunci urutan komposit. Gaya yang paling umum untuk merancangnya adalah dengan memisahkan setiap lapisan hierarki (layer induk > lapisan turunan > lapisan cucu) dengan tagar. Misalnya, PARENT#CHILD#GRANDCHILD#ETC
.

Sementara kunci partisi di DynamoDB selalu membutuhkan nilai yang tepat untuk kueri data, kita dapat menerapkan kondisi parsial ke kunci urutan dari kiri ke kanan, mirip dengan melintasi pohon biner.
Dalam contoh di atas, ada toko e-Commerce dengan Keranjang Belanja yang perlu dipertahankan di seluruh sesi pengguna. Setiap kali pengguna masuk, mereka mungkin ingin melihat seluruh Keranjang Belanja, termasuk item yang disimpan untuk nanti. Namun ketika mereka memasuki halaman checkout, hanya item di keranjang aktif yang harus dimuat untuk dibeli. Karena keduanya KeyConditions
secara eksplisit meminta kunci CART pengurutan, data daftar keinginan tambahan diabaikan begitu saja oleh DynamoDB pada waktu baca. Meskipun item yang disimpan dan aktif adalah bagian dari keranjang yang sama, kita perlu memperlakukannya secara berbeda di berbagai bagian aplikasi, jadi menerapkan KeyCondition
ke prefiks kunci urutan adalah cara yang paling optimal untuk hanya mengambil data yang diperlukan untuk setiap bagian aplikasi.
Fitur utama dari blok bangunan ini
-
Item terkait disimpan secara lokal satu sama lain untuk akses data yang efektif
-
Menggunakan
KeyCondition
ekspresi, himpunan bagian dari hierarki dapat diambil secara selektif yang berarti tidak ada yang sia-sia RCUs -
Bagian yang berbeda dari aplikasi dapat menyimpan item-nya di bawah prefiks tertentu, yang mencegah penimpaan item atau penulisan yang bertentangan
Blok bangunan multi-penghunian
Banyak pelanggan menggunakan DynamoDB sebagai host data untuk aplikasi multi-penghuni mereka. Untuk skenario ini, kami ingin merancang skema dengan cara yang menyimpan semua data dari penghuni tunggal di partisi logisnya sendiri dari tabel. Hal ini memanfaatkan konsep Koleksi Item, yang merupakan istilah untuk semua item dalam tabel DynamoDB dengan kunci partisi yang sama. Untuk informasi selengkapnya tentang cara pendekatan DynamoDB terhadap multi-penghuni, lihat Multi-penghuni di DynamoDB.

Untuk contoh ini, kami menjalankan situs hosting foto dengan potensi ribuan pengguna. Setiap pengguna hanya akan mengunggah foto ke profil mereka sendiri pada awalnya, tetapi secara default kami tidak akan mengizinkan pengguna untuk melihat foto pengguna lain. Tingkat isolasi tambahan idealnya akan ditambahkan ke otorisasi panggilan setiap pengguna ke Anda API untuk memastikan mereka hanya meminta data dari partisi mereka sendiri, tetapi pada tingkat skema, kunci partisi unik sudah memadai.
Fitur utama dari blok bangunan ini
-
Jumlah data yang dibaca oleh satu pengguna atau penghuni hanya bisa sebanyak jumlah total item di partisi mereka
-
Penghapusan data penghuni karena penutupan akun atau permintaan kepatuhan dapat dilakukan dengan taktis dan murah. Cukup jalankan kueri di mana kunci partisi sama dengan ID penyewanya, lalu jalankan operasi
DeleteItem
untuk setiap kunci primer yang dikembalikan
catatan
Dirancang dengan mempertimbangkan multi-tenancy, Anda dapat menggunakan penyedia kunci enkripsi yang berbeda di satu tabel untuk mengisolasi data dengan aman. AWS Enkripsi Database SDK untuk Amazon DynamoDB memungkinkan Anda menyertakan enkripsi sisi klien dalam beban kerja DynamoDB Anda. Anda dapat melakukan enkripsi tingkat atribut, memungkinkan Anda mengenkripsi nilai atribut tertentu sebelum menyimpannya di tabel DynamoDB Anda dan mencari atribut terenkripsi tanpa mendekripsi seluruh basis data sebelumnya.
Blok bangunan indeks jarang
Terkadang pola akses memerlukan pencarian item yang cocok dengan item langka atau item yang menerima status (yang memerlukan respons yang dieskalasikan). Daripada secara teratur melakukan kueri di seluruh kumpulan data untuk item ini, kami dapat memanfaatkan fakta bahwa indeks sekunder global (GSI) jarang dimuat dengan data. Ini berarti bahwa hanya item dalam tabel dasar yang memiliki atribut yang ditentukan dalam indeks yang akan direplikasi ke indeks.


Dalam contoh ini, kita melihat kasus IOT penggunaan di mana setiap perangkat di lapangan melaporkan kembali status secara teratur. Untuk sebagian besar laporan, kita berharap perangkat melaporkan semuanya baik-baik saja, tetapi kadang-kadang kesalahan bisa saja muncul, dan hal itu harus dieskalasikan ke teknisi perbaikan. Untuk laporan dengan eskalasi, atribut EscalatedTo
ditambahkan item, tetapi malah tidak muncul. GSIDalam contoh ini dipartisi oleh EscalatedTo
dan karena GSI membawa kunci dari tabel dasar kita masih dapat melihat deviceId mana yang melaporkan kesalahan dan pada jam berapa.
Meskipun pembacaan lebih murah daripada penulisan di DynamoDB, indeks jarang adalah alat yang sangat efektif untuk kasus penggunaan di mana instans jenis item tertentu jarang terjadi tetapi pembacaan untuk menemukannya merupakan hal biasa.
Fitur utama dari blok bangunan ini
-
Biaya tulis dan penyimpanan untuk yang jarang GSI hanya berlaku untuk item yang cocok dengan pola kunci, sehingga biaya GSI dapat jauh lebih rendah daripada yang lain GSIs yang memiliki semua item direplikasi ke mereka
-
Kunci urutan komposit masih dapat digunakan untuk menyaring item yang cocok dengan kueri yang diinginkan, misalnya, stempel waktu dapat digunakan untuk kunci urutan agar hanya melihat kesalahan yang dilaporkan dalam X menit terakhir (
SK > 5 minutes ago, ScanIndexForward: False
)
Blok bangunan waktu untuk tayang
Sebagian besar data memiliki beberapa durasi waktu yang dapat dianggap layak disimpan dalam penyimpanan data primer. Untuk memfasilitasi penuaan data dari DynamoDB, ia memiliki fitur yang disebut time to live (). TTL TTLFitur ini memungkinkan Anda untuk menentukan atribut tertentu pada tingkat tabel yang memerlukan pemantauan untuk item dengan stempel waktu epoch (itu di masa lalu). Hal ini memungkinkan Anda untuk menghapus catatan kedaluwarsa dari tabel secara gratis.
catatan
Jika Anda menggunakan Global Tables versi 2019.11.21 (Saat ini) dari tabel global dan Anda juga menggunakan fitur Time to Live, DynamoDB mereplikasi penghapusan ke semua tabel replika. TTL TTLPenghapusan awal tidak menggunakan kapasitas tulis di Wilayah tempat TTL kedaluwarsa terjadi. Namun, TTL penghapusan yang direplikasi ke tabel replika menghabiskan kapasitas tulis yang direplikasi di setiap Wilayah replika dan biaya yang berlaku akan berlaku.

Dalam contoh ini, kami memiliki aplikasi yang dirancang untuk memungkinkan pengguna membuat pesan berumur pendek. Ketika pesan dibuat di DynamoDB, TTL atribut diatur ke tanggal tujuh hari di masa depan oleh kode aplikasi. Dalam kira-kira tujuh hari, DynamoDB akan melihat bahwa stempel jangka waktu item ini sudah ada di masa lalu kemudian menghapusnya.
Karena penghapusan yang dilakukan oleh TTL gratis, sangat disarankan untuk menggunakan fitur ini untuk menghapus data historis dari tabel. Ini akan mengurangi tagihan penyimpanan keseluruhan setiap bulan dan kemungkinan akan mengurangi biaya pembacaan pengguna karena data yang akan diambil oleh kueri mereka menjadi lebih sedikit. Sementara TTL diaktifkan di tingkat tabel, terserah Anda item atau entitas mana yang akan membuat TTL atribut dan seberapa jauh ke future untuk mengatur stempel waktu epoch.
Fitur utama dari blok bangunan ini
-
TTLpenghapusan dijalankan di belakang layar tanpa berdampak pada kinerja tabel Anda
-
TTLadalah proses asinkron yang berjalan kira-kira setiap enam jam, tetapi dapat memakan waktu lebih dari 48 jam untuk menghapus catatan yang kedaluwarsa
-
Jangan TTL mengandalkan penghapusan untuk kasus penggunaan seperti catatan kunci atau manajemen status jika data basi harus dibersihkan dalam waktu kurang dari 48 jam
-
-
Anda dapat memberi nama TTL atribut nama atribut yang valid, tetapi nilainya harus berupa tipe angka
Blok bangunan pengarsipan waktu untuk tayang
Meskipun TTL merupakan alat yang efektif untuk menghapus data lama dari DynamoDB, banyak kasus penggunaan memerlukan arsip data disimpan untuk jangka waktu yang lebih lama daripada datastore primer. Dalam hal ini, kita dapat memanfaatkan TTL penghapusan catatan berjangka waktu untuk mendorong catatan kedaluwarsa ke dalam datastore jangka panjang.

Ketika TTL penghapusan dilakukan oleh DynamoDB, itu masih didorong ke DynamoDB Stream sebagai acara. Delete
Ketika TTL DynamoDB adalah orang yang melakukan penghapusan, ada atribut pada catatan aliran. principal:dynamodb
Menggunakan pelanggan Lambda ke Aliran DynamoDB, kita dapat menerapkan filter peristiwa hanya untuk atribut pengguna utama DynamoDB dan mengetahui bahwa catatan apa pun yang cocok dengan filter tersebut akan didorong ke penyimpanan arsip seperti S3 Glacier.
Fitur utama dari blok bangunan ini
-
Setelah pembacaan latensi rendah DynamoDB tidak lagi diperlukan untuk item historis, memigrasikannya ke layanan penyimpanan yang lebih dingin, seperti S3 Glacier, dapat mengurangi biaya penyimpanan secara signifikan sekaligus memenuhi kebutuhan kepatuhan data dari kasus penggunaan Anda
-
Jika data disimpan di Amazon S3, alat analitik hemat biaya seperti Amazon Athena atau Redshift Spectrum dapat digunakan untuk melakukan analisis historis data
Blok bangunan partisi vertikal
Pengguna yang akrab dengan database model dokumen akan terbiasa dengan gagasan menyimpan semua data terkait dalam satu JSON dokumen. Meskipun DynamoDB JSON mendukung tipe data, DynamoDB tidak mendukung KeyConditions
eksekusi pada bersarang. JSON Karena itulah KeyConditions
yang menentukan berapa banyak data yang dibaca dari disk dan secara efektif berapa banyak kueri RCUs yang dikonsumsi, ini dapat mengakibatkan inefisiensi pada skala. Untuk mengoptimalkan penulisan dan pembacaan DynamoDB dengan lebih baik, kami sarankan untuk memecah entitas individual dokumen menjadi item DynamoDB individual, yang juga disebut sebagai partisi vertikal.


Partisi vertikal, seperti yang ditunjukkan di atas, adalah contoh kunci desain tabel tunggal dalam kenyataannya, tetapi juga dapat diimplementasikan di beberapa tabel jika diinginkan. Karena tagihan DynamoDB menulis dalam kelipatan 1 KB, Anda idealnya harus mempartisi dokumen dengan cara yang menghasilkan item di bawah 1 KB.
Fitur utama dari blok bangunan ini
-
Hierarki hubungan data dipertahankan melalui prefiks kunci urutan agar struktur dokumen tunggal dapat dibangun kembali sisi klien jika diperlukan
-
Komponen tunggal dari struktur data dapat diperbarui secara independen sehingga pembaruan item kecil hanya 1 WCU
-
Dengan menggunakan kunci urutan
BeginsWith
, aplikasi dapat mengambil data serupa dalam satu kueri, yang menggabungkan biaya baca untuk mengurangi total biaya/latensi -
Dokumen besar bisa saja lebih besar dari batas ukuran item individu 400 KB di DynamoDB dan partisi vertikal membantu mengatasi batas ini
Blok bangunan sharding penulisan
Salah satu dari sedikit batasan keras yang dimiliki DynamoDB adalah pembatasan jumlah throughput yang dapat dipertahankan oleh satu partisi fisik per detik (tidak harus satu kunci partisi). Batasan ini untuk saat ini:
-
1000 WCU (atau 1000 <= 1KB item ditulis per detik) dan 3000 RCU (atau 3000 <= 4KB membaca per detik) sangat konsisten atau
-
6000 <=4 KB dibaca per detik pada akhirnya konsisten
Jika permintaan terhadap tabel melebihi salah satu dari batas ini, kesalahan dikirim kembali ke klien SDKThroughputExceededException
, lebih sering disebut sebagai throttling. Kasus penggunaan yang memerlukan operasi baca di luar batas itu sebagian besar akan dilayani paling baik dengan menempatkan cache baca di depan DynamoDB, tetapi operasi penulisan memerlukan desain tingkat skema yang dikenal sebagai sharding penulisan.


Untuk mengatasi masalah ini, kita akan menambahkan bilangan bulat acak ke akhir kunci partisi untuk setiap kontestan dalam kode UpdateItem
aplikasi. Rentang generator bilangan bulat acak harus memiliki pencocokan batas atas atau melebihi jumlah penulisan per detik yang diharapkan untuk kontestan tertentu dibagi 1000. Untuk mendukung 20.000 suara per detik, hal ini akan terlihat seperti rand(0,19). Setelah data disimpan di bawah partisi logis yang terpisah, data harus digabungkan bersama kembali pada waktu baca. Karena total suara tidak perlu real time, fungsi Lambda yang dijadwalkan untuk membaca semua partisi suara setiap X menit dapat melakukan agregasi sesekali untuk setiap kontestan dan menuliskannya kembali ke catatan total suara tunggal untuk pembacaan langsung.
Fitur utama dari blok bangunan ini
-
Untuk kasus penggunaan dengan throughput tulis yang sangat tinggi untuk kunci partisi tertentu yang tidak dapat dihindari, operasi tulis dapat tersebar secara artifisial di beberapa partisi DynamoDB
-
GSIsdengan kunci partisi kardinalitas rendah juga harus menggunakan pola ini karena pelambatan pada a GSI akan menerapkan tekanan balik untuk menulis operasi pada tabel dasar