Apa yang akan menjadi desain database yang lebih baik untuk situs web jejaring sosial? Satu tabel dengan lebih banyak kolom dan lebih sedikit baris, atau beberapa tabel dengan lebih sedikit kolom tetapi lebih banyak baris?
Misalnya: Pengguna dapat memposting pembaruan di dinding mereka atau dalam grup.
Dua desain database yang dapat saya pikirkan adalah:
Desain 1
UserPosts
- Indo
- identitas pengguna
- pos
- tanggal Waktu
UserGroupPost :
- Indo
- groupId
- identitas pengguna
- pos
- tanggal Waktu
Masalah potensial : Mungkin memerlukan gabungan, yang dapat (di masa depan) menjadi permintaan yang lambat.
Desain 2
Posting :
- Indo
- identitas pengguna
- groupId
- pos
- datetime (di mana groupid akan menjadi nol jika pengguna memposting di dinding mereka)
Masalah Potensial : Perulangan pada dataset besar bisa memakan waktu (lama).
Bagaimana saya bisa mendapatkan kinerja yang lebih baik ketika data meningkat? Apakah ada cara lain (lebih baik)?
mysql
database-design
Siddharth Patel
sumber
sumber
Jawaban:
Kecenderungan saya di sini akan selalu menjadi opsi desain 1, atau setidaknya di sepanjang garis itu. Jangan khawatir terlalu banyak tentang mencoba menghilangkan kebutuhan untuk bergabung dengan tabel di kueri masa depan - setiap database yang dinormalisasi akan menggunakan gabungan dalam setiap pertanyaan yang berguna, itu hanya database relasional.
Juga, mengapa Anda harus bergabung dengan tabel userPosts dan userGroupPosts untuk situs web Anda? Apakah mereka tidak akan ditampilkan secara terpisah? Satu-satunya alasan Anda bergabung dengan tabel ini adalah mungkin ketika mencari posting, tetapi seharusnya tidak terlalu sulit untuk menulis pertanyaan yang efisien untuk itu. Selain itu, Anda mungkin ingin menanyakan tabel untuk keperluan analisis, tetapi itu bukan tujuan utama dari database ini.
Desain 2 setidaknya bisa berarti bahwa Anda berakhir dengan meja yang sangat sibuk.
Opsi terbaik adalah prototipe masing-masing dan menjalankan beberapa tes. Buat prototipe dari setiap opsi desain, dan lakukan pembandingan kinerja pada operasi yang berbeda dengan beberapa data tiruan.
sumber
Bagi saya, sesuai struktur Anda saat ini Desain 2 lebih baik. Anda dapat mengimplementasikan partisi, kueri yang dioptimalkan & cara terstruktur untuk membuat database / tabel akan mengurangi waktu eksekusi. Tetapi beberapa kasus normalisasi bekerja lebih baik, tetapi sangat tergantung pada arsitektur perancangan basis data Anda.
sumber