|
|
|
Что лучше, много Statement 1 Connection, или пул Connection?
|
|||
|---|---|---|---|
|
#18+
Здавсствуйте.. Сейчас решаю задачу: как лучше с точки зрения хорошего стиля программирования, производительности и т.п. реализовать многопользовательский доступ к БД через JDBC? есть 2 варианта: 1) существует одно соединение (connection) с БД и для него создается один PreparedStatement в который посылаются запросы от разных пользователей 2) создавать соединение и PreparedStatement для каждого пользователя и помещать соединение в пул соединений реализовал 2 варианта но пока не могу дать оценку, хочется услышать мнение экспертов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2006, 20:21 |
|
||
|
Что лучше, много Statement 1 Connection, или пул Connection?
|
|||
|---|---|---|---|
|
#18+
Не совсем ясна формулировка вопроса - получается что приложение использует всего один Statement, что означает всего один SQL-запрос или UID-выражение. ИМХО уникальный случай. Используя одно соединение к БД столкнешся с проблемой, когда множество потоков будет ожидать завершения одного, который занят взаимодействием с БД. Обычно повышение производительности достигается несколькими способами: 1. создать пул соединений к БД. Можно использовать готовый пулы c3p0, DBCP или использовать соединения сервера приложений. Плюс использования существующего пула, например c3p0, в том, что задачу восстановления соединения с БД при разрыве можно возложить на него. 2. можно закешировать наиболее часто используемые запросы (т.е. Statement-ы), создав их при инициализации приложения. Некоторые СУБД отличаются большими затратами на создание Statement-ов (практически цитата из Hibernate In Action). Опять же, нужно не забывать о синхронизации доступа к PreparedStatement (для обычного Statement это _может_быть_ некритично). А вообще, очень рекомендую уходить от чистого JDBC к ORM вроде Hibernate, хотя это зависит от приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2006, 12:04 |
|
||
|
Что лучше, много Statement 1 Connection, или пул Connection?
|
|||
|---|---|---|---|
|
#18+
ситуация такая: соденинение (Connection) с БД одно, на каждую таблицу создается свой отдельный PreparedStatement и кэшируется. А пользователей, которые обращаются к базе - много - и все они используют существующий кэш PreparedStatement-ов. наверное лучше всеже пул? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2006, 12:35 |
|
||
|
Что лучше, много Statement 1 Connection, или пул Connection?
|
|||
|---|---|---|---|
|
#18+
Ну тогда лучше пул соединений. По поводу пула стейтментов - нужно каким-то образом найти компромисс между их количеством, т.к. и их создание, и хранение может быть дорогостоящим. Кроме того, разрыв соединения с СУБД потенциально может вызвать инвалидность стейтмента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2006, 12:47 |
|
||
|
Что лучше, много Statement 1 Connection, или пул Connection?
|
|||
|---|---|---|---|
|
#18+
unicornmirage Создавать по соединению на пользователя (и соответствующий набор statement-ов) плохо и с точки зрения производительности, и с точки зрения стиля программирования. Трудно говорить абстрактно, но полагаю в общем случае лучший вариант - поддерживать тот минимум соединений, который позволит избежать ожиданий при обработке обращений пользователей. Соответственно реализованный и отстроенный пул соединений вполне с этим справится. Впрочем, если сервер удовлетворяет эксплуатационным требованиям и с одним соединением, незачем усложнять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2006, 12:48 |
|
||
|
Что лучше, много Statement 1 Connection, или пул Connection?
|
|||
|---|---|---|---|
|
#18+
BlackWall Используя одно соединение к БД столкнешся с проблемой, когда множество потоков будет ожидать завершения одного, который занят взаимодействием с БД. но почему? ведь существуют транзакции в пределах одного соединения (Connection)? а если пользователей много - и для каждого создавать соединение - не будет ли это накладным.? а вообще в каких ситуациях использовать пул соединений выгодно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2006, 12:50 |
|
||
|
Что лучше, много Statement 1 Connection, или пул Connection?
|
|||
|---|---|---|---|
|
#18+
unicornmirageна каждую таблицу создается свой отдельный PreparedStatement и кэшируется Кстати, вот это вызывает некоторые сомнения с точки зрения того, что я полагаю хорошим стилем программирования. Включая в хороший стиль и производительность, и все остальное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2006, 12:55 |
|
||
|
Что лучше, много Statement 1 Connection, или пул Connection?
|
|||
|---|---|---|---|
|
#18+
softwarer unicornmirageна каждую таблицу создается свой отдельный PreparedStatement и кэшируется Кстати, вот это вызывает некоторые сомнения с точки зрения того, что я полагаю хорошим стилем программирования. Включая в хороший стиль и производительность, и все остальное. уточните, пожалуйста, чем это черевато? если я правильно понял все вышесказанное - хорошим стилем будет при каждом обращении пользователя к серверу создавать для него на базе существующего connection статемент, выполнять запрос и закрывать статемент? либо второй вариант - для каждого пользователя создавать соединение и помещать его в пул, а затем его брать оттуда? тогда вопрос: смысл PreparedStatement как я понимаю в повторном использовании - один раз формируется и потом может повторно использоваться с различными праметрами. --> отсюда следует что его можно помещать в пул ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2006, 13:00 |
|
||
|
Что лучше, много Statement 1 Connection, или пул Connection?
|
|||
|---|---|---|---|
|
#18+
unicornmirageуточните, пожалуйста, чем это черевато? Это стандартный holy war. Один statement на таблицу означает полное игнорирование возможностей БД и реализацию велосипеда на клиенте либо промежуточном сервере. unicornmirageесли я правильно понял все вышесказанное - хорошим стилем будет при каждом обращении пользователя к серверу создавать для него на базе существующего connection статемент, выполнять запрос и закрывать статемент? Нисколько. unicornmirageлибо второй вариант - для каждого пользователя создавать соединение и помещать его в пул, а затем его брать оттуда? И здесь я уже говорил, что не стоит делать по соединению на пользователя. Если коротко и достаточно точно, что хороший стиль - не делать лишнего. А следовательно, эффективно повторно использовать уже существующее. unicornmirageтогда вопрос: смысл PreparedStatement как я понимаю в повторном использовании Именно. Это способ наиболее эффективно работать с БД, способ закешировать выражение на сервере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2006, 13:28 |
|
||
|
Что лучше, много Statement 1 Connection, или пул Connection?
|
|||
|---|---|---|---|
|
#18+
большое спасибо за критику. читаю сейчас статью http://lib.juga.ru/article/articleprint/162/-1/68/ и думаю что пул - это есть одно из лучших решений ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2006, 19:13 |
|
||
|
Что лучше, много Statement 1 Connection, или пул Connection?
|
|||
|---|---|---|---|
|
#18+
прочитал вышеуказанную статью и решил написать свой пул соединений. посоветуйте пожалуйста, может уже существуют готовые решения? более эффективные? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2006, 14:48 |
|
||
|
Что лучше, много Statement 1 Connection, или пул Connection?
|
|||
|---|---|---|---|
|
#18+
unicornmirageпрочитал вышеуказанную статью и решил написать свой пул соединений. посоветуйте пожалуйста, может уже существуют готовые решения? более эффективные? Как правило пул Connection и пулл Statement реализуется вендорами БД. Т.к. они могут использовать внутренние особенности своих БД о которых всем знать необязательно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2006, 16:47 |
|
||
|
Что лучше, много Statement 1 Connection, или пул Connection?
|
|||
|---|---|---|---|
|
#18+
я использую mysql-connector-java-3.1.10-bin.jar посмотрел библиотеку - ничего похожего на пул не нашел... может плохо искал? вот еще вопрос - если предположим буду делать сам пул соединений - то можно кроме соединения в пуле сохранять для каждого соединения набор PreparedStatement'ов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2006, 16:54 |
|
||
|
Что лучше, много Statement 1 Connection, или пул Connection?
|
|||
|---|---|---|---|
|
#18+
можно сделать пул чего угодно. это вообще-то шаблон такой ----------------------------------- The Bat + My Gate Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2006, 17:16 |
|
||
|
Что лучше, много Statement 1 Connection, или пул Connection?
|
|||
|---|---|---|---|
|
#18+
unicornmirageя использую mysql-connector-java-3.1.10-bin.jar посмотрел библиотеку - ничего похожего на пул не нашел... может плохо искал? В mysql-connector-java-5.0.0-beta-bin.jar искать здесь: com\mysql\jdbc\jdbc2\optional\MysqlDataSource unicornmirage вот еще вопрос - если предположим буду делать сам пул соединений - то можно кроме соединения в пуле сохранять для каждого соединения набор PreparedStatement'ов? Да можно только учти что в пуле PreparedStatement могут быть проблеммы, т.к. что у PreparedStatement может быть в один момент времени открыт только один ResultSet. Далее если из разных потоков то устанавливать параметры можно только для одного запроса. В общем думай сам, но лучьше использовать готовое ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2006, 17:52 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=33566061&tid=2150081]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
166ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 496ms |

| 0 / 0 |
