Saya telah membangun aplikasi web ini (php & mysql) yang menyimpan informasi untuk berbagai organisasi (sekitar 20 klien saat ini).
Skenario saat ini menyimpan informasi terkait klien dalam basis data individual, jadi ada 20 basis data klien dan 1 basis data master.
Salah satu keuntungan utama di sini adalah karena setiap klien db diisolasi, penomoran artefak klien (laporan, audit) dll diurutkan; memberi klien kami perasaan aman.
Setiap DB memiliki sekitar 15 tabel, dan paling banyak baris dalam tabel adalah sekitar 2000. Ini diharapkan paling banyak mencapai 5.000 catatan, paling banyak.
Mengelola perubahan db-level tunggal berarti mengubah 20 basis data, tetapi jika saya perlu melakukan perubahan seperti itu, saya menggunakan skrip yang melakukan ini dalam panggilan fungsi tunggal.
Kami berada pada pengaturan hosting bersama, dan ISP kami menyediakan kami dengan no terbatas. dari basis data; dan itulah yang membuat saya berpikir dalam hal memusatkan basis data; sehingga SEMUA data klien dapat disimpan dalam database master.
Tentu saja, beberapa masalah penting yang muncul adalah:
Sebuah. Mempertahankan urutan artefak, (ini dapat diatasi dengan membuat kunci referensi tambahan) b. Kecepatan dan kinerja (dalam hal ini saya dapat membuat indeks untuk mempercepat) c. Keamanan: Ini akan dikelola karena setiap kueri yang mengambil info klien. juga akan melacak client_id mereka
Di masa depan, kita mungkin perlu mempertimbangkan membandingkan dataset dari satu organisasi dengan organisasi lain, tapi saya percaya itu dapat dicapai pada db terpusat juga. Saya agak cenderung (untuk alasan kinerja dan pemeliharaan) untuk pindah ke database terpusat.
Apakah Anda pikir pindah ke database terpusat lebih masuk akal daripada tetap seperti kita (pada database individu)?
Terima kasih atas saranmu.
Jawaban:
Ada risiko bawaan dan penghargaan untuk kedua sistem. Saya bekerja untuk sebuah perusahaan keuangan yang mendukung sekitar 40 klien (bank nasional) pada 1 basis data. Kami kemudian membeli perusahaan lain yang menjual perangkat lunak serupa dan telah menggunakan 1 basis data per klien. Akhirnya, perusahaan bangkrut dan kami memang harus mengekspor semua data pengguna. Inilah yang saya dan orang-orang tempat saya bekerja:
Pro dari Single DB:
Con's of Single DB:
Pro of Multiple DBs:
Con's of Multiple DBs:
Pada akhirnya rekomendasi saya setelah melihat dan melakukan keduanya adalah memiliki "disiplin"! Saya pikir pilihan multi-db sedikit lebih baik karena melindungi Anda tetapi Anda tidak dapat membiarkan klien Anda membuat pilihan yang menyebabkan Anda menambahkan fungsionalitas hanya kepada mereka atau Anda akan menempatkan diri Anda pada jalan menuju kegagalan.
sumber
Saya akan memiliki database terpisah untuk klien terpisah. Klien mungkin menuntut ini karena alasan keamanan - yaitu hanya situs mereka yang memiliki akses ke data mereka. Ini juga berarti bahwa jika klien ingin memindahkan data mereka maka itu akan jauh lebih mudah untuk dikelola.
Ini juga berarti bahwa jika ada masalah dengan database satu klien, itu tidak mempengaruhi yang lain.
Jika Anda ingin membandingkan data antara klien maka Anda harus melakukannya secara terpisah.
Jika Anda kehabisan database yang dapat Anda miliki maka mungkin Anda harus mempertimbangkan untuk mengubah penyedia host Anda.
sumber
Satu-satunya alasan saya tidak akan memiliki database individual untuk setiap klien adalah jika Anda akan memiliki 100-an atau 1000-an klien / database. Ini bisa menjadi sangat berbulu untuk dikelola termasuk membuat perubahan basis data atau melakukan sesuatu di semua basis data. Tindakan yang terjadi di sejumlah besar banyak basis data juga bisa lambat karena Anda perlu membuka (dan karenanya menutup) begitu banyak tabel.
Tapi selain dari kasus ini, saya pikir banyak basis data lebih baik.
Satu keuntungan, yang mungkin tidak penting tetapi dapat bermanfaat, adalah bahwa setiap klien mendapatkan ID berurutan mereka sendiri (bukannya mungkin melewatkan sekelompok karena klien lain menambahkan catatan).
Selain itu, banyak basis data memungkinkan sub tabel (seperti jenis telepon) mudah disesuaikan untuk setiap klien tanpa perlu ID catatan induk dalam tabel ini juga.
sumber
Pertama urutan artefak. Saya berasumsi Anda menggunakan kunci primer integer untuk memberikan ini. Sungguh, Anda harus memiliki kolom "nomor artefak" yang terpisah. PK harus PK dan bukan yang lain. Orang-orang berbicara tentang "kunci alami" dan sejenisnya dan saya merasa ngeri. Setiap kali Anda mengandalkan PK untuk menjadi lebih dari pengenal, ia kembali menggigit Anda. Jika Anda ingin mengetahui urutan sesuatu, simpan tanggal atau nomor urut.
Saya pikir dalam manajemen konfigurasi kasus Anda akan mengarahkan Anda ke satu database. Lihatlah berapa biaya yang harus Anda keluarkan untuk memelihara dan meningkatkan basis data. Berapa biaya yang terkait dengan setiap rilis perangkat lunak? Juga pikirkan biaya ketika Anda mendapatkan pelanggan baru dan harus membuat DB dan mengkonfigurasi aplikasi untuk itu. Apa pun dapat diotomatisasi, pertanyaannya adalah, apakah itu akan sia-sia ketika Anda memiliki 100 database?
Di ujung jalan, lebih mudah untuk skala (partisi, perangkat keras, sharding dll) satu database daripada melakukan hal yang sama untuk 100 database.
Saya pikir poster lain telah membuat beberapa poin yang sangat bagus jadi saya tidak akan membahasnya.
sumber
Untuk menambah pro / con terdaftar hingga sekarang:
Pro tentang banyak basis data:
Masalah penguncian dihindari; kami punya database di mana klien dapat memicu perubahan-DDL pada beberapa tabel. Untuk tabel yang lebih besar (> catatan 2m) ini mengunci tabel untuk waktu yang cukup lama. Satu-satunya orang yang dirugikan adalah pengguna mereka sendiri, jadi ini semacam diterima.
Fleksibilitas - beberapa klien memiliki keinginan spesifik terkait data yang ingin mereka simpan; multi-database memungkinkan kami fleksibilitas untuk mengubah database mereka secara khusus, tanpa harus mengacaukan model data untuk klien lain.
Cons:
Semoga beruntung dalam memilih!
sumber
Saya tahu Anda sudah memilih jawaban, tetapi sepertinya ada solusi lain yang tidak disarankan:
Pindahkan semuanya ke satu database, tetapi buat tabel untuk setiap pelanggan, menggunakan awalan, seperti ini:
Ini jenis yang terbaik dari kedua dunia.
sumber