2015-01-11 2 views
0

Привет Я пишу веб-приложение и подключается к 700 Базах данных и выполняет основной запрос SELECT.Веб-приложение занимает много времени для выполнения

Например:

Существует кнопка для извлечения менеджеров каждой отрасли. Существует 700 филиалов компании, и каждая из деталей филиала хранится в отдельных базах данных. Выбор запроса извлекает 1 запись из каждой базы данных и возвращает Менеджер этой ветви. Поэтому выполнение этого кода занимает много времени. Я не могу заставить пользователя ждать до такого времени (30 минут)

Из-за ограничений памяти я не могу использовать многопоточность.

Примечание. В этом веб-приложении используется Spring MVC. Сервер Tomcat7.

Любое обходное решение возможно?

ответ

2

С таким количеством баз данных, которые можно запросить, единственными возможными решениями, которые я вижу, является кеширование. Если в реальном времени это не проблема (обратите внимание, что 30 минут исполнения в любом случае вытолкнут вас из реального времени), вы можете изучить следующие возможности, для чего требуется централизовать данные в единую логическую или физическую базу данных:

  • Clustering: поместите серверы баз данных в огромный кластер, который настроен для производительности, поэтому использует кеширование внутри страны. В зависимости от стоимости лицензии это решение может быть слишком непрактичным или даже слишком дорогостоящим.

  • Передача данных в центральную базу данных: все 700 серверов баз данных будут толкать данные, которые вам нужны, в центральную базу данных, которую будет использовать ваше приложение. Вы можете использовать возможности репликации серверов баз данных (например, в MSSQL или PostgreSQL) или плановые передачи данных. Этот метод требует административного доступа к серверам баз данных для настройки сценариев репликации или отбрасывания для запуска по расписанию.

  • Извлечь данные с центрального хоста базы данных: иметь централизованный узел, чтобы получить требуемые данные в локальную базу данных, таблицы которой обновляются посредством запланированных передач данных. Это самый простой метод. Его недостатком является то, что запросы в реальном времени невозможны.

Это ключ передать только данные, необходимые. Сделайте свои заявления выбора максимально узкими, чтобы ограничить время выполнения.

Центральная база данных может быть вашим сервером веб-приложений или отдельной машиной, если ограничения ресурсов ограничены. Я обнаружил, что PostgreSQL с минимальными усилиями обладает отличной совместимостью с MSSQL. Без дополнительной информации трудно быть более точным.

+0

Hi Nasha, Это обходное решение, о котором думали и будут его рассматривать. Как я думал, если использование JQUERY JSON было вариантом для «Из коробки», чтобы обрабатывать его внутри самого приложения. Например, куски JSON из 100 баз данных будут выполнять и возвращать результат и хранить его, а затем следующие 100 и так далее. В это время пользователь может выполнять любую операцию по своему выбору. После выполнения результата результат будет отсортирован в правом нижнем углу. – JMD

+0

Если вам понадобится до 30 минут, чтобы получить данные, вы, скорее всего, больше не выиграете, а переведете ожидания на клиента. Если все пользователи хотят получить * все * данные (пользователи требуют, это законно), использование JSON вовремя не сделает это. Я бы сказал, все зависит от того, что вы ожидаете от точки зрения пользователя. –

+1

700 баз данных автоматически не означает 700 серверов. Помимо того, что консолидация необходимых данных (менеджеров) в одном месте - хорошая идея. Честно говоря, единственный жизнеспособный выбор. – zeroflagL

Смежные вопросы