View a markdown version of this page

Praktik terbaik untuk menyimpan item besar dan atribut di DynamoDB - Amazon DynamoDB

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

Praktik terbaik untuk menyimpan item besar dan atribut di DynamoDB

Amazon DynamoDB membatasi ukuran setiap item yang Anda simpan dalam tabel hingga 400 KB (lihatUkuran item). Jika aplikasi Anda perlu menyimpan data dalam suatu item lebih dari yang diizinkan oleh batas ukuran DynamoDB, Anda dapat mencoba mengompresi satu atau lebih atribut besar atau memecah item menjadi beberapa item (diindeks secara efisien dengan kunci pengurutan). Anda juga dapat menyimpan item sebagai objek di Amazon Simple Storage Service (Amazon S3) dan menyimpan pengidentifikasi objek Amazon S3 di item DynamoDB Anda.

Sebagai praktik terbaik, Anda harus menggunakan ReturnConsumedCapacity parameter saat menulis item untuk memantau dan memperingatkan ukuran item yang mendekati ukuran item maksimum 400 KB. Melebihi ukuran item maksimum akan mengakibatkan upaya penulisan yang gagal. DynamoDB akan mengembalikan kesalahan. ValidationException Pemantauan dan peringatan tentang ukuran item akan memungkinkan Anda mengurangi masalah ukuran item sebelum memengaruhi aplikasi Anda.

Mengompresi nilai atribut besar

Mengompresi nilai atribut yang besar dapat membuatnya sesuai dengan batas item di DynamoDB dan mengurangi biaya penyimpanan Anda. Algoritma kompresi seperti GZIP atau LZO menghasilkan output biner yang kemudian dapat Anda simpan dalam jenis Binary atribut dalam item.

Sebagai contoh, pertimbangkan tabel yang menyimpan pesan yang ditulis oleh pengguna forum. Pesan semacam itu sering mengandung string teks panjang, yang merupakan kandidat untuk kompresi. Sementara kompresi dapat mengurangi ukuran item, kelemahannya adalah bahwa nilai atribut terkompresi tidak berguna untuk pemfilteran.

Untuk kode sampel yang menunjukkan cara mengompresi pesan tersebut di DynamoDB, lihat berikut ini:

Partisi vertikal

Solusi alternatif untuk menangani item besar adalah memecahnya menjadi potongan data yang lebih kecil dan mengaitkan semua item yang relevan dengan nilai kunci partisi. Anda kemudian dapat menggunakan string kunci pengurutan untuk mengidentifikasi informasi terkait yang disimpan di sampingnya. Dengan melakukan ini, dan memiliki beberapa item dikelompokkan dengan nilai kunci partisi yang sama, Anda membuat koleksi item .

Untuk informasi lebih lanjut tentang pendekatan ini, lihat:

Menyimpan nilai atribut besar di Amazon S3

Seperti yang disebutkan sebelumnya, Anda juga dapat menggunakan Amazon S3 untuk menyimpan nilai atribut besar yang tidak dapat ditampung dalam item DynamoDB. Anda dapat menyimpannya sebagai objek di Amazon S3, lalu menyimpan pengidentifikasi objek di item DynamoDB Anda.

Anda juga dapat menggunakan dukungan metadata objek di Amazon S3 untuk menyediakan tautan kembali ke item induk di DynamoDB. Simpan nilai kunci primer item sebagai metadata Amazon S3 dari objek di Amazon S3. Tindakan ini sering kali membantu pemeliharaan objek Amazon S3.

Misalnya, pertimbangkan ProductCatalog tabel. Item dalam tabel ini menyimpan informasi tentang harga item, deskripsi, penulis buku, dan dimensi untuk produk lainnya. Jika Anda ingin menyimpan gambar produk yang terlalu besar untuk suatu item, Anda dapat menyimpan gambar tersebut di Amazon S3, bukan di DynamoDB.

Saat mengimplementasikan strategi ini, perhatikan hal berikut:

  • DynamoDB tidak mendukung transaksi yang melintasi Amazon S3 dan DynamoDB. Oleh karena itu, aplikasi Anda harus menangani segala kegagalan, yang dapat mencakup pembersihan objek Amazon S3 yang tidak ada lagi.

  • Amazon S3 membatasi panjang pengidentifikasi objek. Jadi, Anda harus mengatur data Anda sedemikian rupa sehingga tidak menghasilkan pengidentifikasi objek yang terlalu panjang atau melanggar batasan Amazon S3 lainnya.

Untuk informasi selengkapnya tentang cara menggunakan Amazon S3, lihat Panduan Pengguna Amazon Simple Storage Service.