Pemodelan data adalah proses merancang bagaimana aplikasi menyimpan data dalam database tertentu. Dengan database NoSQL seperti DynamoDB, pemodelan data berbeda dari memodel dengan database relasional. Database relasional dibuat untuk fleksibilitas dan bisa sangat sesuai untuk aplikasi analitik. Dalam pemodelan data relasional, Anda memulai dengan entitas terlebih dulu. Saat Anda memiliki model relasional yang dinormalkan, Anda dapat menyelesaikan pola kueri apa pun yang Anda butuhkan dalam aplikasi Anda.

Database NoSQL (nonrelasional) dirancang untuk kecepatan dan skala—bukan fleksibilitas. Meski kinerja database relasional Anda dapat mengalami penurunan saat Anda meningkatkan skala, database yang diskalakan secara horizontal seperti DynamoDB akan memberikan kinerja yang konsisten dalam segala skala. Beberapa pengguna DynamoDB memiliki tabel yang lebih besar dari 100 TB, dan kinerja baca dan tulis tabel mereka sama dengan jika tabel berukuran lebih kecil dari 1 GB.

Mendapatkan hasil terbaik dengan database NoSQL seperti DynamoDB memerlukan pergeseran pemikiran dari database relasional yang sudah umum. Gunakan praktik terbaik berikut saat memodel data dengan DynamoDB.

1. Fokus pada pola akses
Saat melakukan pemodelan data jenis apa pun, Anda akan memulai dengan diagram hubungan entitas yang menguraikan beberapa objek (atau entitas) dalam aplikasi Anda dan bagaimana mereka terhubung (atau hubungan antarentitas Anda).

Dalam database relasional, Anda akan memasukkan entitas Anda langsung ke dalam tabel dan menetapkan hubungan menggunakan kunci asing. Setelah Anda menentukan tabel data, sebuah database relasional akan memberikan bahasa kueri fleksibel untuk menghasilkan data dalam bentuk yang Anda inginkan.

Di DynamoDB, Anda memikirkan tentang pola akses sebelum memodel tabel. Database NoSQL berfokus pada kecepatan, bukan fleksibilitas. Anda terlebih dulu ingin bagaimana Anda akan mengakses data, kemudian memodel data Anda dalam bentuk data akan diakses.

Sebelum merancang tabel DynamoDB, dokumentasikan setiap kebutuhan yang Anda miliki untuk membaca dan menulis data dalam aplikasi Anda. Lakukan dengan teliti, dan pikirkan semua alur dalam aplikasi Anda karena Anda akan mengoptimalkan tabel untuk pola akses Anda..

2. Optimalkan untuk jumlah permintaan ke DynamoDB
Setelah mendokumentasikan kebutuhan pola akses aplikasi, Anda siap merancang tabel Anda. Anda sebaiknya merancang tabel untuk meminimalkan jumlah permintaan ke DynamoDB untuk setiap pola akses. Idealnya, setiap pola akses hanya memerlukan satu permintaan ke DynamoDB karena permintaan jaringan lambat, dan ini akan membatasi jumlah permintaan jaringan yang akan Anda buat dalam aplikasi Anda.

Untuk mengoptimalkan jumlah permintaan ke DynamoDB, Anda perlu memahami beberapa konsep inti:

Kunci utama
Indeks kedua
Transaksi

3. Jangan memalsukan model relasional
Orang-orang yang baru mengenal DynamoDB sering mencoba mengimplementasikan model relasional menggunakan DynamoDB nonrelasional. Jika Anda mencoba melakukan ini, Anda akan kehilangan sebagian besar keuntungan DynamoDB.

Antipola paling umum (respons yang tidak efektif terhadap masalah yang berulang) yang orang-orang coba dengan DynamoDB adalah:

  •  Normalisasi: Dalam database relasional, Anda akan menormalkan data untuk mengurangi redundansi data dan ruang penyimpanan, kemudian menggunakan joins untuk menggabungkan beberapa tabel berbeda. Namun, joins pada skala lamban dan mahal. DynamoDB tidak mengizinkan joins karena joins memperlambat pertumbuhan tabel.
  • Satu jenis data per tabel: Tabel DynamoDB Anda sering menyertakan berbagai jenis data dalam satu tabel. Dalam contoh kita, ada entitas Pengguna, Game, dan UserGameMapping dalam satu tabel. Dalam database relasional, ini akan dimodel sebagai tiga tabel berbeda.
  • Terlalu banyak indeks kedua: Orang-orang sering mencoba membuat indeks kedua untuk setiap pola akses tambahan yang mereka butuhkan. DynamoDB tidak memiliki skema, dan ini juga berlaku untuk indeks Anda. Gunakan fleksibilitas dalam atribut Anda untuk menggunakan kembali satu indeks kedua di beberapa jenis data dalam tabel Anda. Ini disebut sebagai kelebihan muatan indeks.

