Multitenencia basada en colecciones con Spring Data MongoDB

Nuestra aplicación Spring Boot 1.3.3 conserva datos en MongoDB (2.6 o 3.2) usando Spring Data MongoDB 1.8.4.

Necesitamos soportar multitenancy. Elegimos usar multitenencia "basada en colecciones", es decir, cada inquilino tiene su propio conjunto de colecciones. Por ejemplo, para la entidad Artículo, las colecciones son "{tenantName} _articles".

Oliver Gierke explicó amablemente una implementación enHaciendo spring-data-mongodb multi-inquilino usando por ejemplo:

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

Esto es muy bueno en el papel, pero no parece aplicable para aplicaciones de la vida real, ya que encontré dos problemas, uno de los cuales es importante:

Número 1 (Podría vivir con eso): al iniciar la aplicación, Spring Boot hace que la base de datos cree los índices para las entidades que tienen índices personalizados (como los atributos @Indexed). Pero al inicio, no hay un "inquilino actual", por lo que Spring Data crea colecciones irrelevantes como "_articles". como podemos prevenir esto?

Número 2 (problema principal aquí): en tiempo de ejecución, se crean y utilizan las colecciones de múltiples inquilinos como "{tenantName} _articles"sin los índices personalizados (aparte del índice MongoDB predeterminado en "_id"). Sospecho que Spring ignora los índices en tiempo de ejecución porque cree que ya hizo el trabajo al inicio. Este es un gran problema de rendimiento. como podemos arreglar esto?

Gracias por tu tiempo.

Respuestas a la pregunta(1)

Su respuesta a la pregunta