Kapan menggunakan beberapa tabel di DynamoDB?

11

Praktik terbaik DyanmoDB memperjelas bahwa:

Anda harus menjaga tabel sesedikit mungkin dalam aplikasi DynamoDB. Sebagian besar aplikasi yang dirancang dengan baik hanya membutuhkan satu tabel.

Saya merasa lucu kemudian bahwa hampir setiap tutorial yang saya lihat berurusan dengan DyanmoDB memiliki desain multi-tabel.

Tetapi apa artinya ini dalam praktik?

Mari kita pertimbangkan aplikasi sederhana dengan tiga entitas utama: Pengguna, Proyek, dan Dokumen. Seorang Pengguna memiliki banyak proyek, dan Proyek dapat memiliki banyak Dokumen. Kami biasanya harus menanyakan Proyek untuk Pengguna, dan pada Dokumen untuk Proyek. Dibandingkan jumlah menulis dengan margin yang signifikan.

Desain tabel tutorial naif akan menggunakan tiga tabel:

Users
Hash key
user-id

Projects
Hash key       Global Index
project-id     user-id

Documents
Hash key       Global Index
document-id    project-id

Kita bisa dengan mudah runtuh Projectdan Documentmenjadi satu Documentstabel:

Documents
Hash key    Sort key        Global Index
project-id  document-id     user-id

Tapi mengapa berhenti di situ? Mengapa tidak satu meja untuk mengatur semuanya? Karena itu Useradalah akar dari segalanya ...

Users
Hash key    Sort key
user-id     aspect
---------   ---------
foo         user                   email: foo@bar.com ...
foo         project:1              title: "The Foo Project"
foo         project:1:document:2   document-id: 2     ...

Kemudian kita akan memiliki Indeks Global pada, katakanlah, emailbidang pencarian catatan pengguna, dan yang lain di document-idlapangan untuk pencarian dokumen langsung.

Apakah itu cara kerjanya? Apakah sah untuk membuang jenis data yang sangat berbeda ke dalam tabel yang sama? Atau yang kedua, desain dua meja pendekatan yang lebih baik?

Pada titik mana akan benar menambahkan tabel kedua?

David Eyk
sumber

Jawaban:

7

Ya, itu sah untuk melakukan apa yang Anda katakan. Keduanya sebenarnya. Ada beberapa variabel yang tidak Anda miliki di sini dan dapat membantu memandu bagaimana model data harus dilakukan.

  1. Skala apa yang Anda cari dengan aplikasi dan model data ini?
  2. Dari pola akses aplikasi, berapa rasio bacaan di antara pola tersebut. Berarti yang mana yang paling populer.
  3. Dari pola akses yang Anda daftarkan, berapa kali per detik dilakukan?

Misalnya, jika 80% dari semua bacaan adalah untuk menemukan pengguna pada suatu proyek dan itu perlu terjadi 30.000 / detik, tetapi dalam aplikasi Anda tidak banyak orang akan melangkah lebih jauh dan mencari tahu dokumen untuk proyek tersebut, maka itu adalah 20% dari keseluruhan bacaan dan hanya 2000 bacaan / detik. Yang pertama adalah "jalur panas" aplikasi Anda dan harus dioptimalkan.

Pikirkan juga seperti ini, dengan basis data non-relasional seperti DynamoDB, Anda dapat mengoptimalkan cara aplikasi Anda menggunakan dan mengakses data dan tidak seperti basis data relasional di mana Anda harus khawatir banyak tentang bagaimana ini disimpan dalam database.

Gereja
sumber
Di salah satu re: pembicaraan ceroboh, seorang insinyur senior menyatakan kira-kira berikut - di masa lalu, penyimpanan relatif lebih mahal daripada menghitung; jadi kami dioptimalkan untuk penyimpanan (DB Relasional) tetapi sekarang penyimpanan murah sekali! Komputasi relatif lebih mahal; jadi kami mengoptimalkan untuk menghitung (NoSQL, dioptimalkan untuk dibaca)
Gaz_Edge
Saya setuju, NoSql memungkinkan saya untuk mengelola data saya sesuai dengan persyaratan Aplikasi saya. Ini semua tentang rasio antara membaca dan mengubah data.
Anurag pareek