|
|
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
Petro123сначала select update убрать. А тогда и очереди не понадобятся ) Вот и о том же ) JDSт.е. блокировка накладывается только на момент изменения данных, а то и вообще просто в контексте самого апдейта (без select for update) function set_flag return number is n_res number; begin update mytable_with_flag -- упрощенно set flag = 1 where flag = 0; if sql%rowcount = 0 then n_res := 0; -- флаг уже стоит else n_res := 1; -- флаг выставили end if; return n_res; end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 14:56 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
JDS, ну перепутал чел бизнес транзакцию и технические оракла. Бывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 15:00 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
urvas1. Серверов приложений и так несколько, но проблемы это не снимает. Обвязка между несколькими СП, некий координатор? Вопросо будет ещё больше, ИМХО. * У сервер приложения конекты с СУБД как бы не должны отваливаться (только в аварийных случаях) * Отвалившихся клиентов будет проще определить * Что означает аббревиатура СП? urvas2.Вот про очереди бы поподробнее. Точнее, про все составляющие этого процесса. Я не даром упомянул про JMS и AQ. Есть подобный опыт? Я думаю тут много кто имел опыт по работе с JMS и AQ, ничего там особо хитрого/сложного нет. Чтобы говорить про очереди, нужно больше информации по вашей задаче. Если у вас все сводится к списку задач которые клиенты должны брать и выполнять, то я думаю через очереди все хорошо получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 15:03 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
JDSкоммититься не забываем ) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 15:20 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
JDSJDSкоммититься не забываем ) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. а чем это принципеально отличается от select update, ведь в случае неожиданного разрыва коннекта, будет тоже самое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 15:30 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
xifrА чем это принципеально отличается от select update, ведь в случае неожиданного разрыва коннекта, будет тоже самое. Абсолютно верно - практически ничем, кроме того, что можно выставить флаг без select for update (просто мелкое замечание) Насчет неожиданного разрыва тоже писал - надо убрать управление блокировками напрямую из java или какого-либо другого СП и как вариант, запускать процедуры джобами ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 15:35 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
JDS, Вот Вы никак не хотите понять, что база не может сама принимать решение о старте какого-либо её, базы, внутреннего приложения. В моём случае это внешний сигнал из Java, а поэтому никакие джобы не помогут - они либо сигнала не увидят (если флаг не выставить), либо дружною толпою начнут обработку (если доверить вызов джобов внешнему приложению). Собственно, вопрос больше концептуальный - видимо, необходим какой-то промежуточный слой/механизм, обеспечивающий единственную точку с гарантированным последовательным доступом к запуску ХП/выставлению флага в БД. Потому как все предложенные способы не обеспечивают работоспособность в аварийной ситуации за приемлемое время. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 15:58 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
urvasСобственно, вопрос больше концептуальный - видимо, необходим какой-то промежуточный слой/механизм, обеспечивающий единственную точку с гарантированным последовательным доступом к запуску ХП/выставлению флага в БД. Потому как все предложенные способы не обеспечивают работоспособность в аварийной ситуации за приемлемое время. Угу. Многопользовательсую СУБД Оракле нагнуть через последовательный доступ. Концептуально). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 16:11 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
Petro123, В моём конкретном случае многопользовательность - зло. В моей задаче, как в стометровке или марафоне, стартует сколь угодно много, но победитель всегда один. Или по-другому - дрочеров много, а отец один. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 16:18 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
urvasВот Вы никак не хотите понять, что база не может сама принимать решение о старте какого-либо её, базы, внутреннего приложения. В моём случае это внешний сигнал из Java, а поэтому никакие джобы не помогут - они либо сигнала не увидят (если флаг не выставить), либо дружною толпою начнут обработку (если доверить вызов джобов внешнему приложению). По порядку: 1. Java-приложение дает базе сигнал на запуск ХП в виде создания джоба (т.е. по сути оно поставило задание в очередь) - все дальше оно может хоть отваливаться, хоть еще 100 джобов попытаться поставить. Чем это не сигнал базе? ) 2. Внутри самой ХП прописывается механизм выставления флага. Т.е. джоб запускает процедуру, а уже процедура, выставляет флаг, если у нее не получилось выставить флаг, значит кто-то уже выставил флаг ранее (другой джоб) в этом случае (смотря что нужно) процедура или просто завершается (возможно с протоколом и т.п. в общем как душе угодно), или ждет завершения уже работающей сессии может там через алерты/пайпы (надо покурить про них), второй вариант сложнее, когда надо ждать завершения. В каком месте здесь может быть " они либо сигнала не увидят (если флаг не выставить), либо дружною толпою начнут обработку (если доверить вызов джобов внешнему приложению)" ? В том, что таким механизмом можно точно сделать обработку по очереди, а не сразу всей толпой, в этом не сомневаюсь. Единственное, возможно, хотите сказать, что есть требование, что выполняем ХП 100% только в том случае, если java-приложение имеет коннект вплоть до завершения выполнения этой самой ХП, в противном случае, необходимо откатить все назад. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 16:32 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
Плюс требования к скорости, если надо все делать оч. быстро, то да с джобами, не очень имхо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 16:36 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
Еще вариант (немного изуверский, но в некоторых ситуациях можно попробовать): 1. Никакой флаг блокировки не выставляется 2. Каждое java-приложение обрабатывает данные во временной таблице (т.е. сначала забирает данные во временную таблицу и крутит их как угодно никто никого опять же тоже не блокирует, т.к. каждый работает со своими данными) 3. Сбрасывают изменения в постоянную таблицу и вот тут, кто первый сбросил, того и тапки ) (отследить можно по номеру изменения например на сиквенсе, который мы забираем при подхвате данных во временную таблицу) Возможно этот же вариант, можно попытаться реализовать, задав соответствующий уровень изоляции транзакции, но с этим не приходилось эксперемнтировать ) Если Java-приложение отваливается, то оно никого не держит - только данные во врем. табличках, которые автоматом почистятся. Понятно, что если надо продублировать много данных из разных таблиц, если подразумевается, что одновременно могут работать сотни сессий в таком ключе, если необходимо максимальное время отклика, а не переливание из таблицы в таблицу, то удовольствие сомнительное ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 17:17 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
JDS, Да, похоже, что создание джоба из Java может помочь, спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 17:52 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
urvasJDS, Да, похоже, что создание джоба из Java может помочь, спасибо. угу. Особенно под пользователем sys. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 18:28 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
urvasPetro123, В моём конкретном случае многопользовательность - зло. В моей задаче, как в стометровке или марафоне, стартует сколь угодно много, но победитель всегда один. Или по-другому - дрочеров много, а отец один. даже не верится, что это написал ТС, который знает слова OLTP\WAS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 18:30 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
JDS1. Никакой флаг блокировки не выставляется 2. Каждое java-приложение обрабатывает данные во временной таблице (т.е. сначала забирает данные во временную таблицу и крутит их как угодно никто никого опять же тоже не блокирует, т.к. каждый работает со своими данными) 3. Сбрасывают изменения в постоянную таблицу и вот тут, кто первый сбросил, того и тапки ) (отследить можно по номеру изменения например на сиквенсе, который мы забираем при подхвате данных во временную таблицу) Возможно этот же вариант, можно попытаться реализовать, задав соответствующий уровень изоляции транзакции, но с этим не приходилось эксперемнтировать ) Если Java-приложение отваливается, то оно никого не держит - только данные во врем. табличках, которые автоматом почистятся. Понятно, что если надо продублировать много данных из разных таблиц, если подразумевается, что одновременно могут работать сотни сессий в таком ключе, если необходимо максимальное время отклика, а не переливание из таблицы в таблицу, то удовольствие сомнительное ) Чувак. Найми себе аналитика + разработчика Java/Oracle. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 19:24 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
maytonЧувак. Найми себе аналитика + разработчика Java/Oracle Спасибо, денег только дайте, обязательно найму, хоть тыщу аналитиков и три тыщи старших помощников младших аналитегов ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 21:54 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
Petro123urvasPetro123, В моём конкретном случае многопользовательность - зло. В моей задаче, как в стометровке или марафоне, стартует сколь угодно много, но победитель всегда один. Или по-другому - дрочеров много, а отец один. даже не верится, что это написал ТС, который знает слова OLTP\WAS Если Вы желаете скатиться в унылый троллинг, то предлагаю Вам отойти от понятия "вера" и для начала освежить в памяти курс философии, а именно понятия диалектики, истины и закон перехода количества в качество. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 09:08 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
urvas, обиделсо? Тебя конкретно все со второго поста спросили - зачем UPDATE? Твои проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 09:14 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
Petro123urvas, обиделсо? Тебя конкретно все со второго поста спросили - зачем UPDATE? Твои проблемы. Обиделось, конечно же... Oracle® Database Concepts 11gRelease 2 (11.2) E40540-02, p.196 A reader never blocks a writer. Because a reader of a row does not lock it, a writer can modify this row. The only exception is a SELECT ... FOR UPDATE statement, which is a special type of SELECT statement that does lock the row that it is reading. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 09:33 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
urvas, позови взрослых. Тебя спрашивали зачем с точки зрения пользователей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 09:39 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
Petro123угу. Особенно под пользователем sys. Вы-таки шото имете против джобов? ) При чем тут сис непонятно ) Petro123, и чо вы прицепились к человеку зачем, да зачем, по всей видимости речь идет как раз не об олтп-операциях, а просто о запуске некой длительной обработки в контексте конкретной задачи, совсем не факт, что так будет построена вся система, даже для маленьких коротких запросов, хотя фиг знает конечно ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 09:58 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
JDS, Job запускается под рутом. Т.е. клиенты будут запускать под рутом. Т.е. решение Г. А так, как ты пишешь, фиг знает.))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 10:17 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
JDS, Вы совершенно верно поняли суть - нам необходимо извне запустить некие процессы обработки, но сделать это необходимо только один и только один раз и очень быстро. В целях диверсификации все живые внешние объекты обязаны попытаться стартовать процесс в базе, но победить должен только один, остальные - к расстрелу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 10:22 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39045971&tid=2124964]: |
0ms |
get settings: |
7ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
162ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 487ms |

| 0 / 0 |
