Агрегирование результатов из разных источников - архитектура приложения Java - PullRequest
0 голосов
/ 26 июля 2011

Я искал в google и stackoverflow мою проблему, но не смог найти хорошего решения.Ниже приведено описание

Наше веб-приложение Java отображает результаты поиска из нашей локальной базы данных и вызовов API внешнего веб-сервиса.Таким образом, логика поиска должна объединять эти результаты и отображать их на странице результатов.Проблема в том, что внешние вызовы API возвращают результаты медленнее, чем наши локальные вызовы БД.Производительность имеет решающее значение для наших результатов поиска, и результаты должны быть живыми, т.е. мы не должны кэшировать или сохранять внешние результаты в нашей локальной БД.Прямо сейчас мы охватываем два потока, один для вызова БД, а другой для внешнего API, и объединяем эти результаты и отображаем их на экране.Но это убивает производительность нашего приложения, особенно когда мы вызываем более одного внешнего API.

Есть ли какое-либо архитектурное решение для этой проблемы?Спасибо.

1 Ответ

0 голосов
/ 26 июля 2011

Вы не можете отобразить данные, прежде чем они у вас есть.

1) Вы можете отображать ваши локальные данные и по мере их поступления добавлять через ajax другие данные.

2) И если есть повторяющиеся вопросы, вы можете на короткое время кэшировать внешние ответы (и отображать их с предупреждением о том, что они старые и что они будут заменены свежим ответом), и как только появится новый ответ, нажмите новый ответить.

По крайней мере, 1) система будет отзывчива, 2) полезный ответ может быть доступен немедленно, даже если он не является текущим.

Кстати, если внешний источник ответит долго, вы уверены, что их ответ не устарел (например, если они собирают некоторые данные и ждут отдыха, то то, что они собрали до сих пор, может устареть)? Так что, может быть (и, возможно, нет) краткосрочное сохранение не так плохо, как вы думаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...