Ответ 1
Наше приложение нуждается в 5 коллекциях в дБ. Когда мы добавляем клиентов в наше приложение мы хотели бы поддерживать отдельный db для каждого клиент. Например, если у нас есть 500 клиентов, у нас будет 500 дБ и 2500 коллекций (каждый db имеет 5 коллекций). Таким образом, мы можем разделять данные каждого клиента.
Это отличная идея. Помимо логического разделения, это обеспечит вас, вы также сможете использовать защиту уровня базы данных в MongoDB, чтобы предотвратить непреднамеренный доступ к данным других клиентов.
Моя забота о том, приведет ли она к любым проблемам с производительностью?
Нет, и на самом деле это поможет, так как блокировка уровня базы данных чрезвычайно тяжелая блокировка для одного клиента (если это возможно в вашем сценарии) не повлияет на производительность для другого клиента (возможно, если они конкурируют за один и тот же I/O, но если вы используете опцию --directoryperdb, то у вас есть возможность разместить эти БД на отдельных физических устройствах.
Sharding также позволит легко масштабировать, поскольку вам даже не придется разбивать какие-либо коллекции - вы можете просто объединять базы данных по нескольким осколкам, чтобы позволить распределению нагрузки отдельным кластерам (если и когда вы достигнете этого уровня).
В отличие от претензии в другом ответе, поток TTLMonitor НЕ тянет документы в ОЗУ, если они не удаляются (и добавляются в свободный список). Они работают с индексами TTL как для того, чтобы указать, должны ли истек какие-либо документы, так и непосредственно разместить документ.
Я бы настоятельно рекомендовал против одной базы данных решение многих коллекций, так как это не позволяет вам либо разделить нагрузку, либо обеспечить безопасность, либо ее легче обрабатывать со стороны приложения.