лимит соединений с базой данных и количеством потоков Java в приложении - PullRequest
2 голосов
/ 17 июня 2010

Я работаю над разработкой JMS-приложения (автономного многопоточного Java-приложения), которое может принимать 100 сообщений одновременно, их необходимо обрабатывать и вызывать процедуры базы данных для вставки / обновления данных.Процедуры очень тяжелые, так как в них также выполняются проверки.Каждая процедура занимает от 30 до 50 секунд времени, и они могут работать одновременно.Моя задача - выполнить 100 процедур для всех 100 сообщений, а также отправить ответ в течение 90 секунд приложением jms.Сервер приложений не требуется (требование), а база данных - это Teradata (RDBMS)

Я использую пул соединений и пул потоков в коде Java и тестирую код с 90 соединениямиВопрос:

(1) Каким должно быть ограничение на количество соединений с базой данных одновременно?(2) Сколько потоков рекомендуется одновременно?

Спасибо, Джиоти

Ответы [ 2 ]

1 голос
/ 17 июня 2010

90 похоже на многое.Моя рекомендация состоит в том, чтобы сравнить это.Ваши критерии уникальны, и вам нужно убедиться, что вы получаете максимальную пропускную способность.Я хотел бы сделать код настраиваемым с количеством одновременных подключений, которые вы используете, и запускать его с 10 ... 100 подключениями, увеличивающимися по 10 за раз.Это не должно занять много времени.Когда вы начинаете замедляться, вы знаете, что превзошли преимущества одновременного запуска.
Сделайте это несколько раз, чтобы убедиться, что ваши результаты предсказуемы.

0 голосов
/ 06 января 2014

Еще одна проблема - ваше заявление о том, что «процедура длится от 30 до 50 секунд».Сколько времени занимает обработка через Java и сколько времени ожидает, пока база данных обработает оператор SQL?Нужно ли действительно добавлять оба раза, чтобы определить максимальное количество соединений, которое вам нужно?

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

Если, например, из 50 секунд выполнения только 1 секунда доступа к базе данныхнеобходимо, тогда вам, вероятно, не нужно такое максимальное максимальное количество соединений.

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