Kami memiliki sejumlah klien, yang sistemnya berbagi beberapa fungsi, tetapi juga memiliki tingkat keanekaragaman yang cukup. Jumlah klien bertambah - selalu hal yang sehat! - dan keragaman di antara bisnis mereka juga meningkat.
Saat ini terdapat satu Situs Web ASP.Net (Formulir Web) (sebagai lawan dari proyek web), yang memiliki sub-folder untuk setiap penyewa, dengan halaman-halaman non-standar penyewa itu. Ada proyek model terpisah, yang berkaitan dengan akses basis data dan logika bisnis.
Mana yang lebih disukai - dan yang paling penting, mengapa - antara memiliki (a) 1 database per klien, dengan hanya fitur yang terkait dengan klien itu; atau (b) database tunggal yang digunakan bersama oleh semua klien, di mana hanya sebagian dari tabel yang digunakan oleh satu klien.
Kekhawatiran utama dalam bisnis sudah berakhir:
- pemeliharaan beberapa aset - cadangan, kontrol versi, dan sejenisnya
- mempromosikan penggunaan ulang sebanyak mungkin
Bagaimana Anda memastikan masalah ini ditangani, solusi mana yang lebih disukai, dan mengapa? (Saya juga telah menyusun respons untuk pertanyaan serupa)
sumber
Jawaban:
Berikut ini sorotan dari penelitian dari sumber lain (aslinya dari revisi 2 pertanyaan ):
Haruskah saya menggunakan satu database per aplikasi atau berbagi satu database di antara beberapa aplikasi
Mendukung multitenancy
Arsitektur Data Multi-Penyewa MSDN
SO Bagaimana cara membuat database multi-tenant dengan struktur tabel bersama?
CloudExpo SaaS - Opsi Desain Basis Data Multi-Tenant
Blog MSDN Pindah ke Model Database Multi-Tenant Dimudahkan dengan Federasi SQL Azure
Tanyakan SQL Server Central One atau beberapa database?
SQL Server Central Mixing tables dari berbagai database / aplikasi menjadi satu database
Ayende @ Rahien blog Multi Tenancy - The Physical Data Model
Proyek Kode Multi-Penyewa Database Arsitektur
Joel pada perancangan basis data Multi-tenant Perangkat Lunak
SO Beberapa aplikasi menggunakan satu database?
SO Database tunggal atau ganda
Kata-kata kasar - Multi-tenancy Bagian 1, Strategi dan Bagian 2, Komponen dan Konteks
sumber
Jika Anda menggunakan SQL Server, gunakan satu database tetapi gunakan skema. Gunakan dbo untuk hal-hal yang umum untuk semua klien dan buat skema untuk setiap klien dan jadikan skema default untuk pengguna dari klien itu. Sekarang Anda dapat memiliki objek umum (katakanlah get getBudget proc) di skema dbo dan yang disesuaikan untuk klien dalam skema mereka dengan nama yang sama.
sumber
Karena database dan fungsionalitas klien berbeda, maka itu berarti bahwa pada satu titik mereka akan menjadi sistem yang berbeda, jadi dalam hal ini saya akan merekomendasikan sistem terpisah karena biaya mempertahankan penyesuaian untuk setiap klien akan lebih besar daripada manfaat dari satu sistem basis data.
Sistem basis data tunggal terbaik untuk ketika perubahan antara pelanggan yang berbeda hanyalah konfigurasi tetapi bukan fitur tambahan untuk setiap klien.
sumber
Anda melewatkan beberapa masalah. Masalah akan muncul seiring dengan pertumbuhan. Jika Anda dapat berasumsi bahwa suatu hari nanti Anda akan tumbuh lebih besar dari satu server DB - satu database yang kompleks pasti akan membuat Anda pusing. Kecuali Anda akan berinvestasi dalam arsitektur terlebih dahulu. Tapi ini juga langkah mahal)
Jadi, jangan lupa, bahwa keduanya berkali-kali lebih murah dan berkali-kali lebih mudah untuk memperkecil beberapa basis data yang berbeda, daripada yang besar)
sumber
Satu area yang belum saya lihat dibahas dalam jawaban adalah masalah dengan benar mengamankan aplikasi DB multi-tenant. Aplikasi multi-penyewa harus dirancang dengan sangat hati-hati untuk menghindari masalah keamanan. Sebagian besar Database dan aplikasi menyediakan beberapa, tetapi tidak isolasi lengkap - biasanya ada cara untuk secara langsung atau tidak langsung menyimpulkan data di seluruh skema DB. Dan beberapa sumber daya bersama (log dan file lainnya, tabel DBA, kursor ...) yang dapat, paling tidak, mengarah pada serangan Denial of Service yang mudah terhadap penyewa lain, dan biasanya jauh lebih banyak.
sumber