我们的Spring Boot 1.3.3应用程序使用Spring Data MongoDB 1.8.4将数据持久化到MongoDB(2.6或3.2)。我们需要支持多租户。我们选择使用“基于集合”的租户模式,即每个租户都有自己的一组集合。例如,对于Article实体,集合为“{tenantName}_articles”。Oliver Gierke在Making spring-data-mongodb multi-tenant中友好地解释了一个实现方法,例如:
这在理论上看起来非常好,但实际应用中存在两个问题,其中一个问题非常严重:
问题1(我可以忍受):在应用程序启动时,Spring Boot使数据库为具有自定义索引的实体(如@Indexed属性)构建索引。但是在启动时,没有“当前租户”,因此Spring Data会创建不相关的集合,例如“_articles”。我们该如何防止这种情况发生?
问题2(主要问题):在运行时,多租户集合(例如“{tenantName}_articles”)被创建并使用,但没有使用自定义索引(除了"_id"上的默认MongoDB索引)。我怀疑Spring在运行时忽略了索引,因为它认为它已经在启动时完成了工作。这是一个很大的性能问题。我们该如何解决这个问题?
谢谢您的时间。
@Document(collectionName = "#{tenantProvider.getTenantId()}_articles")
这在理论上看起来非常好,但实际应用中存在两个问题,其中一个问题非常严重:
问题1(我可以忍受):在应用程序启动时,Spring Boot使数据库为具有自定义索引的实体(如@Indexed属性)构建索引。但是在启动时,没有“当前租户”,因此Spring Data会创建不相关的集合,例如“_articles”。我们该如何防止这种情况发生?
问题2(主要问题):在运行时,多租户集合(例如“{tenantName}_articles”)被创建并使用,但没有使用自定义索引(除了"_id"上的默认MongoDB索引)。我怀疑Spring在运行时忽略了索引,因为它认为它已经在启动时完成了工作。这是一个很大的性能问题。我们该如何解决这个问题?
谢谢您的时间。