|
|
|
Connection between threads
|
|||
|---|---|---|---|
|
#18+
Коллеги, есть задача в разных тредах асинхронно работать с одним и тем же оракловым Connection. Как это грамотно реализовать, есть у кого нибудь опыт ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 17:58:02 |
|
||
|
Connection between threads
|
|||
|---|---|---|---|
|
#18+
JDBC по природе своей не многопоточный. Поэтому вариантов всего два. Либо синхронизировать все потоки по одному локу. Либо складывать все задачи в очередь и разгребать одним потоком для запуска SQL. Если есть какая-то конкретика про используемые SQL, то можно ещё что-то придумать. Например не использовать ResultSet с открытым курсором, а вычитывать данные в CachedRowSet и сразу же освобождать Connection. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 18:03:06 |
|
||
|
Connection between threads
|
|||
|---|---|---|---|
|
#18+
buldozer01Коллеги, есть задача в разных тредах асинхронно работать с одним и тем же оракловым Connection. Как это грамотно реализовать, есть у кого нибудь опыт ? Ну сначала стандартный вопрос - зачем вам это? Скорее всего вы изобретаете велосипед и наступаете на пройденные многими грабли. Если же действительно есть такая необходимость - то в кратце Connection не ThreadSafe, так что можно разве что создать фасад над коннекшенами в который складывать коннекшены по ключу, а перед каждым доустпом к коннекшену лочить этот ключ. Но так вы добьетесь только лишь непротиворечивости, истинной параллельности вам не получить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 18:06:02 |
|
||
|
Connection between threads
|
|||
|---|---|---|---|
|
#18+
А можно в каждом новом треде создавать новый тред и между коннекшенами пробрасывать уровень изоляции такой чтоб были выидны не закомиченные изменения другого конекшена ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 18:08:52 |
|
||
|
Connection between threads
|
|||
|---|---|---|---|
|
#18+
А можно в каждом новом треде создавать новый "конекшен" Очепятка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 18:13:28 |
|
||
|
Connection between threads
|
|||
|---|---|---|---|
|
#18+
buldozer01и между коннекшенами пробрасывать уровень изоляции такой чтоб были выидны не закомиченные изменения другого конекшена ?Нет. Несколько транзакций могут разделять одно подключение, а вот наоборот - никогда. P.S. Задача-то какая? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 18:16:53 |
|
||
|
Connection between threads
|
|||
|---|---|---|---|
|
#18+
buldozer01А можно в каждом новом треде создавать новый тред и между коннекшенами пробрасывать уровень изоляции такой чтоб были выидны не закомиченные изменения другого конекшена ? Может проще версии использовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 18:18:30 |
|
||
|
Connection between threads
|
|||
|---|---|---|---|
|
#18+
Версии чего ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 18:20:36 |
|
||
|
Connection between threads
|
|||
|---|---|---|---|
|
#18+
buldozer01Версии чего ? Версии записей в базе хранить и использовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 18:24:20 |
|
||
|
Connection between threads
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Не так не получится мы заранее не знаем схему БД наша задача - движок между тредами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 18:25:07 |
|
||
|
Connection between threads
|
|||
|---|---|---|---|
|
#18+
buldozer01А можно в каждом новом треде создавать новый тред и между коннекшенами пробрасывать уровень изоляции такой чтоб были выидны не закомиченные изменения другого конекшена ? Может всем Dirty Read разрешить и всё. 8))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 18:25:52 |
|
||
|
Connection between threads
|
|||
|---|---|---|---|
|
#18+
buldozer01А можно в каждом новом треде создавать новый тред и между коннекшенами пробрасывать уровень изоляции такой чтоб были выидны не закомиченные изменения другого конекшена ? Объясни лучше почему Connection только один. 8) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 18:28:10 |
|
||
|
Connection between threads
|
|||
|---|---|---|---|
|
#18+
buldozer01наша задача - движок между тредамиУ движка-то какая задача? Сейчас вы пытаетесь достать левое ухо, вывернув правую руку за спину - утомительно и вредно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 18:28:14 |
|
||
|
Connection between threads
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovСейчас вы пытаетесь достать левое ухо, вывернув правую руку за спину - утомительно и вредно. Заметь, это нужно сделать "грамотно". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 18:29:07 |
|
||
|
Connection between threads
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Транзакция одна если можно сделать такое многими конекшенами почему бы и нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 18:29:46 |
|
||
|
Connection between threads
|
|||
|---|---|---|---|
|
#18+
BlazkowiczМожет всем Dirty Read разрешить и всё. 8)))"Да за это убивать надо" (ц) старый анекдот. Даже там, где "вроде бы" есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 18:32:03 |
|
||
|
Connection between threads
|
|||
|---|---|---|---|
|
#18+
buldozer01, невозможно т.к. один сеанс БД полностью синхронный. Ты толкаешь запрос. И ждёшь и получаешь ответ. Если у тебя много потоков ждут освобождения 1 коннекшена то это попытка использовать это соединение как пул где MAX_CONN=1. Почему-бы тебе не взять готовый пул и не мучиться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 18:32:59 |
|
||
|
Connection between threads
|
|||
|---|---|---|---|
|
#18+
maytonПочему-бы тебе не взять готовый пул и не мучиться?Он хочет, что всё "это" происходило в одной транзакции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 18:34:33 |
|
||
|
Connection between threads
|
|||
|---|---|---|---|
|
#18+
buldozer01Транзакция одна Вооот ключевой момент. Т.е. много потоков шарят одну транзакцию и ты предполагаешь что RDBMS должна реализовывать конкурентный доступ к данным внутри одной транзакции? Эдак весь ACID на хрен сведётся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 18:36:00 |
|
||
|
Connection between threads
|
|||
|---|---|---|---|
|
#18+
buldozer01Транзакция одна если можно сделать такое многими конекшенами почему бы и нет Можно. Но обращения всё равно придётся сериализовать (выстраивать в очередь). Достаточно странно, если одна транзакция понадобиться параллельным потокам. Скорее всего в системе одновременно транзакцию будет использовать один поток. Ваш же движок будет перебрасывать connection между потоками. Но одновременно с ним будет работать только один. Поэтому достаточно себя обезопасить через lock или очередь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 18:43:12 |
|
||
|
Connection between threads
|
|||
|---|---|---|---|
|
#18+
http://docs.oracle.com/cd/B28359_01/appdev.111/b28424/adfns_xa.htm#BABBDDFC Вот интересный тынц в тему ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 18:46:08 |
|
||
|
Connection between threads
|
|||
|---|---|---|---|
|
#18+
buldozer01 http://docs.oracle.com/cd/B28359_01/appdev.111/b28424/adfns_xa.htm#BABBDDFC Вот интересный тынц в тему Да, пожалуйста. Только заметь что там подразумевается работа с многими XA ресурсами. У тебя один XA ресурс. Конкурентный доступ к нему в одной транзакции никто не обещал. И вообще не стоит путать глобальную XA транзакцию и локальную транзакцию отдельного ресурса (DB Connection). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 18:52:34 |
|
||
|
Connection between threads
|
|||
|---|---|---|---|
|
#18+
А потом окажется что "это был теоретический вопрос(с)". Я даже и придумать то не могу зачем такая шляпа может понадобиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 18:57:30 |
|
||
|
Connection between threads
|
|||
|---|---|---|---|
|
#18+
забыл никА потом окажется что "это был теоретический вопрос(с)". Я даже и придумать то не могу зачем такая шляпа может понадобиться. Зришь в корень http://www.sql.ru/forum/actualsearch.aspx?a=buldozer01&ma=0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2012, 23:32:04 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38058685&tid=2130404]: |
0ms |
get settings: |
21ms |
get forum list: |
25ms |
check forum access: |
8ms |
check topic access: |
8ms |
track hit: |
72ms |
get topic data: |
22ms |
get forum data: |
6ms |
get page messages: |
110ms |
get tp. blocked users: |
3ms |
| others: | 330ms |
| total: | 605ms |

| 0 / 0 |
