Untuk salah satu sistem kami, kami memiliki data klien yang sensitif dan menyimpan data masing-masing klien dalam database terpisah. Kami memiliki sekitar 10-15 klien untuk sistem itu.
Namun, kami sedang mengembangkan sistem baru yang akan memiliki 50-100 klien, mungkin lebih. Saya pikir mungkin tidak mungkin memiliki satu basis data per klien dalam hal ini (untuk menyimpan catatan sensitif dan riwayat audit). Namun saya tidak tahu apakah ini normal atau tidak, atau apakah ada cara lain untuk menjaga keamanan.
Ada pemikiran tentang ini?
database-design
sql-server-2012
NibblyPig
sumber
sumber
Jawaban:
Mengelola 100 atau 500 database benar-benar tidak jauh berbeda dari mengelola 5 atau 10 - Anda hanya perlu merangkul otomatisasi dan memiliki rencana skalabilitas (dan tidak berencana untuk menggunakan fitur database per biaya tinggi seperti mirroring di semua klien).
Pada pekerjaan saya sebelumnya, kami menggunakan arsitektur ini dan saya tidak akan pernah berpikir untuk menggabungkan dua klien menjadi satu database, meskipun beberapa tantangan bisa "sulit."
Manfaat besar adalah model pemulihan independen (
a
bisa sederhana,b
bisa penuh, dll.), Kemampuan untuk mengembalikan ke titik waktu (atau menghapus seluruhnya) klien tanpa mengganggu orang lain, kemampuan untuk memindahkan mulus sumber daya klien berat ke penyimpanannya sendiri atau ke server yang sama sekali berbeda dengan sangat sedikit transparansi (Anda memperbarui file atau tabel konfigurasi yang memberi tahu aplikasi tempat menemukan klien itu).Saya membahas beberapa keberatan, dan / atau cara mendekati masalah, dalam posting ini:
Menangani semakin banyak Penyewa dalam Arsitektur Database Multi-penyewa
Basis data multi-tenant menggunakan SQL Server 2008?
Otomasi cadangan dari Sejumlah Besar Basis Data
Itu semua mengatakan, saya tidak berpikir ada di antara kita yang bisa memberi tahu Anda titik di mana manajemen menjadi tidak praktis bagi Anda - ketahuilah bahwa apa pun tantangan spesifik yang Anda temui, Anda dapat bertanya tentang masalah-masalah itu secara individual.
sumber
Saya sarankan Anda membaca Arsitektur Data Multi-Tenant , kertas putih yang membahas opsi yang Anda miliki, dan pro dan kontra. Untuk meringkas, ini memberikan tiga opsi:
Anda sekarang berada pada tahap DB terpisah, yang menawarkan pemisahan terbaik (isolasi antara penyewa), tetapi merupakan yang paling sulit untuk dikelola. Ketika Anda tumbuh menjadi ratusan penyewa, Anda akan menyadari bahwa logistik untuk mengelola 100-an DB jauh dari mudah. Pikirkan backup-restore (lokasi file yang dicadangkan, pekerjaan, jadwal dll). Pikirkan bagaimana Anda akan memantau dan mengelola alokasi file, ruang disk yang digunakan, dan pertumbuhan basis data di ratusan DB. Pikirkan skenario skenario High-Availability / Disaster-Recoverability Anda dalam waktu dekat dengan 1000 tenant? 1000 mirrored DBs, 1000 sesi pengiriman log? Pikirkan bagaimana jika dalam 6 bulan tim dev Anda mendatangi Anda dan berkata "Saya tahu bagaimana memberikan fitur yang luar biasa ini kepada produk kami, kami akan menggunakan Replikasi Transaksional!", Apa yang akan Anda katakan? "tentu, izinkan saya menyiapkan 500 penerbit,"! Bukan tidak mungkin untuk mengelola ratusan DB, tetapi jika Anda berencana untuk melakukannya, Anda lebih baik memoles keterampilan PowerShell Anda dan berhenti menggunakan alat manajemen UI sekarang .
Selain itu, Anda perlu mempertimbangkan bahwa banyak (ratusan) DB memiliki dampak yang terukur terhadap kinerja dan biaya:
DB yang terpisah datang dengan beberapa keuntungan meskipun karena isolasi, keuntungan utama adalah backup / restore independen.
Skenario seperti milik Anda adalah kandidat sempurna untuk database SQL Azure . Tidak ada administrasi ruang disk, tidak perlu menyediakan HA / DR, tumbuh hingga ratusan / ribuan DB, dll.
sumber
Di pekerjaan saya sebelumnya, kami meng-host tidak hanya satu database per klien - dalam banyak kasus, itu lebih dari itu! Ketika saya pergi, ada lebih dari 4.500 basis data yang berjalan di satu kluster MariaDB, hampir 7.000 di kluster lain (ironisnya lebih kecil), dan 4 "pecahan" (sepenuhnya terpisah, server independen dan server basis data, bahkan di pusat data yang sepenuhnya terpisah) masing-masing hosting 200-500 database dalam satu server MySQL. Dan perusahaan itu masih tumbuh dengan baik.
Panjang dan pendeknya adalah keberhasilan perusahaan itu membuktikan bahwa arsitektur semacam itu memang layak. (Peringatan: Bertolak belakang dengan keuntungan yang tampak dalam isolasi dengan menggunakan basis data terpisah, semua data diakses melalui trio aplikasi yang digabungkan secara ketat yang semuanya menggunakan pengguna basis data yang sama / lulus! Saya menduga kinerja mungkin akan sangat berkurang jika setiap klien memiliki pengguna / pass yang terpisah - tetapi hanya sedikit.)
Dari pengalaman saya bekerja sama dengan admin sys (secara teknis saya adalah seorang programmer di perusahaan, tetapi pada kenyataannya saya adalah DBA terbaik yang mereka miliki, dan satu - satunya orang yang mereka miliki yang tahu cara mengatur firewall!), Terkait kinerja kekhawatiran terkait dengan akses bersamaan, kompleksitas kueri / waktu, kinerja indeks, dll. - semua tersangka yang biasa, dengan kata lain, dan jumlah database di server tidak memainkan bagian yang dapat dilihat, kesimpulan yang ditegaskan oleh spesialis bayaran tinggi konsultan kami berkonsultasi secara teratur.
Intinya adalah bahwa Anda harus memfokuskan kekhawatiran Anda pada aplikasi Anda, pada infrastruktur Anda, dan bukan pada jumlah database yang Anda miliki. Semua faktor lain akan lebih dari cukup untuk membuat Anda sibuk menyelesaikan masalah kinerja dan kemacetan.
sumber