Я работаю над существующим приложением Seam 2.2.0 + JPA (Hibernate 3.3.1), которое необходимо преобразовать в среду «одна база данных на клиента», где каждая схема базы данных одинакова.Приложение работает на Glassfish, использует IceFaces и имеет несколько страниц, которые используют Conversations.Он также использует один EJB для аутентификации.К сожалению, решение разделить клиентов на их собственные базы данных находится вне моего контроля.
В качестве подтверждения концепции я уже ознакомил приложение с несколькими базами данных, переместив управление EntityManagerFactory (s) иDataSource в приложение, используя абстракции Spring JPA, локальные транзакции ресурса и ThreadLocal для контекстной информации.Например, каждый раз, когда пользователь регистрируется в новом EntityManagerFactory, инициализируется с использованием нового источника данных, который связывается со своей базой данных, если он еще не был инициализирован.Это хорошо работает в тестовой среде с несколькими базами данных.
Мой вопрос: масштабируется ли этот подход для сотен баз данных?Я ожидаю добавить серверы приложений в балансировщик нагрузки для обработки дополнительной нагрузки, но потребуются ли дополнительные ресурсы для масштабирования кэша первого уровня Hibernate / JPA и / или управления контекстом шва (иначе говоря, потребление памяти) по сравнению с обычным масштабированием по сравнению с обычнымприложение с балансировкой нагрузки?Если это так, то можно ли это смягчить, выделив серверам с большим объемом оперативной памяти и / или большим распределенным кешем?
Любое понимание будет с благодарностью.