Ứng dụng của chúng tôi cần 5 bộ sưu tập trong một db. Khi chúng tôi thêm ứng dụng của khách hàng, chúng tôi muốn duy trì db riêng biệt cho từng khách hàng. Ví dụ:nếu chúng ta có 500 khách hàng, chúng ta sẽ có 500 dbs và 2500 bộ sưu tập (mỗi db có 5 bộ sưu tập). Bằng cách này, chúng tôi có thể tách biệt từng dữ liệu khách hàng.
Đó là một ý tưởng tuyệt vời. Ngoài sự phân tách hợp lý, điều này sẽ cung cấp cho bạn, bạn cũng sẽ có thể sử dụng bảo mật cấp cơ sở dữ liệu trong MongoDB để giúp ngăn chặn truy cập vô tình vào dữ liệu của khách hàng khác.
Mối quan tâm của tôi là, liệu nó có dẫn đến bất kỳ vấn đề hiệu suất nào không?
Không, và trên thực tế, nó sẽ giúp ích vì với khóa cấp cơ sở dữ liệu, tranh chấp khóa cực kỳ nặng nề đối với một khách hàng (nếu điều đó có thể xảy ra trong trường hợp của bạn) sẽ không ảnh hưởng đến hiệu suất của khách hàng khác (vẫn có thể xảy ra nếu họ đang cạnh tranh cho cùng một băng thông I / O nhưng nếu bạn sử dụng tùy chọn --directoryperdb thì bạn có khả năng đặt các DB đó trên các thiết bị vật lý riêng biệt.
Sharding cũng sẽ cho phép mở rộng quy mô dễ dàng vì bạn thậm chí sẽ không phải phân vùng bất kỳ bộ sưu tập nào - bạn có thể chỉ cần tổng hợp cơ sở dữ liệu tổng hợp trên nhiều phân đoạn để cho phép tải được phân phối đến các cụm riêng biệt (nếu và khi bạn đạt đến mức đó).
Trái ngược với tuyên bố trong câu trả lời khác, chuỗi TTLMonitor KHÔNG kéo tài liệu vào RAM trừ khi chúng đang bị xóa (và được thêm vào danh sách miễn phí). Chúng hoạt động dựa trên các chỉ mục TTL để cho biết liệu có tài liệu nào sắp hết hạn hay không cũng như xác định vị trí tài liệu trực tiếp.
Tôi thực sự khuyên bạn không nên sử dụng giải pháp nhiều tập hợp một cơ sở dữ liệu vì điều đó không cho phép bạn phân vùng tải, cũng như cung cấp bảo mật và cũng không dễ xử lý hơn ở phía ứng dụng.