Sau khi nhận xét này cho một trong những câu hỏi của tôi, tôi nghĩ liệu có tốt hơn khi sử dụng một cơ sở dữ liệu với lược đồ X hoặc ngược lại.
Tình huống của tôi: Tôi đang phát triển một ứng dụng web, khi mọi người đăng ký, tôi tạo (thực tế) một cơ sở dữ liệu (không, đó không phải là mạng xã hội: mọi người phải có quyền truy cập vào dữ liệu của chính mình và không bao giờ thấy dữ liệu của người dùng khác) .
Đó là cách tôi đã sử dụng cho phiên bản trước của ứng dụng của mình (vẫn đang chạy trên MySQL): thông qua API Plesk, cho mỗi lần đăng ký, tôi làm:
- Tạo người dùng cơ sở dữ liệu với các đặc quyền hạn chế;
- Tạo một cơ sở dữ liệu có thể được truy cập chỉ bởi người dùng đã tạo trước đó và siêu người dùng (để bảo trì)
- Tạo cơ sở dữ liệu
Bây giờ, tôi sẽ cần phải làm tương tự với PostgreSQL (dự án đang hoàn thiện và MySQL ... không đáp ứng tất cả các nhu cầu).
Tôi cần phải có tất cả các bản sao lưu cơ sở dữ liệu / lược đồ độc lập: pg_dump hoạt động hoàn hảo theo cả hai cách và giống nhau cho người dùng có thể được cấu hình để truy cập chỉ một lược đồ hoặc một cơ sở dữ liệu.
Vì vậy, giả sử bạn là người dùng PostgreQuery có nhiều kinh nghiệm hơn tôi, bạn nghĩ đâu là giải pháp tốt nhất cho tình huống của tôi, và tại sao?
Sẽ có sự khác biệt về hiệu suất khi sử dụng cơ sở dữ liệu $ x thay vì lược đồ $ x? Và giải pháp nào sẽ tốt hơn để duy trì trong tương lai (độ tin cậy)?
Tất cả các cơ sở dữ liệu / lược đồ của tôi sẽ luôn có cùng cấu trúc!
Đối với vấn đề sao lưu (sử dụng pg_dump), có thể tốt hơn khi sử dụng một cơ sở dữ liệu và nhiều lược đồ, bỏ tất cả các lược đồ cùng một lúc: việc khôi phục sẽ khá đơn giản khi tải kết xuất chính trong máy phát triển, sau đó kết xuất và khôi phục chỉ lược đồ cần thiết: có là một bước bổ sung, nhưng việc loại bỏ tất cả các lược đồ có vẻ nhanh hơn so với việc loại bỏ chúng từng cái một.
CẬP NHẬT 2012
Vâng, cấu trúc và thiết kế ứng dụng đã thay đổi rất nhiều trong hai năm qua. Tôi vẫn đang sử dụng one db with many schemas
phương pháp này, nhưng tôi vẫn có một cơ sở dữ liệu cho mỗi phiên bản ứng dụng của mình:
Db myapp_01
\_ my_customer_foo_schema
\_ my_customer_bar_schema
Db myapp_02
\_ my_customer_foo_schema
\_ my_customer_bar_schema
Để sao lưu, tôi sẽ bỏ từng cơ sở dữ liệu thường xuyên và sau đó di chuyển các bản sao lưu trên máy chủ phát triển.
Tôi cũng đang sử dụng bản sao lưu PITR / WAL, nhưng như tôi đã nói trước đây, không có khả năng tôi sẽ phải khôi phục tất cả cơ sở dữ liệu cùng một lúc ... vì vậy có lẽ nó sẽ bị loại bỏ trong năm nay (trong tình huống của tôi không phải là cách tiếp cận tốt nhất ).
Cách tiếp cận một-db-many-lược đồ hoạt động rất tốt đối với tôi kể từ bây giờ, ngay cả khi cấu trúc ứng dụng hoàn toàn thay đổi:
Tôi gần như quên mất: tất cả các cơ sở dữ liệu / lược đồ của tôi sẽ luôn có cùng cấu trúc!
... bây giờ, mỗi lược đồ có cấu trúc riêng thay đổi linh hoạt phản ứng với luồng dữ liệu của người dùng.