Setelah komentar ini ke salah satu pertanyaan saya, saya berpikir apakah lebih baik menggunakan satu database dengan skema X atau sebaliknya.
Situasi saya: Saya sedang mengembangkan aplikasi web di mana, ketika orang mendaftar, saya membuat (sebenarnya) database (tidak, itu bukan jejaring sosial: semua orang harus memiliki akses ke datanya sendiri dan tidak pernah melihat data pengguna lain) .
Itulah cara saya menggunakan versi aplikasi saya sebelumnya (yang masih berjalan di MySQL): melalui API Plesk, untuk setiap pendaftaran, saya lakukan:
- Buat pengguna basis data dengan hak istimewa terbatas;
- Buat database yang dapat diakses hanya oleh pengguna yang dibuat sebelumnya dan superuser (untuk pemeliharaan)
- Mengisi basis data
Sekarang, saya harus melakukan hal yang sama dengan PostgreSQL (proyek semakin matang dan MySQL ... tidak memenuhi semua kebutuhan).
Saya harus memiliki semua cadangan basis data / skema independen: pg_dump berfungsi dengan baik dalam dua cara, dan hal yang sama untuk pengguna yang dapat dikonfigurasi untuk mengakses hanya satu skema atau satu database.
Jadi, dengan anggapan Anda adalah pengguna PostgreSQL yang lebih berpengalaman daripada saya, menurut Anda apa solusi terbaik untuk situasi saya, dan mengapa?
Apakah akan ada perbedaan kinerja menggunakan basis data $ x bukannya skema $ x? Dan solusi apa yang akan lebih baik untuk dipertahankan di masa depan (keandalan)?
Semua database / skema saya akan selalu memiliki struktur yang sama!
Untuk masalah backup (menggunakan pg_dump), mungkin lebih baik menggunakan satu database dan banyak skema, membuang semua skema sekaligus: memulihkan akan cukup sederhana memuat dump utama dalam mesin pengembangan dan kemudian membuang dan mengembalikan hanya skema yang diperlukan: ada adalah satu langkah tambahan, tetapi membuang semua skema tampaknya lebih cepat daripada membuangnya satu per satu.
UPDATE 2012
Nah, struktur dan desain aplikasi berubah sangat banyak selama dua tahun terakhir. Saya masih menggunakan one db with many schemas
pendekatan, tetapi masih, saya punya satu database untuk setiap versi aplikasi saya:
Db myapp_01
\_ my_customer_foo_schema
\_ my_customer_bar_schema
Db myapp_02
\_ my_customer_foo_schema
\_ my_customer_bar_schema
Untuk cadangan, saya membuang setiap basis data secara teratur, dan kemudian memindahkan cadangan pada server pengembangan.
Saya juga menggunakan cadangan PITR / WAL tetapi, seperti yang saya katakan sebelumnya, tidak mungkin saya harus mengembalikan semua database sekaligus ... jadi mungkin akan diberhentikan tahun ini (dalam situasi saya bukan pendekatan terbaik ).
Pendekatan satu-db-banyak-skema bekerja sangat baik bagi saya sejak sekarang, bahkan jika struktur aplikasi benar-benar berubah:
Saya hampir lupa: semua database / skema saya akan selalu memiliki struktur yang sama!
... sekarang, setiap skema memiliki strukturnya sendiri yang berubah secara dinamis bereaksi terhadap aliran data pengguna.