DynamoDB Single-Table Design: Membuat Blog (1)

2 min read

Disclaimer
Saya bekerja di AWS, semua opini adalah dari saya pribadi. (I work for AWS, my opinions are my own.)
DynamoDB Single Table Design
Ilustrasi: Single-Table Design

TeknoCerdas.com – Salam cerdas untuk kita semua. Amazon DynamoDB adalah managed NoSQL database yang menyediakan performa dan skalabilitas yang tinggi dari AWS. Berbeda dengan SQL database pada RDBMS, DynamoDB tidak menyediakan fitur join antar tabel atau hubungan relational seperti yang ditemukan RDBMS. Artikel ini akan membahas bagaimana menerapkan konsep DynamoDB single-table design dengan contoh membuat blog.

Meskipun DyanamoDB tidak memiliki fitur JOIN seperti pada RDBS, namun DynamoDB menyediakan fitur seperti Local Secondary Index (LSI) dan Global Secondary Index (GSI) yang bisa digunakan untuk menyediakan berbagai access-pattern yang diperlukan oleh aplikasi.

Access-pattern adalah pola aplikasi dalam mengakses data pada sebuah aplikasi yang dibuat. Menentukan access-pattern ini adalah kunci dalam mendesain data model pada DynamoDB.

Dengan menggunakan single-table design beberapa keuntungan:

  • Lebih mudah untuk melakukan perencanaan kapasitas, monitoring, konfigurasi, dan backup. Contoh untuk multi-region replication.
  • Penggunaan resource tabel yang lebih optimal
  • Menyediakan access-pattern yang fleksibel dan efisien

Konsep Umum Amazon DynamoDB

Tabel adalah koleksi dari data. Sebagai contoh tabel dapat berisi koleksi dari data artikel atau data penulis. Mirip dengan tabel yang ada pada RDBMS dimana data juga disimpan pada tabel.

Item adalah data pada tabel dengan atribut yang dikenali lewat primary key. Tidak ada batasan jumlah item yang dapat disimpan pada DynamoDB. Namun maksimal ukuran untuk setiap item adalah 400KB.

Atribut adalah elemen informasi yang melekat pada sebuah item. Sebagai contoh sebuah item artikel dapat memiliki atribut judul, konten dan sebagainya. Jika pada RDBMS biasa disebut dengan kolom. Pada DynamoDB selain primary key maka tipe data atribut dapat berbeda untuk setiap item. Sehingga dapat disebut schemaless.

Primary Key adalah data unik yang mengidentifikasi setiap item pada tabel. Primary key bisa terdiri dari:

  • Partition key adalah primary key yang terdiri dari sebuah atribut. DynamoDB menggunakannya untuk menentukan posisi partisi dari data di storage internal.
  • Partition key dan sort key disebut juga composite primary key adalah primary key yang terdiri dari dua atribut. Pada primary key tipe ini terdapat banyak item yang menempati posisi partisi yang sama. Sort key berguna untuk menambahkan fleksibilitas ketika melakukan query data pada partisi ini.

Global Secondary Index (GSI) adalah index dengan partition key dan sort key yang berbeda dari tabel induk. Dengan adanya GSI maka memberikan alternatif untuk melakukan query data berdasarkan access-pattern yang berbeda. Default maksimum quota untuk GSI adalah 20 index.

Local Secondary Index (LSI) adalah index yang memiliki partition key yang sama dengan tabel induk tetapi berbeda sort key. Default maksimum quota untuk LSI adalah 5 index.

DynamoDB Stream adalah fitur untuk menangkap setiap even modifikasi data yang terjadi pada tabel seperti item baru, item update atau item dihapus. DynamoDB dapat melakukan stream ke AWS Lambda (mirip seperti trigger) atau Amazon Kinesis Data Stream.

On-Demand Mode adalah pilihan billing yang fleksibel yang dapat menangani ribuan request per detik tanpa perlu merencanakan kapasitas. Mode ini biasa disebut juga pay-per-request karena kita membayar ketika hanya melakukan request ke DynamoDB. Harga dari on-demand mode dapat dilihat di sini.

Provisioned Mode adalah mode dimana kita harus menentukan Read Capacity Units (RCU) dan Write Capacity Units (WCU) pada tabel yang dibuat. Jika aplikasi memiliki traffic yang konsisten dan terprediksi maka Provisioned Mode pilihan lebih baik dari On-Demand Mode karena biaya yang lebih murah. Harga dari provisioned mode dapat dilihat di sini.

RCU merepresentasikan satu (1) strongly consistent read request atau dua (2) eventually consistent read request untuk sebuah item maksimal sampai 4KB. Jika aplikasi membutuhkan 1000 eventually consistent read per detik dengan ukuran item 2KB maka membutuhkan 500 RCU. Namun jika setiap itemnya berukuran 7KB maka memerlukan 1000 RCU.

WCU merepresentasikan satu (1) penulisan per detik untuk sebuah item maksimal sampai 1KB. Jika aplikasi melakukan penulisan item sebanyak 100 kali per detik dengan ukuran item 2KB maka memerlukan 200 WCU.

Untuk memahami konsep Amazon DynamoDB dengan lebih lengkap dapat merujuk pada official documentation dari AWS di sini.

Pada artikel bagian kedua saya akan membahas lebih detil implementasi atau contoh dari single-table dari sebuah blog.