Saya tahu Shopify hanya menggunakan satu database untuk semua toko. Tetapi bagaimana mereka bisa menangani database mereka dengan data sebesar itu? Apakah itu ide yang baik untuk menggunakan database tunggal untuk 50.000+ toko?
sql-server
database-design
Farid Movsumov
sumber
sumber
Jawaban:
Yah, itu benar-benar tergantung pada skema, volume, dll. Apa sebenarnya toko menyimpan? Apa bedanya menyimpan data sekitar 50.000 kucing atau 50.000 produk atau 50.000 kacang?
Ada beberapa alasan (selain dari aspek ukuran saja) mengapa Anda mungkin tidak ingin menyimpan data untuk 50.000 pelanggan yang berbeda dalam satu basis data, jika memang data dapat sepenuhnya dipisahkan oleh pelanggan (tidak termasuk tabel pencarian seperti kode pos atau tabel khusus aplikasi, yang bisa masuk ke satu, basis data pusat):
jika satu pelanggan melebihi aplikasi, tidak ada cara mudah untuk mengekstrak hanya data mereka dan memindahkannya ke contoh lain, server, dll untuk memperkecil, kecuali jika Anda merencanakan ke depan dan mempartisi pada sesuatu seperti
CustomerID
dan memiliki 50.000 filegroup (Anda terbatas hingga 15.000 partisi , atau 1.000 jika Anda menggunakan SQL Server versi yang lebih lama, dan memiliki terlalu banyak filegroup dapat menjadi bencana ). Perhatikan juga bahwa mempartisi membutuhkan Edisi Perusahaan.jika ternyata semua pelanggan Anda terlalu besar untuk hal ini, mengubah skala berarti mendapatkan perangkat keras baru dan memindahkan seluruh basis data di sana (dan berpotensi melakukan hal itu lagi di ujung jalan).
menghapus pelanggan bisa sama menyakitkannya, karena Anda harus menghapus beberapa% baris dari tabel yang sangat besar, dan itu tidak akan murah.
Anda mungkin akan memiliki distribusi data pelanggan yang luas (satu pelanggan dengan satu miliar baris, pelanggan lain dengan 5.000). Ini dapat menyebabkan hal-hal seperti mengendus parameter dan kinerja yang merugikan yang melibatkan kardinalitas dan kualitas paket (karena Anda kemungkinan akan menggunakan kembali paket yang sama untuk permintaan yang sama terhadap kumpulan data yang sangat berbeda).
semua pelanggan Anda tunduk pada rencana SLA dan HA / DR yang sama persis. Anda juga memiliki seluruh database dalam mode pemulihan penuh dengan cadangan log n-menit, atau Anda berada dalam keadaan sederhana dan mengandalkan backup + diff penuh. Jika Anda harus kembali karena kesalahan pelanggan, atau perlu memulihkan database ke titik waktu, itu mempengaruhi setiap pelanggan.
ada potensi kesalahan dalam pengambilan data - bug di mana klausa, misalnya, dapat menyebabkan satu pelanggan melihat data pelanggan lain, atau semua data pelanggan lainnya.
mungkin ada implikasi hukum (beberapa perusahaan akan memiliki persyaratan ketat di mana Anda tidak menempatkan data mereka di database yang sama dengan perusahaan lain, dan khususnya pesaing mereka).
jika keamanan data satu pelanggan penting, maka mencapai yang lebih mudah menggunakan pemisahan basis data daripada pemisahan dalam tabel.
Beberapa keuntungan memiliki masing-masing pelanggan dalam database terpisah (atau setidaknya memiliki beberapa basis data, masing-masing untuk sekelompok pelanggan):
DROP DATABASE
.Beberapa kekurangan:
sumber