У меня почти точная проблема и использовал спящий режим. В конце проекта мы столкнулись с множеством проблем, потому что представление в основном заставляло весь граф помещаться в память даже при использовании ленивых типов выборки. Эти инструменты были хороши на ранних этапах, потому что мы могли быстро получить уровень БД, который дал бы нам что-то (хаззилхил). Только когда мы собирались улучшить производительность, мы поняли, что нам нужно написать более интеллектуальный уровень персистентности.
Можно ли провести предварительную обработку ваших данных? Если проблема аналогична, то стоит попытаться преобразовать данные в промежуточную форму, которая ближе к вашему взгляду, чем исходный домен, и сохранить ее в БД. Вы всегда можете вернуться к исходному источнику, используя тип отложенной выборки.
В основном мы использовали 4-уровневую систему: Domain DB, гибрид ViewModel-DB (предварительно обработанный слой), ViewModel, View
Преимущество этого этапа предварительной обработки (особенно с пользовательским интерфейсом в реальном времени) заключается в том, что вы можете размещать данные в ViewModel и красиво их отображать. Так много производительности в приложениях реального времени незначительно, просто будьте отзывчивы и покажите им что-нибудь приятное, пока они ждут. В нашем случае мы могли бы отображать области трехмерных блоков данных, которые были разбиты на страницы, данные, которые были связаны с загрузкой данных, могли также отображать визуальный индикатор. Гибрид ViewModel-DB также может делать такие приятные вещи, как очереди LRU, которые соответствуют данным нашего домена. Но самое большое преимущество заключалось в том, чтобы удалить прямые ссылки. У узлов было что-то похожее на URL к их связанным данным. При рендеринге мы можем отрисовать ссылку или сделать так, чтобы была ссылка, на которую мы только что поделили страницу.
Стойкость на уровне БД для начала была JPA (Hibernate), но в итоге таблицы, сгенерированные для нашей структуры наследования, были ужасны и сложны в обслуживании. В конце мы хотели получить больший контроль над таблицами, чем позволял JPA (или, по крайней мере, легко позволял). Это было трудное решение, так как JPA действительно облегчил работу со многими уровнями БД. Так как JPA держал все в порядке и POJO, он не требовал возиться с нашими типами данных. Так что это было мило.
Я надеюсь, что есть что-то, что вы можете извлечь из этого извилистого ответа, и удачи:)