Dalam langkah di bawah, kita akan membuat diagram hubungan entitas dan memetakan pola akses terlebih dulu. Ini harus selalu menjadi langkah pertama Anda saat menggunakan DynamoDB. Kemudian, di modul berikutnya, kita akan mengimplementasikan pola akses ini dalam desain tabel.

Waktu untuk Menyelesaikan Modul: 20 Menit


  • Langkah 1: Buat diagram hubungan entitas Anda

    Langkah pertama dalam setiap latihan pemodelan data adalah membuat diagram untuk menunjukkan entitas dalam aplikasi Anda dan bagaimana mereka saling terkait.

    Dalam aplikasi, kami memiliki beberapa entitas:
    • Pengguna
    • Game
    • UserGameMapping

    Entitas Pengguna mewakili pengguna dalam aplikasi. Pengguna dapat membuat beberapa entitas Game, dan kreator game akan menentukan peta mana yang dimainkan dan kapan game dimulai. Pengguna dapat membuat beberapa entitas Game, sehingga terdapat hubungan satu ke banyak antara Pengguna dan Game.

    Terakhir, Game berisi beberapa Pengguna dan Pengguna dapat bermain di beberapa Game berbeda dari waktu ke waktu. Karena itu, terdapat hubungan banyak ke banyak antara Pengguna dan Game. Kita dapat mewakili hubungan ini dengan entitas UserGameMapping.

    Dengan mempertimbangkan entitas dan hubungan ini, diagram hubungan entitas ini ditunjukkan di bawah.

    (Klik untuk memperbesar)

  • Langkah 2: Pertimbangkan pola akses profil pengguna

     Pengguna game perlu membuat profil pengguna. Profil ini meliputi data seperti nama pengguna, avatar, statistik game, dan informasi lainnya mengenai pengguna. Game akan menampilkan tiga profil pengguna saat pengguna masuk. Pengguna lain dapat melihat profil pengguna untuk meninjau statistik game mereka dan detail lainnya.

    Saat seorang pengguna bermain game, statistik game diperbarui untuk menggambarkan jumlah game yang telah dimainkan pengguna tersebut, jumlah game yang telah dimenangkan pengguna tersebut, dan jumlah pembunuhan yang dilakukan pengguna tersebut.

    Berdasarkan informasi ini, kita memiliki tiga pola akses:

    •  Membuat profil pengguna (Tulis)
    •  Memperbarui profil pengguna (Tulis)
    • Mendapatkan profil pengguna (Baca)
  • Langkah 3: Pertimbangkan pola akses sebelum game

    Game kita adalah game battle royale. Pemain dapat membuat game pada peta tertentu, dan pemain lainnya dapat bergabung dalam game. Game akan dimulai setelah 50 pemain bergabung, dan tidak ada pemain tambahan yang dapat bergabung.

    Saat mencari game untuk ikut bermain, pemain mungkin ingin memainkan peta tertentu. Pemain lain tidak akan peduli pada peta tersebut, dan akan ingin menelusuri game terbuka di seluruh peta.

    Berdasarkan informasi ini, kita memiliki tujuh pola akses berikut:

    • Membuat game (Tulis)
    • Menemukan game terbuka (Baca)
    • Menemukan game terbuka berdasarkan peta (Baca)
    • Melihat game (Baca)
    • Melihat pengguna dalam game (Baca)
    • Bergabung ke game untuk pengguna (Tulis)
    • Memulai game (Tulis)
  • Langlh 4: Pola akses dalam game dan sebelum game

    Terakhir, mari kita pertimbangkan pola akses selama dan setelah game.

    Selama game, pemain mencoba mengalahkan pemain lainnya dengan sasaran ingin menjadi pemain terakhir yang bertahan. Aplikasi kita akan melacak berapa banyak pembunuhan yang dilakukan setiap pemain selama game, serta lamanya waktu seorang pemain bertahan dalam game. Jika pemain adalah salah satu dari tiga yang bertahan dalam game, pemain tersebut akan menerima medali emas, perak, atau perunggu untuk game tersebut.

    Kemudian, pemain mungkin ingin meninjau game-game lampau yang pernah mereka mainkan atau pemain lain mainkan.

    Berdasarkan informasi ini, kita memiliki tiga pola akses:

    • Memperbarui game untuk pengguna (Tulis)
    • Memperbarui game (Tulis)
    • Menemukan semua game lampau untuk pengguna (Baca)

    Kini kita telah memetakan semua pola akses untuk game. Dalam modul berikut, kita mengimplementasikan pola akses ini dengan menggunakan DynamoDB.

    Perhatikan bahwa fase perencanaan mungkin memerlukan beberapa iterasi. Mulai dengan ide umum pola akses yang diperlukan oleh aplikasi Anda. Petakan kunci utama, indeks kedua, dan atribut dalam tabel Anda. Kembali ke awal dan pastikan semua pola akses sudah diselesaikan. Jika Anda merasa yakin fase perencanaan sudah selesai, lanjutkan dengann implementasi.