Multitenancy baseada em coleção com o Spring Data MongoDB

Nosso aplicativo Spring Boot 1.3.3 persiste os dados no MongoDB (2.6 ou 3.2) usando o Spring Data MongoDB 1.8.4.

Precisamos apoiar a multilocação. Optamos por usar a multilocação "baseada em coleção", ou seja, cada inquilino tem seu próprio conjunto de coleções. Por exemplo, para a entidade Artigo, as coleções são "{tenantName} _articles".

Oliver Gierke gentilmente explicou uma implementação emTornando multi-inquilino spring-data-mongodb usando por exemplo:

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

Isso é muito bom no papel, mas não parece aplicável a aplicativos da vida real, pois encontrei dois problemas, sendo um importante:

Problema 1 (Eu poderia conviver com isso): na inicialização do aplicativo, o Spring Boot faz com que o banco de dados construa os índices para entidades que possuem índices personalizados (como atributos @Indexed). Porém, na inicialização, não há "inquilino atual", então o Spring Data cria coleções irrelevantes, como "_articles". Como podemos evitar isso?

Edição 2 (problema principal aqui): em tempo de execução, as coleções multitenantes, como "{tenantName} _articles" são criadas e usadassem os índices personalizados (além do índice padrão do MongoDB em "_id"). Suspeito que o Spring ignore os índices em tempo de execução porque acha que já fez o trabalho na inicialização. Este é um grande problema de desempenho. Como podemos consertar isso?

Obrigado pelo seu tempo.

questionAnswers(1)

yourAnswerToTheQuestion