Tôi có cùng một vấn đề cần giải quyết và cũng đang xem xét các biến thể.
Trong khi thực hiện nghiên cứu của mình, tôi đã tìm thấy bài viết này trên trang web hỗ trợ mongodb (đã thêm từ khi nó biến mất):https://web.archive.org/web/20140812091703/http://support.mongohq.com/use-case/multi -tenant.html
Các chàng trai đã tuyên bố tránh các tùy chọn thứ 2 bằng bất kỳ giá nào, theo tôi hiểu thì điều này không đặc biệt cụ thể đối với mongodb. Ấn tượng của tôi là điều này có thể áp dụng cho hầu hết các dbs NoSQL mà tôi đã nghiên cứu (CoachDB, Cassandra, CouchBase Server, v.v.) do các chi tiết cụ thể của thiết kế cơ sở dữ liệu.
Các bộ sưu tập (hoặc nhóm hoặc tuy nhiên chúng gọi nó trong các DB khác nhau) không giống như các lược đồ bảo mật trong RDBMS mặc dù chúng hoạt động như một vùng chứa cho các tài liệu mà chúng vô dụng để áp dụng phân tách đối tượng thuê tốt. Tôi không tìm thấy cơ sở dữ liệu NoSQL có thể áp dụng các hạn chế bảo mật dựa trên các bộ sưu tập.
Tất nhiên bạn có thể sử dụng bảo mật dựa trên vai trò mongodb để hạn chế quyền truy cập ở cấp cơ sở dữ liệu / máy chủ. (http://docs.mongodb.org/manual/core/authorization/)
Tôi muốn giới thiệu lựa chọn đầu tiên khi:
- Bạn có đủ thời gian và nguồn lực để giải quyết sự phức tạp của thiết kế, triển khai và kiểm tra tình huống này.
- Nếu bạn sẽ không có nhiều khác biệt về cấu trúc và chức năng trong cơ sở dữ liệu cho những người thuê khác nhau.
- Thiết kế ứng dụng của bạn sẽ cho phép người thuê chỉ thực hiện các tùy chỉnh tối thiểu trong thời gian chạy.
- Nếu bạn muốn tối ưu hóa dung lượng và giảm thiểu việc sử dụng các nguồn phần cứng.
- Nếu bạn sắp có hàng nghìn người thuê.
- Nếu bạn muốn mở rộng quy mô nhanh với chi phí tốt.
- Nếu bạn KHÔNG sao lưu dữ liệu dựa trên người thuê (giữ các bản sao lưu riêng biệt cho từng người thuê). Có thể làm được điều đó ngay cả trong thisscenario nhưng công sức sẽ rất lớn.
Tôi sẽ chuyển sang biến thể 3 nếu:
- Bạn sẽ có một danh sách nhỏ những người thuê (vài trăm người).
- Các chi tiết cụ thể của công việc kinh doanh đòi hỏi bạn phải có khả năng hỗ trợ những khác biệt lớn trong cấu trúc cơ sở dữ liệu cho các đối tượng thuê khác nhau (ví dụ:tích hợp với hệ thống của bên thứ 3, nhập - xuất dữ liệu).
- Thiết kế ứng dụng của bạn sẽ cho phép khách hàng (người thuê) thực hiện những thay đổi đáng kể trong thời gian chạy ứng dụng (thêm mô-đun, tùy chỉnh các trường, v.v.).
- Nếu bạn có đủ tài nguyên để mở rộng quy mô với các nút phần cứng mới một cách nhanh chóng.
- Nếu bạn được yêu cầu giữ các phiên bản / bản sao lưu dữ liệu cho mỗi đối tượng thuê. Ngoài ra, việc khôi phục cũng sẽ dễ dàng.
- Có những hạn chế pháp lý / quy định buộc bạn phải giữ những người thuê khác nhau trong các cơ sở dữ liệu khác nhau (thậm chí cả trung tâm dữ liệu).
- Nếu bạn muốn sử dụng đầy đủ các tính năng bảo mật có sẵn của mongodb, chẳng hạn như vai trò.
- Có sự khác biệt lớn về quy mô giữa những người thuê (bạn có nhiều người thuê nhỏ và ít người thuê rất lớn).
Nếu bạn đăng thêm thông tin chi tiết về đơn đăng ký của mình, có lẽ tôi có thể cho bạn lời khuyên chi tiết hơn.