2013-08-10 3 views
3

У меня есть требование написать приложение Java (на основе Интернета), которое будет подключаться к базам данных Oracle 11G (в настоящее время подключается 10-12 различных баз данных оракула), читать некоторые данные из него (все - это выборные запросы).Подключение к нескольким базам данных с использованием производительности драйверов JDBC

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

В настоящее время я являюсь «Исполнителем» для подключения нескольких баз данных. снова используя ExecutorService executor = Executors.newFixedThreadPool(20); дайте мне один сюрприз. для первого соединения с базами данных creting он показывает немедленный журнал, но для последующего подключения к базе данных он печатает журналы через 60 секунд, поэтому я не понимаю, почему это занимает 60 секунд или более для всех подключений? логически, для всех подключений требуется время, подобное одному.

Просьба предложить улучшить производительность для этого приложения.

+2

Вы должны использовать Пул соединений. Если вы не работаете в среде сервера, ищите решения с открытым исходным кодом, такие как [DBCP] (http://commons.apache.org/proper/commons-dbcp/) или [C3P0] (http://sourceforge.net/projects/c3p0 /) –

+0

Открыты ли соединения рабочими потоками или основными потоками? Почему синхронизация OpenConnection? В каком классе он находится? – Joni

+0

В настоящее время я запускаю это приложение, используя JSF 2.0 (для UI) и tomcat как сервер. – user1037452

ответ

0

Открытие соединения с базой данных - дорогостоящая операция; если возможно, вы должны подключиться к каждой базе данных один раз и повторно использовать соединение для всех запросов, сделанных в эту базу данных (также называемых пулами соединений). Неясно, действительно ли это то, что вы уже делаете.

Другое, что кажется странным, заключается в том, что вы сделали синхронизацию метода openConnection. Я не вижу необходимости в этом, и в зависимости от того, как структурирован ваш код, это может означать, что только один поток может открывать соединение в данный момент времени. Поскольку подключение занимает много времени, вы хотите, чтобы каждый поток подключался параллельно.

+0

Спасибо за это ценное предложение. Я удалю «synchronized» для метода openConnection. Надеюсь, это принесет мне некоторое улучшение производительности. и еще одна вещь, которая, я уже повторно использую соединение, сделанное с этой базой данных. – user1037452

+0

Я проверил удаление «synchronized» для метода openConnection, но не устраивает производительность. Никаких улучшений :( – user1037452

+0

Вы не ответили на мои вопросы, поэтому ничего не можете предложить. Во всяком случае, трудно определить шею бутылки системы без доступа к нему или знания о том, как все сочетается, так что вы вряд ли получите удовлетворительный ответ на этот вопрос. – Joni

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