Многопрофильность на основе коллекций с Spring Data MongoDB

Наше приложение Spring Boot 1.3.3 сохраняет данные на MongoDB (2.6 или 3.2), используя Spring Data MongoDB 1.8.4.

Нам нужно поддерживать мультитенантность. Мы решили использовать мультитенант «на основе коллекций», то есть у каждого арендатора есть свой набор коллекций. Например, для сущности Article коллекции являются "{tenantName} _articles".

Оливер Гирке любезно объяснил реализацию вСоздание мульти-арендатора Spring-data-mongodb используя, например:

@Document(collectionName = "#{tenantProvider.getTenantId()}_articles")

Это очень хорошо на бумаге, но, кажется, неприменимо для реальных приложений, так как я обнаружил две проблемы, одна из которых является основной:

Выпуск 1 (Я мог бы с этим смириться): при запуске приложения Spring Boot заставляет базу данных строить индексы для сущностей, которые имеют пользовательские индексы (такие как атрибуты @Indexed). Но при запуске «текущий арендатор» отсутствует, поэтому Spring Data создает несущественные коллекции, такие как _articles. Как мы можем предотвратить это?

Выпуск 2 (основная проблема здесь): во время выполнения создаются и используются многопользовательские коллекции, такие как "{tenantName} _articles"без пользовательских индексов (кроме индекса MongoDB по умолчанию для "_id"). Я подозреваю, что Spring игнорирует индексы во время выполнения, потому что считает, что уже выполнил задание при запуске. Это серьезная проблема с производительностью. Как мы можем это исправить?

Спасибо за ваше время.

Ответы на вопрос(1)

Ваш ответ на вопрос